Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Определение координат объектов чертежа через API
 
Здравствуйте.
Проблема следующая. Необходимо через Open API из программы на C# определить координаты каждого фрагмента в сборке, точнее координаты определенной ЛСК фрагмента. Пробовал находить их через преобразования (Document.Fragments3D.ConstTransformations), а потом рассчитать координаты. Получилось определить преобразования перемещением (MoveRotateTransformation.Offset_X.Value, например). Проблемы возникли с преобразованием вращением. В этом классе есть свойство RotationsCount, которое определяет количество поворотов. Непонятно, как определить угол и ось, вокруг которой вращается фрагмент.
Может у кого есть идеи получше. Подскажите пожалуйста.
 
Разобрался. Для определения координат фрагмента в сборке нужно воспользоваться матрицей афинных преобразований (Fragments3D.InverseTransformation).
Здесь про афинные преобразования:
http://compgraphics.info/3D/3d_definitions.php
Таким образом можно определить координаты центра контейнера и его углы поворота. Для определение координат ЛСК фрагмента придется вытащить эту ЛСК из фрагмента и пересчитать координаты для нее. Кому интересно, могу выслать исходник.
Но вопрос остается открытым. Может кто-то знает способ проще.
 
Цитата
Silent пишет:

определить координаты каждого фрагмента в сборке, точнее координаты определенной ЛСК фрагмента
Все, конечно зависит от задачи которую Вы ставите (ксати, любопытно - что за задача, если не секрет?).

Можно предложить такой вариант (только под 11-ю версию):

tfcontrol.HideConstructions = false;//Показать в элементе визуализации документов TFlex - Control элементы построения
SelectionFilter filter = new SelectionFilter();
filter.DisableAllTypes();//Отключить выбор всех элементов
filter.Enable(ObjectType.LCS);//Включить выбор только ЛСК
Construction3D obj = tfcontrol.Select(e.x,e.y,filter) as Construction3D;
if (obj != null)
{
MessageBox.Show(obj.Name);//Сообщить имя объекта
}
 
ЭЭ, кажется Вы меня не поняли. Тот код, который Вы привели выше позволяет отключить выбор всех остальных, кроме ЛСК в компоненте отображения модели (TFControl).
Для исключения последующего недопонимания приведу более подробно решаемую задачу:
Есть сборка 3D, ее необходимо экспортировать в другую программу. Экспортируются координаты каждого из фрагментов (координаты их ЛСК), направления осей ЛСК фрагмента, значения переменных. Из всего этого формируется текстовый файл в специальном формате. Вот и все.
Страницы: 1