Всем привет,
Волею судеб закинуло меня на Российский проект.
САПР не САПР, 3Д дизайнер или нет. В общем сугубо внутренний/нишевый продукт, 3Д + геология + разные базы.
И возник вопрос, а в каком направлении нужно двигаться чтобы разгрести эти миллионы строк кода и более менее сделать нормальную структуру проекта.
Сейчас там ух и ах... правим в одном месте, вылазит совершенно неожиданно в другом.
Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д.
Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.
Не хочется изобретать "велосипед"...
Re: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, CleverBoy, Вы писали:
CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д. CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.
Такого места нет, но жизненный опыт мне подсказывает, что там примерно такое же гавно унутре
Здравствуйте, CleverBoy, Вы писали:
CB>Всем привет, CB>Волею судеб закинуло меня на Российский проект. CB>САПР не САПР, 3Д дизайнер или нет. В общем сугубо внутренний/нишевый продукт, 3Д + геология + разные базы. CB>И возник вопрос, а в каком направлении нужно двигаться чтобы разгрести эти миллионы строк кода и более менее сделать нормальную структуру проекта. CB>Сейчас там ух и ах... правим в одном месте, вылазит совершенно неожиданно в другом.
CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д. CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.
CB>Не хочется изобретать "велосипед"...
Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.
Программа – это мысли спрессованные в код
Re: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, CleverBoy, Вы писали:
CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д. CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.
Мимо проходил...
Можно заглянуть в опен-соурс решения. Они меньше, поэтому в них легче разобраться.
И самое главное, по ним может быть доступна какая-нибудь архитектурная документация.
Best regards, Буравчик
Re: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, CleverBoy, Вы писали:
CB>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д. CB>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.
Здравствуйте, Nuzhny, Вы писали:
CB>>Вот и хочется посмотреть, а как это делают монстры. Solid, Autocad и т.д. CB>>Есть такое место? Где рассказано, допустим, о структуре SolidWorks. Внутренних блоках, классах, их взаимодействиях.
N>Stanislav V. Zudin
"Чуть что — сразу Косой!"(с)
Камрады выше уже верно отметили, что описания архитектуры в свободном доступе не будет.
Во-первых, это обычно NDA, а во-вторых, все эти динозавры создавались десятилетиями и там такого наворочено, что туши свет.
По моему опыту, в "монстрах" более-менее так же.
Начинаются такие системы обычно инженерами, понимающими в предметной области, но далёкими от непосредственно программирования, архитектуры и т.п.
Поэтому технический долг накапливается стремительно. Что, судя по всему, ТС и наблюдает.
Могу посоветовать только читать классиков (Фаулер, Р.Мартин и т.п.) и пытаться применить на конкретном проекте.
Предвижу, что один из возможных вариантов, который выберет ТС — новый функционал отделить от старого фасадом и пытаться поддерживать порядок в отдельно взятом уголке проекта. Кмк, через это проходят все Поэтому в старом проекте таких углов будет не один, что еще более усугубляет положение
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, Qulac, Вы писали:
Q>Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.
Нет. Можно даже сказать- противоположно. Цели разные. В игрушках — визуал и уменьшение полигонов. В CADах главное — точность вычислений, так как обычно работа CAD-ов выливается во что-то физическое
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, Нomunculus, Вы писали:
Н>Здравствуйте, Qulac, Вы писали:
Q>>Мне кажется, что такие штуки внутри должны быть похожи на 3d — игрушки.
Н>Нет. Можно даже сказать- противоположно. Цели разные. В игрушках — визуал и уменьшение полигонов. В CADах главное — точность вычислений, так как обычно работа CAD-ов выливается во что-то физическое
И там и там есть модель, относительно которой все и строится.
Программа – это мысли спрессованные в код
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, Qulac, Вы писали:
Q>И там и там есть модель, относительно которой все и строится.
Во-первых, в игрушках все строится не относительно модели, а относительно уровня. Модели — лишь его наполнение и визуал.
Во-вторых, даже модели представлены по-разному. В играх — это просто триангулированные меши. CADы не работают в терминах треугольников
Re[5]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, Нomunculus, Вы писали:
Н>Здравствуйте, Qulac, Вы писали:
Q>>И там и там есть модель, относительно которой все и строится.
Н>Во-первых, в игрушках все строится не относительно модели, а относительно уровня. Модели — лишь его наполнение и визуал. Н>Во-вторых, даже модели представлены по-разному. В играх — это просто триангулированные меши. CADы не работают в терминах треугольников
В игрушках реально есть модели все эти боевые юниты с их пузомерками, космические корабли с их физикой. Отображение модели это уже отдельная задача.
Программа – это мысли спрессованные в код
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
SVZ>Могу посоветовать только читать классиков (Фаулер, Р.Мартин и т.п.) и пытаться применить на конкретном проекте. SVZ>Предвижу, что один из возможных вариантов, который выберет ТС — новый функционал отделить от старого фасадом и пытаться поддерживать порядок в отдельно взятом уголке проекта. Кмк, через это проходят все Поэтому в старом проекте таких углов будет не один, что еще более усугубляет положение
Именно это я сейчас и наблюдаю
Умный народ отделяется от "монстро кода" интерфейсами, ненужными dll-ками, обычные программеры просто кодируют "залипушками".
Но моя мысль то была такая: двигаться по чуть чуть, но в правильном направлении. Осталось только понять, где он этот правильный путь.
Как люди делают undo/redo в больших системах
Как отрабатываюти right click меню на обьекте из 1млн. кусочков и 600 доступных команд.
и т.д.
Задач на закрытие технического долга не бывает в принципе, все в целях клиента.
Но даже в рамках задач клиента можно намного порезвиться и передвинуть хоть чуть чуть в правильном направлении.
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, Qulac, Вы писали:
Q>В игрушках реально есть модели все эти боевые юниты с их пузомерками, космические корабли с их физикой. Отображение модели это уже отдельная задача.
Тем не менее, модели, уверен, строятся по другому. Взять OpenSCAD, там ты сам прогаешь, но, уверен, что в других CAD примерно так же, просто нет наружу торчащего языка. Так вот, в OpenSCAD ты рисуешь круг или многоугольник на плоскости, вытягиваешь его в третье измерение, можно в точку, получаешь цилиндр/многогранник, или конус/пирамиду. Потом делаешь другие детали, меняешь их положение, вычитаешь или объединяешь их, и так далее
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Qulac, Вы писали:
Q>>В игрушках реально есть модели все эти боевые юниты с их пузомерками, космические корабли с их физикой. Отображение модели это уже отдельная задача.
M>Тем не менее, модели, уверен, строятся по другому. Взять OpenSCAD, там ты сам прогаешь, но, уверен, что в других CAD примерно так же, просто нет наружу торчащего языка. Так вот, в OpenSCAD ты рисуешь круг или многоугольник на плоскости, вытягиваешь его в третье измерение, можно в точку, получаешь цилиндр/многогранник, или конус/пирамиду. Потом делаешь другие детали, меняешь их положение, вычитаешь или объединяешь их, и так далее
Да, все дело в модели.
Программа – это мысли спрессованные в код
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, 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Д редакторы внутри?
SVZ>Ну я бы вводил хотя бы 10% задач на исправление технического долга. Иначе проект увязнет бесповоротно и новую функциональность будет очень непросто добавить.
Я бы то же...
Но я на должности обычного программиста, "пришлого", в устоявшуюся команду старичков.
Достучаться до мозгов архитектора, тех.директора, директора пока не удалось
Умныме слова "тех.долг, архитектура" они знают, но текущий результат в коде показывает что все грустно...
Re[6]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, CleverBoy, Вы писали:
CB>Достучаться до мозгов архитектора, тех.директора, директора пока не удалось CB>Умныме слова "тех.долг, архитектура" они знают, но текущий результат в коде показывает что все грустно...
Естественно, исправление технического долга не добавляет функциональности.
Тут надо оперировать не техническим долгом, как таковым, а фактами, подтверждающими невозможность исправления каких-то ошибок, невозможность добавить новый функционал из-за ограничений архитектуры и т.п.
Грубо говоря,
"чтобы добавить свистоперделку "Х" нам надо потратить столько-то месяцев на программирование, а потом столько-то месяцев на тестирование и ловлю всех нечетных ошибок. Если же мы перепишем такой-то кусок вот так-то, то потратим столько-то месяцев. Зато потом мы сможем реализовать "Х" за столько-то дней и ещё добавить "Ё","К", "Л","М" и "Н" на сдачу".
Если и так не получается убедить, то тогда либо уходить, либо делать строго по инструкции — медленно и грустно исправляешь чётные баги и вносишь нечётные
Есть, правда, и другой метод — взять, да и переписать. Но это если понимаешь что и как
Однажды по молодости я переписал за (не помню срок, что-то около месяца) кусок проекта, переделку которого оценивали в год. Начальство малость офигело. В итоге я получил нагоняй и повышениие зарплаты
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Как устроены современные САПР, 3Д редакторы внутри?
Здравствуйте, CleverBoy, Вы писали:
CB>Не хочется изобретать "велосипед"...
Велосипед уже изобрели за вас. На таком проекте какая то архитектура уже есть.
Нужно разобраться с ключевыми вещами. Только потом получится что либо исправить.
Хотите влиять на проект — нужно добиться признания в команде.
Re[4]: Как устроены современные САПР, 3Д редакторы внутри?