Обновить

Комментарии 17

Спасибо, большое дело затеяли !

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

При этом если делаешь какой-то веб-CAD, то ты обязан читать или DWG (что вообще нереально) или хотя бы DXF.

Перечитал Вашу статью — ровно 10 лет прошло, хех — по всем граблям понимающе кивал, на все пришлось наступить.
Для DWG есть LibreDWG, её WASM-сборку можно затащить прямо в браузер. Но это +6 МБ, для веб-бандла ощутимо. Поэтому в планах сделать поддержку DWG отдельным пакетом.

Пунктирные осевые линии

Подозреваю, что вы о штриховых линиях (которые чёрточками). Ещё бывают штрихпунктирные линии -- это как правило линии симметрии объектов. Пунктирные (от слова "пункт" -- точка) -- это линии из точек, а не штрихов. Используются на чертежах крайне редко.

Угадал?

На заметку: использовать что штриховые, что штрихпунктирные, что пунктирные линии сейчас -- вопрос вкусовщины. А лет 40 назад на кульмане пунктиром выделяли только очень специфичные линии. Очень утомительный и кропотливый процесс.

Вот тут вы не правы. В dwg/dxf могут быть сохранены топографические планы, и там что штрихов, что пунктиров достаточно. И это не вкусовщина, а необходимость. Но там, как правило, ещё наваливаются куча кастомных типов линий, и потому в рамках данного обсуждения наверно топопланы упоминать нет смысла.

Да, конечно! Спасибо за поправку, я уже привык мыслить DXF типами. Там они идут по своей логике и не совпадают с ГОСТ: DASHED/HIDDEN ≈ штриховая, CENTER ≈ штрихпунктирная тонкая, PHANTOM ≈ с двумя точками, DOT — точечная, DASHDOT — штрих-точка, плюс DIVIDE, BORDER и т.д.

Спасибо за статью! Не знал о таких проблемах. Для людей в индустрии существуют CADы (платные) и например Dwg TrueView от Autodesk. Он бесплатный и читает и dxf и dwg. Да, он не вэб. Но ни я, ни кто-то из моих знакомых не оказывались в ситуации, когда нужен dwg/dxf именно через web. Просмотрщики есть и для ios/android. Самим форматом dxf последний раз пользовался лет 7 назад, когда снимал «защиту» с чертежа сделанного с использованием Autocad для образовательной организации.

Согласен, если проект сам формирует чертежи, то DXF — это конечный формат экспорта на бэке и браузерный рендер именно DXF тут вряд ли нужен. А вот когда чужой DXF загружают в твой сервис и надо с ним работать — отобразить, измерить, отключить слои — тут dxf-kit и нужен, и работает без бэкенда.

демо сайт похоже в РФ не работает. я не понял - типы линий честные? штриховки честные?

Типы линий читаются из таблицы LTYPE в самом файле. Полилинии режутся на штрихи/точки/пробелы по паттерну из определения линии, с учётом LTSCALE (глобального и поэлементного) и авто-масштаба по габаритам чертежа.
Штриховки: заливка контуров (с island/style по чётно-нечётному правилу) плюс паттерн-штриховка, где линии клиппятся по границам. Если в DXF лежит встроенное определение паттерна — берётся оно, если паттерн задан только именем — фоллбэк на встроенные паттерны.

тексты в типах линий? типы линий на полилиниях с переменной шириной и бульгами?

Текст внутри линий не поддерживается, линия будет нарисована правильным пунктиром, но без текста. С бульгами всё ок — паттерн тесселируется и идёт по дугам так же, как по прямым сегментам. Переменная ширина поддерживается, но штрих-пунктир поверх широкой полилинии пока не накладывается. Если у полилинии появляется ширина, она рисуется сплошной заливкой.

Часто ли это употребимые типы? Мне не попадалось файлов с такими линиями. Если не сложно — прикрепите тестовый файл в ишью в гитхабе, заведу в бэклог.

паттерн не применяется к переменной ширине, или вообще к широкой полилинии? текст в типе линий употребляется постоянно, на постоянной ширине тоже часто. на преременной ширине - не встречал, но автокад так умеет

К любой широкой полилинии. Это одна ветка рендера: как только у полилинии появляется ширина, она рисуется сплошной заливкой и тип линии к ней не применяется, пока так. Накидайте реальных файлов с такими сущностями, добавлю в следующем релизе.

файлов под рукой у меня нет. тут надо автокад и смотреть как он - там нюансов много

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации