Серия «КонтрCAD»

56

КонтрCAD получил новые продвинутые инструменты! Sweep, Loft, 3D массивы и многое другое...⁠⁠

Серия КонтрCAD

Всех приветствую! В прошлый раз я писал про начало работы над моим САПР для моделирования под 3D-печать с простым интерфейсом и работой прямо в браузере. А теперь немного про последние новости и обновления.

В основном мое внимание сейчас сконцентрировано на устранении багов и повышении UX. Но, разумеется, не обошлось без добавления новых, я бы сказал долгожданных, инструментов. А именно Sweep и Loft!

Ну, начнем обзор по порядку, от самого важного:

Построение по сечениям, или Loft

Loft по 4 сечениям

Loft по 4 сечениям

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

Инструмент поддерживает сечения любой формы, соединения граней 3D-объектов, объектов и чертежей или просто чертежей. Даже сечения с отверстиями, но количество отверстий должно совпадать.

Выдавливание по траектории, или Sweep

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

Но не всё так просто. Пришлось решить много проблем. Для получения правильной траектории нужно было постараться. Также пришлось устранить проблемы с самопересечением на резких изгибах и сделать правильное соединение на замкнутых путях.

Вот и лента Мёбиуса в пару действий

Вот и лента Мёбиуса в пару действий

В итоге вышел очень интересный инструмент с кучей дополнительных функций. Например, есть скручивание и масштабирование.

Чертеж

В чертеже появилось полноценное проектирование геометрии (при доработке STL очень удобно). Два типа выделения рамкой: по пересечению или по перекрытию (справа-налево и слева-направо соответственно). Доработана вспомогательная геометрия, появились ножницы, скругления и многое другое.

Проекция геометрии. Работает с любыми Stl и другими сеточными форматами.

Проекция геометрии. Работает с любыми Stl и другими сеточными форматами.

Фаска/скругление

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

Но врать не буду, некоторые артефакты ещё встречаются.

Массивы

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

А также массив по траектории!

Звено сделано выдавливанием по траектории, а далее 40 звеньев вдоль пути с поворотом 80 градусов

Звено сделано выдавливанием по траектории, а далее 40 звеньев вдоль пути с поворотом 80 градусов

Интерфейс

Для большинства функций добавлена более наглядная подсказка.

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

Режим обучения

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

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

Режим "Практика" ещё более интересен. В этом режиме вам предлагается самостоятельно выполнить все операции проекта, при этом каждое следующее действие будет отображаться в виде фантома. Генерация описания тут немного меняется. Но отредактированное описание для обоих режимов общее.

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

Редактирование операций

Давно просили это добавить. В истории появилась дополнительная кнопка, позволяющая открыть редактор параметров операций.

Пока ещё не все операции поддерживают редактирование, но постепенно этот список расширяется.

Многое было сделано по запросам сообщества

Прилипание объектов библиотеки. Теперь, если переносить объекты из библиотеки, они кладутся не только на стол, но и на другие объекты (как в Tinkercad). На стол тоже можно положить, зажав shift.

Фиксирование осей. В режиме свободного перемещения теперь можно зажать shift, и ось, по которой происходило перемещение, зафиксируется.

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

Устранено множество багов, сделано много технических доработок

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

У многих пользователей возникла проблема со свежей версией three.js, точнее с отсутствием поддержки web-GL 2.0. Поэтому для них была выпущена специальная версия редактора (ссылка есть на странице Не работает КонтрCAD?)

Итог

Редактор стал заметно быстрее, а также получил новые продвинутые инструменты, которые все ждали. Главное - стало меньше багов и мелких неудобств, которые мешали в ежедневной работе. А функционал редактора по-прежнему бесплатен и без ограничений.

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

Искренне благодарю сообщество за помощь и поддержку!

Без вас проект не развивался бы так быстро и не стал таким крутым!

Редактор все также доступен online, без регистрации и совершенно бесплатно: https://www.kontrcad.ru/

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

Показать полностью 18
458

Как мне пришло в голову сделать российский аналог Fusion 360 и Tinkercad и что у меня получилось за полгода⁠⁠1

Серия КонтрCAD

