Как конвертировать сразу много dxf в mpr файлы

Обновлено: 07.07.2024

IrfanView — это очень быстро, маленький, компактный и инновационные freeware (для некоммерческого использования) графического просмотра для Windows. Он пытается быть простым для начинающих и мощный для профессионалов. подробнее .

OverCAD DWG DXF Converter 2.0

VeryPDF AutoCAD DWG and DXF To PDF Converter 2.0

VeryPDF AutoCAD DWG and DXF To PDF Converter allows you convert DWG to PDF, DXF to PDF, AutoCAD to PDF, CAD Drawing to PDF directly without need of AutoCAD, it converts DWG and DXF files into vector PDF files, quick and easily, free … подробнее .

AutoDWG DWG DXF Converter 2015

Active DWG DXF Converter let you batch convert DWG Files into DXF files and vice versa without AutoCAD. It is also a AutoCAD drawing file version converter, supports both low to high and high to low conversion. подробнее .

Active DWG DXF Converter 2013

Active DWG DXF Converter let you batch convert DWG Files into DXF files and vice versa without AutoCAD. It is also a AutoCAD drawing file version converter, supports both low to high and high to low conversion. подробнее .

DWG DXF Converter 2.1

OakDoc DWG DXF Converter является простым в использовании конечный пользователь позволяет партии конвертировать dwG файлы в файлы DXF и DXF файлы в файлы DWG, он не нуждается в третьей части поддержки программного обеспечения, таких как … подробнее .

wood wop mpr to dxf

wood wop mpr to dxf

IrfanView 4.58.0.0

IrfanView — это очень быстро, маленький, компактный и инновационные freeware (для некоммерческого использования) графического просмотра для Windows. Он пытается быть простым для начинающих и мощный для профессионалов. подробнее .

AutoCAD 2022.0.1

AutoCAD является высокий конец программы CAD (компьютер автоматизированного проектирования). Он имеет множество особенностей, которые эта книга будет пытаться адрес. подробнее .

TeighaX 4.3.1

Построен на вершине Teigha C++ среды разработки, TeighaX ставит стабильной, мощный и пожилая .dwg файл технологии в руки разработчиков ActiveX. подробнее .

Cricut Design Space

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

DWG TrueView 2022

Зритель свободный автономный .dwg, включающий программное обеспечение DWG TrueConvert ™. DWG TrueView построен на том же движке просмотра как программное обеспечение AutoCAD ®, поэтому вы можете просматривать .dwg и DXF-файлы так же, как в … подробнее .

Free DWG Viewer 7.3.0.180

Бесплатный DWG Viewer будет открывать и просматривать AutoCAD в формате DWG, DXF, DWF и безопасных форматов CSF. Файлы чертежей можно легко просмотреть с полным зумом / Пан / очки / иерархическое представление элементов управления. подробнее .

Acme CAD Converter 8.9

Конвертер DWG - пакетное преобразование DWG DXF DWF PDF JPEG GIF WMF HP-GL SVG CGM ЭПС. подробнее .

QCad 3.25.2

QCad-это мощная, но простая в использовании программа 2D CAD для Linux, Windows и Mac OS X. Он использует DXF в качестве стандартного формата файла. подробнее .

PDF to DWG Converter 9.6.5 9.6

PDF в DWG конвертер является пакетный конвертер, который позволяет пакетное конвертировать ваши файлы PDF в полезная и редактируемых файлов AutoCAD в формате DWG или DXF, поэтому вы можете легко восстановить сущностей в PDF для … подробнее .

Aide PDF to DXF Converter 9.6

Мощный windows программа, которая легко преобразует PDF в DXF для редактирования в CAD. подробнее .

wood wop mpr to dxf

Aide PDF to DXF Converter 9.6

Мощный windows программа, которая легко преобразует PDF в DXF для редактирования в CAD. подробнее .

Any DWG to DXF Converter

DWG к DXF Converter Pro является пакетного DWG и DXF-двунаправленные конвертер, который позволяет преобразовать DWG DXF, DXF DWG без необходимости AutoCAD. подробнее .

