I want to lock my layer from deleting.
I did it as for object:
public class NonErasableLayer : ObjectOverrule
{
public NonErasableLayer()
{
this.SetCustomFilter();
}
protected override void Dispose(bool value)
{
this.SetNoFilter();
base.Dispose(value);
}
public override bool IsApplicable(Autodesk.AutoCAD.Runtime.RXObject overruledSubject)
{
if (overruledSubject == null)
return false;
return (overruledSubject is LayerTableRecord);
}
public override void Erase(DBObject dbObject, bool erasing)
{
if (dbObject is LayerTableRecord)
{
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nLAYER IS LOCKED.\n");
}
throw new Autodesk.AutoCAD.Runtime.Exception(ErrorStatus.NotApplicable);
}
}
Then I set overrule for Drawable objects:
ObjectOverrule.AddOverrule(RXClass.GetClass(typeof(Drawable))...
When I run it I saw my message from Erase method but... layer is deleted.
This method works fine for any objects as Line or Circle, but doen't work for layer.
How I can reject layer deleting?
Thanks,
Pavel.
In link below is a similar thread and was to store the LayerTableRecord's ObjectIDs as Hard Pointers.
Would use the advice to store in Owners ExtensionDictionary
http://www.theswamp.org/index.php?topic=41870.msg469858#msg469858