Перейти к публикации

Конвертор из .ptr в .x с помощью UG\Open API


Schmeichel

Рекомендованные сообщения

Всем доброго времени суток! Возникла необходимость конвертирования моделей из.prt в .x формат. Смотрел как вариант степ-214 в качестве промежуточного, однако недолго, так как данная затея показалась мне более трудоемкой, нежели использование Open api. Делаю внешнее приложение на Builder'e (правда удалось только через динамическое связывание DLL), кроме .h-ников никакой документации больше нет) Так вот вопрос в том, как мужно умудриться разбить модель на сетку 3D объема (желательно из треугольников))) Да и вообще кто-нибудь сталкивался с подобными проблемами (использование open api для конвертирования)?

P.S. использую NX7, но в нём не особо шарю, мягко говоря)))

Изменено пользователем Schmeichel
Ссылка на сообщение
Поделиться на других сайтах


Всем доброго времени суток! Возникла необходимость конвертирования моделей из.ptr в .x формат. Смотрел как вариант степ-214 в качестве промежуточного, однако недолго, так как данная затея показалась мне более трудоемкой, нежели использование Open api. Делаю внешнее приложение на Builder'e (правда удалось только через динамическое связывание DLL), кроме .h-ников никакой документации больше нет) Так вот вопрос в том, как мужно умудриться разбить модель на сетку 3D объема (желательно из треугольников))) Да и вообще кто-нибудь сталкивался с подобными проблемами (использование open api для конвертирования)?

P.S. использую NX7, но в нём не особо шарю, мягко говоря)))

То о чем Ты говоришь

Если я правильно поняд Твой пост

Давно написано

Я когда немного экспериментировал с DirectX без особого труда

нашел конвертер и перегнал prt в x формат

Давно это было - Прямо сейчас не могу вспомнить как называлось это приложение

Перегонял естестьвенно через какой-то из промежуточных форматов видимо

step или iges

Еще помню что этот конвертер мог генерить исходники на C с использованием

OpenGL по которым пожно было собрать оконное виндовое приложение

с деталью Имелся zoom и rotate

В принципе такую штуку можно и самому написать

в UGOpen все для этого есть

Ссылка на сообщение
Поделиться на других сайтах

Я впринципe тожe снaчaлa избороздил нeмaлую чaсть инeтa в поискaх 'этого' конвeрторa, вот только всё бeзрeзультaтно. В 3ds аналогично. Добрый чeловeк, ты бы вспомнил кaк это чудо нaзывaлось. В ug\open api я начинающий, почему и спрашивал совета про перевод модели в сетку

Ссылка на сообщение
Поделиться на других сайтах

Может для создания сетки использовать возможности CAE модуля?

К сожалению не знаю что тоакое .x формат. Для какого он приложения?

P.S. Если объем разбивать нужно, то это наверное всетаки пирамиды или тетраэдеры? Или нужно поверхность на треугольники?

Ссылка на сообщение
Поделиться на других сайтах

Может для создания сетки использовать возможности CAE модуля?

К сожалению не знаю что тоакое .x формат. Для какого он приложения?

P.S. Если объем разбивать нужно, то это наверное всетаки пирамиды или тетраэдеры? Или нужно поверхность на треугольники?

О CAE модуле я пока представления не имею, буду копать.

Формат X файла — формат файла для хранения 3D объектов, созданный компанией Microsoft.

Этот формат хранит информацию о геометрии 3D объекта (координаты вершин и координаты нормалей), текстурные координаты, описание материалов, пути и названия к текстурам, которые используются. Хранится иерархия объектов, хранится анимация, и хранятся привязки вершин к «костям» с описанием весов. В X файле может отсутствовать какая-либо информация об объекте (например в X файле могут содержаться только координаты вершин).(это из Wikipedia:)), говоря проще это обычный directX формат файлов, который можно просматривать без лишних вьюверов.

Суть в том, что технология работы с x-файлами через базу данных уже отлажена, а сами модельки будут поступать к нам в prt.

Поверхность нужно разбить на треугольники, т.е.2D Surface Meshing получается...

Ссылка на сообщение
Поделиться на других сайтах

О CAE модуле я пока представления не имею, буду копать.

Формат X файла — формат файла для хранения 3D объектов, созданный компанией Microsoft.

Этот формат хранит информацию о геометрии 3D объекта (координаты вершин и координаты нормалей), текстурные координаты, описание материалов, пути и названия к текстурам, которые используются. Хранится иерархия объектов, хранится анимация, и хранятся привязки вершин к «костям» с описанием весов. В X файле может отсутствовать какая-либо информация об объекте (например в X файле могут содержаться только координаты вершин).(это из Wikipedia:)), говоря проще это обычный directX формат файлов, который можно просматривать без лишних вьюверов.

Суть в том, что технология работы с x-файлами через базу данных уже отлажена, а сами модельки будут поступать к нам в prt.

Поверхность нужно разбить на треугольники, т.е.2D Surface Meshing получается...

попробуйте 3d_exploration
Ссылка на сообщение
Поделиться на других сайтах

Спасибо за содействие! получилось достать 3d_exploration 1.7 и потестить её. Бывает, что некоторые файлы конвертятся с ошибками, иные вообще не распознаются, наверное т.к. с момента её создания много воды утекло. Однако дело не в этом, все-таки нужен СВОЙ конвертор, в который, возможно, со временем будут вноситься изменения.

В принципе такую штуку можно и самому написать

в UGOpen все для этого есть

С чего посоветуешь начать? - я посмотрел сегодня доступные в инете примеры кода, наткнулся на <noindex>"перебор компонентов и частей сборки"</noindex> пока не анализировал, но по этому принципу надеюсь сформировать иерархию модели, а потом отдельно переводить в mesh каждую компоненту. Либо нужно сразу разбить сборку на точки, реализовать что-то типа "Вставить->База\точка->набор точек" но тогда как быть с иерархией...

Вобщем пните меня куда-нибудь :helpsmilie:

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за содействие! получилось достать 3d_exploration 1.7 и потестить её. Бывает, что некоторые файлы конвертятся с ошибками, иные вообще не распознаются, наверное т.к. с момента её создания много воды утекло. Однако дело не в этом, все-таки нужен СВОЙ конвертор, в который, возможно, со временем будут вноситься изменения.

С чего посоветуешь начать? - я посмотрел сегодня доступные в инете примеры кода, наткнулся на <noindex>"перебор компонентов и частей сборки"</noindex> пока не анализировал, но по этому принципу надеюсь сформировать иерархию модели, а потом отдельно переводить в mesh каждую компоненту. Либо нужно сразу разбить сборку на точки, реализовать что-то типа "Вставить->База\точка->набор точек" но тогда как быть с иерархией...

Вобщем пните меня куда-нибудь :helpsmilie:

Начни лучше с конвертации солид

А вообще фактически Тебе надо научиться конвертировать фасе

Все остальное просто

Выбор solid -- UF_UI_select_single

Для работы с солид изучи

UF_MODL_ask_body_faces

UF_MODL_ask_face_loops

//UF_MODL_ask_face_edges

А дальше Тебе нужно написать тесселятор для face

Поищи в UF_MODL функции для ребра и грани которые тебе по координате

точки дают параметры и по параметрам дают координаты точки

Еще такие вещи есть в UF_EVAL - они побыстрее

Если грань односвязная я бы просто нарезал ее на ленты зафиксировав один из параметров

И разбил бы каждую на треугольники

Многосвязные как то надо будет преобразовывать в односвязные

Вообще поищи что пишут по алгоритмам Тесселяции

Этого должно быть много в И-нет

Еще UF_UI_create_filebox

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за содействие! получилось достать 3d_exploration 1.7 и потестить её. Бывает, что некоторые файлы конвертятся с ошибками, иные вообще не распознаются, наверное т.к. с момента её создания много воды утекло. Однако дело не в этом, все-таки нужен СВОЙ конвертор, в который, возможно, со временем будут вноситься изменения.

С чего посоветуешь начать? - я посмотрел сегодня доступные в инете примеры кода, наткнулся на <noindex>"перебор компонентов и частей сборки"</noindex> пока не анализировал, но по этому принципу надеюсь сформировать иерархию модели, а потом отдельно переводить в mesh каждую компоненту. Либо нужно сразу разбить сборку на точки, реализовать что-то типа "Вставить->База\точка->набор точек" но тогда как быть с иерархией...

Вобщем пните меня куда-нибудь :helpsmilie:

Как вариант UF_DISP_j3d_geometry. Может поможет...
Ссылка на сообщение
Поделиться на других сайтах

Что-то как в том анекдоте - "Предложите самый дорогой способ определения постоянной Планка..." 

Нужно объекты в сборке "побить" на треугольнички? И записать в файл в определенном формате? 

Я бы сделал так (более того - уже делал): Экспорт ВСЕГО содержимого prt-файла в текстовый STL. А дальше - простейший консольный конвертер, который читает строки исходного файла с координатами и нормалями треугольничков и выбрасывает в другой файл по нужным правилам. Ясный пень, текстур и прочего там не будет. 

Или я чего-то не понимаю?? Если покажешь пример этого .x фвйла, попробую быстренько на коленке что-то дописать. Как уже говорил - заготовка для чтения STL-файлов у меня есть. 

Ссылка на сообщение
Поделиться на других сайтах

Вот на пример на вскидку:

/////////////////////////////////////////////////////////////////////////////////

xof 0302txt 0064

Header { //начало файла//

1;

0;

1;

}

Frame x3ds_Pyramid {

FrameTransformMatrix { //матрица преобразования матрикса

0.490196, 0.000000, 0.000000, 0.000000, (координат и масштаба

0.000000, 0.490196, 0.000000, 0.000000, объекта в пространстве)//

0.000000, 0.000000, 0.490196, 0.000000,

-0.000000, 0.819444, 0.000000, 1.000000;;

}

//начало описания объекта(сетки объекта).

Mesh Pyramid {

18; //количество строк до ;;//

-0.000000; 8.333334; -0.000000;, //координаты точек пространства

-10.000000; -1.666667; -10.000000;, (x,y,z соответственно)

10.000000; -1.666667; -10.000000;, строки имеют номера: первая - 0,

10.000000; -1.666667; 10.000000;, вторая - 1,.......последняя - 17

-10.000000; -1.666667; 10.000000;, здесь 18 точек //

-0.000000; -1.666667; -0.000000;,

10.000000; -1.666667; -10.000000;,

10.000000; -1.666667; 10.000000;,

-10.000000; -1.666667; 10.000000;,

-10.000000; -1.666667; -10.000000;,

-10.000000; -1.666667; -10.000000;,

10.000000; -1.666667; -10.000000;,

10.000000; -1.666667; -10.000000;,

10.000000; -1.666667; 10.000000;,

10.000000; -1.666667; 10.000000;,

-10.000000; -1.666667; 10.000000;,

-10.000000; -1.666667; 10.000000;,

-10.000000; -1.666667; -10.000000;;

8; //количество строк до следующих ;;

3;0,2,1;, первое число - кол-во точек многоугольника

3;0,3,6;,

3;0,4,7;, следующие за первым числом через запятую -

3;0,9,8;, номера точек пространства, описаных выше

3;10,11,5;, //!!!видимая сторона многоугольника опреде-

3;12,13,5;, ляется направлением обхода его точек

3;14,15,5;, если обход по часовой стрелке, то это

3;16,17,5;; видимая сторона//

MeshMaterialList {

1;

1;

0;

Material { //указание на материал

1.000000;0.800000;0.000000;0.900000;; и текстуру//

25.000000;

0.300000;0.000000;0.000000;;

0.4; 0.4; 0.1;;

TextureFilename

{"lava.bmp";}

}

}

MeshTextureCoords { //описание текстурирования объекта//

18;

0.500000;0.000000;, //каждая строка до знака ;; соответствует строке с

0.000000;1.000000;, координатами точек, которые описаны выше

1.000000;1.000000;, рисунок текстуры рассматривается как единичный

1.000000;1.000000;, квадрат в системе координат с началом координат

1.000000;1.000000;, в левом верхнем углу

0.500000;0.500000;, вертикальная ось Oy направлена вниз

0.000000;1.000000;, горизонтальная ось Ox направлена вправо

0.000000;1.000000;, первое число в каждой строке х-координата

0.000000;1.000000;, текстуры, второе - y-координата //

1.000000;1.000000;,

1.000000;1.000000;,

0.000000;1.000000;,

0.000000;1.000000;,

0.000000;0.000000;,

0.000000;0.000000;,

1.000000;0.000000;,

1.000000;0.000000;,

1.000000;1.000000;;

}

}

}

/////////////////////////////////////////////////////////////////////////////////

Матрица преобразования у меня будет единичная, текстуры не интересуют, в мешах соответственно неограниченная вложенность.

Ссылка на сообщение
Поделиться на других сайтах

Что-то как в том анекдоте - "Предложите самый дорогой способ определения постоянной Планка..." 

Нужно объекты в сборке "побить" на треугольнички? И записать в файл в определенном формате? 

Я бы сделал так (более того - уже делал): Экспорт ВСЕГО содержимого prt-файла в текстовый STL. А дальше - простейший консольный конвертер, который читает строки исходного файла с координатами и нормалями треугольничков и выбрасывает в другой файл по нужным правилам. Ясный пень, текстур и прочего там не будет. 

Или я чего-то не понимаю?? Если покажешь пример этого .x фвйла, попробую быстренько на коленке что-то дописать. Как уже говорил - заготовка для чтения STL-файлов у меня есть. 

Конечно был предложен самый дорогой способ

так как самый дешевый 3d_explorer был отвергнут

Ссылка на сообщение
Поделиться на других сайтах

Начни лучше с конвертации солид

А вообще фактически Тебе надо научиться конвертировать фасе

Все остальное просто

Выбор solid -- UF_UI_select_single

Для работы с солид изучи

UF_MODL_ask_body_faces

UF_MODL_ask_face_loops

//UF_MODL_ask_face_edges

А дальше Тебе нужно написать тесселятор для face

Поищи в UF_MODL функции для ребра и грани которые тебе по координате

точки дают параметры и по параметрам дают координаты точки

Еще такие вещи есть в UF_EVAL - они побыстрее

Если грань односвязная я бы просто нарезал ее на ленты зафиксировав один из параметров

И разбил бы каждую на треугольники

Многосвязные как то надо будет преобразовывать в односвязные

Вообще поищи что пишут по алгоритмам Тесселяции

Этого должно быть много в И-нет

Еще UF_UI_create_filebox

UF_UI_select_single - как я понял внутренняя функция, а я делаю внешнее приложение

Как вариант UF_DISP_j3d_geometry. Может поможет...

сейчас как раз разбираюсь с ней

получается вытащить все точки и нормали, однако как организовать в этом случае иерархическую структуру, вот в чем вопрос

Изменено пользователем Schmeichel
Ссылка на сообщение
Поделиться на других сайтах

UF_UI_select_single - как я понял внутренняя функция, а я делаю внешнее приложение

сейчас как раз разбираюсь с ней

получается вытащить все точки и нормали, однако как организовать в этом случае иерархическую структуру, вот в чем вопрос

Кстати нашел у себя тесселятор в старых кодах переложенный для UG

Работает он только с плоскими гранями

Поддерживает невыпуклость и многосвязность

Пиши адрес - скину

Ссылка на сообщение
Поделиться на других сайтах

Кстати нашел у себя тесселятор в старых кодах переложенный для UG

Работает он только с плоскими гранями

Поддерживает невыпуклость и многосвязность

Пиши адрес - скину

schmeichel@rambler.ru зaрaнee признaтeлeн
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • maxx2000
    • Guhl
      По делу что-нибудь скажешь? Или болтаешь, чтоб говном изо рта не воняло, философ? @lem_on Знаешь кто такой уебок? обсц. (обсценное) человек, раздражающий кого-либо своими словами, поведением, внешним видом и т. п., вызывающий желание его ударить, побитьТак вот, @lem_on, ты самый настоящий уебок
    • lem_on
      "Когда ты умер, ты об этом не знаешь, только другим тяжело. То же самое, когда ты тупой"
    • vasillevich68
      Передайте, что ни чего страшного не будет. Максимум, что может произойти, так это, в один прекрасный момент вал лопнет, и датчики вибрации дадут команду на остановку насоса   
    • Guhl
      Но ведь токовый сигнал надо  для начала в цифровой преобразовать Поэтому полный цикл преобразования не может быть быстрее аналоговой части У тиристорных приводов частота отклика не более 30Гц, но это не из-за ОУ, а из-за принципа работы приводов Да у обычного 741 частота 1Мгц Насколько это быстрее 32нс?     @gudstartup Аналоговая цепь всегда быстрее цифровой Так и живем Честно говоря я обескуражен Ведь тут же даже житейская логика говорит о том, что цифровая цепь привода не может быть быстрее аналоговой, просто потому что аналоговая является подсистемой цифровой цепи   Аналоговый вычислитель всегда выиграет по скорости у цифрового аналога Точность может быть ниже, но скорость всегда выше Сравните скорость работы сумматора на ОУ и на процессоре И оставьте свои ужимки, противно смотреть Или вы продолжатель дела "короля саркастических ужимок" (с)?
    • gudstartup
      с люфтами эта функция никак не борется она их пропускает гася резонанс ни насколько обработка контура тока длится 32нс попробуйте это сделать на ваших оу. @Guhl отдыхайте вы явно перегрелись у вас аналоговый процессор
    • Guhl
      Вы хотя бы в курсе насколько быстрее аналоговая цепь, чем цифровая?  
    • gudstartup
      вы хотя бы в курсе сколько длится в сигнальном поцессоре servo фанук обработка контура тока и сколько это было на ваших допотопных приводах и какие скорости и точность контура сейчас достижимы ,благодаря этому. добейтесь этого на ваших аналоговых схемах с оу и я сниму перед вами шляпу. полностью некорректное сравнение.
    • Ветерок
      Можно заменить гнутый швеллер на прямоугольную тонкостенную трубу. Если не стоит задача всё гнуть самостоятельно.
    • Guhl
      Большие люфты вызывают колебания. Причем эти люфты возникают не только при смене направления движения, а при других условиях. Путем борьбы с люфтами, борятся с колебаниями Для этого и есть dual position feedback  Ну вот видите, уже лучше. Борьба с люфтами - борьба с колебаниями Так для чего нужен dual position feedback? Назовите вы ее хоть чертом лысым, но она как боролась с люфтами, так и борется 
×
×
  • Создать...