Всем добрый день!
В "ручном" режиме, в Компас, можно изменить файл-источник у элементов, полученных инструментом Копировать объекты
В SDK, наиболее близко подходит:
DocumentFileName - Имя файла внешнего документа
Но это свойство доступно только для чтения!
Подскажите пожалуйста, как я могу программно изменить файл-источник у таких элементов?
файл-источник Копировать объекты.png
Попробуйте подойти с другой стороны
в 20 версии - появился замечательный метод
ReplaceExternalFilesNames - Изменить ссылки на файл в документе
находится в интерфейсе IKompasDocument1
Сигнатура
BOOL ReplaceExternalFilesNames( BOOL allFiles, BSTR OldFileName, BSTR NewFileName );
Цитата: KrissKross от 12.10.21, 19:18:47Попробуйте подойти с другой стороны
в 20 версии - появился замечательный метод
ReplaceExternalFilesNames - Изменить ссылки на файл в документе
находится в интерфейсе IKompasDocument1
Сигнатура
BOOL ReplaceExternalFilesNames( BOOL allFiles, BSTR OldFileName, BSTR NewFileName );
Спасибо за ответ!
А есть ли решение для Компас v18?
Мне кажется
разработчики не предусмотрели такого варианта
так как при замене источника - высока вероятность возникновения ошибки - потери копированных элементов
В таких случаях всегда можно предложить - заново создать Копирование
или все таки найти функции ReplaceExternalFilesNames и попробовать ее в действии
в 19 версии - она в исходниках АПИ - есть
посмотрите может и в 18 тоже - есть
хотя анонс (новые методы) приписан только в справке на 20 версию
или попробовать скомпилировать проект с использованием 20 АПИ
а применять в Вашей 18 версии
Цитата: KrissKross от 12.10.21, 20:53:12разработчики не предусмотрели такого варианта
так как при замене источника - высока вероятность возникновения ошибки - потери копированных элементов
если брать аналогию с программным изменением файл-источника у компонентов в сборке - задача кажется достаточно простой.
Опять же, в "пользовтельском" режиме Компаса, изменение файл-источника, решается в 2 действия, и процедера не кажется такой уж сложной)
Вот файл источник у чертежа менял, может поможет.
procedure TForm1.Button1Click(Sender: TObject);
var
d2d:ksDocument2D;
iter:ksiterator;
obj1:reference;
ksAVP:ksAssociationViewParam;
begin
StartKompas;
d2d:=ksDocument2D(Kompas.ActiveDocument2D);
iter:=ksiterator(kompas.GetIterator);
iter.ksCreateIterator(VIEW_OBJ,0);
obj1:=iter.ksMoveIterator('F');
while obj1<>0 do
begin
ksAVP:=ksAssociationViewParam(kompas.GetParamStruct(ko_AssociationViewParam));
ksavp.Init;
d2d.ksGetObjParam(obj1,ksAVP,ASSOCIATION_VIEW_PARAM);
memo1.Lines.Add('//'+ksavp.fileName);
obj1:=iter.ksMoveIterator('N');
end;
iter.ksDeleteIterator;
end;
Копайте в сторону iPart.FileName. После не забудте обновить через iPart7.Update()
Цитата: KrissKross от 12.10.21, 19:18:47Попробуйте подойти с другой стороны
в 20 версии - появился замечательный метод
ReplaceExternalFilesNames - Изменить ссылки на файл в документе
находится в интерфейсе IKompasDocument1
Сигнатура
BOOL ReplaceExternalFilesNames( BOOL allFiles, BSTR OldFileName, BSTR NewFileName );
Добрый день, подскажите, пожалуйста, как работает данный метод.
Я ввожу первый аргумент "True". Второй аргумент - старая ссылка на модель детали в открытой сборке в виде строки, третий аргумент - новая ссылка в виде строки.
Метод выдает мне результат "False" и ссылки не меняются.
Причем в описании метода написано: NewFileName - тип интерфейса из перечисления KompasAPIObjectTypeEnum.
Как это прописать, непонятно.
Буду весьма благодарен за ответ.
Цитата: SergNLMK от 07.04.25, 21:27:29Причем в описании метода написано: NewFileName - тип интерфейса из перечисления KompasAPIObjectTypeEnum.
Ошибка в описании. Это просто путь к новому файлу.
Цитата: SergNLMK от 07.04.25, 21:27:29Добрый день, подскажите, пожалуйста, как работает данный метод.
Я ввожу первый аргумент "True". Второй аргумент - старая ссылка на модель детали в открытой сборке в виде строки, третий аргумент - новая ссылка в виде строки.
Метод выдает мне результат "False" и ссылки не меняются.
Этот метод меняет не все ссылки. Что определяется только практическими экспериментами.
Надежнее менять ссылки другими штатными способами.