Система координат Inventor

Автор Тема: Система координат Inventor  (Прочитано 841 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Система координат Inventor
« : 11-09-2018, 14:42:24 »
Здравствуйте.
Возник такой вопрос. Как с использованием Inventor API определить, какая из осей в сборке направлена вверх?
Так как есть сборки, в которых ось Z направлена вверх, а есть - где Y.
Благодарю за ответ.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 283
  • Карма: 71
  • Skype: mikazakov@mail.ru
Re: Система координат Inventor
« Ответ #1 : 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.  

здесь координаты оси получаются именно в системе координат сборки куда подсборка вставлена
По созданию прокси в хэлпе есть небольшое описание.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Re: Система координат Inventor
« Ответ #2 : 12-09-2018, 11:52:48 »
К сожалению, я пока что плохо представляю, как устроены системы координат в Inventor.
Насколько я понимаю, мне нужны координаты рабочих осей сборки самого верхнего уровня(не подсборок) в глобальной системе координат.
Если такая, конечно, есть. Для наглядности прилагаю два скриншота.
Я могу получить WorkAxes из AssemblyComponentDefinition, но не уверен, что это именно то, что мне нужно.
И будут ли координаты даны в глобальной системе.
Благодарю за ответ.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 283
  • Карма: 71
  • Skype: mikazakov@mail.ru
Re: Система координат Inventor
« Ответ #3 : 12-09-2018, 21:04:36 »
Я могу получить WorkAxes из AssemblyComponentDefinition, но не уверен, что это именно то, что мне нужно.
Получается, что первые три оси из коллекции AssemblyComponentDefinition.WorkAxes это как раз то что вам нужно

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Re: Система координат Inventor
« Ответ #4 : 13-09-2018, 11:44:09 »
Но координаты этих осей одинаковы для обоих случаев, представленных на скриншотах. То есть оси имеют такие координаты
X(1,0,0), Y(0,1,0), Z(0,0,1). Возможно, нужно создать для них прокси-объекты. Но как это сделать, ведь соответствующего объекта ComponentOccurence нет?
Спасибо.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 283
  • Карма: 71
  • Skype: mikazakov@mail.ru
Re: Система координат Inventor
« Ответ #5 : 13-09-2018, 20:38:49 »
мне нужны координаты рабочих осей сборки самого верхнего уровня(не подсборок) в глобальной системе координат.
Ну яснее нужно мысли выражать, батенька.
Если нужны координаты рабочих осей подсборок в текущей сборке, то это как раз пример с прокси-объектами, о которых я писал выше и приводил пример:
http://adn-cis.org/forum/index.php?topic=8710.msg33745#msg33745


Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Re: Система координат Inventor
« Ответ #6 : 14-09-2018, 11:34:54 »
За неясность мыслей прошу прощения. В Inventor'е я еще совсем новичок.
А что за оси находятся в левом нижнем углу? Я их обвел на скриншотах.
Меня интересуют именно они. В одном случае вверх направлен Y, в другом -  Z.
Я разрабатываю конвертер графики из Inventor в формат своей программы и в случае, если вверх направлен Y, мне необходимо делать поворот модели.
Так как в моей программе Z всегда направлен вверх. Мне необходимо знать, какая из осей направлена вверх, чтобы понять, нужно делать поворот модели или нет.
Вот такая задача.
Благодарю за ответы и информацию.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 283
  • Карма: 71
  • Skype: mikazakov@mail.ru
Re: Система координат Inventor
« Ответ #7 : 17-09-2018, 08:45:28 »
То что у вас на скринах, это просто триада с указанием направления осей. Она показывает только направления осей глобальной системы координат. Эта триада не находится в нулевых координатах, это только НАПРАВЛЕНИЕ. Это для удобства пользователя. Сами оси можно найти в браузере в папке Origin:
 


Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Re: Система координат Inventor
« Ответ #8 : 17-09-2018, 14:22:42 »
Спасибо. Теперь ситуация для меня немного проясняется.
Я думаю, мне нужно не направление осей, а направление взгляда на модель, указываемое на видовом кубе.
Подскажите пожалуйста, как используя Inventor API, понять, какое направление взгляда установлено
(справа, сверху и т.д., либо какое-то промежуточное значение).
Благодарю за ответ.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 283
  • Карма: 71
  • Skype: mikazakov@mail.ru
Re: Система координат Inventor
« Ответ #9 : 18-09-2018, 05:19:57 »
Кубик в правом углу это просто взгляд на модель с разных сторон. Я не пойму как взгляд на модель с другой стороны повлияет на сохранение в другой формат. Взгляд ни как не связан с фактической ориентацией модели в пространстве.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Re: Система координат Inventor
« Ответ #10 : 18-09-2018, 11:21:26 »
Для этого снова взгляните на мои скриншоты.
Модель степлера в результате конвертации необходимо будет повернуть на 90 градусов вокруг оси Х, так как для ее правильного отображения(верх степлера-сверху, низ-снизу)
в Inventor предполагается, что ось Y направлена вверх(так установлено направление взгляда в сборке). Модель системного блока, в свою очередь, поворачивать не придется, так как
для его отображения (верх-сверху, низ-снизу) в Inventor предполагается, что вверх направлена ось Z. Напомню, что в моей программе вертикальная ось всегда строго Z.
Вертикальность оси Z критична, т.к. программа накапливает в одной сцене модели из разных САПР и ориентация этих моделей должна быть одинаковой.
Прошу прощения за спутанность объяснений и благодарю за ответ.

Отмечено как Решение Александр Ривилис 05-10-2018, 21:00:08

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 8407
  • Карма: 1014
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Система координат Inventor
« Ответ #11 : 18-09-2018, 11:41:11 »
Михаил, конечно подскажет точнее. Но похоже вам следует получить информацию о камере (http://help.autodesk.com/view/INVNTOR/2018/ENU/?guid=GUID-AF417DB3-323F-40D6-8C8C-35D73611DD4E) и её методах ViewToModelSpace, ModelToViewSpace и свойстве UpVector.
Но вообще-то по большому счету вверх может не быть направлена ни одна из осей - ориентация взгляда может быть совершенно произвольной.
« Последнее редактирование: 18-09-2018, 12:15:27 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Re: Система координат Inventor
« Ответ #12 : 18-09-2018, 16:55:41 »
Спасибо.
Вариант с ActiveView.Camera.UpVector, вроде, сработал.
Михаил, Вас также благодарю за разъяснения.