• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Парамтеризация размеров

Автор kLOLuk, 31.08.22, 09:57:21

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

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

kLOLuk

Добрый день.
Взял пример Step2, удалил содержимое одной из кнопок функций и заменил следующим кодом:
    reference Line = LineSeg(2, 2, 12, 2, 1); //создал линию

    LDimParam lpar;
    memset(&lpar, 0, sizeof(LDimParam));
    lpar.tPar.bitFlag = _AUTONOMINAL;
    lpar.sPar.ps = 0;
    lpar.sPar.x1 = 2;
    lpar.sPar.y1 = 2;
    lpar.sPar.x2 = 12;
    lpar.sPar.y2 = 2;
    lpar.sPar.dx = 0;
    lpar.sPar.dy = 5;
    lpar.dPar.pt1 = 1;
    lpar.dPar.pt2 = 1;
    reference ldim = LinDimension(&lpar); //создал размер для линии
Затем по логике нужно сделать следующее:
    ConstraintParam cpar1;
    memset(&cpar1, 0, sizeof(cpar1));
    cpar1.constrType = ksCAssociation; //Привязать размер к линии
    ksSetObjConstraint(ldim, &cpar1);
    cpar1.constrType = ksCDimWithVariable; //создать переменную для размера
    ksSetObjConstraint(ldim, &cpar1);
    cpar1.constrType = ksCFixedDim; //Сделать размер переменным.
    ksSetObjConstraint(ldim , & cpar1);
но ассоциации размера не происходит, тогда вместо этого кода я привязал размер вручную и повторил параметризацию размера.
    ConstraintParam cpar1;
    cpar1.constrType = ksCMergePoints;
    cpar1.index = 0;
    cpar1.partner = Line;
    cpar1.partnerIndex = 0;
    ksSetObjConstraint(ldim, &cpar1);
    cpar1.constrType = ksCMergePoints;
    cpar1.index = 1;
    cpar1.partnerIndex = 1;
    ksSetObjConstraint(ldim, &cpar1);

    ConstraintParam cpar2;
    cpar2.constrType = ksCDimWithVariable;
    ksSetObjConstraint(ldim, &cpar2);
    cpar2.constrType = ksCFixedDim;
    ksSetObjConstraint(ldim, &cpar2);
После ручной привязки стало доступно сделать размер параметрическим вручную в Компас, а код не сработал.
Что примечательно, этот же способ я использовал в Компас-Макро один в один(все ConstraintParam брал оттуда) и оно работало.
В примере MacroObj файл Orifice.cpp описан способ парметризации, но он сложнее, чем этот. А этот должен работать, в Python же работал.
Вот кусок кода из Python, если это поможет
cpar2 = kompas_api7_module.IDrawingObject1(ldim).NewConstraint()
cpar2.ConstraintType = kompas6_constants.ksCFixedDim
cpar2.Create()
cpar2 = kompas_api7_module.IDrawingObject1(ldim).NewConstraint()
cpar2.ConstraintType = kompas6_constants.ksCDimWithVariable
cpar2.Create()
Спасибо.