Работаю главным механиком в цехе по производству МДФ фасадов. Для фрезерования используем немецкие фрезерные центра с ЧПУ фирмы Homag, на станках используется программа Woodwop. На фасадах обычно использовали фрезеровку в одной плоскости, т.е. фрезеровка рисунка в плоскости "X-Y" (фреза врезается в материал по оси Z на заданную глубину и перемещается по осям X и Y без изменения по оси Z). Сейчас начальство поставило задачу по фрезеровке на центрах задействуя ось Z. Т.е. делать рисунок, например в виде синусоиды по оси "Х-Z" и "Y-Z" (т.е. c изменением в процессе фрезеровки глубины врезания в материал)
Может ли кто подсказать по данной программе, как реализовать подобные рисунки ?

1. вручную, с помощью математический функций, синус, косинус .
2. вручную, в УП заменой координат X или Y на плоскости на Z, и циклом
2. по средней линий двух кривых, например в Арткаме
3. купить программу Enroute, версия 4.1 или старше

Добрый день.

Работаю главным механиком в цехе по производству МДФ фасадов. Для фрезерования используем немецкие фрезерные центра с ЧПУ фирмы Homag, на станках используется программа Woodwop. На фасадах обычно использовали фрезеровку в одной плоскости, т.е. фрезеровка рисунка в плоскости "X-Y" (фреза врезается в материал по оси Z на заданную глубину и перемещается по осям X и Y без изменения по оси Z). Сейчас начальство поставило задачу по фрезеровке на центрах задействуя ось Z. Т.е. делать рисунок, например в виде синусоиды по оси "Х-Z" и "Y-Z" (т.е. c изменением в процессе фрезеровки глубины врезания в материал)
Может ли кто подсказать по данной программе, как реализовать подобные рисунки ?

Добрый день.
Работаю главным механиком в цехе по производству МДФ фасадов. Для фрезерования используем немецкие фрезерные центра с ЧПУ фирмы Homag, на станках используется программа Woodwop. На фасадах обычно использовали фрезеровку в одной плоскости, т.е. фрезеровка рисунка в плоскости "X-Y" (фреза врезается в материал по оси Z на заданную глубину и перемещается по осям X и Y без изменения по оси Z). Сейчас начальство поставило задачу по фрезеровке на центрах задействуя ось Z. Т.е. делать рисунок, например в виде синусоиды по оси "Х-Z" и "Y-Z" (т.е. c изменением в процессе фрезеровки глубины врезания в материал)Может ли кто подсказать по данной программе, как реализовать подобные рисунки ?

я тож на homag venture работал. очень приятный станок и легкий в освоении. вообще там програмное обеспечение должно быть на русском так что разобраться можно, а какой версии woodwop .
ladskiy все правильно я тож так делал ))

и если я не ошибаюсь то там файлы MPR ?? artcam создает эти файлы только не все версии woodwop их поддерживают (если добавлять их как полигонный рисунок).

Что бы Woodwop был на руском языке нужно
1-пуск
2-Все програмы
3-Папка woodwop
4-Broadcast
5-там можно выбрать переключения языка

Не надо изобретать велосипед . В Woodwop легко вставляются nc коды из под Artcam или Alphacam. И Hommag-ские станки легко справляются с любой 3д моделью, только осторожней при загрузке кодов напрямую (через встроенную утилиту) Woodwop не проверяет безопасности при генерировании NC программы.Работает как в Woodwop2.5 так и 4.5

Всем привет )
Baha -вручную, с помощью математический функций, синус, косинус .
С этой строчки поподробнее хотелось бы узнать куда это вводить,ато как то смутно понимаю вообще эту процедуру, хотя много слышал об этом, это ведь программа должна по пути следования фрезы отслеживать координаты X Y , и по ним расчитывать глубину по Z?
Ну как бы вставил я что то с синусом в строку для Z , навел курсор и мне уже показали готовое значение выражения, тудаж в аргументы пишутся определенные переменные , которые и просчитываются, т е нужно задавать глубину через шаг , допустим 0,5 мм , хотябы,чтоб что то было похоже на кривую, вот и не поятно ничего поэтому, пожалуйста побъясни поподробнее, мне тоже это очень нужно, тем более я подразумеваю что этот контур наносится на плоскость X Y ?
А я поделюсь как делаю у себя на работе, тольк уточню, станок Homag Bof 211 , Вудвоп 6
Если траектория заглублелния -прямая ,то все то что написал ladskiy, все просто, глубину прописываешь в самом контуре , на каждый отрезок такую какая нужна, а в обработке в поле глубина ставишь @0
Ничего сложного,
а вот если нужна кривая,( уточню- станок 5х) то тут контур рисую не в плоскости XY А в той , в которой нужно сделать фрезеровку, т е контур рисуем нужной глубины обычными макросами (прямая, дуги, скругления) ,потом накладывая на него обработку выбираю фрезерование с осью C, ну соответственно угол входа фрезы и угол поворота шпинделя ставлю на глаз (методом подбора- не такой уж знаток всех этих углов ), и вуаля -), только вот беда , если фреза прямая , то получается что она пишет внешним радиусом по контуру, и получается маленькая бороздка, поэтому приходится вести фрезу перпендикулярно линии контура, но тут спасает макрос-изменение технологических параметров, только не помню его название, там изменение угла оси С, тогда что то божески получается,
Но это только если контур паралельный какойто стороне, если под углом да еще и не постоянным, то это просто попа для меня , приходится создавать новую плоскость , повернутую так как нужно, и рисовать в ней, но так я еще не делал, хотя баловался с ней разбираясь с программой
Но если что то серьезное деать .то тут альфакам, ток минусы в том что если что то немного переделать в детали, то новую программу писать нужно, а в вудвопе, из за использования переменных , все намного проще, поменял их и все готово

Какие векторные рисунки, какой формат?
Давай их сюда посмотрим.

ЗЫ в основном, inkscape пользуется не имеет встроенных поддержек сторонних форматов, а пользуется внешними конвертерами. Которыми пользуются много-много других программ. Это часть философии Unix/Linux - зачем писать поддержку форматов, когда есть универсальный конвертер с удобным (для программирования) интерфейсом.

Use the Console, Luke.

Изображение

Ну да, это не его. Это чужое. А как же? Его можно научить?

О-о! А движок меня послал! К модератору. Ну-ну. Смотри молодежь по-ошла.
Ну-у ла-адно! А вот тэк?!

Что-то у меня твой rar не распаковывается .
Пришли в zip или tar.

Или не запаковывай. Сейчас разрешу эти расширения.

Use the Console, Luke.

Изображение

Вложения exqanimal_15.eps (31.29 КБ) 1285 скачиваний exqanimal_15.cdr (13.61 КБ) 1307 скачиваний exqanimal_15.ai (7.3 КБ) 1147 скачиваний У меня cdr и eps открылись, ai - нет.
У меня стоит Ubuntu 10.10 и Inkscape 0.48.
Вот svg-шка: Я так подозреваю, что у тебя inkscape стоит под виндой?

Use the Console, Luke.

Изображение

Угу, а inkscape какой, ну и вообще примерная конфигурация системы?

ЗЫ скорее всего inkscape-у не хватает того самого внешнего компонента.

Use the Console, Luke.

Изображение

В общем, пишут, что для раньше для конвертации был нужен UniConverter, и работал он только под Linux, но, говорят, что сейчас работает и без него.

Еще пишут, что не плохо поддерживается PDF.

А какой начальный формат?

Use the Console, Luke.

Изображение

Они и есть. Нарыл в сети. Думал, вот погляжу. понарежу! . накось!
А на кой же целая куча форматов в окошке открытия файла?! Это и ежику понятно, что программы могут что-то делать сверх своего, но при наличии конвертеров! Но тогда и появляется эта самая куча форматов. А так-то чего гопать коли ноги не ходють?! Какие тут прыжки?! Не логично!

