KREMEN Реклама
KREMEN Реклама

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

envalid
Идет загрузка
Загрузка
25.05.2026
140
2
3D-моделирование

Подпишитесь на автора

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

3

Приветствую сообщество! Я продолжаю развивать свой online-3D САПР.

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

Редактор технически и функционально перешел на совершенно новый уровень. Появилась параметрическая история, серьезно доработаны инструменты создания и генерации объектов, а главное - в чертеж внедрен полноценный вариационный геометрический решатель и система ограничений! Теперь чертежи умеют перестраиваться под изменяемые параметры.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

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

Кстати, немного сократилось название, теперь оно звучит и произносится лучше чем КонтрБагCAD.  

Ну, начнём по порядку

Для начала я решил сделать надежное выдавливание. Стандартное выдавливание в Three.js не гарантирует манифолдный (водонепроницаемый) результат, соответственно, объединение и вычитание с ним работало не всегда.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

С появлением выдавливания граней эта проблема стала ещё сильнее напрягать. Вращение вообще по сути было бесполезно, т.к. при угле менее 360 торцы нормально не закрывались. Поэтому я всё-таки решился переписать  выдавливание и вращение через библиотеку manifold3d. И, собственно, не понимаю, почему я сразу так не сделал :)

Мало того, что выдавливание теперь гарантировано правильное, так ещё и дополнительные функции появились. Теперь вытягивание поддерживает поворот и расширение верха относительно низа.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

А во вращении закрытие торцов происходит автоматически (и, естественно, тоже гарантированно манифодно), и мне не надо изобретать велосипед с крышками.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Мультиинструмент теперь поддерживает и скругление!

Скругления, так же как и фаска, поддерживают разные расстояния.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

И даже отрицательные расстояния (добавление на острых углах).

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

В целом, сам алгоритм был доработан, стал намного стабильнее и дает меньше артефактов (но ещё есть, над чем поработать).

Генераторы

После прошлой статьи вы вполне уместно жаловались на генератор шестернёй. Он был существенно доработан. Теперь прецизионные шестерни генерируются согласно ГОСТ. 

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Появилась поддержка косозубых шестернёй. А главное, предпросмотр! Можно менять параметры и видеть результат в реальном времени. Очень наглядно!

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

При помощи дополнительного выдавливания можно создать шевронный тип шестерни (и для этого даже не нужно делать чертеж).

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Также существенно доработан и генератор резьбы! Во-первых, он теперь работает :) Тоже появился полноценный предпросмотр. Добавлены четыре профиля с параметрами по ГОСТу и произвольный профиль. Настройка зазора (по умолчанию подобрана под 3d-печать) и остальные параметры.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

А также появилась функция нарезания резьбы в отверстиях.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Серьёзно прокачался 3D-текст.

Теперь поддерживается проекция букв на 3D-объекты (с поворотом букв и без), а также добавлена фиксация перед добавлением.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Полноценная история

Я решил, наконец, включить вставку операций в историю. Теперь при изменении в прошлом, объект изменяется в будущем!

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

Главная фишка, конечно, в формате хранения проекта. Хранятся не сделанные объекты, а полный список действий (как в большинстве САПР). При открытии сохранения или перемещении по истории объекты просто заново пересобираются. Для этого и было переписано ядро в версии 0.9.0 (писал в прошлой статье). Сохранения хранятся в обычном json-формате. И, если нужно, их без проблем можно редактировать в любом блокноте.

Но главные обновления произошли в чертеже!

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

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

Поэтому я решил полностью переписать чертеж и написать для него полноценный решатель геометрических ограничений.

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

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Следом (в этом же обновлении) я занялся системой ограничений и решателем.

Сначала попробовал самый тупой вариант решателя с итеративным уменьшением ошибок. Но просто последовательно двигать фигуры в нужную сторону не самый точный и не самый эффективный вариант.

Поэтому я решил попробовать реализовать полноценный вариационный решатель по методу Ньютона-Рафсона. И он получился дико тормозной, настолько, что я почти решил вернуться к первому варианту, однако случайно заметил, что я просто затупил, и при каждой итерации перерисовывал всю геометрию. Пофиксил баг, скорость стала адекватной. Далее и продолжил допиливать этот решатель.

В итоговом варианте:

  • Были добавлены аналитические градиенты практически для всех ограничений (ускорение и повышение стабильности). Сейчас примерно 80% производных считаются аналитически, а остальные численно.
  • Добавлено масштабирование переменных (зашита от одновременно больших и маленьких значений. Например линии 1000мм и окружность 5мм).
  • Настроены веса, теперь расстояния не уплывают (или уплывают меньше, если много лишних ограничений).
  • Добавлена обработка численной нестабильности.
  • Добавлено разреженное хранение и итеративный метод CGNR для больших систем (более 1000 ограничений). Не уверен, что кто-то будет делать такие объемные чертежи на моем редакторе, поэтому до ума этот метод решения пока не доводил (у него немного точность похуже). 

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

