Дмитрий Загорулькин подсказал интересную идею с использованием расширенных данных, которые меняются вместе с примитивом
Подсказать-то подсказал, но сам, честно говоря, никогда не пробовал этот механизм. Я о нем узнал еще когда писал на LISP, отметил на будущее эту возможность, но так и не воспользовался ею. Одна из причин - я крайне редко и неохотно использую Xdata из-за их ограничения по размеру и нелогичной (с моей точки зрения) надобностью регистрировать приложение, чтобы их использовать.
Но без подводных камней не обошлось - они не меняются, при редактировании свойств примитива через палитру свойств.
А не баг ли это, случаем? Может поинтересоваться в АДН, что они об этом думают?
Теоретически это возможно при помощи пары событий: Database.ObjectOpenedForModify и Database.ObjectModified. В первом сохраняешь состояние, во втором сравниваешь текущее и сохраненное.
А в третьем событии (Application.Idle, Document.CommandEnded, Editor.EnteringQuiescentState и т.п.) уже можно редактировать расширенные данные. И при каждом чихе, эта троица событий будет отрабатывать: проверять тип объекта, есть ли у него РД, нужно ли их менять... А когда меняешь РД, нужно не забывать отключать эти события, чтобы не уйти в рекурсию. В общем, тот еще головнячок. Но, раз способ со спецкодами не работает, я не вижу другого решения.