Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 10.03.24 08:14
Оценка: :)))
Всем привет,
Волею судеб закинуло меня на Российский проект.
САПР не САПР, 3Д дизайнер или нет. В общем сугубо внутренний/нишевый продукт, 3Д + геология + разные базы.
И возник вопрос, а в каком направлении нужно двигаться чтобы разгрести эти миллионы строк кода и более менее сделать нормальную структуру проекта.
Сейчас там ух и ах... правим в одном месте, вылазит совершенно неожиданно в другом.

Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.
Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

Не хочется изобретать "велосипед"...
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 10.03.24 08:19
Оценка: +9
Здравствуйте, CleverBoy, Вы писали:

CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.

CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

Такого места нет, но жизненный опыт мне подсказывает, что там примерно такое же гавно унутре


CB>Не хочется изобретать "велосипед"...


А придётся
Маньяк Робокряк колесит по городу
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 10.03.24 08:26
Оценка:
M>А придётся



Как устроены веб проекты внутри иногда пролетает.
Кубиками / стрелочками / названиями технологий

Вдруг есть такое же для САПР/3Д монстров монолитов
Искал — не нашел, но вдруг...
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Qulac Россия  
Дата: 10.03.24 08:37
Оценка: -1 :)
Здравствуйте, CleverBoy, Вы писали:

CB>Всем привет,

CB>Волею судеб закинуло меня на Российский проект.
CB>САПР не САПР, 3Д дизайнер или нет. В общем сугубо внутренний/нишевый продукт, 3Д + геология + разные базы.
CB>И возник вопрос, а в каком направлении нужно двигаться чтобы разгрести эти миллионы строк кода и более менее сделать нормальную структуру проекта.
CB>Сейчас там ух и ах... правим в одном месте, вылазит совершенно неожиданно в другом.

CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.

CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

CB>Не хочется изобретать "велосипед"...


Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.
Программа – это мысли спрессованные в код
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Буравчик Россия  
Дата: 10.03.24 09:01
Оценка: +3
Здравствуйте, CleverBoy, Вы писали:

CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.

CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

Мимо проходил...

Можно заглянуть в опен-соурс решения. Они меньше, поэтому в них легче разобраться.
И самое главное, по ним может быть доступна какая-нибудь архитектурная документация.
Best regards, Буравчик
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 10.03.24 10:07
Оценка:
Здравствуйте, CleverBoy, Вы писали:

CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.

CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

Stanislav V. Zudin
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
От: Stanislav V. Zudin Россия  
Дата: 10.03.24 10:35
Оценка: 8 (1) +2
Здравствуйте, Nuzhny, Вы писали:

CB>>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.

CB>>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

N>Stanislav V. Zudin


"Чуть что — сразу Косой!"(с)

Камрады выше уже верно отметили, что описания архитектуры в свободном доступе не будет.
Во-первых, это обычно NDA, а во-вторых, все эти динозавры создавались десятилетиями и там такого наворочено, что туши свет.
По моему опыту, в "монстрах" более-менее так же.
Начинаются такие системы обычно инженерами, понимающими в предметной области, но далёкими от непосредственно программирования, архитектуры и т.п.
Поэтому технический долг накапливается стремительно. Что, судя по всему, ТС и наблюдает.

Могу посоветовать только читать классиков (Фаулер, Р.Мартин и т.п.) и пытаться применить на конкретном проекте.
Предвижу, что один из возможных вариантов, который выберет ТС — новый функционал отделить от старого фасадом и пытаться поддерживать порядок в отдельно взятом уголке проекта. Кмк, через это проходят все Поэтому в старом проекте таких углов будет не один, что еще более усугубляет положение
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
От: Нomunculus Россия  
Дата: 10.03.24 10:46
Оценка: 8 (1) +2
Здравствуйте, Qulac, Вы писали:

Q>Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.


Нет. Можно даже сказать- противоположно. Цели разные. В игрушках — визуал и уменьшение полигонов. В CADах главное — точность вычислений, так как обычно работа CAD-ов выливается во что-то физическое
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
От: Qulac Россия  
Дата: 10.03.24 11:02
Оценка: -1 :)))
Здравствуйте, Нomunculus, Вы писали:

Н>Здравствуйте, Qulac, Вы писали:


Q>>Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.


Н>Нет. Можно даже сказать- противоположно. Цели разные. В игрушках — визуал и уменьшение полигонов. В CADах главное — точность вычислений, так как обычно работа CAD-ов выливается во что-то физическое


И там и там есть модель, относительно которой все и строится.
Программа – это мысли спрессованные в код
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?
От: Нomunculus Россия  
Дата: 10.03.24 11:05
Оценка: +2
Здравствуйте, Qulac, Вы писали:

Q>И там и там есть модель, относительно которой все и строится.


Во-первых, в игрушках все строится не относительно модели, а относительно уровня. Модели — лишь его наполнение и визуал.
Во-вторых, даже модели представлены по-разному. В играх — это просто триангулированные меши. CADы не работают в терминах треугольников
Re[5]: Как устроены современные САПР, 3Д редакторы внутри?
От: Qulac Россия  
Дата: 10.03.24 11:09
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Здравствуйте, Qulac, Вы писали:


Q>>И там и там есть модель, относительно которой все и строится.


Н>Во-первых, в игрушках все строится не относительно модели, а относительно уровня. Модели — лишь его наполнение и визуал.

Н>Во-вторых, даже модели представлены по-разному. В играх — это просто триангулированные меши. CADы не работают в терминах треугольников

В игрушках реально есть модели все эти боевые юниты с их пузомерками, космические корабли с их физикой. Отображение модели это уже отдельная задача.
Программа – это мысли спрессованные в код
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 10.03.24 11:13
Оценка:
SVZ>Могу посоветовать только читать классиков (Фаулер, Р.Мартин и т.п.) и пытаться применить на конкретном проекте.
SVZ>Предвижу, что один из возможных вариантов, который выберет ТС — новый функционал отделить от старого фасадом и пытаться поддерживать порядок в отдельно взятом уголке проекта. Кмк, через это проходят все Поэтому в старом проекте таких углов будет не один, что еще более усугубляет положение

Именно это я сейчас и наблюдаю
Умный народ отделяется от "монстро кода" интерфейсами, ненужными dll-ками, обычные программеры просто кодируют "залипушками".

Но моя мысль то была такая: двигаться по чуть чуть, но в правильном направлении. Осталось только понять, где он этот правильный путь.
Как люди делают undo/redo в больших системах
Как отрабатываюти right click меню на обьекте из 1млн. кусочков и 600 доступных команд.
и т.д.

Задач на закрытие технического долга не бывает в принципе, все в целях клиента.
Но даже в рамках задач клиента можно намного порезвиться и передвинуть хоть чуть чуть в правильном направлении.
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 10.03.24 11:36
Оценка:
Здравствуйте, Qulac, Вы писали:

Q>В игрушках реально есть модели все эти боевые юниты с их пузомерками, космические корабли с их физикой. Отображение модели это уже отдельная задача.


Тем не менее, модели, уверен, строятся по другому. Взять OpenSCAD, там ты сам прогаешь, но, уверен, что в других CAD примерно так же, просто нет наружу торчащего языка. Так вот, в OpenSCAD ты рисуешь круг или многоугольник на плоскости, вытягиваешь его в третье измерение, можно в точку, получаешь цилиндр/многогранник, или конус/пирамиду. Потом делаешь другие детали, меняешь их положение, вычитаешь или объединяешь их, и так далее
Маньяк Робокряк колесит по городу
Re[7]: Как устроены современные САПР, 3Д редакторы внутри?
От: Qulac Россия  
Дата: 10.03.24 11:37
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Qulac, Вы писали:


Q>>В игрушках реально есть модели все эти боевые юниты с их пузомерками, космические корабли с их физикой. Отображение модели это уже отдельная задача.


M>Тем не менее, модели, уверен, строятся по другому. Взять OpenSCAD, там ты сам прогаешь, но, уверен, что в других CAD примерно так же, просто нет наружу торчащего языка. Так вот, в OpenSCAD ты рисуешь круг или многоугольник на плоскости, вытягиваешь его в третье измерение, можно в точку, получаешь цилиндр/многогранник, или конус/пирамиду. Потом делаешь другие детали, меняешь их положение, вычитаешь или объединяешь их, и так далее


Да, все дело в модели.
Программа – это мысли спрессованные в код
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?
От: Stanislav V. Zudin Россия  
Дата: 10.03.24 12:18
Оценка: 4 (1)
Здравствуйте, CleverBoy, Вы писали:

CB>Но моя мысль то была такая: двигаться по чуть чуть, но в правильном направлении. Осталось только понять, где он этот правильный путь.


CB>Как люди делают undo/redo в больших системах


В общем-то ничем не отличается от маленьких систем. Паттерны "snapshot" и "команда" — нашефсё.

В случае "команды" на каждое "действие" создаётся "антидействие".
Этот метод хорошо работает, пока операции атомарны, т.е. "удалить", "вставить", "изменить".
Если возникает потребность в протяженных операциях, когда за одну операцию объект в БД может измениться многократно, то такой подход становится очень неудобным и приходится выдумывать всякие обходные пути.

Если применяется паттерн "snapshot", то в начале операции запускается т.н. "транзакция", перед изменением объекта его исходное состояние запоминается в транзакции. Затем его можно курочить сколько угодно без каких-либо дополнительных затрат по памяти. В конце операции транзакция либо коммитится — её содержимое уходит в какой-нибудь UndoManager , либо отменяется — состояние измененных объектов восстанавливается. "Транзакцию" мы делали в виде стрима — удобно заливать разнотипные данные и хранить в виде одного блока байт.

"snapshot" и "команда" можно совмещать

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

Ну и не должно быть ситуации, когда действия с откатом перемежаются действиями без отката. Чревато поломкой БД.

