Получение матрицы трансформации в мировые координаты

Автор Тема: Получение матрицы трансформации в мировые координаты  (Прочитано 671 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 200
  • Карма: 0
Добрый день!
Мне необходимо получить матрицу трансформации из локальных координат в мировые для
ModelItem. ModelItem.Geometry содержит несколько свойств Transform. Какое из них моё?
Спасибо!

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

  • Administrator
  • *****
  • Сообщений: 11745
  • Карма: 1534
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 200
  • Карма: 0
Почему-то ни одна из матриц не является корректной для ModelItem, содержащих несколько
фрагментов. Для ModelItem с одним фрагментом корректна OriginalTransform.

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

  • Administrator
  • *****
  • Сообщений: 11745
  • Карма: 1534
  • Рыцарь ObjectARX
  • Skype: rivilis
А ModelGeometry.ActiveTransform ?
А ModelItem.Transform?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 200
  • Карма: 0
ActiveTransform и PermanentTransform дают тот же результат, что и OriginalTransform.
ModelItem.Transform не работает. Ощущение, что она единичная.

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

  • Administrator
  • *****
  • Сообщений: 11745
  • Карма: 1534
  • Рыцарь ObjectARX
  • Skype: rivilis
Почему-то ни одна из матриц не является корректной для ModelItem, содержащих несколько
фрагментов. Для ModelItem с одним фрагментом корректна OriginalTransform.
Что такое (с точки зрения API) несколько фрагментов в ModelItem?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 200
  • Карма: 0
Вот код получения геометрии для данного ModelItem:
Код - C# [Выбрать]
  1.  public void Build(ModelItem modelItem)
  2.         {
  3.             MeshList = new Dictionary<CSMesh, CSMatrixD>();            
  4.             m_mat = new double[16];          
  5.             COMApi.InwOpSelection oSel = ComApiBridge.ToInwOpSelection(new ModelItemCollection { modelItem });
  6.             m_Color = modelItem.Geometry.OriginalColor;
  7.             m_Transparancy = modelItem.Geometry.OriginalTransparency;
  8.            
  9.             foreach (InwOaPath3 path in oSel.Paths())
  10.             {
  11.                 InwOaPath3 path1 = path;
  12.                 var fragments = path.Fragments()
  13.                     .Cast<InwOaFragment3>()
  14.                     .Where(x => IsFragmentOnPath(path1, x))
  15.                     .ToList();
  16.  
  17.                 foreach (var fragment in fragments)
  18.                 {                    
  19.                     //Получаем текущую матрицу преобразования координат
  20.                     m_CurrentTransformMatrix = fragment.GetLocalToWorldMatrix();
  21.  
  22.                     var matrix = (Array)(object)m_CurrentTransformMatrix.Matrix;
  23.                     m_mat = matrix.Cast<double>().ToArray();                    
  24.  
  25.                     //Получаем текущую геометрию
  26.                     fragment.GenerateSimplePrimitives(nwEVertexProperty.eNORMAL, this);                    
  27.                 }                
  28.             }                                    
  29.         }
  30.  

Тут тоже происходит получение матрицы трансформаций для каждого фрагмента. Для фрагментов они корректны.
Но я хотел каким-то образом получить матрицу для всего ModelItem.

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

  • Administrator
  • *****
  • Сообщений: 11745
  • Карма: 1534
  • Рыцарь ObjectARX
  • Skype: rivilis
Но я хотел каким-то образом получить матрицу для всего ModelItem.
Подозреваю, что такой матрицы быть не может, если фрагментов > 1 или это должна быть единичная матрица.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение