Jump to content

API для САПР форматов (IGES, STEP, Parasolid)


Recommended Posts

ostapb

Мне надо написать программу, которая создаёт поверхность определённой формы и сохраняет в файл. Потом это откроют в SolidWorks. Существует ли какая-нибудь доступные библиотеки или API для доступного языка программирования, чтобы создавать, открывать, изменять, сохранять всё в стандартных форматах (например, IGES, STEP, Parasolid или другие, если подскажете)?

 

(Я пока ручками написал код для STL -- он очень простой. Но это, конечно, нелучший способ.)

Link to post
Share on other sites
  • 2 weeks later...


UnPinned posts
Maik812

запишете макрос в солиде, путем записи действий.

Link to post
Share on other sites
Ветерок

Студент?

09.08.2021 в 19:04, ostapb сказал:

написал код для STL

В stl нет поверхностей. Там только сетка. Советую начать с изучения того, какая программа с чем работает.

09.08.2021 в 19:04, ostapb сказал:

Потом это откроют в SolidWorks.

И офигеют. Надеюсь, ты успеешь убежать на достаточное расстояние.

Link to post
Share on other sites
  • 3 weeks later...
19.08.2021 в 18:07, Ветерок сказал:

Студент?

В stl нет поверхностей. Там только сетка. Советую начать с изучения того, какая программа с чем работает.

И офигеют. Надеюсь, ты успеешь убежать на достаточное расстояние.

 

1) Нет, не студент.

2) STL хранит сеточную поверхность. Т.е. состоящую из треугольников. Я ж написал, что через программа, работающая через STL, уже есть. И эта поверхность в SolidWork уже внедрена. Но там есть нехорошие костыли.

3) Какая программа с чем работает, я знаю. Я знаю, что STL плохо подходит. Задача очень специфическая. Поверхность не конструкторская, очень специфичной формы. И она-таки сеточная, рассчетная.

4) Так вот и спрашиваю: есть ли программные библиотеки для STEP, Parasolid, ...?

 

19.08.2021 в 18:01, Maik812 сказал:

запишете макрос в солиде, путем записи действий.

 

Поверхность, которую надо внедрить, получена расчётами в виде треугольной сетки из сотен точек. Я пытался сделать через VBA под Солидом. Но очень там запутанная COM-модель -- не нашёл, где сеточные поверхности строятся.

Может быть, они там есть? Я просто недокопал?

Если есть такие инструменты в VBA, я могу и так попробовать.

Link to post
Share on other sites
Ветерок
18 минут назад, ostapb сказал:

STL хранит сеточную поверхность

От того, что ты называешь сетку поверхностью, сетка не станет поверхностью. Сетка и поверхность - это разные классы объектов. С разной математикой. Сетка может по-своему описывать некоторую поверхность, но в смысле математики сетка не является поверхностью (такой, как NURBS или Безье). Любая программа работает не с определениями, а с математикой.

Edited by Ветерок
Link to post
Share on other sites
19 часов назад, Ветерок сказал:

От того, что ты называешь сетку поверхностью, сетка не станет поверхностью. Сетка и поверхность - это разные классы объектов. С разной математикой. Сетка может по-своему описывать некоторую поверхность, но в смысле математики сетка не является поверхностью (такой, как NURBS или Безье). Любая программа работает не с определениями, а с математикой.

 

Господин Гуру, прекращай гнуть понты. Я выпускник и доцент кафедры прикладной математики и информатики. Среди, предметов, которые я веду, есть "Математическое моделирование на ЭВМ" и "Численные методы для инженерных задач". Я знаю, что такое поверхность, сетка, сплайны, интерполяция, МКЭ, триангуляция, дифференциальная геометрия и т.д. С программами CAD и CAE я работал с 98 года. Это были автокад, про/инженер, про/механика, ансис, комсол и т.д. С SolidWorks не работал. Вот и спрашиваю теперь.

 

Хотя, собственно не про сам SolidWorks, а о программировании. На C++ или C#. Мне нужны туда API для инженерных форматов -- я положу туда то, что надо. Тебе есть, что сказать?

 

(Хотя возможен вариант, использовать COM-модель SolidWorks. Очень сложная. До сплайн-поверхностей докопаться ещё не удалось.)

19 часов назад, Ветерок сказал:

От того, что ты называешь сетку поверхностью, сетка не станет поверхностью. Сетка и поверхность - это разные классы объектов. С разной математикой. Сетка может по-своему описывать некоторую поверхность, но в смысле математики сетка не является поверхностью (такой, как NURBS или Безье). Любая программа работает не с определениями, а с математикой.

 

https://ru.wikipedia.org/wiki/STL_(формат_файла)

 

STL (от англ. stereolithography) — формат файла, широко[4][5] используемый для хранения трёхмерных моделей объектов для использования в аддитивных технологиях. Информация об объекте хранится как список треугольных граней, которые описывают его поверхность, и их нормалей. STL-файл может быть текстовым (ASCII) или двоичным. Свое название получил от сокращения термина «Stereolithography», поскольку изначально применялся именно в этой технологии трехмерной печати.

  • Нравится 1
Link to post
Share on other sites

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

Link to post
Share on other sites
38 минут назад, k_v сказал:

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

 

Понятно. Мне бы сами функции. Имена, способы вызова. Т.е. например, макрос я создал:

 

Dim swApp As Object
Dim Part As Object
Sub main()

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc


End Sub

 

Link to post
Share on other sites
Ветерок

Само по себе преобразование сетки в NURBS-поверхность, пригодную для работы в Солиде - это довольно нетривиальная задача. Есть специальные программы, которые могут по сетке тем или иным способом построить поверхность. В самом Солиде есть приложение для этих целей.

Или всё это Вам не нужно?

Link to post
Share on other sites

Задача сама по себе специфична. Есть одна задумка (не моя) -- может быть, она оказаться ошибочна и мы от неё откажемся. А может и не оказаться. Сейчас я её реализую -- чтобы потом увидеть. То, что внедрять такую поверхность в беталь -- нездоровое занятия, мы знаем. Я сам это коллегам объяснил. Но одно дело предполагать, а другое -- знать. Техническая возможность безусловно есть. Вот и посмотрим. Нетривиальность задачи, очевидно, в том, что поверхность желательно некоторым образом упростить, т.е. аппроксимировать. Я и буду это делать. Затыка в способе записи результата.

 

И главное, дело вовсе не в STL. Исходные данные -- расчёт в ANSYS. Я написал программу, которая загоняет их в STL, просто потому что STL -- очень простой открытый формат. Я захотел загнать данные в STEP. А он сложный. Самому программировать будет долго. Я резонно решил, что должны существовать API для STEP, Parasolid или хотя бы для IGES. А их нет! Я не нашёл! Сие странно.

 

О готовых программах.

В Солиде конструкторы мне показали ScanTo3D. Но с качеством результата есть проблемы. ScanTo3D очень произвольно обращается с данными, удаляет точки и, хуже всего, меняет границы. Понятно почему это происходит -- он использует только точки и игнорирует соединяющие их линии. И вообще, у ScanTo3D просто другая задача. Других инструментов в Солиде пока не нашли. (Опять таки повторюсь: доступна COM-модель через макросы Солида. Возможно мне придётся разбираться в ней до конца.)

 

 

Link to post
Share on other sites
Ветерок

Как-то давно, я получил от одного известного НИИ расчетную кривулину в виде таблицы из 20 точек с 6 знаками после запятой. Кривая научная - надо её точно воспроизвести. Вбил все эти 20 точек с 6 знаками после запятой в CAD (данные получил на бумаге, не в файле). Смотрю на эти точки, и их расположение мне что-то очень напоминает. Взял я две крайние точки и одну среднюю, и построил по этим трем точкам дугу. И - о чудо! - все эти 20 точек ровнехонько легли на эту дугу. Я смотрю на это волшебство и глазам не верю. Позвонил в это умное НИИ (благо в одном городе) и спрашиваю: "Эта волшебная линия, которую вы мне прислали - это дуга окружности?" Они радостно отвечают: "ДА, дуга!". Я им: "Вашу мать! Для задания дуги достаточно ТРЕХ точек! Зачем вы мне вывалили 20 штук?" А они: "У нас программа так выдает." Занавес!

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

  • Хаха 1
Link to post
Share on other sites
  • 2 weeks later...
Maik812
07.09.2021 в 17:29, ostapb сказал:

Я написал программу, которая загоняет их в STL, просто потому что STL -- очень простой открытый формат.

если у Вас стл уже есть, может конвертнуть в другой формат? Попробывать конвертеры? Библиотеки для конвертации stl есть , в Рино или 3д макс.

Перегнал вроде получилось.. Да вопросы есть по смене формата. Ну вы перегоните в другой формат и редактируйте как хотите и тд.

 

 

Jpeg_0012.jpg

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.



×
×
  • Create New...