Отдельно стоит упомянуть многопользовательскую работу. Если над одним дизайном работает несколько пользователей и у каждого должен быть свой Undo/Redo, то это лютый мозголомный пипец. Решения для этой задачи есть, но это для сильных духом.

В общем, тут совершенно банальные советы.

CB>Как отрабатываюти right click меню на обьекте из 1млн. кусочков и 600 доступных команд.


Есть БД, есть различные кеши/хеши поверх БД, к которым обращаются при клике.
Квадрантные деревья, двумерные хеши — вариантов масса, реализация есть даже в boost'е.

В общем, чем конкретнее вопросы, тем полезнее ответы

CB>Задач на закрытие технического долга не бывает в принципе, все в целях клиента.

CB>Но даже в рамках задач клиента можно намного порезвиться и передвинуть хоть чуть чуть в правильном направлении.

Ну я бы вводил хотя бы 10% задач на исправление технического долга. Иначе проект увязнет бесповоротно и новую функциональность будет очень непросто добавить.
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 10.03.24 12:34
Оценка:
SVZ>Ну я бы вводил хотя бы 10% задач на исправление технического долга. Иначе проект увязнет бесповоротно и новую функциональность будет очень непросто добавить.

Я бы то же...
Но я на должности обычного программиста, "пришлого", в устоявшуюся команду старичков.
Достучаться до мозгов архитектора, тех.директора, директора пока не удалось
Умныме слова "тех.долг, архитектура" они знают, но текущий результат в коде показывает что все грустно...
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
От: Stanislav V. Zudin Россия  
Дата: 10.03.24 12:50
Оценка: 98 (3) +1 :))
Здравствуйте, CleverBoy, Вы писали:

CB>Достучаться до мозгов архитектора, тех.директора, директора пока не удалось

CB>Умныме слова "тех.долг, архитектура" они знают, но текущий результат в коде показывает что все грустно...

Естественно, исправление технического долга не добавляет функциональности.
Тут надо оперировать не техническим долгом, как таковым, а фактами, подтверждающими невозможность исправления каких-то ошибок, невозможность добавить новый функционал из-за ограничений архитектуры и т.п.
Грубо говоря,
"чтобы добавить свистоперделку "Х" нам надо потратить столько-то месяцев на программирование, а потом столько-то месяцев на тестирование и ловлю всех нечетных ошибок. Если же мы перепишем такой-то кусок вот так-то, то потратим столько-то месяцев. Зато потом мы сможем реализовать "Х" за столько-то дней и ещё добавить "Ё","К", "Л","М" и "Н" на сдачу".

Если и так не получается убедить, то тогда либо уходить, либо делать строго по инструкции — медленно и грустно исправляешь чётные баги и вносишь нечётные

Есть, правда, и другой метод — взять, да и переписать. Но это если понимаешь что и как
Однажды по молодости я переписал за (не помню срок, что-то около месяца) кусок проекта, переделку которого оценивали в год. Начальство малость офигело. В итоге я получил нагоняй и повышениие зарплаты
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 10.03.24 13:45
Оценка:
SVZ>Могу посоветовать только читать классиков (Фаулер, Р.Мартин и т.п.) и пытаться применить на конкретном проекте.

Фаулера накачал, на недельку чтения хватит.

Нашел небольшое описание внутренностей InkSpace
https://gitlab.com/inkscape/inkscape/-/tree/master/doc?ref_type=heads
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.03.24 16:18
Оценка: +1
Здравствуйте, CleverBoy, Вы писали:

CB>Не хочется изобретать "велосипед"...


Велосипед уже изобрели за вас. На таком проекте какая то архитектура уже есть.
Нужно разобраться с ключевыми вещами. Только потом получится что либо исправить.

Хотите влиять на проект — нужно добиться признания в команде.
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.03.24 16:21
Оценка: 9 (2) +1
Здравствуйте, CleverBoy, Вы писали:

CB>Фаулера накачал, на недельку чтения хватит.


CB>Нашел небольшое описание внутренностей InkSpace

CB>https://gitlab.com/inkscape/inkscape/-/tree/master/doc?ref_type=heads

Возьмите за правило выполнять мелкий рефакторинг что бы вы ни меняли. Месяца через три начнете получать первые результаты
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: BlackEric http://black-eric.lj.ru
Дата: 10.03.24 18:11
Оценка:
Здравствуйте, CleverBoy, Вы писали:

Я бы начал с изучения исходников открытых САПР. KiCad EDA A Cross Platform and Open Source Electronics Design Automation Suite.
Наверняка есть что-то ещё.

Но обычно части кода выносятся в библиотеки и потом переиспользуются.
Ну и что бы влиять на проект нужно с должности разработчика подняться повыше. А будете ли вы на этой должности открывать иде вопрос открытый.
https://github.com/BlackEric001
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Wawan Россия http://www.wawan.ru/resume
Дата: 10.03.24 20:35
Оценка: :))
дай нейронным связям успевать расти отражая структуру проекта у тебя в голове, расслабиться, античный код это другой мир где нет места суете
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: cppguard  
Дата: 11.03.24 01:06
Оценка: 2 (1)
Здравствуйте, CleverBoy, Вы писали:

CB>Не хочется изобретать "велосипед"...


А придётся =) Если отбросить всякую экзотику, то можно сказать, что современные САПР вращаются вокруг твердотелого моделирования. Это когда аналитически тело рассматривается как сплошное, хотя на экран по-прежнему выводятся только видимые грани. Из открытых проектов можно глянуть Open Cascade, который, несмотря на открытость, разрабатывается не фриками-гиками, а вполне себе мамонтами от мира промышленной автоматизации. Кто-то говорит, что Open Cascad технологически сильнее закрытых решений. Ядром большинства САПР как раз является ядро твердотелого моделирования (solid body modelling), все более-менее серьёзные программи пишут либо свои, либо лицензируют чужие. Вторым важным компонентом современного САПРа является решатель (solver) систем ограничения. Он нужен как для разрешения ограничений в процессе разработки эскиза (sketch), так и для моделирования ограничений в сборке (assembly). Собственно, имея в наличии ядро и решатель, собрать аналог солида или компаса не составляет труда. Дьявол как всегда в деталях =)

Что касается изучения кода. Есть FreeCAD и SolveSpace — вполне себе годные программы, их код можно посмотреть. Злые языки говорят, что они для баловства, но реально промышленные САПР вырываются вперёд за счёт всяких плюшек, которых нет у свободных решений. А базовое моделирование оно у всех одинаковое. Ещё есть OpenSCAD — язык программирования для твердотелого моделирования. Не знаю, насолько изучение этого проекта будет полезно, ведь там, по сути, просто вызовы стандартных функций ядра. Но тоже можно глянуть. Если говорить про САПР как про предметную область (моделирование отношений, БД), то внезапно есть несколько старых годных книжек конца СССР. Например, "Теоретические основы САПР", 1987г. за авторством Корячко, Курейчик, Норенков. Насколько они актуальны, сказать не могу, но, как говорится, на безрыбье... =)

Наконец, для ознакомления с рынком, терминами и прочими понятиями нормальных пацанов, я рекомендую бегло почитать dwg.ru и isicad.ru.
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: no_ise  
Дата: 11.03.24 06:50
Оценка:
Здравствуйте, CleverBoy, Вы писали:

CB>Всем привет,

CB>Волею судеб...
CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.


Давно это было, помнится, в ObjectArx достаточно много всего, именно как все внутри... такая же архитектура у многочисленных клонов AutoCad

https://help.autodesk.com/view/OARX/2024/ENU/?guid=GUID-9B4F6629-8B7D-460B-802B-6D2C25966994
Re[5]: Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 11.03.24 11:00
Оценка:
ЗP>Возьмите за правило выполнять мелкий рефакторинг что бы вы ни меняли. Месяца через три начнете получать первые результаты

Вот казалось бы простой вопрос:
Представим себе окно SolidWorks с открытой 3Д моделькой трамвая.
И там нажимаем правой кнопкой мыши, должно появиться меню с командами.
Команды работы с 3Д примитивами, с объектами предметной области, общие команды ко всему объекту.

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

Рефакторить хочется в "глобально правильном" направлении.
Не хочется сразу же переделывать свои новоизобретенные "велосипеды"
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.03.24 15:41
Оценка:
Здравствуйте, CleverBoy, Вы писали:

CB>Вот казалось бы простой вопрос:

CB> Представим себе окно SolidWorks с открытой 3Д моделькой трамвая.
CB>И там нажимаем правой кнопкой мыши, должно появиться меню с командами.
CB>Команды работы с 3Д примитивами, с объектами предметной области, общие команды ко всему объекту.

Мне трудно представить SolidWorks, но я могу представить САПР которым занимался более 10 лет

CB>Кто, где, как формирует это меню?


Меню обычно прописывается в конфигурации, типа такого
{
Id
Title
Hotkey
items: [
{ Title, идентификатор-команды, hot-key, дефолтный статус },
{ Title идентификатор-команды hot-key, subMenu: id-of-submenu }
]
}

Все что вам надо — знать идентификатор.

По каждой команде вам надо знать
1. доступна ли , если да, то показываете
2. включена-отключена, если отключена — показываете в дизабленом виде
3. статус — например, переключение слоев — галочка будет нарисована рядом с текущим слоем

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

Каждое меню — возможность добавлять айтемы по месту, в зависимости от контекста

CB>Из глобального списка команд? или у каждого объекта свой маленький список? или как?


Все что в глобальном меню — это глобальный список
Контекстное меню — прописано в глобальном с указанием контенкста

CB>Вот такие мелкие вопросы/ответы и хотелось подглядеть у монстров.

CB>Таких вопросов у меня сотни.

Валяйте сюда

CB>Рефакторить хочется в "глобально правильном" направлении.

CB>Не хочется сразу же переделывать свои новоизобретенные "велосипеды"
о
Тулбары, кстати говоря, и многие кнопки на ui ничем от пунктов меню не отличаются — те же Title, идентификатор-команды, hot-key, статус

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

Я бы предложил классический MVC в качестве архитектуры, к нему проще всего привести древнее приложение.

Тут понадобится внятная модель приложения, через которую легко вычислять состояние любой команды

Как только сможете нарисовать такое, и реализовать, можно потиху начать развязывать компоненты через неё.

Главное правило — не пихать в модель приложения вообще всё состояние. Упоретесь задолго до окончания отладки и коллеги вас не поймут
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
От: Stanislav V. Zudin Россия  
Дата: 12.03.24 16:53
Оценка:
Здравствуйте, CleverBoy, Вы писали:

ЗP>>Возьмите за правило выполнять мелкий рефакторинг что бы вы ни меняли. Месяца через три начнете получать первые результаты


CB>Вот казалось бы простой вопрос:

CB> Представим себе окно SolidWorks с открытой 3Д моделькой трамвая.
CB>И там нажимаем правой кнопкой мыши, должно появиться меню с командами.
CB>Команды работы с 3Д примитивами, с объектами предметной области, общие команды ко всему объекту.

CB>Кто, где, как формирует это меню?

CB>Из глобального списка команд? или у каждого объекта свой маленький список? или как?

Присоединюсь к мнению камрада Pauelа про MVC.

Поверх модели может быть несколько контроллеров (будут ли они взаимодополнять или заменять друг друга — вопрос на подумать).
С каждым контроллером может работать несколько видов.

3Д моделька трамвая отображается в какой-то вьюхе. У вьюхи есть обработчик событий (конечный автомат, обрабатывающий действия с мышой и клавой, их может быть много, иногда их полезно собирать в стек).
Скажем, обработчик сгенерил событие "Popup menu request". По координатам курсора находим активный объект — это может быть выделенная деталь трамвая, сам трамвай или рабочее поле. У активного объекта можно запросить это самое Popup menu.
В зависимости от контекста это меню может доставаться по идентификатору из ресурсов, а может генериться в рантайме. (ООП: инкапсуляция, полиморфизм, бла-бла-бла )

Если ты переключишься из 3Д в 2Д или в режим редактирования/ввода данных/поиска/и т.п., то у тебя может активироваться другой обработчик событий или возможно другая вьюха. У который будет другая логика обработки событий.

CB>Вот такие мелкие вопросы/ответы и хотелось подглядеть у монстров.

CB>Таких вопросов у меня сотни.

В старых системах точно не стоит черпать вдохновение

Можно посмотреть на опенсорсные редакторы. Векторная графика, САПРы. Кикад и inkscape уже упомянули.
Но в их кишках я не копался, может оказаться, что там будет пример как делать не следует

CB>Рефакторить хочется в "глобально правильном" направлении.



Примерный роадмап наверняка известен, т.е. куда придётся расти ты знаешь.
Можно прикинуть, что потребуется от системы, в эту сторону и расти.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
От: σ  
Дата: 12.03.24 18:04
Оценка:
C>Кто-то говорит, что Open Cascad технологически сильнее закрытых решений.



Наверное можно найти такие закрытые решения, но вообще OpenCASCADE известен своей любовью превращаться в тыкву от любых малость нетривиальных вещей
  Скрытый текст
Вчера попытался добавить fillet и словил сегфолт.
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
От: cppguard  
Дата: 12.03.24 23:05
Оценка:
Здравствуйте, σ, Вы писали:

σ>Наверное можно найти такие закрытые решения, но вообще OpenCASCADE известен своей любовью превращаться в тыкву от любых малость нетривиальных вещей


Я просто процитировал чьё-то мнение =) По мне так, оба подхода имеют права на жизнь. Коммерческие САПРы нужно пиратить или покупать за овердофига, но при этом FreeCAD не умеет строить оси симметрии, без чего сложно представить промышленное проектирование. Но при этом FreeCAD достаточно лёгкий, поэтому если мне нужно что-то для дома сделать, я его запускаю. Про аналоги OpenFOAM я вообще не говорю — подобные коммерческие решения стоят как годовой бюджет моего города. Так что приходится как-то балансировать. Я даже в последнее время Компас полюбил, потому что он всё таки с ГОСТ-ом дружит гораздо лучше Солида, но это не отменяет того, что Компас пишут деды из девяностых, поэтому и интерфейс вырвиглазный и тяжёлое ядро.
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.03.24 16:12
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Я просто процитировал чьё-то мнение =) По мне так, оба подхода имеют права на жизнь. Коммерческие САПРы нужно пиратить или покупать за овердофига, но при этом FreeCAD не умеет строить оси симметрии, без чего сложно представить промышленное проектирование. Но при этом FreeCAD достаточно лёгкий, поэтому если мне нужно что-то для дома сделать, я его запускаю.

У меня с FreeCAD непонимание прямо с самого начала. Это не первая CAD-программа, которую я осваиваю, но первая, в которой у меня такое сильное желание разбить клавиатуру о монитор.

