Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: RevitTormentor от 22-01-2018, 10:49:42

Название: Загрузка элементов во время загрузки базы
Отправлено: RevitTormentor от 22-01-2018, 10:49:42
Правильно я понимаю, что сначала в момент открытия чертежа (условно в событиях dwg_open dwg_Created) все Entity загружаются в память. И потом я уже "вторично" могу по ним пройтись и взять нужные данные Polyline.Area XData и пр.

А можно например в момент загрузки Entity или ObjectDB в память из чертежа сразу его и обработать? Например посчитать длины полилиний.
Спасибо.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Дмитрий Загорулькин от 22-01-2018, 12:14:34
Чисто теоретически: можно отловить событие создания БД чертежа и прицепить к ней обработку события добавления в неё объектов. Но зачем?
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 22-01-2018, 12:42:59
Правильно я понимаю, что сначала в момент открытия чертежа (условно в событиях dwg_open dwg_Created) все Entity загружаются в память.
Нет.
А можно например в момент загрузки Entity или ObjectDB в память из чертежа сразу его и обработать?
Нет такого события. К сожалению я должен констатировать, что у тебя пока нет понимания работы AutoCAD. В дальнейшем постарайся описать что тебе нужно получить в конечном итоге, а мы постараемся объяснить как это можно сделать (если это возможно).
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 22-01-2018, 12:44:31
Чисто теоретически: можно отловить событие создания БД чертежа и прицепить к ней обработку события добавления в неё объектов.
Это будут объекты, которые потом добавляются к базе, а не те, которые были в базе при её открытии.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Дмитрий Загорулькин от 22-01-2018, 13:01:54
Мы же, если программно читаем БД чертежа, сперва создаём Database, а потом применяем к ней метод чтения из файла. Вот между этими действиями и можно было бы вставить обработчик события. Я предположил, что, возможно, любое открытие чертежа работает по такому же принципу (не только программное) - сперва создаётся пустая БД, потом наполняется объектами. Но очень может быть, что всё совсем не так.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 22-01-2018, 13:10:38
Но очень может быть, что всё совсем не так.
А проверить??? :-)
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Дмитрий Загорулькин от 22-01-2018, 13:17:02
Нет времени. А главное - нет необходимости. Вот если автору темы надо - пусть проверяет ;)
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: RevitTormentor от 22-01-2018, 14:04:19
Это будут объекты, которые потом добавляются к базе, а не те, которые были в базе при её открытии.

В какой момент Handle меняются в базе документа при открытии чертежа?
Какое то сравнение происходит на совпадение в базе?
И так каждый объект добавляясь из файла в базу, проверяет свой старый Handle на совпадение, и если найдено, то свой меняет, а потом опять проходится по базе и меняет ещё у связанных?

Или в конце, все загрузились и потом сортировка?
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Алексей Кулик от 22-01-2018, 14:57:18
Насколько я понимаю, Handle сами по себе не меняются. Единственная ненулевая вероятность - Handle может быть изменен при вставке файла как внешней ссылки. Вот тогда в файле-владельце Handle могут быть и изменены.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: RevitTormentor от 22-01-2018, 15:06:59
Я где то на форуме прочитал, что Handle может измениться у Объекта, а может и нет при загрузке чертежа. Если речь только про внешние ссылки это значительно упрощает дело.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Алексей Кулик от 22-01-2018, 15:18:43
Это ObjectID меняется каждый раз, но Handle... По-моему, это нечто неизменное :)
О, есть еще пара вариантов, когда Handle меняется!
1. Вставка текущего файла в другой как блок.
2. Выполнение команды _.wblock или _.-wblock и выполнение аналогичных действий.
Правда, это уже не будет иметь никакого отношения к текущему файлу.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 22-01-2018, 23:12:50
 
В какой момент Handle меняются в базе документа при открытии чертежа?
Какое то сравнение происходит на совпадение в базе?
И так каждый объект добавляясь из файла в базу, проверяет свой старый Handle на совпадение, и если найдено, то свой меняет, а потом опять проходится по базе и меняет ещё у связанных?

Или в конце, все загрузились и потом сортировка?
Это полнейший бред. Я даже не знаю что на это можно ответить... Увы.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 22-01-2018, 23:13:32
Я где то на форуме прочитал, что Handle может измениться у Объекта, а может и нет при загрузке чертежа. Если речь только про внешние ссылки это значительно упрощает дело.
Не может он изменится при загрузке чертежа. Никак.
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: trir от 23-01-2018, 07:50:47
А когда Handle закончится - AutoCAD умрёт
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fforum.dwg.ru%2Fattachment.php%3Fattachmentid%3D195914%26amp%3Bd%3D1511339578&hash=5d086d20169276d681619a96ae85fe90)
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Алексей Кулик от 23-01-2018, 08:54:19
Необязательно :) Но корректно работать точно не сможет ;)
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: trir от 23-01-2018, 13:11:34
действительно, когда доходит до конца, то начинает с начала
но вот такой dxf AutoCAD убъёт
  0
SECTION
  2
HEADER
  9
$HANDSEED
  5
FFFFFFFFFFFFFFFF
  0
ENDSEC
  0
SECTION
  2
ENTITIES
  0
ENDSEC
  0
EOF
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 23-01-2018, 13:14:18
но вот такой dxf AutoCAD убъёт
Ну если есть желание получить Fatal Error в AutoCAD, то есть масса способов. Но какое это имеет отношение к данной теме???
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: trir от 23-01-2018, 13:26:41
Цитировать
Но какое это имеет отношение к данной теме???
handle меняется при загрузке некоторых dxf - если в них нет $ACADVER, то handle может назначатся заново
Название: Re: Загрузка элементов во время загрузки базы
Отправлено: Александр Ривилис от 23-01-2018, 13:34:42
handle меняется при загрузке некоторых dxf - если в них нет $ACADVER, то handle может назначатся заново
В теме есть хоть слово про dxf?