Не буду вдаваться в подробности, но это издержки архитектуры win.
Под linux все необходимое само скачивается и устанавливается, не забыв спросить, а можно ли 100Кб трафика на это потратить .

По сути, попробуй запустить inkscape из консоли, может появится дополнительная информация.

PS О, через часик приеду к виндовой машине попробую импорт на ней.
PSS надеюсь у тебя inkscape последний?

Проблемы при открытии CAD файлов станками. Конвертирование DWG/DXF между версиями.

Несмотря на быстрое развитие программного обеспечения для станков c ЧПУ, на производстве зачастую до сих пор пользуются старым ПО. Например, я часто вижу на компьютерах, которые управляют станком, программное обеспечение ArtCAM версии 8.1, которая была выпущена еще в 2005 году. Причин тому несколько.
Во-первых, для управления станками используют достаточно старые компьютеры под управлением ОС Windows XP, в лучшем случае Windows 7. Очевидно, что такие ПК не обладают большими вычислительными мощностями, которые требует современное ПО.
Во-вторых, зачастую частный малый бизнес не может себе позволить лицензионное ПО и пользуется пиратским. В первую очередь потому, что лицензионное ПО достаточно дорого (тот же ArtCAM стоит 21 тысячу рублей и установить его можно только на один компьютер, нужно на два компьютера - плати в два раза больше, так как ПО защищено USB-ключом). Во вторую очередь потому, что разработчики ПО отказываются лицензировать устаревшие версии ПО (а как мы уже знаем, на производстве используются слабые, устаревшие компьютеры).
В-третьих, взломанное ПО старых версий широко распространено в сети интернет, его просто найти и так же просто установить. Также по старым версиям ПО в сети интернет много информации, обучающих материалов, доступны переводы на русский язык и так далее.
И вроде бы сэкономил новоявленный бизнесмен на ПО, но тем самым своими руками он положил перед собой грабли, на которые будет вынужден наступать - устаревшее ПО понимает только устаревшие версии форматов файлов. И вот пришлет ему заказчик файл в формате AutoCAD dxf версии 2018 года, а файл то и не открывается… В лучшем случае тот же ArtCAM версии 8.1 поймет формат файла DXF версии 2004 года, а то и версию 2000 года ему подавай.


Аналогичная проблема возникает и с программой SheetCAM (используется в основном с ЧПУ плазморезами), даже последняя версия SheetCAM 2019 года не понимает dxf версии 2018 года.
Очевидно, что как с бубном не пляши, старого пса не научить новым трюкам. Остается один вариант - конвертировать файлы из нового формата в старый. Но только новое ПО прочтет новые форматы файлов, а компьютер новое ПО и запустить то не может. К тому же с новым ПО вновь встает вопрос доступности этого самого ПО и тут мы снова возвращаемся к началу - желание сэкономить помноженное на устаревшее железо.
Существует два выхода из сложившейся ситуации - найти ПО, способное конвертировать файлы между версиями, либо воспользоваться аналогичными облачными функциями.

Компания Autodesk, один из крупнейших и старейших разработчиков ПО для автоматизированного проектирования. Поддержка файлов форматов DXF и DWG давно стала обязательным требованием любых CAD/CAM систем. При этом, примерно один раз в три года Autodesk обновляет формат файлов. Для сохранения совместимости файлов, они предлагают решение для простого просмотра и конвертации своих файлов между версиями - DWG TrueView (узнать подробнее и скачать DWG TrueView можно на нашем сайте). Огромный минус DWG TrueView - большой размер программы, более чем пол гигабайта. Поэтому я нашел другой вариант DWG Converter от ZWSoft.
Программа не требует установки, предназначена для одиночного и пакетного конвертирования файлов форматов DWG и DXF между версиями (DWG 2018, DWG 2013, DWG 2010, DWG 2007, DWG 2004, DWG 2000, DWG R14, DWG R13, DWG R12, DXF 2018, DXF 2013, DXF 2010, DXF 2007, DXF 2004, DXF 2000, DXF R14, DXF R13, DXF R12), а также для удаления “штемпеля” учебной (академической) версии. При этом объем программы всего 21 мегабайт. Как узнать версию файла AutoCAD, прочитайте тут.


