Как очистить значения внешних переменных для компонента сборки?

Автор kuser, 04.12.21, 11:57:09

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

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

kuser

Здравствуете уважаемые Участники Форума.  Прошу Вашей подсказки.

Имеется сборка с одним компонентом - деталь Уголок. Размеры уголка задаются через внешние перменные. Значения внешних переменных в сборке и детали не совпадают: в детали уголок 40х40х4, а в сборке 63х63х5. Можно ли сбросить значения внешних переменных компонента в сборке программно, чтобы в сборке отображался уголок по размерам из источника-детали, то есть 40х40х4?

Я могу получить сейчас значения внешних переменных для уголка в сборке:

kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()
doc_API7 = kompas_api7_module.IKompasDocument3D(kompas_document)
topPart = doc_API7.TopPart
parts = kompas_api7_module.IParts7(topPart.Parts)
p = parts.Part(0) #Указатель на едиственную в сборке деталь Уголок
iFeature = kompas_api7_module.IFeature7(p)
topvars = iFeature.Variables(True, True)
#в topvars получаем 4 внешние переменные с именами b,t,R,r, управляющие размерами уголка

Могу присвоить им значения:

topvars[0].Value = 40 #Меняем значение переменной в сборке на значение переменной в источнике.

А что делать дальше никак не могу найти: как обновить новые значения переменных, чтобы их принял Компас или как сказать Компасу программно, чтобы значения для переменных в сборке брал из детали сам.
Пробовал задавать переменным значение None, но это не работает.



kuser

Спасибо за ответ. Команда перестроить документ возвращает True. Но переменные в сборке не меняются.

Методом тыка удалось поменять значение переменных в источнике из сборки, но не наоборот:
Когда в дереве Компас (левый рисунок) в Сборке удаляю вручную все значения из столбца выражение, то есть 7, 63, 2.3, 5 (после перестроения по F5 получаю уголок 40х40х4, то есть с размерами из источника) а потом в питоне выполняю команды:
topvars[0].Expression = '63' #высота уголка
topvars[1].Expression = '5' #толщина полки
topvars[2].Expression = '7' #Большой радиус скругления
topvars[3].Expression = '2.3' #высота уголка
iDocument3D.RebuildDocument()

Получаю в сборке уголок 63х63х5, а кроме того уголок в источнике также меняется на 63х63х5

Через Питон однако удалить все значения из столбца 'Выражение' не знаю как-(

p3452

1. iFeature.Variables(True, True) это переменные "только внешние" и "только из первоисточника"...
2. В Сборке создать "управляющие" переменные (можно с теми же именами как и в Детали).
3. Выражениям(Expression), которым вы присваиваете значения?, присвоить имена этих переменных.
4. Управлять Сборкой присвоением значений (через Value)  этим "управляющим" переменным.
 
+ Благодарностей: 1

Вират Лакх

Вопрос пока остаётся открытым :i:

Итак, есть деталь с внешними переменными. Эта деталь вставлена в сборку.
Эти переменные можно переназначить поверх или вернуть значение из источника.

По источнику руками можно сделать двумя способами:
1) Через меню на правую кнопку мыши - Значение из источника
2) Просто удалить выражение.

Как это сделать через API :?:

IVariable7.Expression = '' # Тип данных: BSTR
Не помогает. Любое значение присваивается, но не пустое.

Руками источник можно сделать для отдельной переменной, в SDK этого нет, но есть для всего компонента.
Всё равно выражение не уходит :writer:.
ksPart.SetSourceVariables(True)
ksPart.RebuildModel()
ksPart.RebuildModelEx(True)
IPart7.Update()
IKompasDocument3D.RebuildDocument()
Никакие ребилды и апдейты не помогают. Или надо верхний компонент дёргать :bang:

Достало это глючное API >:( И в SDK куча косяков :evil: .
И так мозги делаешь, как оно должно работать, так ещё в SDK фигня всякая :bebebe:
При работе с внешними переменными в сборке:
Если интерфейс(ы) получать при ExternalOnly = True, то Expression и DisplayName не работают.
Expression и Value при InSource = True не работают.

Вират Лакх

Цитата: Вират Лакх от 24.02.24, 07:56:44IVariable7.Expression = '' # Тип данных: BSTR
Не помогает. Любое значение присваивается, но не пустое.
p3452 в ЛС подсказал. Благодарю :beer:
ПРОБЕЛ! :cl: Карл! Я был в шаге от решения. Не любое значение присваивается :-)))