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

STL, API C++


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

Я пишу на С++ скрипт, и у меня входные данные - поверхность в формате stl. как мне программно открыть файл и считать координаты всех точек?

Если кто-то может, проконсультируйте меня по ICQ (227888839), в долгу не останусь.

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

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


С++ уже стал скриптовым языком? :) Может тебе стоит почитать какую-нибудь книгу по С++ ? Там и про открытие файлов узнаешь и про чтение данных и про классы с объектами и много чего ещё...

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

Т. е. тебе нужно просто описание формата stl ?

<noindex>http://en.wikipedia.org/wiki/STL_%28file_format%29</noindex> и там по ссылкам. А вообще это в гугле легко находится.

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

т.е. мне нужно разбирать бинарный файл?

А в SW нет стандартных функций чтобы получить точки?

А сохранять в него таким же способом? Он треугольниками описывает поверхности или твердые тела тоже может?

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

т.е. мне нужно разбирать бинарный файл?

А в SW нет стандартных функций чтобы получить точки?

А сохранять в него таким же способом? Он треугольниками описывает поверхности или твердые тела тоже может?

У STL есть две разновидности - символьная и двоичная. К примеру, при экспорте из SW можно вызвать окно настройки и указать, какую разновидность STL-файлов нужно делать. И она делает!!! Я пробовал, получал символьные STL и даже их обрабатывал - не знаю, правда, удачно или нет, поскольку конечного результата, когда можно будет оценить на экране по критериям похоже-не похоже пока не достиг.
Ссылка на сообщение
Поделиться на других сайтах

А в SW нет стандартных функций чтобы получить точки?

Наверняка есть, это уже нужно ковырять АПИ самого солида. Но это уже будут точки солида, не имеющие отношение к формату стл-файла. Если тебе нужно работать только с данными самого файла, то имхо лучше вообще не завязываться на солид.
Ссылка на сообщение
Поделиться на других сайтах

Для того, чтобы из STL-файла (текстового) получить все координаты точек - ничего, кроме текстового редактора не потребуется. 

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

Я не совсем понял, а что собственно надо? Окрыть STL-файл в солиде, и узнать координаты вершин импортированной поверхности в SW с помощью API SW это одно, а если координаты точек из самого STL-файла, то это другое.

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

Для того, чтобы из STL-файла (текстового) получить все координаты точек - ничего, кроме текстового редактора не потребуется. 

А что потом делать с координатами, полученными с помощью текстового редактора: распечатать и набить с клавиатуры, или воспользоваться более прогрессивной технологией - через ClipBoard?
Ссылка на сообщение
Поделиться на других сайтах

Я получила координаты) программно, без всякого SW

А файл STL откуда взялся? Если есть символьный файл с координатами, прочитать его программно больших проблем нет. Если уж я читал программно *.sat, *.igs и *.stp, то *.stl при его примитивнейшей структуре прочесть несложно. Вот что плохо в *.stl - так это то, что там нет топологии, т.е. каждая фасета представлена координатно сама по себе, без связи со смежными фасетами.
Ссылка на сообщение
Поделиться на других сайтах

вообще-то в stl нет поверхностей. Там только mesh.

Как это нет поверхностей? А плоскость фасеты - чем это не поверхность? То, что плоскость задана косвенно - это не принципиально, достаточно векторно перемножить отрезки, соединяющие пары вершин - и готова нормаль плоскости. Изменено пользователем PeterShilnikov
Ссылка на сообщение
Поделиться на других сайтах

вообще-то в stl нет поверхностей. Там только mesh.

Вспомнил! (В добавление к предыдущему сообщению). Для каждой фасеты в *.stl задан и вектор нормали, просто я его игнорирую, и потому забыл.
Ссылка на сообщение
Поделиться на других сайтах

А не тут ли надо смотреть (API SW2008 HELP):

- Modeler::GeneralTopology(и смотреть примеры к этим функциям)

- Tessellation::MatchType

- Modeler::GetBodyOutline

- Face2::FaceInSurfaceSense

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

"

Create and Convert Non-Manifold Bodies Example (VB)

This example shows how to create non-manifold bodies, which by default are not allowed in SolidWorks, and then convert the non-manifold bodies to manifold bodies.

'---------------------------------

' Preconditions: Model document containing tool and target bodies exists.

' Postconditions: Non-manifold bodies are created and tessellated, and then converted to manifold bodies.

....

дальше идет код...

....

'---------------------------------

"

Вот все давно хотел спросить, да стеснялся )) : кто как переведет данное описание, выделенное жирным курсивом. Что такое например такие термины: "Non-Manifold Bodies" и "Manifold Bodies" ?

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

Non-manifold bodies - по-простому - не пересекающиеся тела. Это сообщение вываливается не только в SW, чаще всего в результате манипуляций над твердым телом, когда в результате манипуляций тело "рассыпается" на два или несколько тел. 

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

Что такое например такие термины: "Non-Manifold Bodies" и "Manifold Bodies" ?

См. <noindex>http://www.plm-consulting.ru/pdf/cip_data_2009-11-01.pdf</noindex>, стр. 115
Ссылка на сообщение
Поделиться на других сайтах

Non-manifold bodies - по-простому - не пересекающиеся тела. Это сообщение вываливается не только в SW, чаще всего в результате манипуляций над твердым телом, когда в результате манипуляций тело "рассыпается" на два или несколько тел. 

В API SW есть также такой интересный (для меня по-крайней мере) термин, как Tesselation.

Вот один из переводов:

degree of tesselation : степень мозаичности ( оценка густоты мозаичных линий на визуализуемом трёхмерном представлении объекта в компьютерной графике ).

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

В указанном выше мной примере как раз и происходит извлечение этих фасеток...

Есть вот такие операции:

`Tessellation::GetVertexPoint` - This method gets the X, Y and Z values that describe a tessellation vertex - не это ли ТС ищет?.

`Tessellation::GetFinVertices` - This method gets the IDs of the two vertices that correspond to a fin.

См. <noindex>http://www.plm-consulting.ru/pdf/cip_data_2009-11-01.pdf</noindex>, стр. 115

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

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

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

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

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

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

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

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

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

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

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



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