DWG Converter не позволяет просматривать файлы, только конвертирует их. Если необходим просмотр файлов, то у ZWSoft есть решение - ZWCAD Viewer. Но эта программа не умеет редактировать и изменять версию файлов. Поэтому если необходим и просмотр, и конвертирование, то необходима связка ZWCAD Viewer и DWG Converter, которая всё равно будет занимать меньший объем, чем DWG TrueView.

К сожалению мне не удалось найти достойный он-лайн конвертер DXF/DWG между версиями. Большинство он-лайн конвертеров предлагают лишь конвертирование между различными типами форматов (в eps, ai, svg и другие типы векторных графических файлов).

Онлайн конвертеры CAD файлов между форматами различных CAD-систем.

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

Онлайн сервис Convert CAD Files Online, предоставляет платные услуги по конвертированию файлов (одна конвертация стоит 1 евро).
Процесс конвертации прост - выбираете файл, который необходимо конвертировать, выбираете формат файла, в который необходимо конвертировать, и вводите e-mail, на который придет письмо с сконвертированным файлом.

Поддерживает большое количество входных форматов: dwg, sldprt, sldasm, ipt, iam, CATIA V5, JT, prt, asm, prt, x_t, x_b, xmt, xmt_txt, PLMXML, par, asm, pwd, psm, 3dm, pkg, bdl, 3DS, skp, obj, wrl, vrml, CGR, dae, 3D PDF (pdf, prc, u3d), stp, step, igs, iges, STL, model, dlv, exp, session, _pd, arc, unv, mf1, prt, pkg.
И всего 4 выходных формата файлов: obj, 3D PDF, stl и 3ds.

Ввиду высокой стоимости услуг конвертации сервис годится только для конвертации небольших по объему файлов (до 100 килобайт). Просмотреть файл перед и во время конвертации не возможно. Данный сервис скорее для дизайнеров а не для инженеров.

Онлайн сервис CAD Exchanger, позволяет просматривать и конвертировать файлы непосредственно в браузере.

И еще один вариант, из пушки по воробьям - использовать onShape для конвертации файлов. Поскольку onShape это не сервис по конвертации файлов, а полноценная облачная CAD-система, и процедура конвертации в onShape не столь очевидна, как в CAD Exchanger, то рассмотрю процесс конвертирования подробнее.
Загружать можно сразу по несколько файлов (и даже разного формата), главное указать что это отдельные файлы.

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

Чтобы конвертировать файл, необходимо открыть его для редактирования, а затем нажать правой клавишей мышки на вкладке внизу экрана и выбрать “Export. ”.

Во всплывающем окне необходимо выбрать формат файла из выпадающего списка (скриншот выпадающего списка сделать не удалось, потому пришлось сфотографировать монитор).

В зависимости от выбранного формата могут появиться настройки для выбранного формата.


А далее всё просто - жмем “ОК” и сохраняем файл на компьютере.
Конвертировать файлы при помощи onShape можно бесплатно, но сам процесс конвертирования неудобен, потому что всё приходится делать вручную по одному файлу (впрочем, как и в CAD Exchanger).
Также хочу отметить возможность совместного доступа по ссылке к файлам, загруженным и созданным в onShape. Строго говоря, все файлы, загруженные и созданные в onShape доступны всем пользователям onShape. Таковы условия бесплатного использования этого сервиса. Но чтобы была возможность быстро найти ваш файл среди тысяч других файлов, предусмотрен доступ по ссылке.

Заключение.

Я не могу охватить все программы и онлайн сервисы по конвертации файлов в рамках одной статьи, а про некоторые даже и рассказывать неохота по причине их нестабильной работы. Например, программа ABViewer так и не смогла открыть ни один трехмерный файл, но на ура справилась с конвертацией dxf. При этом, я считаю, что недостатков у неё больше, чем достоинств. А потому ей не место в этой статье.
Так же в этот список не попал онлайн сервис ShareCAD, который позволяет только просматривать CAD-файлы в браузере, но не позволяет их конвертировать. Но ShareCAD на данный момент находится в стадии бета-тестирования. Кто знает, какие функции будут реализованы в финальной версии.

