Здравствуйте!
У программы OpenSCAD, совершенно не подходящий для меня синтаксис. Мне стало интересно самому написать библиотеку для параметрического моделирования на Лисп (язык легко позволяет это сделать).
На каких математических основах работает обсуждаемая программа? Я может быть и рад был бы посмотреть исходники, но Си++ для меня - темный лес, да и разобраться с той кучей файлов в любом случае дело не простое.
Посоветуйте пожалуйста какие-нибудь статьи или книги, что можете, объясните пожалуйста сами.
Заранее спасибо.
На каких математических основах работает обсуждаемая программа?
Я не настоящий сварщик, но на сколько я понимаю, у всех CAD-ов есть две основные части:
1. Геометрическое ядро. Которое определяет точную геометрию моделируемого объекта, анализируя как-то информацию о построении.
2. Графическое ядро. Которое берёт информацию о геометрии и переводит её в вид, который можно будет отобразить на экране.
Оба пункта в недрах имеют очень много очень сложной математики (я даже не осмелюсь пытаться перечислить нужные разделы)
Перед тем как пытаться самому реализовать что-то похожее на OpenSCAD - я бы всё-таки попробовал посмотреть, можно ли переиспользовать какие-то готовые решения, которые лежат в его основе (Лисп же должен уметь сишные библиотеки звать, верно?)
Ещё можно пойти по другому пути - немного научиться плюсам и вкорячиться в то место, где происходит парсинг встроенного языка, и вместо парсинга - честно выполнять лисповый код, который выдаст опенскаду информацию о том, что нужно построить.
Совсем костыльный вариант, но вероятно самый простой - генерировать код для OpenSCAD на лиспе.
У программы OpenSCAD, совершенно не подходящий для меня синтаксис
На самом деле там язык специально заточен под моделирование.
Пытаться решать эти задачи на языке общего назначения, даже на лиспе, будет более многословно и менее читабельно.
да и разобраться с той кучей файлов в любом случае дело не простое.
Github говорит, что их там около 400, так что вполне сравнимо с не самой большой книгой :)
Читаемые форматы файлов DXF, Object File Format и STL
У каждого формата есть строгая спецификация.
Можно изобретать (реализовывать в своей программе) любые геометрические примитивы: изобрести колесо велосипеда в виде странного аттрактора, изобрести руль велосипеда в виде множества Мандельброта...
Проблема в том, что не всякие такие примитивы получится геометрически точно сохранить в рамках определённого формата файла (просто потому, что любой формат не может предусматривать всё на свете). Поэтому есть смысл сразу заглядывать в спецификацию выбранного формата и реализовывать именно те примитивы, которые там описаны. Ведь 2D- или 3D-чертёж в CAD - это прежде всего сохраняемый документ, а уже во вторую очередь это картинка на экране, которую можно вертеть как угодно. Даже если совместимость по формату файла не интересует и будете сохранять в своём собственном формате, то всё равно с самого начала разработки мыслите о сериализации отдельных объектов и о сериализации документа в целом. Everything is a file
На самом деле там язык специально заточен под моделирование.
Пытаться решать эти задачи на языке общего назначения, даже на лиспе, будет более многословно и менее читабельно.
Но дело в том, что синтаксис у этого языка Си-подобный, приходится городить огород с ";" и передачей параметров. На Лиспе это всяко будет красивее. Кроме того, если представить язык как библиотеку, то можно прямо при моделировании использовать все доступные функции из стандарта, что даёт просто колоссальную гибкость.
Filipp42, ну в общем моя позиция - гораздо легче будет немного изучить C++ на достаточном уровне, чтобы читать исходники, и добавить туда поддержку своего языка.
Не совсем понимаю суть проблемы. Язык OpenSCAD осваивается за пару дней, написать парсер для другого языка несколько лет. Т.е. все сводится к двум вопросам: Можно написать Lisp для OpenSCAD? Можно. Есть ли практический смысл создания Lisp для OpenSCAD? Нет, это бессмысленно.
В OpenSCAD хреновый рендер, вот его переписать было бы полезно
evgeniy_lm, Извините, я с вами не согласен. Парсер для Лиспа пишется за несколько дней, а то и часов (может, иные умельцы справятся за минуты, но это высший пилотаж). При этом, Лисп-синтаксис имеет множество преимуществ.
А про рендер интересно. Скажите пожалуйста, что с ним не так?
Заранее спасибо.
Filipp42, Ну, вы попробуйте получить рендер не 2-3 кубиков, а сложной модели.
Может и за несколько дней, другое дело он в OpenSCAD как корове седло, т.е. совершенно ни к чему
Filipp42, Что значит не нужен? Нужен и очень. Почему он тормознутый я особо не вникал, но у меня были даже модели которые тупо зависали, при этом c такой же моделью в FreeCAD проблем нет.