Autodesk Inventor API. Первые шаги/Спецификация: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 37:
 
Внутренние механизмы Autodesk Inventor поддерживают актуальность BOM, отслеживая изменения состава сборки и обновляя соответствующим образом типы компонентов и количественные показатели. Актуализация BOM может выполняться как средствами пользовательского интерфейса так и инструментами BOM API. С помощью API можно вносить в BOM дополнительные изменения, производить выборки и экспортировать данные. Autodesk Inventor активно использует объекты PropertySet для хранения в BOM свойств компонентов. Клиентский код может получить прямой и непосредственный доступ к этим данным.
 
 
'''Запрос на формирование BOM'''
Строка 44 ⟶ 43 :
 
Сначала получим ссылку на объект BOM из объекта ComponentDefinition сборки.
 
 
<pre>
Dim oBOM As BOM
Строка 51 ⟶ 48 :
</pre>
 
Далее из BOM получим ссылку на объект BOMView с именем «Structured» (структурированный). BOM может также содержать представления, в которых позиции упорядочены или перенумерованы.
 
Далее из BOM получим ссылку на объект BOMView с именем «Structured» (структурированный). BOM может также содержать представления, в которых позиции упорядочены или перенумерованы.
 
<pre>
Dim oBOMView As BOMView
Set oBOMView = oBOM.BOMViews.Item("Structured")
</pre>
 
 
Организуем цикл по элементам коллекции строк BOMRows объекта BOMView, получая для каждой строки ссылку на объект BOMRow.
 
<pre>
Dim i As Long
Строка 69 ⟶ 62 :
Set oRow = oBOMView.BOMRows.Item(i)
</pre>
 
 
Для некоторых видов данных BOM нам требуется обращение к свойствам компонента, представленного в данной строке. Доступ к коллекции PropertySets компонента обеспечивает объект ComponentDefinition компонента.
 
<pre>
Dim oCompDef As ComponentDefinition
Set oCompDef = oRow.ComponentDefinitions.Item(1)
</pre>
 
 
Нужный в данном случае набор свойств называется «Design Tracking Properties». Ссылку на него можно получить как свойство документа-владельца нашего компонента.
 
<pre>
Dim oPropSet As PropertySet
Строка 87 ⟶ 76 :
 
Теперь у нас есть вся необходимая информация о содержимом спецификации. Извлекаем из объекта BOMRow и выводим в окно отладочной печати номера позиций (ItemNumber) и количество в строке (ItemQuantity), а из набора свойств oPropSet — номер детали и ее описание.
 
<pre>
Debug.Print "#: "; oRow.ItemNumber; _
Строка 97 ⟶ 85 :
 
Приведенный фрагмент программы в цикле по всем строкам BOMRows объекта BOMView выводит в окно отладочной печати данные спецификации. Результат работы программы должен выглядеть примерно так:
 
<pre>
#: 1 Quantity: 1 Part: Arbor Press Desc:
Строка 116 ⟶ 103 :
Flat Point - UNF
(Fine Thread - Inch)
</pre>
 
 
Ниже приведен более развернутый пример из справочной системы AIS 2009, демонстрирующий функциональность BOM API в сборке. Перед выполнением программы следует сделать активным документ сборки.
<pre>
Public Sub BOMQuery()
 
' Получим ссылку на активный документ.
' Предполагается, что активна сборка.
Dim oDoc As AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument
 
'Зададим глубину выборки данных для BOM
Dim FirstLevelOnly As Boolean
If MsgBox("Только верхний уровень?", vbYesNo) = vbYes Then
FirstLevelOnly = True
Else
FirstLevelOnly = False
End If
 
' Ссылка на объект BOM сборки
Dim oBOM As BOM
Set oBOM = oDoc.ComponentDefinition.BOM
 
' Выставим в BOM свойство глубины выборки данных
' в соответствии с указанием пользователя
If FirstLevelOnly Then
oBOM.StructuredViewFirstLevelOnly = True
Else
oBOM.StructuredViewFirstLevelOnly = False
End If
 
' Make sure that the structured view is enabled.
' Зададим явно структурированный вид спецификации
oBOM.StructuredViewEnabled = True
 