AutoCAD и подобные ему САПР давно уже стали стандартом в области проектирования, и неудивительно что таким же стандартом стали широко используемые в них форматы файлов DWG/DXF. Так что если вы разрабатываете какое-то решение для архитекторов и проектировщиков, то умение работать с этими форматами (ну или хотя бы с одним из них) — must have фича вашего продукта.


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

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

Решаемая задача

Мне для моего приложения на Java нужно было настроить импорт генпланов районов и конвертацию его во внутреннее упрощенное GeoJSON представление. При этом мне не нужна была полная информация и все виды сущностей, лишь некоторая их часть, которая бы использовалась в симуляции. Так что данный материал не охватывает все возможности и Нетривиальные Технические Решения DXF. А почему именно DXF, а не DWG? А про это ниже.

Выбор формата

Итак, что в первую очередь ассоциируется со словами «автокад» и «формат файла»? А это DWG. Бинарный закрытый формат, который изначально был создан AutoDesk'ом и его спецификации не раскрывались, однако в свое время он был удачно реверснут Open Design Alliance.
И вот тут следует разочарование №1: не существует актуальных бесплатных реализаций этого формата. Вообще.
Есть библиотека по работе с ним от AutoDesk. Есть популярная библиотека Teigha, созданная ODA. И… все. Обе они платные, причем хорошо платные (речь о сотнях и тысячах долларов). Не подходит.
Есть некоторое количество попыток реализовать стандарт в виде бесплатного Open-source решения. Например jdwglib. Но все они давно мертвы, обновлялись последний раз 5-10 лет назад. А прогресс не стоит на месте, новые версии автокада добавляют новые фичи и в DWG, в итоге с мечтой читать файлы современных версий можете попрощаться, как и с поддержкой и надеждой на фикс багов.

В итоге была выбрана библиотека Kabeja, последний релиз которой был в 2011 году. С помощью идущего в комплекте сэмпла (конвертация DXF в SVG) было проверено что все актуальные файлы чертежей корректно открываются, после чего я приступил к импорту. Слегка правда насторожил меня один комментарий к вопросу про парсинг DXF от некоего CAD-гуру на Stackoverflow что, мол, «DXF выглядит простым но на деле ты запаришься с ним работать».

DXF чертеж содержит в себе набор слоев (layer) и блоков (block). Там есть и другие сущности, но для того чтобы выдрать координаты геометрии в простейшем случае они не нужны.


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

Окей, все кажется просто: бежим по списку слоев, для каждого слоя — по списку объектов, преобразуем координаты. Впрочем уже тут я наступил на первые грабли: набор слоев который вы видите в CAD и который есть в файле — это не одно и то же. Я себе голову сломал, почему у меня вдруг пропадали куски дорог. В NanoCAD они есть, в моем экспорте — нет. Полез в отладчик — их и в возвращаемых Kabeja структурах нет. Зато если проэкспортировать файл целиком их семплом — они есть. В общем выяснилось что один слой из редактора в файле может представляться несколькими слоями, с именами вида «layerName», «layerName @ 1». Зачем это сделано и откуда оно берется — черт его знает, но факт — поиск на точное совпадение имени слоя (на который намекает даже структура кода библиотеки, хранящая слои в Map с ключом-именем) не работает.

Блоки представляют собой шаблоны, которые единожды нарисовав можно многократно вставлять. При этом изменение базового блока изменит и все его вставки. Удобно. Еще круче то, что блок может содержать в себе объекты с нескольких слоев. При этом вставка тоже принадлежит какому-то слою. При этом блок может содержать в себе вставки других блоков. То есть можно сделать блоки «секция дома», затем составить из них блок «дом», который затем несколько раз вставить на карту. При этом итоговый объект будет иметь несколько слоев (отдельно заливка, отдельно контуры, отдельно специальные пометки), так же как исходные блоки. Все это очень круто с точки зрения пользователя, но добавляет работы программисту.
Более того, блок может вставляться не просто разово, а многократно в виде прямоугольной матрицы. Для этого у объекта вставки есть параметры с количеством рядов, столбцов и с расстоянием между ними.