Примерно в чём угодно нарисовать 2d или 3d чертёж, скажем, дома, или стола, или ещё чего нибудь, проблемы не составляет. Но во FreeCAD — какая-то наркомания. Буквально всё — от структуры меню до моторики клавиатуры и мыщи — сделано максимально противоестественным способом
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Slipstream  
Дата: 14.03.24 02:08
Оценка:
Если совсем глобально, то обычно есть как минимум два "слоя", но иногда больше: модель и "представление".
В "простом" случае 3D рисовалки в модели будут лежать объекты геометрического ядра (наприрмер, C3D), а в представлении будут 3D-меши, пригодные для визуализации.

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

Там вам советовали конфиг-файлы с командами. Так обычно и делают, но мне всегда больше нравилось иметь фактически то же самое, только в коде.
Без возможности заменить без компиляции; зато с проверками, навигацией и пр.
Тем более, что и миллениалы недавно изобрели "configuration as code"

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

Вам советовали Фаулера и Мартина. Лично мне нравятся книжки, в которых рассказывается про General Responsibility ASsignment Principles.
Может быть понравятся и вам, тем более, что вопросы у вас именно токого рода, типа как чья ответственность предоставлять команды.
Re[5]: Как устроены современные САПР, 3Д редакторы внутри?
От: cppguard  
Дата: 14.03.24 08:07
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Примерно в чём угодно нарисовать 2d или 3d чертёж, скажем, дома, или стола, или ещё чего нибудь, проблемы не составляет. Но во FreeCAD — какая-то наркомания. Буквально всё — от структуры меню до моторики клавиатуры и мыщи — сделано максимально противоестественным способом


Не могу согласиться про мышь. Там ведь внизу есть варианты раскладок самые разные. Мне вот очень нравится "Touchpad", в которой зажимаешь Alt и крутишь без нажатия кнопки, а с Shift — перемещаешь. Для работы с ноута это самая лучшая комбинация. Насчёт меню — трудно сказать. Меня пугает меню компаса и солида, потому что выглядит как неубранный стол, хотя я согласен, что во фрикаде не хватает графических элементов в меню настройки инструментов моделирования.

В целом я пока решил так: FreeCAD для 3D печати, потому что быстрее и проще, а Солид и Компас для машинной обработки, потому что позволяют очень точно задать различные параметры. И объём работы, который требуется, чтобы довести FreeCAD до возможности сразу засылать деталь в ЧПУ (или хотя бы сгенерировать чертёж по ГОСТ) — колоссальный, поэтому не вижу, что в ближайшем будущем ситуация изменится.
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
От: Maniacal Россия  
Дата: 14.03.24 08:39
Оценка:
Здравствуйте, Qulac, Вы писали:

CB>>Не хочется изобретать "велосипед"...


Q>Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.

Я один раз решил подебажить софтайсом Quake1 (не помню зачем). Там просто перемалывалка скриптов. Одна и та же функция с соответствующим ветвлением используется в цикле для всего. Сейчас исходники, вроде, в открытом доступе, как делать нечего будет, может, гляну на код с другого конца.
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
От: Wawan Россия http://www.wawan.ru/resume
Дата: 14.03.24 09:26
Оценка: +2 :)
Здравствуйте, CleverBoy, Вы писали:
CB>Кто, где, как формирует это меню?
CB>Из глобального списка команд? или у каждого объекта свой маленький список? или как?
CB>Вот такие мелкие вопросы/ответы и хотелось подглядеть у монстров.

ох уж эти муки выбора
возьми монетку, орел — вариант А. решка — вариант Б
подбрасывай
если пока она летит в голове внезапно появилась мысль "только бы не орел" или "только бы не решка" — то выбор то уже на самом деле сделан и наконец-то услышан.
если в голове тишина значит делай как выпадет монета, варианты одинаковые
не благодари
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.03.24 14:23
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Не могу согласиться про мышь. Там ведь внизу есть варианты раскладок самые разные.

Все слова знакомые, но я ни слова не понял.
С мышью у меня основные претензии к тому, что она мешает клавиатуре. Ну вот я пытаюсь сделать самую простую в мире вещь — в режиме Draft нарисовать ломаную нужной мне формы. Естественно, размеры сегментов мне нужно вводить в миллиметрах с клавиатуры, ведь пытаться "накликать" их мышкой — безумие.
Но в диалоге, который про ввод координат, клавиатура работает очень странно — иногда Enter эквивалентен нажатию "Ok", иногда — нет. Иногда пробел — это Ok, иногда — "сделать предпоследний сегмент невидимым".
Поэтому нажимать Ok надо мышкой. Но каждое движение мышкой затирает только что введённые в окошки X и Y координаты
Большей упоротости я не встречал вообще нигде. Вот просто если бы передо мной поставили задачу "спроектировать CAD, которой невозможно пользоваться", то я бы не сдюжил сделать ещё хуже.

