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

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

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

Регистрация будет доступна с 8:00 (мск) 12 января.

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

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

Автоматом не отображается измененное значение атрибута в дереве конструирования.

Автор lavgirb, 30.10.23, 12:58:23

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

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

Михаил88

+ Благодарностей: 3


Михаил88

+ Благодарностей: 1

Nipal

Цитата: Михаил88 от 30.10.23, 17:55:43Я попробовал и добавил RebuildModel(True) после этого все заработало.
Я об этом и писал.
Цитата: Nipal от 30.10.23, 15:41:08Можно обновить документ.
+ Благодарностей: 1

lavgirb

Цитата: Михаил88 от 30.10.23, 17:48:05изображение_2023-10-30_220139776.png
Да, это решает задачу. Обновление каждого компонента с помощью RebuildModel. Только надо еще RebuildDocument делать для все сборки.  :beer:

Большое спасибо всем принявшем участие в обсуждении.



lavgirb

Опять пришлось вернуться к этому вопросу.
Все стандартные обновления не приводят к стабильному обновлению измененных свойств в дереве сборки.
Заметил, что если поменять отображение компонента в дереве (сменить фиксацию, включение в расчет), то все свойства появляются в имени узла компонента.

Вот такой код пока  работает:

Set oPropKeeper = oPart7
If oPropKeeper.SetPropertyValue(oProp, sVal, False) Then
   oProp.Update
   Set oModelObj = oPart7
   With oPart7
      .Fixed = IIf(.Fixed, 0, 1)
      .Fixed = IIf(.Fixed, 0, 1)
      oModelObj.Update
         
      .Update
      .RebuildModel True
   End With
End If

Еще уже дано замечал, что КОМПАС API не сильно дружит с логическими константами.
По возможности использую
0 вместо False
1 вместо True

Vi2

Цитата: lavgirb от 15.02.26, 12:11:19Еще уже дано замечал, что КОМПАС API не сильно дружит с логическими константами.
По возможности использую
0 вместо False
1 вместо True
В каком плане "не дружит"? И вообще-то в VB True=-1, т.е. все биты равны 1. При передаче VB может преобразовать твою 1 в -1

Вот пример неправильного использования из MSDNовского Логические выражения (Visual Basic)
If newCustomer = True Then
    ' Insert code to execute if newCustomer = True.
Else
    ' Insert code to execute if newCustomer = False.
End If

У меня коллега использует неправильное if (true == boolvar) и/или if (TRUE == boolvar). Вроде так ему советуют гуру.

Ну и описание метода, который ты используешь
[id(0x00000016), helpstring("Перестроить модель."), helpcontext(0x00122886)]
HRESULT RebuildModel([in] VARIANT_BOOL Redraw, [out, retval] VARIANT_BOOL* Result);

Использование BOOL или даже bool ничего не меняет во взаимодействии с СОМом. (BOOL)VARIANT_BOOL не сделает из -1 1. Как и обратное.

lavgirb

Цитата: Vi2 от 15.02.26, 12:54:03В каком плане "не дружит"?
У меня иногда стабильнее работают почему-то такие конструкции
If oFeat7.Excluded = True Then GoTo NEXT_PARTПоэтому об этом и написал.