Анкерные системы Schöck Dorn
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Оптимизация обработки большого числа элементов

Оптимизация обработки большого числа элементов

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 15.09.2013, 04:25
Оптимизация обработки большого числа элементов
АлексЮстасу
 
топограф, технолог
 
Москва
Регистрация: 24.05.2009
Сообщений: 2,551

АлексЮстасу вне форума Вставить имя

Наверное, есть отработанные и даже общепризнанные способы оптимизировать обработку в программах большого числа элементов dwg-файлов?
Я имею в виду программы, которые решают задачи вроде: найти все пересечения или найти все не пересекающееся, найти все, попадающее в контур или вне его, создать все возможные замкнутые контуры или т.п.
И имею в виду не использование чисто программных способов, а на уровне алгоритмов.
Может быть опытные поделятся, если не оч. большой секрет, конечно
Это нужно мне для общения с моим программистом, а может пригодиться начинающим программистом вообще.
Я сам не программист, но постараюсь в целом понять ответы, да и поспрашиваю, если что, у разбирающихся.

Как непосвещенный, я предполагаю, что в dwg-файле элементы хранятся в целом просто в порядке их поступления, т.е. их взаимные связи (соединение, наложение, пересечение и т.п.) никак не описаны, и их взаимное положение никак не структурировано, не описано. Это правильно? И поэтому, если действовать в лоб, в подобных программах приходится определять отношение всего со всем, и, возможно, не один раз?
Если же как-то ловко описать взаимное положение и/или взаимные связи элементов, то можно будет анализировать не все элементы, а только взаимно связанные или указанным образом расположенные. Что в теории скажется на скорости работы.

И подвопрос: для файлов примерно какого размера (+-полмегабайта) или какого числа элементов (+-1000), или числа вершин элементов (+-1000) подобные ухищрения имеют смысл на не очень мощных и на хороших компьютерах? Эмпирически-экспертно, конечно.
Просмотров: 23908
 
Автор темы   Непрочитано 16.09.2013, 21:26
#41
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


"Плоскость", "объем" - у Вас анализ 3D или это просто такие термины?
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 16.09.2013, 21:34
#42
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


Алгоритм работает одинакво и для 3Д и для 2Д. но нужно либо учесть вырождение объема\плоскости в прямоугольник\прямую, либо в случае "плоского" ограничивающего объема дать ему минимальную разбежку по нулевой оси (т.е. сделать совсем чуть чуть неплоским)
Я использую второй вариант, по "плоской" оси разбиение производится небудет, т.к. она всегда будет минимальной
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 17.09.2013, 05:15
#43
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Алгоритм работает одинакво и для 3Д и для 2Д. но нужно либо учесть вырождение объема\плоскости в прямоугольник\прямую, либо в случае "плоского" ограничивающего объема дать ему минимальную разбежку по нулевой оси (т.е. сделать совсем чуть чуть неплоским)
Я использую второй вариант, по "плоской" оси разбиение производится небудет, т.к. она всегда будет минимальной
Делящие плоскости вертикальные? По осям XZ, YZ?

Пока перевариваю.........

Могу предложить тем, кому желательны примеры, задачу: находить (создавать) для всего набора линейных элементов все возможные минимальные замкнутые контуры. Контуры точные, полные и все - в отличие от фирменной BOUNDARY, которая к тому же только штучная. Задача вполне реальное решение имеет. Например, FlashPolygons от Delicad.
Offtop: Правда, попробовал сегодня свежезагруженную версию FlashPolygons, и такое ощущение, что они что-то так улучшили, что она еле телепается. Опробовал ее в 2010 на файлах с десятками тысяч элементов, и она строила все контуры считанные секунды. А компьютер был послабее, и был XP. Видимо, они ее оптимизировали Во-вторых, она не видит сплайны и 3D элементы. Пользоваться ей можно бесплатно 20 раз.
Предполагаю, что в этой задаче процедуры только самые простые: найти все пересечения всех элементов, и на их основе собрать все замкнутые минимальные контуры. Элементы и их части после разбивания на пересечениях, чьи начальные-конечные точки ни к чему не примыкают, игнорируются. Для упрощения сплайны,трехмерные элементы не рассматриваем. Исходные элементы сохраняются в их исходном состоянии. Допустим, добиваемся, чтобы результат получался на 2-3 десятках тысяч элементов из десятков и сотен сегментов каждый за, максимум, 5-7 секунд.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.09.2013, 07:26
#44
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


>>Делящие плоскости вертикальные? По осям XZ, YZ?
да (еще XY для 3Д случая), ограничвающий объем тоже "выровнен" по осям - т.н. AABB (Axis-Aligned Bounding Box) При этом ограничивающий объем "левого" и "правого" списка можно почесному пересчитать, а можно рассеч плоскостью исходный. Я не пересчитываю, при этом "хватается" лишнее пустое пространство, но для "среднестатистического" чертежа это ИМХО не критично. критично для очень "разряженного" чертежа
Поиск пересечений я сегодня организую, если будет свободная минута, для самого элементарного случая - чертеж из N линий. Из спортивного интереса - посмотреть как влияют параметры "дерева" на время нахождения всех пересечений.
А вот искать контуры (насколько понимаю это возня с графами) на данный момент мне не интересно и не по зубам))

update:
В #37 забыл упомянуть циферки про расход памяти под всё это дело:
чертеж тотже, 21250 примитивов, x86_64 сборка

для случая с 500 примитивов в ноде
выделено памяти под списки примитивов в нодах: 223912 байт
выделено памяти под сами ноды: 22042 байт

для случая с 10 примитивов в ноде
выделено памяти под списки примитивов в нодах: 223912 байт
выделено памяти под сами ноды: 702460 байт

Странно что количество под списки не меняется, вроде должно увеличиться. Может глючу в замерах, а может связано с тем что колво примитивов не изменилось и как их не раскладывай по разным спискам - в сумме будет одно и тоже

Последний раз редактировалось zamtmn, 17.09.2013 в 09:32.
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 17.09.2013, 15:52
#45
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Поиск пересечений я сегодня организую, если будет свободная минута, для самого элементарного случая - чертеж из N линий. Из спортивного интереса - посмотреть как влияют параметры "дерева" на время нахождения всех пересечений.
А вот искать контуры (насколько понимаю это возня с графами) на данный момент мне не интересно и не по зубам))
Хорошо бы где-то нарыть соответствующего объема и содержания тестовый файл. Я, к сожалению, не успеваю пока его соорудить, но постараюсь в ближайшее время.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.09.2013, 16:35
#46
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


Вроде сделал поиск пересечений, особо не проверял, но с виду работает правильно, даже если и пропускает несколько пересечений, то на общую картину это не влияет - для замера времени пойдет
Для теста соорудил 2 файла, скриншоты с визуализацией сетки (серым сетка, красным - линии) разбиения прилагаю (для случая с 10 примитивами в ноде)
regular.dxf - представляет собой регулярную сетку из крестов образованных 2мя короткими линиями, всего 20000 линий, 10000 пересечений. Это идеальный случай - он отлично пространственно разбивается
nonregular.dxf - мешанина из 20000 случайных линий сопоставимых по размерам с габаритами чертежа, кол-во пересечений 11559108. Наихудший случай - в разбивку попадает очень мало линий, они слишком длинные и "кучные"

тест прилагаю в виде лога последовательного выполнения 2х команд разделенных "-------------------------------------" для разных условий
первая RebuildTree строит "дерево"
вторая FindAllIntersections собственно ищет пересечения
тест проводил для разбиений до 10,100,1000,10000 примитивов в "ноде" (Max in node entities), последний случай (100000) представляет собой фактическое отсутствие разбиения, все примитивы находятся в корневой "ноде", никакого разбития нет

пояснения для вывода команд:
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: -затраченое время на построение дерева
Total entities: -всего обработано примитивов
Fact tree depth: -фактическая глубина полученного "дерева"
Max tree depth: -заданная максимальная глубина
Max in node entities: -заданное кол-во примитивов в ноде при котором дальнейшее разбиение не ведется

Запущена команда:FindAllIntersections
Search intersections: -затраченое время на поиск пересечений
Line-AABB tests count: -количество проведенных тестов попадания линии в ограничивающий объем
Line-Line tests count: -количество проведенных тестов пересечения линий
Intersections count: -количество найденных пересечений линий
Лог для regular.dxf
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.05 секунд
Total entities: 20000
Fact tree depth: 11
Max tree depth: 16
Max in node entities: 10

Запущена команда:FindAllIntersections
Search intersections: 0.06 секунд
Line-AABB tests count: 114732
Line-Line tests count: 653750
Intersections count: 10000
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.04 секунд
Total entities: 20000
Fact tree depth: 8
Max tree depth: 16
Max in node entities: 100

Запущена команда:FindAllIntersections
Search intersections: 0.10 секунд
Line-AABB tests count: 35356
Line-Line tests count: 1323427
Intersections count: 10000
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.04 секунд
Total entities: 20000
Fact tree depth: 5
Max tree depth: 16
Max in node entities: 1000

Запущена команда:FindAllIntersections
Search intersections: 0.43 секунд
Line-AABB tests count: 5556
Line-Line tests count: 6922899
Intersections count: 10000
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.02 секунд
Total entities: 20000
Fact tree depth: 1
Max tree depth: 16
Max in node entities: 10000

Запущена команда:FindAllIntersections
Search intersections: 6.16 секунд
Line-AABB tests count: 0
Line-Line tests count: 99990000
Intersections count: 10000
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 20000
Fact tree depth: 1
Max tree depth: 0
Max in node entities: 10000

Запущена команда:FindAllIntersections
Search intersections: 13.90 секунд
Line-AABB tests count: 0
Line-Line tests count: 199990000
Intersections count: 10000
Лог для nonregular.dxf
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.03 секунд
Total entities: 20000
Fact tree depth: 7
Max tree depth: 16
Max in node entities: 10

Запущена команда:FindAllIntersections
Search intersections: 7.97 секунд
Line-AABB tests count: 568084
Line-Line tests count: 87192949
Intersections count: 11559108
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.03 секунд
Total entities: 20000
Fact tree depth: 5
Max tree depth: 16
Max in node entities: 100

Запущена команда:FindAllIntersections
Search intersections: 7.99 секунд
Line-AABB tests count: 269616
Line-Line tests count: 87862625
Intersections count: 11559108
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.03 секунд
Total entities: 20000
Fact tree depth: 3
Max tree depth: 16
Max in node entities: 1000

Запущена команда:FindAllIntersections
Search intersections: 8.52 секунд
Line-AABB tests count: 88848
Line-Line tests count: 94110466
Intersections count: 11559108
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.02 секунд
Total entities: 20000
Fact tree depth: 1
Max tree depth: 16
Max in node entities: 10000

Запущена команда:FindAllIntersections
Search intersections: 13.26 секунд
Line-AABB tests count: 10268
Line-Line tests count: 144740952
Intersections count: 11559108
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 20000
Fact tree depth: 1
Max tree depth: 0
Max in node entities: 100000

Запущена команда:FindAllIntersections
Search intersections: 17.04 секунд
Line-AABB tests count: 0
Line-Line tests count: 199990000
Intersections count: 11559108
Собственно результат налицо - в идеальном случае разница "хитрого" и "влоб" подходов на порядки 0.11сек против 13.9сек, в худшем случае разница в разы 8сек против 17.04сек при копеечных затратах на построение этого самого "дерева". Реальные чертежи обычно хорошо "разбиваются", случаев подобных nonregular.dxf мне не попадалось
Миниатюры
Нажмите на изображение для увеличения
Название: regular.png
Просмотров: 52
Размер:	62.9 Кб
ID:	112164  Нажмите на изображение для увеличения
Название: nonregular.png
Просмотров: 58
Размер:	66.9 Кб
ID:	112165  
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 17.09.2013, 17:40
#47
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Приложите nonregular.dxf здесь или во всем доступное место.
Чтобы использовать как тестовый для разных методов и программ.
И на компьютере с какими характеристиками это делалось?

Еще интересно посмотреть, как оптимизация влияет на работу программ на небольших файлах. Допустим, элементов на 1000.

Последний раз редактировалось АлексЮстасу, 17.09.2013 в 18:55.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.09.2013, 19:45
#48
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


>>Чтобы использовать как тестовый для разных методов и программ.
Приложил. Я его взял как наихудший из возможных, в реальности так плох небывает. Для тестов нужно чтото реальнеое.
>>И на компьютере с какими характеристиками это делалось?
i5-2400, 8Gb, Kubuntu 13.04, x86_64
>>Еще интересно посмотреть, как оптимизация влияет на работу программ на небольших файлах. Допустим, элементов на 1000.
Давайте файл, посмотрю
Вложения
Тип файла: dwg
DWG 2004
nonregular.dwg (1,022.2 Кб, 2297 просмотров)
Тип файла: dwg
DWG 2004
regular.dwg (561.9 Кб, 2297 просмотров)
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 17.09.2013, 19:52
#49
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Давайте файл, посмотрю
А Вы обрежьте файл nonregular.dxf.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.09.2013, 20:36
#50
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


мешанину из 1000 примитивов нужно на компе послабже тестить
файл приложен - 1172 линии, 22067 пересечения, картинка для "разбиения" "по 10" приложена.
лог для случаев 10, 100, 1000, 2000(без разбиения)
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 1172
Fact tree depth: 6
Max tree depth: 16
Max in node entities: 10

Запущена команда:FindAllIntersections
Search intersections: 0.02 секунд
Line-AABB tests count: 7850
Line-Line tests count: 113453
Intersections count: 22067
Запущена команда:RebuildTree
-------------------------------------
Rebuild drawing spatial: 0.01 секунд
Total entities: 1172
Fact tree depth: 4
Max tree depth: 16
Max in node entities: 100
Запущена команда:FindAllIntersections

Search intersections: 0.02 секунд
Line-AABB tests count: 2092
Line-Line tests count: 135698
Intersections count: 22067
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 1172
Fact tree depth: 1
Max tree depth: 16
Max in node entities: 1000

Запущена команда:FindAllIntersections
Search intersections: 0.04 секунд
Line-AABB tests count: 54
Line-Line tests count: 360342
Intersections count: 22067
-------------------------------------
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 1172
Fact tree depth: 1
Max tree depth: 0
Max in node entities: 2000

Запущена команда:FindAllIntersections
Search intersections: 0.06 секунд
Line-AABB tests count: 0
Line-Line tests count: 686206
Intersections count: 22067
Контуры разбиения не точно повторяют вырезы, можно добиться более качественного разбиения (за счет "хитростей" с выбором плоскости и увеличения затрат времени). Но мне важна скорость построения дерева, и меня это устраивает

upd:
было бы интересно услышать результаты для приложенных файлов полученные штатными ARX средствами на сопоставимом компьютере
Миниатюры
Нажмите на изображение для увеличения
Название: nonregular2.png
Просмотров: 63
Размер:	132.7 Кб
ID:	112198  
Вложения
Тип файла: dwg
DWG 2004
nonregular2.dwg (203.5 Кб, 2258 просмотров)

Последний раз редактировалось zamtmn, 17.09.2013 в 20:51.
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 18.09.2013, 00:00
#51
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Вроде сделал поиск пересечений
Вы делаете пересечения, т.е. разбиваете элементы или только их находите?
Дело в том, что просто поиском пересечений никакие готовые программы не занимаются. Их находят, и что-то с ними делают - разбивают элементы в них, вставляют что-то и пр. Т.е. время затрачивается еще и на это. Если Вы их только находите, то сравнивать скорости программ невозможно.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.09.2013, 00:12
#52
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


Только нахожу пересечения и получаю информацию какая линия где пересекается, т.е. грубо говоря в каких точках каждую линию нужно резать. Порезат по этой информации линии или вставить туда чтото в принципе несложно, но это другая тема - тут геометрическая оптимизация непоможет
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 18.09.2013, 01:50
#53
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Порезат по этой информации линии или вставить туда чтото в принципе несложно, но это другая тема - тут геометрическая оптимизация непоможет
Тут оптимизация и не ожидается. Действие нужно для сравнения скорости.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
было бы интересно услышать результаты для приложенных файлов полученные штатными ARX средствами на сопоставимом компьютере
Нашей программы еще не существует.
Запустил этот файл на разбиение в пересечениях штатным инструментом Autocad Map 3D - Drawing cleanup-Break intersections. На неплохой машине, и машине немного похуже. Оба раза прождал минут сорок-пятьдесят - так и закрывал Автокад, не дождавшись.
Запустил здешней лисп-программой от VVA - BreakObjects22а. Результат такой же - тоже закрыл Автокад прерыванием работы через час молотьбы.
Пока что получается, что Ваша программа и без всякой оптимизации работает с однозначно фантастической скоростью. Либо Автокад тормозит на собственно разбивании, на создании новых элементов.

В этих файлах у элементов отрицательные координаты. Если меньший чертеж передвинуть в положительные координаты, то Drawing cleanup-Break intersections сделала все пересечения примерно за 8 секунд. А лисп BreakObjects22а по-прежнему не может завершить обработку.
На большем чертеже и Drawing cleanup-Break intersections тоже не может закончить.
Как-то непонятно... Тем более, что файлы я перед этим полечил, почистил, перекопировал содержимое в новый файл на основе штатного шаблона.

Последний раз редактировалось АлексЮстасу, 18.09.2013 в 05:12.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.09.2013, 08:44
#54
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 34,813


АлексЮстасу, не путай нахождение пересечений и выполнений операций с примитивами. Первое может занимать во много раз меньше времени, чем второе.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.09.2013, 10:34
#55
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


Приделал установку примитива "точка" в найденных точках пересечения, в выводе появился параметр Placing points - соответственно время затраченное на расстановку точек.
Результат для regular.dxf:
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.05 секунд
Total entities: 20000
Fact tree depth: 11
Max tree depth: 16
Max in node entities: 10
Запущена команда:FindAllIntersections
Search intersections: 0.07 секунд
Placing points: 0.01 секунд
Line-AABB tests count: 114732
Line-Line tests count: 653750
Intersections count: 10000
Результат для nonregular2.dxf:
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 1172
Fact tree depth: 6
Max tree depth: 16
Max in node entities: 10
Запущена команда:FindAllIntersections
Search intersections: 0.02 секунд
Placing points: 0.03 секунд
Line-AABB tests count: 7850
Line-Line tests count: 113453
Intersections count: 22067
С nonregular.dxf всё сложно - 11 миллилнов точек это не хухры-мухры. Процесс автоматически грохается сторожем памяти на этапе расстановки точек, т.к. работаю я без файла подкачки а памяти всего 8Gb. Последнее что я вижу в системном мониторе - расход памяти процесса переваливает за 5Gb.
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.09.2013, 10:40
#56
trir


 
Регистрация: 18.12.2010
Сообщений: 2,431


"Процесс автоматически грохается сторожем памяти на этапе расстановки точек" - поэтому я и говорю, что надо использовать Пространственную БД.
1. Пространственный индекс - то же дерево или лучше
2. SQL позволяет выполнять выборку нужных объектов
3. Сервер БД сам заморачивается с памятью
Нефиг изобретать велосипед, когда есть готовое решение...
trir вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.09.2013, 11:12
#57
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


>>Нефиг изобретать велосипед, когда есть готовое решение...
Я неспорю что это всё есть, но пожалуйста озвучте циферки результатов. Иначе это не готовое решение а "чтото там есть" и "вроде как для этого и задумывалось".
Свои поделки я никому не навязываю как готовое решение, просто мне это интересно.

update:
Приделал резалку по точкам пересечения. результаты для nonregular2.dxf с коментариями к новым параметрам:
Цитата:
Запущена команда:RebuildTree
Rebuild drawing spatial: 0.01 секунд
Total entities: 1172
Fact tree depth: 6
Max tree depth: 16
Max in node entities: 10

Запущена команда:FindAllIntersections
Search intersections and storing data: 0.03 секунд - кроме поиска появилсь обработка данных для последующей нарезки, время немного выросло
Placing points: 0.03 секунд
Cutting lines: 0.09 секунд - время на подрезку линий
Lines modified: 1169 - линий изменено
Lines created: 44134 - создано новых линий
Freeing memory: 0.01 секунд
Line-AABB tests count: 7850
Line-Line tests count: 113453
Intersections count: 22067
Обработанный файл прилагаю. В оригинале у меня на местах пересечения еще точки стояли, но чето с их сохранением в DXF появились проблемы, поэтому без них.
Вложения
Тип файла: dwg
DWG 2004
nonregular2cutted.dwg (2.08 Мб, 2001 просмотров)

Последний раз редактировалось zamtmn, 18.09.2013 в 15:37.
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 18.09.2013, 16:16
#58
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от trir Посмотреть сообщение
я и говорю, что надо использовать Пространственную БД
Такие чисто геометрические процессы, как разбивать пересечения, создавать контуры, находить попавшее в контуры и пр. больше всего нужны для первичной подготовки данных. Еще сугубо графических - линий, блоков, текстов и пр. В том числе для сбора и подготовки сырья для наполнения пространственных БД. Которую технологично делать в голых CADах или в них же, но дополненных для подготовки данных для этих пространственных БД. В такие БД нельзя же загружать неподготовленное соответствующим образом сырье - без топологической коррекции и пр. Поэтому программки типа разбивания пересечений и пр. нужны в первую очередь еще на уровне собственно CADов.
Против возможностей самих пространственных БД совершенно ничего не имею! Прямо наоборот.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Я неспорю что это всё есть, но пожалуйста озвучте циферки результатов.
Все, кто просил примеры и конкретные задачи, куда-то испарились
Цитата:
Сообщение от zamtmn Посмотреть сообщение
результаты для nonregular2.dxf с коментариями к новым параметрам:
У Вас там в сумме и полсекунды не набирается. Время на отрисовку на экране как-то влияет? Или Вы обрабатываете не загруженные файлы?
На чем у Вас написано? В целом же как-то несравнимо у Вас все быстро и без оптимизаций.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.09.2013, 17:29
#59
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,362
Отправить сообщение для zamtmn с помощью ICQ


Функция разбиения сырая, но не неоптимизированная. Там отсутствуют проверки на всякие закрытые слои, обрабатывается вся модель, а не выбранные примитивы... и прочие "мелочи". Поиск пересечений оптимизировать наврятли получится, разве что обнаружится какойнибудь глобальный косяк в алгоритме. Время создания-изменения примитивов возрастет раза в полтора-два после заворачивания в undo\redo. Наверно можно будет выиграть несколько процентов "подтасовывая" данные приготавливаемые к последующей нарезке - но кординально оптимизировать там нечего

Написано на паскале, в виде команды для самодельной кад программы, тоже написанной на паскале. Обрабатывается загруженный файл, во время обработки никаких отрисовок не происходит, программа "повисает" на время выполнения команды.
zamtmn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 18.09.2013, 18:01
#60
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,551


Цитата:
Сообщение от zamtmn Посмотреть сообщение
для самодельной кад программы
Гм... В этом случае сравнивать вообще невозможно. Мне говорят, что в Автокаде просто по разу просмотреть 1000 элементов никак в 0.01 секунды не уложишься. И т.д.
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Оптимизация обработки большого числа элементов

Инженерные консультации
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Жилые и общественные здания: краткий справочник инженера-конструктора. Под ред. Ю.А. Дыховичного и В.И. Колчунова. 2011 (Впечатления и отзывы). Armin Поиск литературы, чертежей, моделей и прочих материалов 17 22.08.2017 16:55
Документация Проектировщику на Torrents DEM Разное 251 23.06.2016 11:59
Порекомендуйте литературу для повышения квалификации(грунты, геотехника) acid Поиск литературы, чертежей, моделей и прочих материалов 6 13.05.2015 22:14
Случайный эксцентриситет p_sh Прочее. Архитектура и строительство 14 22.07.2009 11:32
Защита от распространения большого числа dwg E.D. AutoCAD 24 21.11.2008 09:02

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


Размещение рекламы