Предотвращение удаления примитива
Один из путей для предотвращения удаления примитива – это использование объектного переопределение (overrule). При помощи этого переопределения можно переопределить функционал удаления (“Erase”) таким образом, что примитив нельзя будет удалить.
Ниже приведен пример, предотвращающий удаление только тех примитивов, у которых есть расширенные данные с именем приложения “ADS”. Чтобы добавить имя приложения к расширенным данным можно воспользоваться статьей «Использование .NET API для добавления и удаления расширенных данных»
Для использования этого кода сначала создайте несколько примитивов и добавьте им расширенные данные с именем приложения “ADS”. Запустите команду “eraseOverrule”, которая добавит к этим примитивам переопределение. Вызов “SetXDataFilter()” указывает, что переопределение будет относиться только к примитивам, у которых в расширенных данных есть имя приложения “ADS”. Теперь попробуйте удалить примитив с этими расширенными данными. Функция обратного вызова “Erase” будет вызвана и вернёт значение “NotApplicable”. Это заставит AutoCAD не удалять этот примитив.
- static EraseOverrule eraseRule = null;
- public class EraseOverrule : ObjectOverrule
- {
- public override void Erase(DBObject dbObject, bool erasing)
- {
- throw new Autodesk.AutoCAD.Runtime.Exception(
- Autodesk.AutoCAD.Runtime.ErrorStatus.NotApplicable);
- //base.Erase(dbObject, erasing);
- }
- }
- [CommandMethod("eraseOverrule")]
- static public void eraseOverrule()
- {
- if (eraseRule == null)
- {
- eraseRule = new EraseOverrule();
- Overrule.AddOverrule(RXObject.GetClass(typeof(Entity)), eraseRule, true);
- Overrule.Overruling = true;
- eraseRule.SetXDataFilter("ADS");
- }
- else
- {
- Overrule.Overruling = false;
- Overrule.RemoveOverrule(RXObject.GetClass(typeof(Entity)), eraseRule);
- eraseRule.Dispose();
- eraseRule = null;
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/05/prevent-deletionerasing-of-entity.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=314
Опубликовано 09.11.2013Отредактировано 09.11.2013 в 17:32:43