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

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 102:
 
 
== Вспомогательная геометрия (Transient Geometry) ==
 
=== Что такое Transient Geometry? ===
Вспомогательная геометрия (transient geometry) предназначена для решения через API комплекса математических задач, преимущественно геометрических.
Объекты вспомогательной геометрии создаются посредством вызовов соответствующих методов объекта TransientGeometry и чрезвычайно широко используются в Autodesk Inventor API.
В отличие от большинства других геометрических объектов API, эти объекты не имеют средств визуального отображения. Чаще всего, это абстрактные математические объекты – посредники, предназначенные для управления объектами «реальной» геометрии Autodesk Inventor.
Например, математические 2D и 3D точки TransientGeometry используются для создания и манипуляции рабочими и эскизными точками, построения матриц преобразований и многого другого.
 
 
В Inventor 2008 API в составе TransientGeometry разработчиками предусмотрены три группы объектов:
* геометрические (Geometry),
* математические (Math) и
* вспомогательные (Utility).
 
 
Группа геометрических объектов выглядит следующим образом:
 
[[Изображение: OTG_ObjectModel_1.jpg|Объектная модель TransientGeometry (1) ]]
 
 
На следующем рисунке приведены группы математических и вспомогательных объектов.
 
[[Изображение: OTG_ObjectModel_2.jpg|Объектная модель TransientGeometry (2) ]]
 
 
Объекты вспомогательной геометрии представляют собой математические абстракции реальных геометрических объектов и лишены многих их свойств. Например, объект Line, в отличие, скажем, от эскизной линии SketchLine, имеет бесконечную длину. Line имеет выделенное направление Direction, заданное её единичным вектором типа UnitVector. Аналогично и объект Plane отличается от плоской грани отсутствием пространственных границ. В отличие от геометрической плоскости, известной нам из школьного курса математики, объект Plane имеет выделенное направление — это направление вектора нормали к плоскости Normal, заданное единичным вектором типа UnitVector. Именно это обстоятельство позволяет отличать одну сторону плоскости от другой.
 
В группе Utility заслуживают внимания объекты для поддержки коллекций ребер EdgeCollection, граней FaceCollection и произвольных объектов ObjectCollection.
 
=== Точки Point и Point2d ===
 
Объект Point описывает трехмерную математическую точку в декартовом пространстве на основе списка из трех ее координат X, Y и Z. Его двумерный аналог — объект Point2d — представляет собой математическую точку с координатами X и Y на плоскости. Оба объекта обеспечивают доступ к координатам и поддерживают ряд методов для проверки эквивалентности и геометрических преобразований.
 
Точки Point2d широко применяются при работе в двумерными эскизами. Чтобы создать в эскизе эскизную точку SketchPoint, используется метод Add коллекции эскизных точек SketchPoints.
Методу Add требуется знать положение, в котором следует создавать эскизную точку SketchPoint. Но эта точка может быть результатом произвольной последовательности преобразований и перемещений, или может быть точкой другого объекта. По этой причине метод Add опирается на объект Point2d.
 
<source lang=vbnet>
' Поскольку пример демонстрационный,
' то с целью упрощения опущена проверка ошибок.
' Всегда проверяйте корректность типа возвращаемых значений.
 
Dim oApp As Inventor.Application
Set oApp = ThisApplication
 
Dim oPartDoc As PartDocument
Set oPartDoc = oApp.Documents.Add( _
kPartDocumentObject, _
oApp.GetTemplateFile(kPartDocumentObject))
 
' Создаем эскиз в плоскости XY
Dim oSketch As PlanarSketch
Set oSketch = oPartDoc.ComponentDefinition.Sketches.Add _
(oPartDoc.ComponentDefinition.WorkPlanes.Item(3))
Dim oTG As TransientGeometry
Set oTG = oApp.TransientGeometry
 
Dim oSkPnts As SketchPoints
Set oSkPnts = oSketch.SketchPoints
Call oSkPnts.Add(oTG.CreatePoint2d(30, 20), False)
</source>
 
Приведенный фрагмент программы создает эскиз с единственной эскизной точкой с координатами X=30, Y=20. Последний аргумент метода Add является логическим значением, которое определяет, является ли создаваемая эскизная точка центром отверстия. Но это влияет лишь на ее графическое отображение.
 
Эскизные точки в коллекции SketchPoints всегда двумерные, имеют тип SketchPoint. Методу Add для их создания требуется предоставить объект Point2d, для чего обычно применяется метод CreatePoint2D.
 
Трехмерные эскизные точки типа SketchPoint3D хранятся в другой коллекции SketchPoints3D.
 
=== Матрицы преобразований ===
 
Хотя объект Matrix явно не относится к числу интуитивно понятных объектов Inventor API, в большинстве ситуаций применять его довольно просто. Здесь мы рассмотрим объект Matrix для трехмерного пространства, но для плоских задач Autodesk Inventor поддерживает и его двумерный аналог Matrix2d.
 
Объект Matrix как правило применяется для придания объекту заданной ориентации, что требуется, например, при вставке экземпляра детали в сборку. Другими словами, Matrix служит для задания системы координат. Он же используется и для выполнения операций перемещения и/или вращения. В Matrix предусмотрены удобные средства для манипуляции наборами координат в 3D пространстве. У него есть ряд полезных методов, чтобы задавать и использовать параметры геометрического преобразования.
 
Предположим, например, что у вас имеются две плоскости и вы намереваетесь перемещать объекты с одной плоскости на другую. Наиболее эффективно эта задача решается с помощью матрицы преобразования.
 
Объект Matrix имеет метод SetToAlignCoordinateSystems, использующий на входе координатные системы (начало координат и три направления X, Y и Z) обеих плоскостей.
 