Приветствую сообщество! Почему-то в последние пару лет я упорно не замечал, что Autodesk ушел из России (шутка), но постоянно обновлял свой любимый Fusion 360 через боль и страдания. Параллельно со мной страдали некоторые мои товарищи, практически все мои обучающиеся, да и думаю много кто ещё. Дополнительной проблемой стал перевод пары учебных аудитории на Ubuntu, а Fusion 360 существует исключительно для Windows, и костыли через wine работают криво. Единственная бюджетная (бесплатная) альтернатива, это FreeCAD, но интерфейс у него не самый дружелюбный, особенно для школьников.

Идея появилась совершенно случайно, за разговором с коллегами. А почему бы не написать простенький 3D-редактор для моделирования под 3D-печать. С простым интерфейсом и работой прямо в браузере. Целился я в нечто среднее между Tinkercad и Fusion360. Так появился КонтрCAD.

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

Вводные были следующие:

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

  2. Библиотека примитивов, чтобы младшим было полегче осваиваться.

  3. Чертеж (желательно похожий на fusion) и базовые САПР-инструменты (выдавливание, вращение, выдавливание по траектории).

  4. И все это максимально доступное, желательно вообще без установки.

  5. А главное - работа на клиенте, дабы ограничить нагрузку на сеть и сервер (изначально у проекта сервера вообще не было).

Естественным выбором в этом случае стало js-приложение.

Проект прошел несколько ключевых этапов

1. Простой редактор с кучей багов.
2. Переписывание всей логики на параметрическую, написано параметрическое ядро. Хранение проектов сделано в виде списка операций с параметрами (с возможностью удалить, редактировать, или добавить операцию).
3. Опять переписывание всего редактора полностью с целью перехода на ES6 модульную архитектуру.
4. Переписывание чертежа полностью для перехода на сущности (линия, окружность, дуга и т.д.), внедрения параметризации, системы ограничений и вариационного решателя.
5. Реализация серверной части (API и сайта). Предыдущие пункты были в том числе подготовительные, поэтому редактор был практически готов к этому.


Стек технологий

На js не очень много библиотек для работы с графикой, наиболее популярная на данный момент three.js. Эта библиотека используется для всей визуализации, а также импорта и экспорта.
Сначала я пробовал работать с геометрией тоже через three.js, но у нее не самые надёжные алгоритмы, и реализация геометрических методов достаточно простая.
Поэтому я перешёл на manifold-3d. Эта супер-библиотека гарантирует манифолдный (водонепроницаемый) результат, имеет продвинутые геометрические функции и очень быстро работает. Это wasm сборка очень популярной библиотеки manifold, написанной на c++, благодаря этому она и намного быстрее. Она отвечает за бинарные операции, а также Extrude и Revolve. Многие другие алгоритмы пришлось реализовывать своими силами.

Ну про разработку я много где писал, про техническую часть выходят статьи на Хабре (сейчас немного его забросил, но новые статьи обязательно будут, и не одна).

Теперь давайте проведу обзор того что получилось

Окно редактора на первый взгляд напоминает Tinkercad, но пусть вас это не вводит в заблуждение.

Сверху панель инструментов с расставленными по группам кнопками:
1. Файловые операции.
2. Назад/вперёд (операции истории).
3. Операции создания.
4. Операций модификации.
5. Инспектирование.

Справа расположено меню с 4 вкладками:
1. Библиотека.
2. Свойства.
3. Список объектов на сцене.
4. История.

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

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

Управление

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

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

Но перемещать объекты можно и указателем, правда не все. Для перемещения доступны все 3D-объекты, кроме плоскостей (чертёж и рабочая плоскость). Это сделано для защиты от случайных перемещений.

Но если нужно, плоскости тоже можно переместить, достаточно включить инструмент "Перемещение".

Бинарные операции

Логику TinkerCAD с объектами-отверстиями я намеренно не стал делать. Во-первых, она мне просто не нравится, а во-вторых, я не люблю бездумно что-то копировать. На мой взгляд она в принципе нарушает логику построения модели через операции. Ни в одном взрослом САПР вы такого не найдете, и ребенку при переходе на них приходится менять логику мышления. А не лучше ли сразу учить правильно?
Поэтому бинарные операции как во взрослых САПР разделены.

Для каждой операции есть предпросмотр. Управление максимально простое - на клавиши мыши.

Для каждой операции есть предпросмотр. Управление максимально простое - на клавиши мыши.

А если надо как-то изменить операцию, с этим отлично справляется параметрическая история.

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

LLM с таким форматом тоже хорошо дружат, поэтому в будущем с высокой долей вероятности появится и генерирование деталей.

