Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Vladislav от 11-09-2018, 14:42:24

Название: Система координат Inventor
Отправлено: Vladislav от 11-09-2018, 14:42:24
Здравствуйте.
Возник такой вопрос. Как с использованием Inventor API определить, какая из осей в сборке направлена вверх?
Так как есть сборки, в которых ось Z направлена вверх, а есть - где Y.
Благодарю за ответ.
Название: Re: Система координат Inventor
Отправлено: mikazakov от 11-09-2018, 20:07:19
Подразумеваю,что требуется знать параметры рабочей оси подсборки в конкретной сборки.
Для этого нужно создать прокси-объект. Прокси-объекты являются динамическими объектами поэтому по умолчанию их не видно в дереве свойств при отладке.
Делается это так, в сборке для её первого компонента:

Код - Visual Basic [Выбрать]
  1. Sub tt()
  2.  
  3. Dim oDoc As AssemblyDocument
  4. Set oDoc = ThisApplication.ActiveDocument
  5.  
  6. Dim oCompOcc As ComponentOccurrence
  7. Set oCompOcc = oDoc.ComponentDefinition.Occurrences.Item(1)
  8.  
  9. Dim CompDef As ComponentDefinition
  10. Set CompDef = oCompOcc.Definition
  11.  
  12. Dim AxisProxy As WorkAxisProxy
  13.  
  14. Call oCompOcc.CreateGeometryProxy(CompDef.WorkAxes.Item(1), AxisProxy)
  15.  
  16. Debug.Print AxisProxy.Line.Direction.X
  17. Debug.Print AxisProxy.Line.Direction.Y
  18. Debug.Print AxisProxy.Line.Direction.Z
  19.  
  20. End Sub
  21.  

здесь координаты оси получаются именно в системе координат сборки куда подсборка вставлена
По созданию прокси в хэлпе есть небольшое описание.
Название: Re: Система координат Inventor
Отправлено: Vladislav от 12-09-2018, 11:52:48
К сожалению, я пока что плохо представляю, как устроены системы координат в Inventor.
Насколько я понимаю, мне нужны координаты рабочих осей сборки самого верхнего уровня(не подсборок) в глобальной системе координат.
Если такая, конечно, есть. Для наглядности прилагаю два скриншота.
Я могу получить WorkAxes из AssemblyComponentDefinition, но не уверен, что это именно то, что мне нужно.
И будут ли координаты даны в глобальной системе.
Благодарю за ответ.
Название: Re: Система координат Inventor
Отправлено: mikazakov от 12-09-2018, 21:04:36
Я могу получить WorkAxes из AssemblyComponentDefinition, но не уверен, что это именно то, что мне нужно.
Получается, что первые три оси из коллекции AssemblyComponentDefinition.WorkAxes это как раз то что вам нужно
Название: Re: Система координат Inventor
Отправлено: Vladislav от 13-09-2018, 11:44:09
Но координаты этих осей одинаковы для обоих случаев, представленных на скриншотах. То есть оси имеют такие координаты
X(1,0,0), Y(0,1,0), Z(0,0,1). Возможно, нужно создать для них прокси-объекты. Но как это сделать, ведь соответствующего объекта ComponentOccurence нет?
Спасибо.
Название: Re: Система координат Inventor
Отправлено: mikazakov от 13-09-2018, 20:38:49
мне нужны координаты рабочих осей сборки самого верхнего уровня(не подсборок) в глобальной системе координат.
Ну яснее нужно мысли выражать, батенька.
Если нужны координаты рабочих осей подсборок в текущей сборке, то это как раз пример с прокси-объектами, о которых я писал выше и приводил пример:
http://adn-cis.org/forum/index.php?topic=8710.msg33745#msg33745

Название: Re: Система координат Inventor
Отправлено: Vladislav от 14-09-2018, 11:34:54
За неясность мыслей прошу прощения. В Inventor'е я еще совсем новичок.
А что за оси находятся в левом нижнем углу? Я их обвел на скриншотах.
Меня интересуют именно они. В одном случае вверх направлен Y, в другом -  Z.
Я разрабатываю конвертер графики из Inventor в формат своей программы и в случае, если вверх направлен Y, мне необходимо делать поворот модели.
Так как в моей программе Z всегда направлен вверх. Мне необходимо знать, какая из осей направлена вверх, чтобы понять, нужно делать поворот модели или нет.
Вот такая задача.
Благодарю за ответы и информацию.
Название: Re: Система координат Inventor
Отправлено: mikazakov от 17-09-2018, 08:45:28
То что у вас на скринах, это просто триада с указанием направления осей. Она показывает только направления осей глобальной системы координат. Эта триада не находится в нулевых координатах, это только НАПРАВЛЕНИЕ. Это для удобства пользователя. Сами оси можно найти в браузере в папке Origin:
 
(https://i.postimg.cc/tZH08k3c/image.png) (https://postimg.cc/tZH08k3c)
Название: Re: Система координат Inventor
Отправлено: Vladislav от 17-09-2018, 14:22:42
Спасибо. Теперь ситуация для меня немного проясняется.
Я думаю, мне нужно не направление осей, а направление взгляда на модель, указываемое на видовом кубе.
Подскажите пожалуйста, как используя Inventor API, понять, какое направление взгляда установлено
(справа, сверху и т.д., либо какое-то промежуточное значение).
Благодарю за ответ.
Название: Re: Система координат Inventor
Отправлено: mikazakov от 18-09-2018, 05:19:57
Кубик в правом углу это просто взгляд на модель с разных сторон. Я не пойму как взгляд на модель с другой стороны повлияет на сохранение в другой формат. Взгляд ни как не связан с фактической ориентацией модели в пространстве.
Название: Re: Система координат Inventor
Отправлено: Vladislav от 18-09-2018, 11:21:26
Для этого снова взгляните на мои скриншоты.
Модель степлера в результате конвертации необходимо будет повернуть на 90 градусов вокруг оси Х, так как для ее правильного отображения(верх степлера-сверху, низ-снизу)
в Inventor предполагается, что ось Y направлена вверх(так установлено направление взгляда в сборке). Модель системного блока, в свою очередь, поворачивать не придется, так как
для его отображения (верх-сверху, низ-снизу) в Inventor предполагается, что вверх направлена ось Z. Напомню, что в моей программе вертикальная ось всегда строго Z.
Вертикальность оси Z критична, т.к. программа накапливает в одной сцене модели из разных САПР и ориентация этих моделей должна быть одинаковой.
Прошу прощения за спутанность объяснений и благодарю за ответ.
Название: Re: Система координат Inventor
Отправлено: Александр Ривилис от 18-09-2018, 11:41:11
Михаил, конечно подскажет точнее. Но похоже вам следует получить информацию о камере (http://help.autodesk.com/view/INVNTOR/2018/ENU/?guid=GUID-AF417DB3-323F-40D6-8C8C-35D73611DD4E) и её методах ViewToModelSpace, ModelToViewSpace и свойстве UpVector.
Но вообще-то по большому счету вверх может не быть направлена ни одна из осей - ориентация взгляда может быть совершенно произвольной.
Название: Re: Система координат Inventor
Отправлено: Vladislav от 18-09-2018, 16:55:41
Спасибо.
Вариант с ActiveView.Camera.UpVector, вроде, сработал.
Михаил, Вас также благодарю за разъяснения.