介绍
怎么在AutoCAD。net中禁止图元被删除?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1,命令AddEraseOverrule创建两个图元并禁止被删除。
2,命令RemoveEraseOverrule移除删除限制。
static EraseOverrule eraseRule =,空; public class EraseOverrule : ObjectOverrule { ,public override  void 消除(DBObject dbObject, bool 擦除) ,{ throw 才能;new  Autodesk.AutoCAD.Runtime.Exception ( ,,,Autodesk.AutoCAD.Runtime.ErrorStatus.NotApplicable);//base.Erase才能(dbObject,,抹去); ,} } [CommandMethod (“AddEraseOverrule")) public static  void AddEraseOverrule () { ,if (eraseRule ==, null) ,{ 时间=eraseRule 才能;new EraseOverrule (); Overrule.AddOverrule才能(RXObject.GetClass (typeof(实体)), ,,,,,,,,,eraseRule真实); Overrule.Overruling =,才能正确; eraseRule.SetIdFilter才能(createentity ()); ,} } [CommandMethod (“RemoveEraseOverrule")) public static  void RemoveEraseOverrule () { ,if (eraseRule !=, null) ,{ 时间=Overrule.Overruling 才能;假; Overrule.RemoveOverrule才能(RXObject.GetClass (typeof(实体)), ,,,,,,,eraseRule); eraseRule.Dispose才能(); 时间=eraseRule 才能;零; ,} } private static  ObjectId [], createentity () { ,Document doc =, Application.DocumentManager.MdiActiveDocument; ,Database db =, doc.Database; ,ObjectId [] oids =, new ObjectId [2]; ,using (Transaction tr =, db.TransactionManager.StartTransaction ()) ,{ BlockTableRecord 才能;space =, tr.GetObject (db.CurrentSpaceId, OpenMode.ForWrite), as BlockTableRecord; ,//Line 才能;Line =, new 线(); line.StartPoint 才能=,new Point3d (0, 0, 0); 时间=line.EndPoint 才能;new Point3d (100,, 100,, 0); space.AppendEntity才能(线); tr.AddNewlyCreatedDBObject才能(线,,真的); oid才能[0],=,line.ObjectId; ,//Circle 才能;Circle =, new 圆(); circle.Center 才能=,new Point3d (0, 0, 0); 50=circle.Radius 才能;; space.AppendEntity才能(圆); tr.AddNewlyCreatedDBObject才能(圆,,真的); oid才能[1],=,circle.ObjectId; tr.Commit才能(); ,} ,return oid; }
1,类EraseOverrule继承自ObjectOverrule,并重写了擦除方法。
在该方法中,通过抛异常而不是执行删除操作,禁止图元被删除。
2, SetIdFilter确保该规则只对特定ObjectId的图元有效。
ObjectOverrule还有方法SetXDataFilter,可以用来设置只对拥有特定XData的对象有效。
。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。