Тема: AcDbHardPointerId и новая версия объекта

1) Есть MyEntity версии 1
2) В нем есть ссылка на блок как AcDbHandle
3) Команда PURGE убивает блок, если на него никто не ссылается как AcDbHardPointerId
4) Решил сделать MyEntity версии 2
5) Сделал AcDbHardPointerId blockPtr
6) В dwgInFields если версия 1, то blockPtr = (oldObjectIdPtr) если 2, то readHardPointerId(&blockPtr)
Проблема в том, что объекты на старых чертежах версии 1 не модифицируются при работе с чертежом и следовательно после закрытия не сохраняются, а значит не срабатывает dwgOutFields, а значит не пишется HardPointerId.
Получается, что сделав объект с новой версией я решил проблему с purge для новых создаваемых объектов, а старые объекты в старых чертежах - даже при открытии не ссылаются на блок через механизм HardPointerId ссылок... При этом если эти объекты не модифицировать в процессе работы - они так и остаются старой версии...
Как можно в dwgInFields сказать что объект надо записать. (assertWriteEnabled и так стоит - но объект видимо после завершения чтения помечается как не модифицированный и следовательно пытаться сказать что объект изменен в его загрузке не получиться )
Как можно решить такую проблему чтоб старые объекты записывались как новые после открытия и закрытия чертежа?

Re: AcDbHardPointerId и новая версия объекта

> KonstantinM
https://www.caduser.ru/forum/topic27962.html только с точностью до наоборот. Годится?

Re: AcDbHardPointerId и новая версия объекта

Не годится.
Объясняю еще раз:
1) У меня в черетеже создается некоторый вспомогательный объект, который ссылается на блок. Он нужен только на чтение. Т.е. после создания он больше не модифицируется и используется только на чтение.
2) Т.е. в старом чертеже уже создано некоторое кол-во этих вспомогательных объектов и при открытии и работе с чертежом эти объекты переводятся с версии 1 на версию 2, но т.к. они НЕ МОДИФИЦИРУЮТСЯ, то даже при СОХРАНЕНИИ чертежа, им не зовется dwgOutFields(). Т.е. объекты однажды созданные как версии 1, уже не сохранятся под версией 2 т.к. их никто не модифицирует.
3) Поскольку старые объекты лежат в чертеже как версия 1, то при их открытии - dwgfiler не читает HardPointerId-ы т.к. их там нет и блоки, на которые ссылаются, получаются доступными для удаляения при команде PURGE.
4) Т.е. получается чтоб блок знал, что на него кто-то ссылается, надо чтоб в чертеж сохранился HardPointerId на него, чтоб позвался метод dwgOutFields у вспомогательного объекта, чего не происходит для старых объектов т.к. они не модифицируются и насильное или не насильное сохранение чертежа не помогает...
5) Цель - чтобы чертеж открылся - объекты при dwgInFields увидели что они старой версии (они это видят), пометили себя как модифицированные, чтобы при сохранении чертежа - они сохранились. Но не понятно как при открытии объекта пометить его что он модифицирован...