А есть ли что то подобное в AutoCAD API?Да. Причем способов несколько:
Выборка всех объектов из БД - явно не быстрая операция.Это смотря как посмотреть... Для примера: выборка 736 323 примитивов из базы данных чертежа объёмом более 50 Мб. составила 00:00:00,2781968 (т.е. 1/3 секунды). Достаточно шустро на мой взгляд.
Андрей, спасибо за статистику.а за обозначенный код с готовым решением??? :o
А компот???©;D шутки шучу. мы тут пьянку пьянствуем, вот у меня настроение и поднялось :)
Разговор будет более предметным, если Вы назовете тип объектов, которые хотите извлечь ;)Мне нужно было получить Устройства регулирования потока для конкретной напорной трубопроводной сети. Если говорить языком API, то объекты класса PressureAppurtenance для класса PressureNetwork.
bool result = database.TryGetObjectId(h, out id);
выдавал false. Так вот такая итерацияНо вот пришлось мне открыть чертеж, где TargetDb.Handseed.Value было равно 756 413 642!!!, причемБывает, хотя чаще всего этот чертеж создается не средствами AutoCAD или в нём действительно было огромное число примитивов, большую часть из которых удалили. Есть выполнить для такого чертежа _WBLOCK *, то метки упорядочиваются.
реально объектов в базе было около 250 000
Полилинии в ModelSpace, но разве ObjectId удаленных примитивов там остаются после удаления? Я думал что их можно достать только из базы.Остаётся где был. При помощи ObjectId.IsErased можно проверить удалён или нет.
BlockTableRecord withErasedBTR = record.IncludingErased;
я не знал.