2Float
Веб-платформа полного цикла для проектирования модульных плавучих причалов и понтонов. Конструкция собирается прямо в браузере на интерактивном 2D-холсте из элементов в каталоге, тут же визуализируется в фотореалистичном 3D на водной поверхности и одним действием превращается в готовый PDF коммерческого предложения с чертежом, спецификацией и расчетом стоимости. Система объединяет CAD-редактор, расчетное ядро комплектации и документооборот в одном рабочем процессе и обслуживает сеть из производителя, дилеров и менеджеров.
Задача
Раньше сборка причала и подготовка предложения шли вручную. Инженер рисовал схему в стороннем редакторе, отдельно пересчитывал понтоны, соединительные узлы, штифты, болты, шайбы и крепеж, после чего вручную переносил все это в спецификацию и прайс. Процесс растягивался на часы и был уязвим к ошибкам подсчета, а просчет в количестве крепежа напрямую бьет по марже и срывает сроки поставки. Такой подход не масштабировался на партнерскую сеть. Нужен был единый инструмент, который позволяет быстро спроектировать конструкцию любой сложности, гарантированно правильно посчитать комплектацию по реальным правилам стыковки и за секунды выдать клиенту аккуратное предложение под брендом конкретного дилера.
Решение
Создана единая платформа, закрывающая весь путь от эскиза до готового документа.
Ядро системы это редактор на HTML5 Canvas, где конструкция собирается перетаскиванием элементов из каталога. Реализована умная стыковка: каждый модуль знает собственные точки соединения, и при сближении секции автоматически примагничиваются, выравниваются и поворачиваются по правилам конкретной серии (2F AR45, 2F AR60, MF). Поддержаны масштабирование и панорамирование, поворот, групповое выделение области, многоуровневая отмена и повтор действий, отображение размеров и печать.
Поверх геометрии работает расчетное ядро. По фактической схеме и правилам стыковки оно само формирует полную спецификацию: считает понтоны, соединительные узлы и штифты отдельно по каждой серии, болты, шайбы и ключи, корректно учитывает сдвоенные секции, угловые элементы, балясины, сходни и лестницы. Готовая схема одним действием превращается в коммерческое предложение: PDF собирается на лету из чертежа с пронумерованными выносками, постраничной спецификации с изображениями, прайса со скидкой и блока контактов. Документ автоматически брендируется под конкретного дилера, подставляя его логотип, телефоны и сайт.
Дополнительно та же конструкция отображается в фотореалистичном 3D на воде с небом, отражениями и реальными моделями элементов, что помогает клиенту оценить результат еще до заказа.
Архитектура и сложности
Геометрическое ядро редактора. Самая трудоемкая часть. Координаты курсора и элементов живут в трех системах отсчета одновременно: экран, мировые координаты с учетом масштаба и смещения, локальная система повернутого модуля. Чтобы корректно ловить попадания по элементам, выполнять привязку и стыковку под произвольным углом, реализованы прямые и обратные аффинные преобразования через матрицы трансформации. Это дало точную работу с поворотом, масштабом и вложенными элементами (балясины, кнехты, бамперы), которые привязаны к точкам родительского понтона.
Алгоритм стыковки и подсчета комплектации. Каждый модуль генерирует сетку точек соединения. При сборке система находит общие точки соседних секций и различает внутренние узлы, общие для двух модулей, и внешние болты, чтобы не задваивать крепеж. Дедупликация точек по координатам и применение правил каждой серии дают спецификацию, которая совпадает с реальной сборкой на производстве.
Бэкенд. Маршруты регистрируются автоматически через рефлексию: контроллеры собираются по соглашению об именовании, а их обработчики поднимаются на старте без ручной привязки, что упростило развитие API. Авторизация построена на зашифрованном cookie-токене с кэшированием пользователя в сессии и собственном атрибуте доступа на уровне middleware, с разграничением ролей производителя, дилера, менеджера и гостя. Сохранность данных обеспечивают фоновые задачи на Quartz: ежедневный бэкап базы упаковывается и выгружается в облако с автоматическим контролем квоты и ротацией старых копий. Обмен с клиентом идет по SignalR поверх компактного протокола MessagePack, а 3D-сцена использует кэширование и предзагрузку FBX-моделей, чтобы тяжелые ассеты не тормозили отрисовку.
Результат
- Подготовка коммерческого предложения сократилась с нескольких часов ручной работы до считанных секунд: проектирование, расчет комплектации, 3D и выпуск PDF выполняются в одном окне.
- Ошибки в спецификации крепежа сведены к нулю, поскольку комплектация считается по фактической геометрии и правилам стыковки, а не вручную.
- Каталог покрывает свыше 30 типов элементов в трех сериях, и расчетное ядро поддерживает все правила их соединения.
- Брендирование каждого предложения под партнера позволило масштабировать продажи на дилерскую сеть без потери качества документов.
- Встроенная 3D-сцена на воде дала клиенту наглядное представление конструкции до заказа и повысила доверие к предложению.
- Бизнес-данные защищены ежедневным автоматическим бэкапом в облако с ротацией копий.
Стек
Backend: C#, .NET 8, ASP.NET Core (Razor Pages и Minimal API), EF Core 8 и linq2db, SQL Server, SignalR с MessagePack, Quartz.NET, MegaApiClient, шифрование Rijndael.
Frontend: JavaScript, HTML5 Canvas 2D, Three.js (WebGL, Water и Sky, FBXLoader), jQuery, jsPDF и html2canvas, SignalR client.
Инфраструктура: миграции EF Core, публикация через профиль развертывания, облачные бэкапы по расписанию.
Frontend: JavaScript, HTML5 Canvas 2D, Three.js (WebGL, Water и Sky, FBXLoader), jQuery, jsPDF и html2canvas, SignalR client.
Инфраструктура: миграции EF Core, публикация через профиль развертывания, облачные бэкапы по расписанию.
