2016-06-27 3 views
1

Я пытаюсь изменить любой полилинии XData тогда и только тогда, когда его положение, площадь, или форма (изменения в вершинах) изменяется.Обнаружение изменений на полилинию области, положение или форма

Каковы возможные способы сделать это в AutoCAD?

Заранее спасибо за вашу помощь

ответ

1

При использовании XData, некоторые DXF codes are transformed with their owner. Вы можете использовать коды: ExtendedDataWorldXCoordinate (1011), ExtendedDataWorldXDisp (1012), ExtendedDataWorldXDir (1013), ExtendedDataDist (1041) и ExtendedDataScale (1042).

Однако в вашем случае я буду использовать события Database.ObjectModified или DBObject.Modified. Вы можете использовать this approach, чтобы найти, какие свойства были изменены.

Для того, чтобы получить хорошую производительность, вы должны использовать ObjectOverrule, где вы будете переопределить метод Open, сохранить состояние ломаной линии, если он открыт на запись и сравнить его с состоянием найденного в методе Close. Затем вы можете изменить XData в обработчике событий CommandEnded, чтобы быть в безопасности.

Вы также можете использовать события DBObject.OpenedForModify и DBObject.ObjectClosed.

Фактически, есть много способов сделать это, но ObjectOverrule представляется лучшим вариантом, так как вы можете установить фильтр на XData. И когда вы переопределяете метод Close, у вас есть прямой доступ к объекту и его состоянию, тогда как в событии DBObject.ObjectClosed у вас есть только Id.