Получение всех переменных детали

Автор ТрындецЪ, 30.08.19, 12:24:52

« предыдущая - следующая »

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

ТрындецЪ

Как быстро и просто получить все переменные детали?
Сейчас я от IPart7 получаю IFeature7, от IFeature7 получаю коллекцию всех модельных объектов ModelObjects(0). В этом случае много "лишних" модельных объектов попадают в коллекцию (поверхности, ребра, вершины, может ещё что-то) и получается, что переменные у некоторых объектов общие и я по несколько раз получаю одну и ту же переменную. Можно получить отдельно коллекцию эскизов ModelObjects(5), операций выдавливания и т.д. и получать переменные у этих объектов,  но это мне кажется долгим путём. Нет ли простого способа получить все переменные, которые отображаются в окне переменных?

pr0100

я так делал:





iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)
VariableCollection = iPart.GetFeature().VariableCollection
VariableCollection.refresh()
#Получить количество всех внешних переменные
b = VariableCollection.GetCount()
print (b)
список_имен=[]
список_значений=[]


for i in range(b):
    переменная=VariableCollection.GetByIndex(i)
    список_имен.append(переменная.name)
print(список_имен)

ТрындецЪ

Цитата: pr0100 от 30.08.19, 12:59:36
я так делал:

Так я тоже делал. Теперь мне нужны не внешние, а все пользовательские и системные переменные.

Вират Лакх

Пример получения массива переменных из источника первого компонента сборки на API5.
Аналогично должно быть возможно написать на API7.

ksFeature = KompasObject.ActiveDocument3D().PartCollection(True).First().GetFeature()

ksVariableCollection = ksFeature.VariableCollectionEx(True)
for j in range(ksVariableCollection.GetCount()):
ksVariable = ksVariableCollection.GetByIndex(j)
print ksVariable.displayName, ksVariable.value

ksFeatureCollection = ksFeature.SubFeatureCollection(True, False)
for i in range(ksFeatureCollection.GetCount()):
ksVariableCollection = ksFeatureCollection.GetByIndex(i).VariableCollectionEx(True)
for j in range(ksVariableCollection.GetCount()):
ksVariable = ksVariableCollection.GetByIndex(j)
print ksVariable.displayName, ksVariable.value

Вират Лакх

Функция получения списка переменных из источника компонента на API7.

iPart7 = KompasAPI7.IKompasDocument3D(iApplication.ActiveDocument).TopPart.Parts.Part(0)

def variablesInSource(iPart7):
def getVariables(iFeature7):
variables = iFeature7.Variables(False, True)
if variables:
if isinstance(variables, tuple):
return list(variables)
else:
return [variables]

iFeature7 = KompasAPI7.IFeature7(iPart7)
topvars = getVariables(iFeature7)
answer = topvars if topvars else []
for subFeature in iFeature7.SubFeatures(0, True, False):
answer.extend(getVariables(subFeature.Owner))
return answer

for var in variablesInSource(iPart7):
print var.DisplayName, var.Value