Проект импорта схем помещений из чертежа AutoCAD
Появился у меня интересный проект, о котором я решил написать.
Задача такая: есть компания, занимающаяся ремонтом муниципальных помещений, нужно быстро просчитать стоимость для тендера по чертежам планам из AutoCAD.
Чтобы просчитать стоимость ремонта инженеру-сметчику прежде всего надо рассчитать площади полов, потолков, стен. Желательно дополнительно получить периметр пола для плинтуса, площади откосов, нужно учесть ниши, подиумы, потолочные балки и прочие конструктивные особенности. У компании есть готовые шаблоны смет, но для них нужны все эти параметры для расчета.
Ну что ж, вызов принят. Основная проблема – как выдернуть из AutoCAD контуры помещений для подсчета площади и периметра.
Сразу хочу сказать, что программа уже написана и я излагаю сам процесс.
Решил, для начала, попробовать научить программу как-нибудь импортировать выделение и как-то его разобрать, чтобы что-то с ним сделать. Работаю через COM объекты, поскольку связываемся с открытым AutoCAD и работаем напрямую. Сказано сделано. Простые линии и дуги импортируются без проблем
А вот штриховки и заливки повели себя нехорошо. Изучаю, как говорится, матчасть.
1. Штриховки могут быть многоблочными, и раскиданы по всему плану, поэтому просто не попадают в выделение.
2. Не все штриховки имеют готовый контур.
Пункт 2 особенно напряг. Оказалось, что вынуть координаты узлов таких штриховок без танцев с бубном проблемно. Бубном оказался скрипт на AutoLISP, который справился с этой задачей.
Выглядит гораздо лучше, подтянулись контуры штриховок. Отсюда можно пробовать вытащить контур. Но то, что выглядит как просто линия, может содержать в себе несколько линий, а то и десяток или даже сотни. И наоборот, для нахождения контура нужна часть отрезка, протянутого через всю схему.
Когда кто-то спрашивает: «Для чего мы учим в школе геометрию-тригонометрию?». Отвечаю: «Вот для таких случаев.» Вспомнить пришлось все, от школьной геометрии – коллинеарность, параллельность, перпендикулярность, до линейной алгебры и аналитической геометрии первого курса института. Чтобы подготовить схему к поиску контура программа делает 7 шагов, каждый из которых перебирает все линии и не один раз.
Для извлечения контура из кучи линий применяем теорию графов. Пишем алгоритм, задаем условия. И вот он долгожданный прямоугольник.
Пробуем посложнее.
Отлично. Продолжение следует.
Полное описание функционала тут