В итоге пока что код обработки вставки выглядит как-то так:

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

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

DXF поддерживает кучу разных вариантов линий:

  1. Аж 2 типа ломаных — Polyline и LWPolyline. В моем случае простых 2д чертежей разницы между ними никакой
  2. Дуги, причем аж двух видов — эллиптические и круговые. К счастью в классах Kabeja уже есть готовые методы для получения координат точек на них, так что преобразовать дугу в ломаную с нужной точностью несложно
  3. Сплайны — опять же Kabeja сама умеет их преобразовывать в Polyline
  4. Просто линейные отрезки

Казалось бы все просто, но нет. Даже простой на первый взгляд тип Polyline может использоваться для отображения кривых второго порядка (а не просто ломаных). Для этого у вершины может быть задан параметр bulge. Если он указан то две вершины соединяются не прямой линией, а дугой окружности, проходящей через эти вершины и центр которой можно выразить через них и этот параметр.


Вот такой вот код позволяет определить центр окружности:


Над этими дугами я бился долго, да в итоге плюнул и отключил их, соединяя вершины напрямую. Так как в генпланах такие дуги обычно используют для закруглений на углах перекрестков, я мог на них вполне забить — разница с точки зрения симуляции невелика.

Заливки/штриховки (hatch)

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

  1. Границей заливки может быть любая комбинация объектов-линий. Часть границы может быть ломаной, затем несколько дуг, потом просто куча отрезков разных линий
  2. Один объект заливки может иметь произвольное число непересекающихся областей (что нехарактерно для многих других форматов где у многоугольника есть только одна внешняя граница), каждая из которых может иметь произвольное число дырок
  3. Заливки могут быть многократно вложенными: то есть внутри заливки дырка, в которой еще одна заливка, в которой снова дырка, причем все это в DXF задается одним объектом HATCH с несколькими границами.
  4. Есть и еще более экзотические варианты отношений заливки и ее границ (см картинку) но мне они пока слава богу не попадались


В общем из DXF для заливки мы получаем кучу границ, имеющих флаг «внешняя или внутренняя», а дальше сами должны как-то разбираться как они вообще сделаны и как их раскидать по GeoJSON-овским полигонам, которые могут иметь только одну внешнюю границу и не имеют вложенности.

Я сходил по нескольким путям, но на каждый алгоритм я довольно быстро получал чертеж, на котором этот алгоритм не работал. Например вот этот вот: схема улиц и проездов для жилого района Читы, в котором они все заданы буквально парой объектов HATCH с очень сложной структурой, в которой почему-то все границы были помечены как внешние (чую тут какой-то баг в Kabeja, так как DXF определяет сразу два схожих флага External и Outer, но в самой библиотеке есть только один):


Для третьего пункта (да и вообще для работы с геометрией уже внутри самого алгоритма симуляции) я использовал библиотеку JTS — Java Topology Suite. Она содержит довольно много всяких нужных примитивов и операций по работе с геометрией, начиная от операций типа построения буфера и заканчивая структурами данных типа квадродерева.

После множества мучений и подперев все что можно костылями, я все-таки смог создать поддержку нужного мне подмножества DXF и загружать чертежи напрямую в свой симулятор, чтобы использовать их для определения косяков проектировщиков. Поскольку большую часть из указанной выше информацией мне пришлось добывать с боем и сидением до двух ночи над NanoCAD-ом (не реклама, но это единственный легкодоступный бесплатный и качественный редактор DXF который я нашел, тот же LibreCAD не осилил открыть правильно первый же чертеж что я ему передал), я решил поделиться ей и с хабрасообществом — вдруг мой опыт сэкономит кому-то время.

Ну и да, вот как-то так выглядит предсказание моего алгоритма для района со скриншота выше:


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

Читайте также: