Тема: Как отчистить DWG от блоков без ссылок

Как программно отчистить DWG от блоков на которые нет ссылок через AcDbHardPointerId (и т.п.)?
В хелпе написано, что мол ссылка через AcDbHardPointerId на объект - защищает этот объект от purge... Как бы не так... Итератором перебираю блоки и вызываю erase(true)... Получаю печальный результат - они удаляются - все падает..., хотя у меня есть AcDbBlockReference-ы для удаляемых блоков.
Получается перед тем как грохнуть блок, как то надо узнать есть ли на него reference-ссылки... А они могут быть не только из AcDbBlocReferenc-ов, но и других custom объектов других производителей, которые еще могут в текущий момент отображаться в виде прокси-объекта...
Как определить ссылается ли кто на объект в базе и можно ли его удалить?

Re: Как отчистить DWG от блоков без ссылок

> KonstantinM
Обрати внимание на метод purge класса AcDbDatabase. Только сегодня показал пример с удалением слоев: https://www.caduser.ru/forum/topic24980.html

Re: Как отчистить DWG от блоков без ссылок

Понял. Спасибо.

Re: Как отчистить DWG от блоков без ссылок

А можно пользоваться
AcDbBlockTableRecord::getBlockReferenceIds() ?

Re: Как отчистить DWG от блоков без ссылок

> ROMA
AcDbBlockTableRecord::getBlockReferenceIds() вернет только AcDbObjectId'ы для AcDbBlokReference'ов (и произодных от него классов), которые ссылаются на эту AcDbBlockTableRecord. В обычной ситуации этого достаточно. Но Константин использует AcDbHardPointerId из своих объектов, которые, как я догадываюсь, необязательно производные от AcDbBlokReference и просто хранят в себе ссылки на AcDbBlockTableRecord (или на производный от него класс). Поэтому метод AcDbDatabase::purge(...) в данном случае более правильный. IMHO!

Re: Как отчистить DWG от блоков без ссылок

> Александр Ривилис
AcDbBlockTableRecord::getBlockReferenceIds() вернет только AcDbObjectId'ы для AcDbBlokReference'ов (и произодных от него классов), которые ссылаются на эту AcDbBlockTableRecord. В обычной ситуации этого достаточно. Но Константин использует AcDbHardPointerId из своих объектов, которые, как я догадываюсь, необязательно производные от AcDbBlokReference и просто хранят в себе ссылки на AcDbBlockTableRecord (или на производный от него класс). Поэтому метод AcDbDatabase::purge(...) в данном случае более правильный. IMHO!
Именно так. Более того, не только мои объекты, но и других производителей могут ссылаться на блок. И если просто убиять сиих только по признаку getBlockReferenceIds и своих объектов - это идеологически потенциальная яма для ошибок.