Вставить в сборку из *.kle библиотеки.

Автор graphdark, 17.04.21, 10:48:47

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

graphdark

В документации этого нет. Вставка обычным споспобом, как с l3d библиотеками не помогла. У kle библиотек и структура другая.
name:='D:\DownLoads\Вставить деталь в сборку\Цилиндр.l3d|Цилиндр';
iDoc3D.SetPartFromFile(name, iPart, true);
Очевидная замена l3d на kle привела к ошибке. Оно бы и нафиг не нужно. Просто
iPart.standardComponent:=true;
Работает только с библиотечными компонентами всегда и стабильно. Проверено, что если открывать модель с этим параметром не из библиотеки, то иконка стандартного рисуется в одном случае из трех. А если открывать библиотечный элемент, то и запрет на редактирование всегда работает и иконка рисуется. Беда в том, что l3d был до 16 версии, теперь kle, а компас 16 не добавляет в l3d модели 18го. Можно все модели в 16 переделать. И получить l3d библиотеку, но что-то мне подсказывает, что аскон может убрать поддержку своих же файлов.

graphdark

Синтаксис Automation:

BOOL SetPartFromFile (BSTR fileName,

LPDISPATCH part,

BOOL externalFile);

Синтаксис COM:

BOOL SetPartFromFile (LPOLESTR fileName,

LPPART part,

BOOL externalFile);

Входные параметры:


fileName
 - имя файла, из которого будет вставлен компонент,
 
part
 - указатель на интерфейс компонента, который будет вставлен в до­кумент (ksPart или IPart),
 
externalFile
 - признак со­хранения свя­зи с файлом-источником
(TRUE - встав­ка со ссылкой на внешний файл,
FALSE - встав­ка "телом", без сохранения ссылки на источник).
 

Возвращаемое значение:


TRUE
 - в случае успешного за­вершения.
 

Примечание:

При вставке из файла указывается полный путь к файлу. При вставке из библиотеки мо­делей указывается полный путь к файлу библиотеки и путь внутри библиотеки моделей (например, "C:\\standard.l3d|Крепежные элементы|Болты|Болт_1").
Для kle так не работает, но это беды крестьян.

biomotor

graphdark, есть код на python или пример кода?

graphdark

Цитата: biomotor от 02.06.21, 12:02:07graphdark, есть код на python или пример кода?
Пример чего? Есть масса примеров на delphi. Смысл один.

Михаил88

22.06.21, 20:33:35 #4 Последнее редактирование: 22.06.21, 21:01:49 от Михаил88
Цитата: graphdark от 17.04.21, 12:04:46Для kle так не работает, но это беды крестьян.
Почему вы пишите, что не работает?
Я попробовал вставить в сборку деталь из kle она вставилась без проблем.
Или я чего то не понял

Михаил88

передавайте путь с расширением и все будет работать
для примера:
"C:\\standard.l3d|Крепежные элементы|Болты|Болт_1.m3d"

graphdark

Цитата: Михаил88 от 22.06.21, 20:44:39передавайте путь с расширением и все будет работать
для примера:
"C:\\standard.l3d|Крепежные элементы|Болты|Болт_1.m3d"
Так вы про l3d пишите. kle точно так не работает, потому что формат файлов совсем другой. Например, l3d открывается архиватором, kle-нет. Новая утилита для работы с библиотекой тоже не умеет с l3d работать. Если у вас получилось из kle вставить, поделитесь кодом.

Михаил88


graphdark

Цитата: Михаил88 от 23.06.21, 06:46:26получилось из kle вставить
Кодом, на любом языке, не поделитесь?

Михаил88

FileName = 'C:\Program Files\ASCON\KOMPAS-3D v18\Libs\Библиотека.kle|Заглушка D10.m3d'
iDocument3D = kompas_object.ActiveDocument3D()
iPart = iDocument3D.GetPart(-3)
iDocument3D.SetPartFromFile(FileName, iPart, True)

Михаил88

я правильно понял вас вам такой результат нужен был? Это все сделал програмой

Михаил88

kle тоже архиватором открывается

Михаил88

Цитата: Михаил88 от 22.06.21, 20:44:39"C:\\standard.l3d|Крепежные элементы|Болты|Болт_1.m3d"
Здесь в примере я забыл на kle исправить
должно быть так
для примера:
"C:\\standard.kle|Крепежные элементы|Болты|Болт_1.m3d"

graphdark

Цитата: Михаил88 от 23.06.21, 06:53:55FileName = 'C:\Program Files\ASCON\KOMPAS-3D v18\Libs\Библиотека.kle|Заглушка D10.m3d'
iDocument3D = kompas_object.ActiveDocument3D()
iPart = iDocument3D.GetPart(-3)
iDocument3D.SetPartFromFile(FileName, iPart, True)

Мой код на delphi идентичен и не работает.
procedure TStUnit.test(Sender: TObject);
var
  kompas: KompasObject;
  doc3d: ksDocument3D;
  part: kspart;
  ColorParam: ksColorParam;
  i: integer;
  path: String;
begin
  kompas := KompasObject(GetActiveOleObject('Kompas.Application.5'));
  doc3d := ksDocument3D(kompas.ActiveDocument3D());
  part := kspart(doc3d.GetPart(-3));
  path := ExtractFilePath(ParamStr(0)) + 'System17\StUnit.kle|ЦВИЯ.713263.009.m3d';
  ShowMessage(path);
  doc3d.SetPartFromFile(path,part,true);

Путь верный, библиотека есть, модель в ней тоже. Может версия канпаса виновата. Пришлось на 17 откатиться.

Михаил88


graphdark

Цитата: Михаил88 от 23.06.21, 08:17:29у меня 18.1
Не. В 18.1 тоже не сработало. При том меняю переменную path на l3d библиотеку и все работает.

Михаил88


graphdark

Цитата: Михаил88 от 24.06.21, 15:01:20Попробуйте запустить через компас макро
Значит напрасно на канпас клевещу. Благодарствую, что откликнулись и убедили, что виноват код, а не канпас.

Михаил88


graphdark

В общем посидел повоевал пару часов. Видимо конкретно delphi kle не поддается. Я пробовал и открывать через document3D и SetPartFromFile. Для библиотеки test.l3d все работает в обеих случаях, для test.kle в обеих случаях не работает. Правда при попытке именно открыть, если путь полностью верен, то получаешь ошибку, что файл не найден, если намеренно допустить ошибку в пути, то никаких сообщений. Сталкивался с таким, что канпас избирательно может не открыть документ, если путь указан с \ (например c:\test\test.m3d)? но если указать путь \\ все открывалось (c:\\test\\test.m3d). Здесь мне это не помогло.