Не уверен, что это как-то поможет, но кто же это переименовывает блоки при итерировании по таблице блоков? Может всё-таки сначала получишь коллекцию AcDbObjectId для блоков, которые собираешься переименовывать, а потом будешь их переименовывать.
попробовал, результат тот же. а вообще странно получается - динамика остается всегда (видать из-за ссылок внутри бд на всякие там ручки, динамические операции), а статика ни к чему не привязанная удаляется всегда после прохода через dwgFileOpened, и не спасает даже функция acdbSetReferenced.
но если не проходить через dwgFileOpened, а восстанавливать имена открыв файл через readDwgFile, то все блоки (и статика, и динамика) восстанавливаются замечательно, чего мне в принципе хватит.
остался правда один файл, в которым с каждым закрыл/восстановил блоков становится меньше
даже при использовании readDwgFile. причем удаляется как статика так и динамика с завидным постоянством. вот с ним сейчас и разбираюсь, что там откуда растет и на кого ссылается.
Похоже ты переименовываешь все BlockTableRecord?
Т.е. пространства модели, листов, и внешние ссылки тоже?
не, ни пространства модели/листа, ни огрызки от копирования, ни другие анонимные блоки я не трогаю. короче, пропускается всё, что начинается на * или содержит $ в своем имени.
внешних ссылок или чего-то другого в файле нет и быть не может. это файл мой, который я (ну, не совсем я - сотрудники) наполняю блоками оборудования, и отдаю пользователям. через arx-ину формируется окно списка оборудования с картинками, которые появляются при клацанье на строку списка и происходит вставка блока в указанную точку по двойному щелчку. вот как-то так выглядит само окно
вот задача первая - сделать так, чтоб файлы блоков было бессмысленно утаскивать на компьютер без этой arx-ины при условии, что человек не знает словосочитания "анонимные блоки".
ну а вторая задача -
мои блоки вставленные в чертеж должны перестать копироваться/редактироваться/взрываться/переноситься/обладать динамическими свойствами при условии, что arx-ина говорит об окончании подписки, либо, если arx-ины вообще нет в загруженных приложениях - вместо блоков идет строка текста. в случае возобновления подписки блоки опять обретают нормальные имена и все свойства автокадовских блоков.
первая задача - практически решна, по крайней мере основной смысл понятен, осталось доработать напильником
, со второй - проблем практически нет (верней есть одна, но я о ней еще не думал). на момент закрытия чертежа (при условии, что файл редактировался и сохранялся) все мои блоки, вставленные в чертеж становятся анонимными, затем на них навешивается кастомный объект на основе AcDbEntity. Та же беда происходит при окончании подписки. При открытии файла в акаде в реакторе dwgFileOpened происходит обратный процесс и на выходе пользователь видит нормальные блоки, опять же при условии существования подписки. Если подписка кончилась, но он види красивую картинку, которую нельзя ни перенести, ни скопировать, ни расчленить. Но с чертежом дальше можно продолжать работать. Что он нарисовал сам я блокировать не имею права, да и желания как-то тоже пакостить нет. Вот в целом вся задумка выглядит так.
А не проще написать плагин без которого блоки просто не юзабельны?
и встроить dwg-шник(и) внутрь ресурсов arx-ины? если нет, то как раз о таком плагине и идет речь. ну а встраивать в ресурсы смысла нет - блоки постоянно пополняются. сейчас уже где-то полторы тысячи. год назад было штук 800.
Я тебе ссылку на лисп скинул, который это делает. Поэтому твой вопрос, про "научить стандартными средствами автокада" мне не понятен.
да, тут я слегка натупил, мыслями был в анонимных блоках. ну и мысли были о том, что
стандартными средствами автокада ни превратить блок в анонимный, ни вернуть ему нормальное имя в принципе не возможно. а превратить динамику в статику - не проблема.
Второй файл у тебя отличается от первого - внутрь динамических блоков вставлены обычные.
да, согласен, пропустил.