Замена внешних ссылок в сборке (v16).

Автор Doom, 02.11.22, 11:27:27

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

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

Doom

Доброго форумчане!

Есть ли возможность заменить в файле сборки внешние ссылки на обновленные файлы компонентов сборки в Компас-3D V16 ?
Знаю что есть эта возможность в V20 - IKompasDocument1 => ReplaceExternalFilesNames

в V16  например есть метод SetFileName , но не работает.. ссылка на обновляемый файл не меняется.

Снимок13.JPG

graphdark

procedure TForm1.Button3Click(Sender: TObject);
var
  d2d:ksDocument2D;
  obj1:reference;
  ksAVP:ksAssociationViewParam;
  RoughParam: ksRoughParam;
  RoughPar: ksRoughPar;
  DynamicArray,DynArray1,DynArray2: ksDynamicArray;
  Char255: ksChar255;
  MarkerPar: ksMarkerLeaderParam;
  MPoint: ksMathPointParam;
  kChar: ksTextItemParam;
  VarCol: ksVariableCollection;
  variable: ksVariable;
  ArrayVar: ksDynamicArray;
  Count, i: integer;
begin
  StartKompas;
  d2d:=ksDocument2D(Kompas.ActiveDocument2D);
  obj1:=d2d.ksGetReferenceDocumentPart(3);
  ksAVP:=ksAssociationViewParam(kompas.GetParamStruct(ko_AssociationViewParam));
  ksavp.Init;
  d2d.ksGetObjParam(obj1,ksAVP,ASSOCIATION_VIEW_PARAM);
  memo1.Lines.Add(ksavp.fileName);
  Variable := ksVariable(Kompas.GetParamStruct(85));
  ArrayVar := ksDynamicArray(d2d.ksGetDocVariableArray(0));
  for I := 0 to 1 do
  begin
    if arrayVar.ksGetArrayItem(i,Variable) = 1 then
    begin
      Variable.value := 1000;
      arrayVar.ksSetArrayItem(i,Variable);
    end;
  end;
  d2d.ksSetDocVariableArray(0,arrayVar,False);
end;

ksavp.fileName - это свойство содержит ссылку.
+ Благодарностей: 1

Doom

graphdark,

мне нужно заменить ссылки в самой сборке 3D модели .a3d а не в чертеже.

Doom

решил, получается через свойство :)

iDocument3D = iKompasObject.ActiveDocument3D()
iPartCollection = iDocument3D.PartCollection(True)
Count = iPartCollection.GetCount()

for j in range(int(Count)):
    iPart = iPartCollection.GetByIndex(j)
    filePatchOLD = iPart.fileName

    if "Корпус Old version.m3d" in filePatchOLD:
       
        print(filePatchOLD) #filePatchOLD - содержит старый пусть до файла
       
        filePatchNEW = r"G:\test\Корпус New version.m3d"
       
        # flag = iPart.SetFileName(filePatchNEW) # - почему то не работает
        iPart.fileName = filePatchNEW
       
        iPart.Update()
       
        break

iDocument3D.RebuildDocument()

при этом привязки сохранились.
+ Благодарностей: 1