Дабы перемещение по истории не тормозило, в версии 0.9.63 я наконец добавил кэшировние операций.

Список проектов и файловые операции

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

Хранилище может хранить проекты локально на компьютере (в IndexsedDB) и в облаке.
Локально даже у неавторизованных пользователей есть возможность хранить до десяти проектов.
Для хранения в облаке требуется аккаунт и достаточный уровень доступа (к сожалению, на данный момент дать всем место для хранения я не могу себе позволить. Пока облако доступно лишь спонсорам).

Для импорта доступны stl и obj. Экспорт 3D-моделей доступен в кучу форматов.

Чертежи тоже можно импортировать и экспортировать. Доступны форматы svg и dxf.

Чертежи тоже можно импортировать и экспортировать. Доступны форматы svg и dxf.

Чертеж

Если бы не было чертежа, я бы не называл этот редактор САПРом :)

Вот как выглядит чертеж сейчас (версия 0.9.65)

Вот как выглядит чертеж сейчас (версия 0.9.65)

Чертеж появился в самой первой версии. Изначально чертеж был простой чертилкой, даже размеров не было. Главная проблема была в сущностях (точнее в их отсутствии ). Фигуры рисовались сразу готовые, а не из набора примитивов.

И вот как было ранее (версия 0.8.0)

И вот как было ранее (версия 0.8.0)

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

После этого чертеж стал параметрическим, при изменении какого-либо параметра (размера, угла и т.д.) пересчитывается и все остальное, как и в большинстве САПР. Большинство ограничений устанавливаются автоматически. Размерные ограничения ставятся аналогично Fusion 360 (при вводе значения во всплывающее поле).

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

В итоге получился вполне стандартный для САПР режим чертежа, даже наверное интуитивно понятнее и удобнее, чем у других.

Появилось большинство стандартных инструментов:

  • Множество фигур;

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

  • Отступ;

  • Ножницы;

  • Скругление;

  • И множество геометрических ограничений.

Если нужно, можно чертить и с 3D-видом. И даже с перспективной камерой.

Классические операции

Чертеж, какой бы он крутой не был, не имеет смысла без дальнейших операций. В КонтрCAD есть классические: выдавливание (Extrude), вращение (Revolve) и недавно появилось выдавливание по траектории (Sweep). Скоро появится Loft.

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

Можно выбрать любые области на чертеже.

Можно выбрать любые области на чертеже.

Выдавливание позволят выдавить выделенные области чертежа в выбранном направлении (наружу, внутрь или в обе стороны). Можно применить сразу операцию объединения и вычитания. Также можно выдавливать грани объектов, тогда сразу включается операция "Объединение".

Помимо этого, выдавливание поддерживает скручивание и задание конусности.

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

Это очень мощный инструмент, который способен заменить вращение и обычное выдавливание. 

Это очень мощный инструмент, который способен заменить вращение и обычное выдавливание. 

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

Облачная часть

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

Но потом выкупил домен kontrcad.ru, и решил его уже переделать в полноценный сайт проекта.

Естественно, помимо описанного есть множество других инструментов. Есть 3D и 2D текст с загрузкой собственных шрифтов, загрузка изображений, генераторы шестерней и резьбы (генератор резьбы, на мой взгляд, вообще один из самых продвинутых, он её еще и нарезать умеет), 3D-текстурирование (про него была прошлая статья). Все в один пост не вместить.

Попробовать можно online, без регистрации и совершенно бесплатно: https://www.kontrcad.ru/

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

Поддержать разработку можно на boosty и ВК. Спонсоры проекта сейчас первыми получают ключ доступа к облачным функциям.

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

Показать полностью 21 1
298

В КонтрCAD добавлен инструмент 3D-текстурирования поверхности моделей!⁠⁠

Серия КонтрCAD

Доброго времени суток друзья. Вот уже пол года я веду разработку КонтрCAD - это браузерный 3D‑САПР (система автоматизированного проектирования) для моделирования, в первую очередь под 3D‑печать. Я его разработал как доступную альтернативу TinkerCAD и Fusion360 (целился я в нечто среднее). За это время добавлена куча крутых возможностей, и скоро об этом будет отдельный пост, а пока я решил рассказать об одном из последних обновлений:

После появления BumpMesh, минимум человек пять мне написали с просьбой добавить аналогичный инструмент в КонтрCAD. Я долго откладывал реализацию этого инструмента, так как были более приоритетные задачи. Но вот очередь дошла и до него!

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

Можно работать и с STL!

Можно работать и с STL!

Лукавить не буду, принципы я подсмотрел у BumpMesh, но реализацию я написал собственную. Она немного проще, но почти такая же функциональная.

А учитывая, что этот инструмент интегрирован в САПР, возможности появляются впечатляющие.

Можно покрутить вживую: <a href="https://pikabu.ru/story/v_kontrcad_dobavlen_instrument_3dteksturirovaniya_poverkhnosti_modeley_14176234?u=https%3A%2F%2Fwww.kontrcad.ru%2Fpublic%2Fproject%2Fproj_1784631797487_fc985847-960a-4eae-a29c-c5ebaf46e47c&t=https%3A%2F%2Fwww.kontrcad.ru%2Fpublic%2Fproject%2Fproj_1784631797487_fc985847-960a-4eae-a29c-c5ebaf46e47c&h=855280170f27539c8a13b80cc5d312bd54d4e71e" title="https://www.kontrcad.ru/public/project/proj_1784631797487_fc985847-960a-4eae-a29c-c5ebaf46e47c" target="_blank" rel="nofollow noopener">https://www.kontrcad.ru/public/project/proj_1784631797487_fc985847-960a-4eae-a29c-c5ebaf46e47c</a>

Можно покрутить вживую: https://www.kontrcad.ru/public/project/proj_1784631797487_fc985847-960a-4eae-a29c-c5ebaf46e47c

Работа с инструментом очень простая

1. Включаете инструмент.

2. Загружаете текстуру или выбираете встроенную. Можно регулировать масштаб, поворот и смещение текстуры. У встроенных текстур (они генерируемые) можно настроить разрешение и частоту повторов. Также можно настроить размытие текстуры.

Наложение происходит на выделенный объект (можно выделить заранее или в самом инструменте).&nbsp;

Наложение происходит на выделенный объект (можно выделить заранее или в самом инструменте). 

Параметром "Сила" можно регулировать величину смещения вершин. Если задано 1мм, то вершины сместятся в указанную сторону на 1мм.

Можно задать как положительную силу, так и отрицательную.

Можно задать как положительную силу, так и отрицательную.

По умолчанию наложена трипланарная проекция текстуры на весь объект. Аналогично BumpMesh, помимо трипланарной есть ещё плоская (с выбором направления), сферическая и цилиндрическая проекции.

Цилиндрическая проекция на кубе

Цилиндрическая проекция на кубе

3. Если нужно накладывать не на весь объект, можно использовать маскирование. Маску можно наложить заливкой (с настройкой чувствительности) и кистью. Но кисть работает по исходной геометрии, если треугольников было не много, то работать будет не очень точно (лучше использовать заливку)

Можно выделить несколько граней с зажатой клавишей shift. А также инвертировать маску.&nbsp;

Можно выделить несколько граней с зажатой клавишей shift. А также инвертировать маску. 

После печати выглядит очень неплохо.

После печати выглядит очень неплохо.

Немного про минусы

Не могу не упомянуть про минусы такой технологии текстурирования, они у всех инструментов 3D-текстурирования одинаковые.

Главный минус - это существенное усложнение геометрии. Без разбивки модели на кучу, нет, КУЧУ мелких треугольников, такое текстурирование не осуществить. Соответственно, на модели появляются тысячи, а то и миллионы треугольников. Модель становится существенно тяжелее (легко может дорасти до 100 и более Мб.), увеличивается и длительность операции с ней.

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

В рамках САПР, в таком случае, я советую просто отделить от основной модели часть, на которую нужно наложить текстуру, а потом бинарной операцией присоединить обратно.

Текстурирование STL

Основная фишка КонтрCAD - как раз нативная поддержка STL, соответственно, вы можете закинуть модель в редактор не только для текстурирования поверхности, но и для любой другой работы.

А вот и кораблик из начала поста

А вот и кораблик из начала поста

Попробовать можно online, без регистрации и совершенно бесплатно: https://www.kontrcad.ru/

Новости об обновлениях в основном выходят в Telegram и ВК.

Поддержать разработку можно на boosty и ВК. Спонсоры проекта сейчас первыми получают ключ доступа к облачным функциям.

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

Показать полностью 9
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества