Добрый день!
Есть необходимость пост-модификации объекта. То есть, пользователь редактирует объект, по окончании этого определяются его свойства. Проводится анализ. Если что-то не устраивает - объект автоматически корректируется.
Реализовал это так:
- подписался на событие модификации объекта базы данных (Autodesk.AutoCAD.DatabaseServices.Database.ObjectModified);
- обработчик события проверяет тип объекта и его характеристики, определяет необходимость пост-модификации;
- если объект нужно дообработать, вызываю его метод UpgradeOpen() и провожу необходимые изменения (без запуска дополнительной транзакции, т.к., как я понимаю, при модификации объекта она уже запущена системой).
Это работает как надо, но есть смущающие моменты:
- если отменять действия вызовом стандартной команды UNDO, то возникает исключение из-за того, что "eWasOpenedForUndo".
- один раз было предупреждение "eWasOpenedForModify", почему - понять не успел, повторить не смог.
Защита от этого с помощью try-catch помогает, но может есть более правильный подход для таких действий с объектами?