Как получить «Имя экземпляра» выбранных частей в дереве - PullRequest
0 голосов
/ 09 июля 2019

Я пишу макрос, который создаст список спецификаций из выбранных деталей в сборке.

Я могу получить «Номер детали» детали в сборке, я не могу получить «Имя экземпляра» выбранных деталей.

Здесь код, который вызывает вкладку Выбор и затем пытается получить имена.

Set ItemSelection = CATIA.ActiveDocument.Selection   
InputObjectType(0) = "Part"
SelectionStatus = ItemSelection.SelectElement3(InputObjectType, "Choose parts", false, CATMultiSelTriggWhenUserValidatesSelection, true) 
         If SelectionStatus = "Cancel" Then 
            Exit Sub
        End If

        If ItemSelection.Count >= 1000 Then
            MsgBox "You select more then 1000 parts.", vbExclamation, MsgTextBox & "."
            Exit Sub
        End If

        For i = 1 To ItemSelection.Count 
            k = k + 1
            BOMTable(1,k) = ItemSelection.Item(i).PartNumber
            BOMTable(2,k) = ItemSelection.Item(i).Value.Name
            MsgBox BOMTable(1,k)
        Next

Что я делаю не так?

1 Ответ

2 голосов
/ 09 июля 2019

Вам нужно выбрать Продукты, если вы хотите экземпляр-несс. Итак ...

InputObjectType(0) = "Product"
...
sInstanceName = ItemSelection.Item(i).Value.Name

Что происходит, когда кто-то выбирает сборку / подсборку? Ничего особенного, потому что у подузлов тоже есть имена экземпляров.

Однако, если вы хотите включить ТОЛЬКО фактические CATParts, вам нужно отфильтровать значение после выбора что-то вроде ...

Dim oInstProd as product
set oInstProd = ItemSelection.Item(i).Value
if TypeName(oInstProd.ReferenceProduct.Parent) = "PartDocument" Then
.... do stuff with only parts...
end If

Свойство ReferenceProduct доставит вам неприятности, если вы используете режим кэширования (он выдаст ошибку). Но это обходной путь, если вам это нужно.

...