Ладно, может быть, авторы этого бреда рассчитывали на то, что я всё же буду вводить контуры мышкой, при помощи снэппинга?
Агащаспрям. Вот я начал сегмент с предыдущей точки, хочу опустить перпендикуляр на существующую прямую. Например, вертикальный сегмент подвожу к горизонтальной линии. Подводим мышку поближе к целевой линии... Ага, программа "понимает", что я неспроста сюда повёл курсором — она мне "помогает" при помощи частичного снэппинга. Вот только фризит она ровно противоположную координату — то есть замораживает X, хоть он и не попал на вертикаль, зато даёт "играть" Y-ком, при котором невозможно попасть точно в заданную прямую.

Ну, допустим, я не заметил этого подвоха, и кликнул — получился у меня сегмент, который идёт под углом 89.5 к прямой, и его конец лежит не на этой прямой, а на полпиксела в сторону.
Наверное, есть какой-то простой способ это исправить? Ну там, пододвинуть одну из точек ломаной?
Лично я — не нашёл. То ли я дебил, то ли структура контекстных меню упоротая.

С учётом того, что я успешно освоил DesignSpark и ArchiCAD, не говоря уже о SkethUp, я склоняюсь ко второму варианту.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
От: CleverBoy Россия  
Дата: 15.03.24 04:57
Оценка:
S>Вам советовали Фаулера и Мартина. Лично мне нравятся книжки, в которых рассказывается про General Responsibility ASsignment Principles.
S>Может быть понравятся и вам, тем более, что вопросы у вас именно токого рода, типа как чья ответственность предоставлять команды.

О, персональное большое спасибо!
Почитал выжимки, да, наверно это как раз для меня.
Но так тяжело, сразу в голове, применить это к чужому "макароно" коду в миллионы строк.
Буду больше читать про GRASP и пробовать.
Re[7]: Как устроены современные САПР, 3Д редакторы внутри?
От: Wawan Россия http://www.wawan.ru/resume
Дата: 15.03.24 11:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, cppguard, Вы писали:


C>>Не могу согласиться про мышь. Там ведь внизу есть варианты раскладок самые разные.

S>Все слова знакомые, но я ни слова не понял.
S>С мышью у меня основные претензии к тому, что она мешает клавиатуре. Ну вот я пытаюсь сделать самую простую в мире вещь — в режиме Draft нарисовать ломаную нужной мне формы. Естественно, размеры сегментов мне нужно вводить в миллиметрах с клавиатуры, ведь пытаться "накликать" их мышкой — безумие.
S>Но в диалоге, который про ввод координат, клавиатура работает очень странно — иногда Enter эквивалентен нажатию "Ok", иногда — нет. Иногда пробел — это Ok, иногда — "сделать предпоследний сегмент невидимым".
S>Поэтому нажимать Ok надо мышкой. Но каждое движение мышкой затирает только что введённые в окошки X и Y координаты
S>Большей упоротости я не встречал вообще нигде. Вот просто если бы передо мной поставили задачу "спроектировать CAD, которой невозможно пользоваться", то я бы не сдюжил сделать ещё хуже.

S>Ладно, может быть, авторы этого бреда рассчитывали на то, что я всё же буду вводить контуры мышкой, при помощи снэппинга?

S>Агащаспрям. Вот я начал сегмент с предыдущей точки, хочу опустить перпендикуляр на существующую прямую. Например, вертикальный сегмент подвожу к горизонтальной линии. Подводим мышку поближе к целевой линии... Ага, программа "понимает", что я неспроста сюда повёл курсором — она мне "помогает" при помощи частичного снэппинга. Вот только фризит она ровно противоположную координату — то есть замораживает X, хоть он и не попал на вертикаль, зато даёт "играть" Y-ком, при котором невозможно попасть точно в заданную прямую.

S>Ну, допустим, я не заметил этого подвоха, и кликнул — получился у меня сегмент, который идёт под углом 89.5 к прямой, и его конец лежит не на этой прямой, а на полпиксела в сторону.

S>Наверное, есть какой-то простой способ это исправить? Ну там, пододвинуть одну из точек ломаной?
S>Лично я — не нашёл. То ли я дебил, то ли структура контекстных меню упоротая.

у меня бы нервов не хватило такой квест проходить
я думаю все CAD системы такие, потому что интерфейс делают тоже программисты (мы же гении во всём), а это боль и страдания для пользователей, а у пользователей нет выбора, что фирма купила — там и рисуйте!
вот бы собирать статистику сколько раз пользователь матерится пытаясь что-то сделать, но вряд ли такое есть, разработчики не хотят расстраивать начальство, и начальство себя.
могу только посочувствовать
Re[8]: Как устроены современные САПР, 3Д редакторы внутри?
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.03.24 11:54
Оценка:
Здравствуйте, Wawan, Вы писали:

W>у меня бы нервов не хватило такой квест проходить

Ну, вот у меня и не хватает. Хорошо, что клавиатура прочная
W>я думаю все CAD системы такие, потому что интерфейс делают тоже программисты (мы же гении во всём), а это боль и страдания для пользователей, а у пользователей нет выбора, что фирма купила — там и рисуйте!
То-то и оно, что не все. Вот DesignSpark — очень понятная. Мне там тоже пришлось пару раз гуглить, как что-то сделать, но как только освоил парочку базовых вещей — дальше всё очень интуитивно. Нарисовал 2d, заэкструдил, а потом есть всего несколько базовых манипуляций типа push/pull, move, и т.д. которые консистентно применяются ко всему. И состряпать произвольный 2d или 3d объект не особо сложно — при помощи алгебры.
Скажем, нужно сделать отверстие под шуруп с головкой-невидимкой — нет проблем: нарисовал контур на нужной грани, "продавил" его при помощи push, а потом сделал push круглого ребра и получил фаску. Все места, которые можно сделать "мышкой", продублированы клавиатурой — если мне нужен точный размер, то я просто его ввожу и нажимаю Enter. Всё работает как надо.
То же самое — SketchUp, хоть и чуть менее управляемо — там надо наловчиться ловить мышкой нужные режимы выравнивания.

W>вот бы собирать статистику сколько раз пользователь матерится пытаясь что-то сделать, но вряд ли такое есть, разработчики не хотят расстраивать начальство, и начальство себя.

W>могу только посочувствовать
Спасибо.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Как устроены современные САПР, 3Д редакторы внутри?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.03.24 15:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Но в диалоге, который про ввод координат, клавиатура работает очень странно — иногда Enter эквивалентен нажатию "Ok", иногда — нет. Иногда пробел — это Ok, иногда — "сделать предпоследний сегмент невидимым".

S>Поэтому нажимать Ok надо мышкой. Но каждое движение мышкой затирает только что введённые в окошки X и Y координаты
S>Большей упоротости я не встречал вообще нигде. Вот просто если бы передо мной поставили задачу "спроектировать CAD, которой невозможно пользоваться", то я бы не сдюжил сделать ещё хуже.

UI у любого CAD чудовищно сложный, развесистый. Там столько мелкой моторики отлаживать, что практически всегда есть выбор, чем же можно не заниматься. Количество команд всех сортов ищет на тысячи.
Соответственно, когда появляются сложности с монетизацией, UI начинает пополняться фичами плохо спроектироваными, плохо реализованными и так же плохо протестированными.
Я помню, как у нас было — чудовищное количество автоматических UI тестов работало хрен знает сколько времени. На одного разработчика приходилось по нескольку тестировщиков.
Команда тестировщиков чуть не хором благодарила разработчка, когда он соптимизировал код и один из тестов из 6 часов стал проходить всего 30 минут.
Отредактировано 16.03.2024 15:42 Pauel . Предыдущая версия .
Re[7]: Как устроены современные САПР, 3Д редакторы внутри?
От: cppguard  
Дата: 18.03.24 00:03
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, допустим, я не заметил этого подвоха, и кликнул — получился у меня сегмент, который идёт под углом 89.5 к прямой, и его конец лежит не на этой прямой, а на полпиксела в сторону.

S>Наверное, есть какой-то простой способ это исправить? Ну там, пододвинуть одну из точек ломаной?
S>Лично я — не нашёл. То ли я дебил, то ли структура контекстных меню упоротая.
Про Draft ничего не скажу, я пользуюсь только Sketcher. Я думал, что претензия к управлению камерой. Про упоротость элементов UI я согласен. Меня максимально раздражает то, что иногда Esc в Sketcher деактивирует текущий инструмент, а иногда — закрывает скетч. Можно отменить закрытие скетча по Esc в настройках, но тогда начинает раздражать то, что нельзя быстро отредактировать эскиз и закрыть =)

S>С учётом того, что я успешно освоил DesignSpark и ArchiCAD, не говоря уже о SkethUp, я склоняюсь ко второму варианту.

У меня прямо противоположный опыт. Что Солид, что Компас тупят и не всегда делают то, что я хочу, потому что или выделение не там, или фокус не на том поле. Для меня это и вышеописанное поведение FreeCAD находятся примерно на одном уровне. Но я привык в целом, потому что задачи чертить на скорость нет, а в неспешном режиме работы не так напрягает.

Кстати, поведение FreeCAD при TNP мне нравится больше чем 100500 ошибок, которые генерирует Солид. Я сперва не мог понять, что за Topological Naming Problem, о которой все говорят, а потом как понял: все боятся поехавшей геометрии. Для меня же вполне ожидаемо, что при изменении топологии базового объекта, все зависимые модификации поломаются. И я спокойно спускаюсь вниз по дереву и обновляю привязки. Но Солид при этом выдаст несколько страшных окон и звуковую ошибку, словно я поделил на ноль.
Re: Как устроены современные САПР, 3Д редакторы внутри?
От: Sharov Россия  
Дата: 18.03.24 13:08
Оценка:
Здравствуйте, CleverBoy, Вы писали:

CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.

CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.

https://aosabook.org/en/500L/a-3d-modeller.html -- что-то простенькое рассмотрено, не знаю какая будет от этого польза.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.