Как устроены современные САПР, 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
Оценка: +2
Здравствуйте, 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

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