Тема: Как разбирать таблицы в DWG-файлах?

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

Re: Как разбирать таблицы в DWG-файлах?

1) Ты не написал что собираешь делать с такой таблицей.
2) В принципе кроме перебора вряди что-то можно придумать. А идея простая:
а) Находишь координаты всех конечных точек линий (предположу, что все линии или горизонтальны или вертикальны) и всех точек их пересечений и получаешь двумерный массив координат.
б) Находишь textbox для каждого текста и проверяешь в какую ячейку (ячейки) он влез.
в) Дальше думаешь, что с этим делать.
Алгоритм не претендует на универсальность, так как если ячейки могут быть объединены, то с этим нужно разбираться отдельно...

Re: Как разбирать таблицы в DWG-файлах?

Спасибо, Александр.
Линии действительно горизонтальны и вертикальны. Мой алгоритм действительно похож...
Очень напрягает разбор наличие черезполосицы и объединенных ячеек =(.
Плюс к этому координаты ячеек приходится выбирать пересечениями с линий, а этот процесс совсем не быстрый.

Re: Как разбирать таблицы в DWG-файлах?

Плюс к этому координаты ячеек приходится выбирать пересечениями с линий, а этот процесс совсем не быстрый.

Ну это то как-раз ерунда. На таблице 1000x1000 я не думаю, что это будет дольше 0.1 секунды. Попробуй оптимизировать алгоритм...

Re: Как разбирать таблицы в DWG-файлах?

Вы не поверите, но гораздо больше, что-то около 30 секунд! Табличка всего 100x100.

Re: Как разбирать таблицы в DWG-файлах?

Должен констатировать, что алгоритм явно не оптимальный. sad

Re: Как разбирать таблицы в DWG-файлах?

Во всяческом случае алгоритм поиска пересечений имеет сложность O(n^2), плюс сохранять нужно не все подряд точки, а только новые, т.е. пробегать ещё по списку точек, получается O(n^3).
Откуда тут взятся скорости?

Re: Как разбирать таблицы в DWG-файлах?

1) По поводу сложности пересечений, спорить не буду, хотя ИМХО, можно найти и более оптимальный алгоритм. Хотя бы отсекать те отрезки, для которых boundinbox не имеет ничего общего (а для ортогональных отрезков это сводится к проверкам на "больше" "меньше" для X и Y). Кроме того нечего проверять на пересечение параллельные отрезки, что тоже уменьшит время работы (а присвоить им флаг горизонтальности/вертикальности можно один раз при создании массива отрезков, или вообще создать два массива - горизонтальные и вертикальные).
2) Можно не проверять на "новые точки" в процессе поиска пересечений, а получить массивы X и Y (даже с дублями), затем отсортировать их и выкинуть дубли.
Эти пару замечаний явно ускорят алгоритм. На сколько - посмотришь.

Re: Как разбирать таблицы в DWG-файлах?

Нашел где тормозит... Действительно, сложность алгоритма квадратичная, просмотр с выводом всех уникальных точек пересечения для таблицы 10x50 происходит приблизительно 1~2 секунды.