2017-01-02 2 views
0

Мне нужно заменить это (все такие двери): door imageЗаменить дверь с помощью lline в файлах shp или dxf?

с линией: line image

Я пытаюсь использовать питон модули для этого, но я не знаю, как подойти к problem.Can Я обнаруживаю дуги, используя простой dxf? Но что мне делать после этого? Любая помощь, даже в отношении алгоритма, которому следует следовать, будет оценена по достоинству.

ответ

2

Файлы DXF - это простой текст и не так сложно разобрать. Мой nctools module on Github содержит rudimentary DXF parser для ограниченного круга сущностей. Имеются полные ссылки на формат онлайн.

Чертеж двери можно сделать несколькими способами. Это может быть один ARC с группой LINE или связкой POLYLINE. И они не должны были быть в каком-либо конкретном порядке, чтобы дать один и тот же образ. И двери могут быть в разных направлениях. So вообще обнаружение этой формы очень сложно.

Есть несколько ситуаций, которые могли бы сделать его лучше, от простого до сложного.

  1. Когда дверь определяется как БЛОК, ее легко обрабатывать; вы можете просто заменить блок на другой.
  2. Возможно, что дверь всегда совпадает с последовательностью объектов, только с разными координатами. Например, 6 ЛИНИЙ, за которыми следует ARC, а затем четыре LINE. Это также можно обнаружить.
  3. Когда все сущности двери находятся в отдельном слое, вы можете, по крайней мере, фильтровать объекты по слою.
  4. Если все двери имеют одинаковый размер, вы можете, по крайней мере, искать правильные размеры объектов чертежа.

Обращение с любыми остальными, кроме случаев 1 или 2, будет неприятным и трудно сказать.

+0

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

+0

@heltonbiker Это зависит от того, что производит оригинальное приложение. Который может быть вполне регулярным и предсказуемым, казалось бы, совершенно случайным дерьмом. Я общался с обоими. :-( –