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

Содержимое удалено Содержимое добавлено
Строка 84:
Первые несколько строк являются комментариями. Ими считаются любой текст после знака ' . Они игнорируются при исполнении команд, предназначены для читателей текста, т.е. для программистов, и чрезвычайно полезны, когда нужно понять логику алгоритма и внести в программу какие-либо изменения.
 
<pre>
<source lang="vbnet">
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Flush_XYZ
Строка 95:
'Процедура работает в контексте сборки.
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</sourcepre>
 
 
Следующие строки начинают и завершают процедуру (Sub) с именем Flush_XYZ без аргументов, о чем свидетельствуют пустые скобки. Весь текст между этими строками является собственно текстом макроса. Макросом в VBA называется глобальная процедура (Public Sub) без аргументов (с пустыми скобками).
 
<pre>
<source lang="vbnet">
Public Sub Flush_XYZ()
………………
Строка 106:
………………
End Sub ' Flush_XYZ
</sourcepre>
 
 
Первая группа команд, начинающихся с <tt>Dim</tt> (от англ. ''dimension'' — размерность), объявляет все нужные программе переменные и их типы.
 
<pre>
<source lang="vbnet">
Dim oApp As Inventor.Application 'приложение Inventor
Dim oAsmCompDef As AssemblyComponentDefinition 'сборка
Dim oCompOcc As ComponentOccurrence 'компонент
Dim oSelectSet As SelectSet
</sourcepre>
 
Переменная <tt>oApp</tt> будет хранить указатель (ссылку) на активное приложение Inventor, объект типа <tt>Application</tt>.
Строка 128:
 
Следующие три декларации объявляют переменные, посредством которых мы будем оперировать рабочими плоскостями сборки и детали.
<pre>
<source lang="vbnet">
Dim oAsmPlane As WorkPlane 'рабочие плоскости сборки
Dim oPartPlane As WorkPlane 'рабочие плоскости детали
Dim oPartPlaneProxy As WorkPlaneProxy 'proxy-плоскости детали
</sourcepre>
 
Последним объявляется счетчик циклов <tt>i<tt>:
<pre>
<source lang="vbnet">
Dim i As Long 'счетчик плоскостей 1,2,3
</sourcepre>
 
 
Строка 143:
 
Первым делом получим ссылку на активное приложение INVENTOR и сохраним его в переменной <tt>oApp</tt>:
<pre>
<source lang="vbnet">
Set oApp = ThisApplication
</sourcepre>
 
 
Далее важный элемент работы программы — следует провериться, а в контексте ли сборки запускает пользователь наш макрос? Если нет, то выводится соответствующее уведомление и работа макроса завершается.
 
<pre>
<source lang="vbnet">
'Проверка: а в сборке ли мы?
If oApp.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
Строка 156:
Exit Sub
End If
</sourcepre>
 
Если исполнение программы продвинулось дальше, значит активным документом действительно является сборка, и мы можем создать объект <tt>oAsmCompDef</tt>, в котором сохраняем определение компонентов активной сборки.
 
<pre>
<source lang="vbnet">
Set oAsmCompDef = oApp.ActiveDocument.ComponentDefinition
</sourcepre>
 
Теперь самое время узнать, что же выделил (если выделил) в сборке пользователь. Для этого требуется получить доступ к коллекции выделенных объектов <tt>SelectSet</tt> активной сборки. В программе это делается с помощью переменной <tt>oSelectSet</tt>:
 
<pre>
<source lang="vbnet">
'Ссылка на коллекцию SelectSet активного документа
Set oSelectSet = oApp.ActiveDocument.SelectSet
</sourcepre>
 
 
Далее в программе следуют две обязательных проверки. Первая проверяет, что выделен только один компонент, а вторая — что выделен именно компонент, а не что-либо иное (например, рабочая плоскость). Если хотя бы одно условие не выполнено, то выполнение макроса завершается с выводом пользователю соответствующего сообщения.
 
<pre>
<source lang="vbnet">
'Проверка: должен быть выделен один и только один элемент
If oSelectSet.Count <> 1 Then
Строка 186:
Exit Sub
End If
</sourcepre>
 
 
Следующий фрагмент кода получает ссылку на выделенный пользователем компонент сборки.
 
<pre>
<source lang="vbnet">
'ссылка на выделенный компонент (деталь)
Set oCompOcc = oSelectSet.Item(1)
</sourcepre>
 
 
Далее в программе мы встречаем интересную конструкцию — пример работы с транзакциями. Здесь формируется транзакция с именем "Привязка_XYZ". Все действия, выполненные программой внутри блока между командами <tt>StartTransaction</tt> и <tt>End</tt> могут быть отменены за один шаг Undo.
 
<pre>
<source lang="vbnet">
'Инициализация транзакции для возможной отмены за один шаг
Dim oConstrTransaction As Transaction
Строка 210:
…………………………
oConstrTransaction.End 'завершение транзакции
</sourcepre>
 
 
И наконец, мы подошли к самому главному, тому, ради чего программа и была создана — к привязке выделенного компонента oCompOcc к системе координат сборки наложением трех зависимостей совмещения заподлицо одноименных базовых плоскостей XY, YZ и XZ сборки и компонента.
 
<pre>
<source lang="vbnet">
'Совмещаем в цикле базовые плоскости сборки и компонента.
Строка 239:
Next i
</sourcepre>
 
Для каждой из трех базовых плоскостей сборки выполняется однотипная последовательность операций, завершающихся созданием зависимости типа FlushConstraint (заподлицо). Сборка oAsmCompDef имеет свойство Constraints — ссылку на коллекцию всех сборочных зависимостей. Метод AddFlushConstraint(oAsmPlane, oPartPlaneProxy, 0) дополняет эту коллекцию новой зависимостью совмещения заподлицо для двух плоскостей oAsmPlane сборки и oPartPlaneProxy компонента. Третий аргумент означает отсутствие смещения — нулевое расстояние между указанными плоскостями.