Импортировать точки линии из файла DWG с C / C ++ - PullRequest
0 голосов
/ 02 апреля 2020

Я пишу приложение для робота для 2D-навигации для отслеживания пути, и путь содержится в файле DWG. Скажем, например, что файл DWG содержит квадрат 2х2 метра.

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

В данный момент для меня было бы идеально найти способ просто прочитать координаты из файла DWG. Я видел, что есть некоторые библиотеки с открытым исходным кодом, которые позволяют обрабатывать файлы DWG, такие как libredwg или libDWG , но я не могу понять, могут ли они использоваться для моих целей.

Можете ли вы мне помочь, пожалуйста?

РЕДАКТИРОВАТЬ: я обнаружил, что libopencad может быть использовано для моего приложения, я протестировал образец приложения, и он выводит что-то вроде этого:

Layers count: 1
1. Layer 0 contains 8 geometries
|---------Line---------|
Start Position:     62.5852 -36.5942    0
End Position:   -62.5852    -36.5942    0

Entity color: #ffffffff
|---------Line---------|
Start Position:     62.5852 -36.5942    0
End Position:   62.5852 36.5942 0

Entity color: #ffffffff
|---------Line---------|
Start Position:     62.5852 36.5942 0
End Position:   -62.5852    36.5942 0

Entity color: #ffffffff
|---------Line---------|
Start Position:     -62.5852    -36.5942    0
End Position:   -62.5852    36.5942 0

Entity color: #ffffffff
|---------Line---------|
Start Position:     62.5852 -76.4212    0
End Position:   -62.5852    -76.4212    0

Entity color: #ffffffff
|---------Line---------|
Start Position:     62.5852 -76.4212    0
End Position:   62.5852 -61.4214    0

Entity color: #ffffffff
|---------Line---------|
Start Position:     62.5852 -61.4214    0
End Position:   -62.5852    -61.4214    0

Entity color: #ffffffff
|---------Line---------|
Start Position:     -62.5852    -76.4212    0
End Position:   -62.5852    -61.4214    0

Entity color: #ffffffff

для образца файла DWG, который содержит два квадрата:

enter image description here

Проблема заключается в следующем: как разделить координаты первый прямоугольник из второго?

1 Ответ

1 голос
/ 09 апреля 2020

В данных, извлеченных из DWG, у вас нет двух прямоугольников. У вас 8 строк, с другой группировкой. Основываясь на этом примере, вы можете предположить, что первые 4 строки будут представлять один прямоугольник, а следующие 4 строки будут представлять вторую. Это правда в этом случае, но вы не можете зависеть от этого. Все будет зависеть от того, кто создал DWG, какие инструменты они использовали, и рисовали ли они прямоугольники в последовательности или чередовали ли они рисование, удаление, рисование, перемещение линий.

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

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

Наконец, вам необходимо определить требования приемлемых / недопустимых входных файлов и решить, что делать с данными, которые не совпадают. Хороший общий алгоритм может найти треугольники, прямоугольники или любые связанные формы линий. Существует еще один уровень сложности, связанный с определением того, образуют ли соединенные линии простой замкнутый многоугольник, если линии пересекаются, и т. Д. c.

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

...