Вот текущий список ограничений:

  1. Горизонтальность.
  2. Вертикальность.
  3. Паралельность.
  4. Перпендикулярность.
  5. Угол.
  6. Совпадение точек.
  7. Размер элемента.
  8. Расстояние между двумя точками.
  9. Расстояние между линией и точкой.
  10. Расстояние между линиями.
  11. Совпадение размеров.
  12. Точка на окружности.
  13. Точка на линии.
  14. Точка на середине линии.
  15. Касательная к окружности.
  16. Касание двух окружностей.

Основные ограничения ставятся автоматически (горизонтальность, вертикальность, перпендикулярность и совпадения). Это сделано специально, чтобы, если вы ребёнок или не шарите, "зачем эти ваши ограничения", они работали, а чертеж не разваливался и мог перестраиваться.

Размерные ограничения (аналогично Fusion 360) ставятся, только если вы ввели значение во всплывающее поле.

Теперь можно просто изменить нужный размер, и чертеж сам перестроится. Вот, к примеру, тот же чертеж, что и выше, но с парой измененных размеров.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Инструмент "размеры" (как ни странно) теперь позволяет ставить размеры:

  • Для примитивов (достаточно просто кликнуть по ним).
  • Между двумя точками.
  • Между точкой и линией.
  • Между двумя линиями.

Также в этом инструменте можно менять вынос размерной линии или поворот для диаметров и радиусов.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!Двойным кликом любой размер можно отредактировать.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!Угловой размер между двумя линиями можно поставить, выделив и нажав кнопку в меню (его тоже можно редактировать двойным кликом). Все остальные ограничения (если нужны) ставятся аналогично (но в ui ещё не все ограничения добавлены).Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Также добавлен анализ избыточных и противоречивых ограничений (через анализ сходимости и анализ ранга). Вот попытка добавить параллельность к двум перпендикулярным линиям:

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Помимо этого (на самом деле ещё до переработки чертежа) был допилен алгоритм обнаружения регионов (эта та система, которая позволяет выдавить отдельные фигуры, образованные пересечением нескольких фигур).

Первый вариант алгоритма использовал clipper.js для определения пересечений замкнутых цепочек контуров. В текущей реализации я отказался от этого. Теперь алгоритм очень простой и надёжный.

  1. Все фигуры разбиваются на линии.
  2. Находятся все пересечения и касания.
  3. Строится граф и находятся все циклы.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

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

Из новых инструментов чертежа:

Появилось отражение

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Линейный (хотя скорее квадратный) и круговой массивы

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Несколько новых фигур и сглаженная криваяПродолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Ассоциативность выдавливания и вращения с чертежом

Помимо продвинутого чертежа, не хватало зависимости выдавленных тел от чертежа. Ранее, из-за проблем с определением регионов, в выдавливании я использовал просто переданные контуры. Теперь же я сделал полноценную зависимость! Выдавливаемая фигура определяется напрямую из чертежа по контурам выделения + по центру масс. А это значит, что можно откатиться по истории до выдавливания, изменить чертеж, и результат выдавливания тоже поменяется (с операцией "вращение" аналогично).

Важно! Возможности такой ассоциативности не безграничны, если чертеж сильно изменится, то может и не сработать.

Обновления UI

В ui много мелких и не очень изменений. Название и описание проекта теперь тоже можно отредактировать. Появились новые (собственные) формы подтверждения.

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Названия объектов теперь можно редактировать. 

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

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

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Вкладку по умолчанию можно закрепить. Если не хочется видеть библиотеку, можно просто закрепить список объектов

Продолжение разработки КонтрCAD. Теперь это полноценный САПР прямо в браузере!

Появилось выделение рамкой в 3D-режиме и чертеже. Кстати, в чертеже рамкой выделяются только сами объекты (без ограничений). А также множество других мелких изменений, которые я опустил.

Напомню, на данный момент это все работает online, без регистрации и совершенно бесплатно: https://www.контрбагтех.рф/контркад

Новости об обновлениях в основном выходят в Telegram и ВК. Поддержать разработку можно на boosty и ВК.

Буду благодарен за рекламу, обратную связь, сообщения об ошибках и предложения по развитию :)

Подпишитесь на автора

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

3
Комментарии к статье
Lider 3D Реклама
Lider 3D Реклама