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

Нужен алгоритм генерации STL!


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

Здраствуйте, уважаемые специалисты!

Нужен алгоритм генерации STL поверхности на уже имеющемся наборе примитивов (например есть поверхность, описанная плоскостями, сопряженными цилиндрами или другими функциями второго порядка, или облаком точек).

Задача состоит в моделировании с помощью треугольников криволинейной поверхности, форма которой зависит от времени.

Заранее спасибо!

С уважением!

Alexei

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


Здраствуйте, уважаемые специалисты!

Нужен алгоритм генерации STL поверхности на уже имеющемся наборе примитивов (например есть поверхность, описанная плоскостями, сопряженными цилиндрами или другими функциями второго порядка, или облаком точек).

Задача состоит в моделировании с помощью треугольников криволинейной поверхности, форма которой зависит от времени.

Заранее спасибо!

С уважением!

Alexei

Так это что - "вручную" надо делать? Ведь почти каждый CAD имеет средство конвертации из STL и обратно.

Или смысл в чем-то другом?

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

Да, нужно вручную написать алгоритм на фортране (или С).

А цель этой задачи - моделировать перемещающуюся поверхность в газодинамическом пакете.

Вроде, есть решения у программистов компьютерных игр и 3D графики вообще.

Но я с этим никогда не сталкивался. САПР ближе. Вот и подумал про STL.

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

Да, нужно вручную написать алгоритм на фортране (или С).

А цель этой задачи - моделировать перемещающуюся поверхность в газодинамическом пакете.

Вроде, есть решения у программистов компьютерных игр и 3D графики вообще.

Но я с этим никогда не сталкивался. САПР ближе. Вот и подумал про STL.

Давайте упростим вопрос.

Что Вам нужно: из гладкого тела/поверхности сгенеировать формат STL

или из плоских тругольников сгенерировать/построить гладкое тело/поверхность?

Вот никак не пойму вопрос...

А уж перемещать его - это уж вопрос 3-й...

И вообще: есть целая "куча" газодинамических пакетов, в некоторых можно самому строить нужное тело, в некоторых можно импортировать тела, построенные CAD`ax...

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

Нужно из гладкой поверхности сгенерировать STL. Даже формат STL не обязательно. Просто разбить поверхность на элементарные треугольники и запомнить их вершины. Затем треугольники по определенному алгоритму начнут двигаться в поле скоростей. Но это уже вторая задача.

Большинство коммерческих и некоммерческих CFD пакетов часто требуют небольшой или большой доработки. Имеется в виду написание пользовательских функций. Что брать чужой продукт, что свой доморощенный - все равно работа. Это уже личный выбор каждого.

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

Нужно из гладкой поверхности сгенерировать STL. Даже формат STL не обязательно. Просто разбить поверхность на элементарные треугольники и запомнить их вершины. Затем треугольники по определенному алгоритму начнут двигаться в поле скоростей. Но это уже вторая задача.

Большинство коммерческих и некоммерческих CFD пакетов часто требуют небольшой или большой доработки. Имеется в виду написание пользовательских функций. Что брать чужой продукт, что свой доморощенный - все равно работа. Это уже личный выбор каждого.

Нужно из гладкой поверхности сгенерировать STL. Даже формат STL не обязательно. Просто разбить поверхность на элементарные треугольники и запомнить их вершины. Затем треугольники по определенному алгоритму начнут двигаться в поле скоростей. Но это уже вторая задача.

Большинство коммерческих и некоммерческих CFD пакетов часто требуют небольшой или большой доработки. Имеется в виду написание пользовательских функций. Что брать чужой продукт, что свой доморощенный - все равно работа. Это уже личный выбор каждого.

При записи тв. тела в формате STL из SolidWorks`a (в текстовом режиме) - получаем координаты всех вершин треугольников! Только надо определить порядок считывания этих координат. Этот файл имеет свой формат!

Вот как он считывает: грубо говоря, по меридианам или по параллелям или еще как?

Да даже вручную взять 2-3 строки координат из этого файла и уже будет понят порядок "обхода" тв. тела.

Вот выдержка:

solid Деталь2

facet normal -2.227527e-002 -1.386013e-015 9.997519e-001

outer loop

vertex 2.333018e+001 0.000000e+000 4.994417e+001

vertex 2.500000e+001 0.000000e+000 5.000000e+001

vertex 2.500000e+001 8.500000e+001 5.000000e+001

endloop

endfacet

и т..д

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

Вот как он считывает: грубо говоря, по меридианам или по параллелям или еще как?

Наверное, задаваясь допуском, взятым из настроек гонит точку насколько может далеко по U и V вектору, пока ошибка не сравняется с допуском. Ставит точку и так далее.
Ссылка на сообщение
Поделиться на других сайтах

Наверное, задаваясь допуском, взятым из настроек гонит точку насколько может далеко по U и V вектору, пока ошибка не сравняется с допуском. Ставит точку и так далее.

Похоже, так и есть. Потому что (в TEBISе) я могу изменять STL-тело по этим точкам, как мне нужно. И когда увеличиваешь значение допуска, число треугольников становится меньше, то есть как бы дальше продлевает расстояние по вектору.

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

Цитата(ssv22 @ 19.12.08, 21:40)

Вот как он считывает: грубо говоря, по меридианам или по параллелям или еще как?

Наверное, задаваясь допуском, взятым из настроек гонит точку насколько может далеко по U и V вектору, пока ошибка не сравняется с допуском. Ставит точку и так далее.

--------------------

Ну это само собой: ведь получаем плоские треугольники вместо изогнутой поверхности - апроксимация идет в 3-х мерном пространстве!

... гонит точку насколько может далеко по U и V вектору, пока ошибка не сравняется с допуском....

Так для этого допуск и служит!

Но почему "далеко"? В смысле далеко от истинной поверхности? Типа что-то 3-х мерной хорды?

PS. в SW есть какая-то примочка, которая налагает на поверхность или сетку или точки, которые потом можно двигать...

Как в 3D Max`e.

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

Нужен алгоритм генерации STL поверхности на уже имеющемся наборе примитивов (например есть поверхность, описанная плоскостями, сопряженными цилиндрами или другими функциями второго порядка, или облаком точек).

Задача состоит в моделировании с помощью треугольников криволинейной поверхности, форма которой зависит от времени.

Просто поищите по ключам Delanau, Voronoi triangulation, триангуляция Делане

И найдете и описание алгоритмов и готовые программы и библиотеки, которые сможете использовать

На выходе будете иметь сетку из треугольников.

Можете конечно и OpenCASCADE использовать. Но для вашей задачи это будет лишний этап и геморой

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

Уважаемые коллеги!

Спасибо! Обрисовали сразу несколько подходов к решению.

Со своей стороны добавлю, что разработчики 3D графики используют алгоритм Marching Cubes для триангуляции.

Теперь осталось только выбрать наиболее эффективный и легко реализуемый (по возможности) метод.

Получу результаты - поделюсь.

С уважением!

Алексей

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

Если не ошибаюсь в 3D Max`e существует таакой способ преобразования (по-моему та же триангуляция), т.е. рисуем "гладкую" поверхность, а потом ее

превращаем ее в набор треугольников. Вот только как выцапарать данные о вершинах - не помню. По-моему VBA там должен быть, а значит и можно.

Или экспортировать в какой-то формат...

Еще не мешало-бы почитать что-нибудь о Direct-X и OpenGL. Вспоминается мне оттуда определение нормали к грани(фасетки)...

PS. мне кажется, что "Marching Cubes" это какое-то производное от Direct-X и OpenGL.

Хотя я может и ошибаюсь...

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

Но почему "далеко"? В смысле далеко от истинной поверхности? Типа что-то 3-х мерной хорды?

Ну да, именно, пока расстояние от хорды до пов-сти не сравняется с допуском.

Просто поищите по ключам Delanau, Voronoi triangulation, триангуляция Делане. И найдете и описание алгоритмов и готовые программы и библиотеки, которые сможете использовать

Ну вот уже и взрослые советы подоспели)).

Вот только как выцапарать данные о вершинах - не помню.

Ну так сохранить в STL. Или в формате DirectX - он тоже дает инфу о вертексах.
Ссылка на сообщение
Поделиться на других сайтах

Задача состоит в моделировании с помощью треугольников криволинейной поверхности, форма которой зависит от времени.

В Solidworks можно с помощью API интерфейса можно подобное проработать, пример плывущего по волнам кораблика можно посмотреть здесь: <noindex>http://www.mikejwilson.com/solidworks/soli...ks_files-03.htm</noindex>
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




×
×
  • Создать...