'Set a reference to the "Structured" BOMView
'из BOM получим ссылку на объект BOMView с именем "Structured"
Dim oBOMView As BOMView
Set oBOMView = oBOM.BOMViews.Item("Structured")
 
Debug.Print "Поз."; Tab(15); "Кол-во"; Tab(30); "Номер детали"; Tab(70); "Описание"
Debug.Print "----------------------------------------------------------------------------------"
 
'Начальное значение для переменной ItemNumber
Dim ItemTab As Long
ItemTab = -3
 
Call QueryBOMRowProperties(oBOMView.BOMRows, ItemTab)
End Sub '~~~ BOMQuery ~~~
 
 
Private Sub QueryBOMRowProperties(oBOMRows As BOMRowsEnumerator, ItemTab As Long)
 
ItemTab = ItemTab + 3
 
' Цикл по строкам спецификации
Dim i As Long
For i = 1 To oBOMRows.Count
 
' ссылка на текущую строку #i
Dim oRow As BOMRow
Set oRow = oBOMRows.Item(i)
 
'Set a reference to the primary ComponentDefinition of the row
' ссылка на ComponentDefinition данной строки
Dim oCompDef As ComponentDefinition
Set oCompDef = oRow.ComponentDefinitions.Item(1)
 
Dim oPartNumProperty As Property
Dim oDescripProperty As Property
 
If TypeOf oCompDef Is VirtualComponentDefinition Then
 
' Если компонент является виртуальным:
' Из определения виртуального компонента
' считываем свойство компонента "Part Number"
Set oPartNumProperty = oCompDef.PropertySets _
.Item("Design Tracking Properties").Item("Part Number")
 
' считываем свойство компонента "Description"
Set oDescripProperty = oCompDef.PropertySets _
.Item("Design Tracking Properties").Item("Description")
'вывод строки в отладочное окно
Debug.Print Tab(ItemTab); oRow.ItemNumber; Tab(17); oRow.ItemQuantity; Tab(30); _
oPartNumProperty.Value; Tab(70); oDescripProperty.Value
Else
 
'Get the file property that contains the "Part Number"
'The file property is obtained from the parent
'document of the associated ComponentDefinition.
' Cвойство компонента "Part Number" считываем
' из документа, связанного с ComponentDefinition компонента.
Set oPartNumProperty = oCompDef.Document.PropertySets _
.Item("Design Tracking Properties").Item("Part Number")
 
' считываем свойство компонента "Description"
Set oDescripProperty = oCompDef.Document.PropertySets _
.Item("Design Tracking Properties").Item("Description")
'вывод строки в отладочное окно
Debug.Print Tab(ItemTab); oRow.ItemNumber; Tab(17); oRow.ItemQuantity; Tab(30); _
oPartNumProperty.Value; Tab(70); oDescripProperty.Value
 
'Рекурсивный перебор дочерних строк, если таковые имеются
If Not oRow.ChildRows Is Nothing Then
Call QueryBOMRowProperties(oRow.ChildRows, ItemTab)
End If
 
End If
Next
 
ItemTab = ItemTab - 3
End Sub '~~~ QueryBOMRowProperties ~~~
</pre>
 
 
 
Результаты выполнения программы BOMQuery для сборки Stapler.iam
из комплекта примеров в поставке Autodesk Inventor Suite 2009
 
 
Задан верхний уровень
<pre>
Поз. Кол-во Номер детали Описание
----------------------------------------------------------------------------------
1 1 Bottom
2 1 Upper
</pre>
 
Заданы все уровни
<pre>
Поз. Кол-во Номер детали Описание
----------------------------------------------------------------------------------
1 1 Bottom
1.1 1 Bottom - Back
1.2 1 Bottom - Front
1.3 1 Lower Mount
1.4 1 Spring
1.5 1 Bottom - Anvil
2 1 Upper
2.4 1 Upper - Insert
2.1 1 Upper - Derrived
2.2 1 Channel - Spring Clip
2.3 1 Channel
2.3.6 1 Channel - Cover1
2.3.2 1 Pusher
2.3.1 1 Channel - Cover2
2.3.3 1 Channel - Hinge Pin
2.3.4 1 Staples
2.3.5 1 Channel - Bumper
</pre>