Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: Lemieux от 29.03.25, 16:12:48

Название: Добавление переменной в созданную подсборку
Отправлено: Lemieux от 29.03.25, 16:12:48
Всех приветствую. Кто-то знает как добавить переменную в созданную подсборку?
Пытаюсь добавить вот так, но ничего не выходит.

IPart7 assembly = parts.CreateDocumentEx("Сборка", DocumentTypeEnum.ksDocumentAssembly);
IKompasDocument3D assemblyDocument = assembly.BeginEdit(assembly.GetOpenDocumentParam());
IPart7 assemblyTopPart = assemblyDocument.TopPart;
IVariable7 ltVariable = assemblyTopPart.AddVariable("LT", 10, "");

Название: Re: Добавление переменной в созданную подсборку
Отправлено: Lemieux от 29.03.25, 16:46:18
Короче. Походу как обычно очередной баг. Обошёл этот момент с помощью костыля.
Название: Re: Добавление переменной в созданную подсборку
Отправлено: Lemieux от 29.03.25, 16:52:20
Полный код обхода

IPart7 assembly = parts.CreateDocumentEx("Сборка", DocumentTypeEnum.ksDocumentAssembly);
IKompasDocument3D assemblyDocument = assembly.BeginEdit(assembly.GetOpenDocumentParam());
IPart7 assemblyTopPart = assemblyDocument.TopPart;
IAuxiliaryGeomContainer assemblyAuxiliaryContainer = assembly as IAuxiliaryGeomContainer;
ILocalCoordinateSystems assemblyLocalCoordinateSystems = assemblyAuxiliaryContainer.LocalCoordinateSystems;
ILocalCoordinateSystem assemblyLocalCoordinateSystem = assemblyLocalCoordinateSystems.Add();
assemblyLocalCoordinateSystem.Name = "ЛН";
assemblyLocalCoordinateSystem.ParameterType = ksPoint3DTypeEnum.ksPDisplace;
IPoint3DParamDisplace assemblyPointDisplace = assemblyLocalCoordinateSystem.Parameters as IPoint3DParamDisplace;
assemblyPointDisplace.SetAssociationVertex(dinRailPartLocalCoordinateSystem);
assemblyPointDisplace.SetGuidingObject(dinRailPartLocalCoordinateSystem.DefaultObject[ksObj3dTypeEnum.o3d_axisOX]);
assemblyLocalCoordinateSystem.Update();
IVariable7 distanceVariable = assemblyLocalCoordinateSystem.Owner.Variables[false, true][4] as IVariable7;
distanceVariable.Expression = "LT*-1";
assemblyLocalCoordinateSystem.Update();
assembly.EndEdit(false);
assemblyTopPart.Update();
object v = assemblyTopPart.Owner.Variables[false, true];
IVariable7 variable = assemblyTopPart.Owner.Variables[false, true] as IVariable7;
variable.Expression = "10";
variable.External = true;
assemblyTopPart.Update();

Наткнулся чисто случайно. Видимо, когда КОМПАС парсит выражение из переменной и встречает неизвестное имя переменной, он создаёт её автоматически.
1. Создаётся ЛСК.
2. Получаю доступ к автоматически созданным переменным этой ЛСК.
3. Пишу выражение в нужную переменную.
4. Потом уже нахожу созданную переменную.