После заполнения строк и столбцов матрицы преобразования нужными значениями матрица может последовательно применяться для переноса объектов с одной плоскости на другую. Объект Matrix снабжен целым рядом методов и свойств, чтобы экранировать пользователя от тонкостей реализации матричной математики.
 
 
==== Координатные системы ====
 
Сначала рассмотрим, каким образом матрица представляет систему координат. По умолчанию координатная система Autodesk Inventor является обыкновенной декартовой с правой тройкой векторов X, Y и Z. Предположим, требуется создать матрицу преобразования к другой системе координат, повернутой относительно исходной на 45° вокруг оси Z и со смещенным в точку 10,5,0 началом координат.
 
Рассмотрим вектор, направленный вдоль новой оси X. Он повернут вокруг оси Z на 45°, следовательно направлен на точку 1,1,0. Поскольку направления в матрице задаются единичными векторами, то новый вектор X в старой системе координат будет иметь вид 0.707, 0.707, 0. Ось Z своего направления не меняет, а вот начало координат должно «переехать» в точку 10,5,0.
Для данного случая 3D матрица преобразования будет иметь следующий вид. Столбцы слева направо определяют направления осей X, Y, Z и координаты нового начала.
 
 
[[Изображение: TG_Matrix_1.png| Пример матрицы ]]
 
 
С помощью уже упоминавшегося метода SetCoordinateSystem нижеприведенный фрагмент кода формирует искомую матрицу преобразования. Не следует забывать, что внутренними единицами измерения длин и углов в Autodesk Inventor являются сантиметры и радианы, соответственно.
 
<source lang=vbnet>
Dim oTG As TransientGeometry
Set oTG = ThisApplication.TransientGeometry
Dim dPi As Double
dPi = Atn(1) * 4 ' число Пи
' Зададим точку начала координат (origin)
Dim oOrigin As Point
Set oOrigin = oTG.CreatePoint(10, 5, 0)
' Зададим направления осей.
' Pi/4 в радианах соответствует углу 45°
Dim oXAxis As UnitVector
Dim oYAxis As UnitVector
Dim oZAxis As UnitVector
Set oXAxis = oTG.CreateUnitVector( Cos(dPi / 4), Sin(dPi / 4), 0)
Set oYAxis = oTG.CreateUnitVector(-Cos(dPi / 4), Sin(dPi / 4), 0)
Set oZAxis = oTG.CreateUnitVector(0, 0, 1)
' Формируем матрицу требуемого преобразования системы координат
Dim oMatrix As Matrix
Set oMatrix = oTG.CreateMatrix
Call oMatrix.SetCoordinateSystem( _
oOrigin, _
oXAxis.AsVector, _
oYAxis.AsVector, _
oZAxis.AsVector)
 
</source>
 
 
Типичное применение таких матриц преобразований — ориентированное размещение деталей в сборках. В этом случае матрица используется свойством Transformation объекта ComponentOccurrence. Разумеется, действительное положение компонента будет определяться не только преобразованием координат, но и наложенными сборочными зависимостями.
 
Примечание:
Отдельные ячейки матрицы преобразования доступны посредством вызова метода Cell объекта Matrix.
 
==== Преобразования с помощью матриц ====
 
Использование матрицы для перемещения объектов несколько отличается от ее использования при задании системы координат для размещения объектов. Приведенный выше пример задавал неподвижную, статичную координатную систему. Перемещение объекта из одного положения в другое предполагает различие между старыми и новыми координатными системами — некоторую дельту, которая и должна быть представлена в матрице.
Метод TransformBy матрицы осуществляет ее преобразование, используя другую матрицу, заданную ему в качестве аргумента. Измененная матрица действует как та самая матрица–дельта сложного преобразования.
В данном случае дельта представляет собой поворот на 45° вокруг оси Z. Все, что нам нужно сделать, это изменить вызов SetCoordinateSystem, т.к. нам не требуется более изменять положение начала координат:
 
<source lang=vbnet>
Call oMatrix.SetCoordinateSystem( _
oTG.CreatePoint, _
oXAxis.AsVector, _
oYAxis.AsVector, _
oZAxis.AsVector)
</source>
 
Соответственно, чтобы повернуть объект, скажем, деталь в сборке, вокруг ее оси Z надо получить ее положение через свойство Transformation, затем изменить матрицу вызовом ее метода TransformBy, что в итоге даст матрицу–дельта. Потом снова применить обновленную матрицу к компоненту (детали), снова через его свойство Transformation. Компонент переместится в новое положение.
 
Для решения многих распространенных задач объект Matrix содержит целый ряд методов:
 
<source lang=vbnet>
Matrix
 
GetCoordinateSystem
SetCoordinateSystem
SetToAlignCoordinateSystems
Invert
IsEqualTo
GetMatrixData
PutMatrixData
SetToRotateTo
SetTranslation
PreMultiplyBy
PostMultiplyBy
SetToIdentity
SetToRotation
TransformBy
</source>
 
 
 
Объект TransientGeometry позволяет создавать целый ряд объектов вспомогательной геометрии. Эти объекты не представляют реально отображаемых графических объектов. Они используются для математических вычислений. Наиболее часто используемыми являются точки и матрицы преобразований. Матрицы применяются в задачах точного позиционирования и перемещения компонентов.
TransientGeometry не ограничивается точками, линиями или плоскостями. Например, объект Box может расширяться, чтобы поглотить заданные точки, или проверить наличие пересечения с другим объектом Box, или может проверить, находится ли у него внутри заданная пользователем точка.
 
== Ссылочные ключи и атрибуты ==