AutoCAD .Net禁止图元被删除的方法
本文为大家分享了AutoCAD.Net禁止图元被删除的具体代码,供大家参考,具体内容如下
禁止图元被用户删除可以通过ObjectOverrule实现。
以下代码:
1、命令AddEraseOverrule创建两个图元并禁止被删除。
2、命令RemoveEraseOverrule移除删除限制。
staticEraseOverruleeraseRule=null; publicclassEraseOverrule:ObjectOverrule { publicoverridevoidErase(DBObjectdbObject,boolerasing) { thrownewAutodesk.AutoCAD.Runtime.Exception( Autodesk.AutoCAD.Runtime.ErrorStatus.NotApplicable); //base.Erase(dbObject,erasing); } } [CommandMethod("AddEraseOverrule")] publicstaticvoidAddEraseOverrule() { if(eraseRule==null) { eraseRule=newEraseOverrule(); Overrule.AddOverrule(RXObject.GetClass(typeof(Entity)), eraseRule,true); Overrule.Overruling=true; eraseRule.SetIdFilter(CreateEntities()); } } [CommandMethod("RemoveEraseOverrule")] publicstaticvoidRemoveEraseOverrule() { if(eraseRule!=null) { Overrule.Overruling=false; Overrule.RemoveOverrule(RXObject.GetClass(typeof(Entity)), eraseRule); eraseRule.Dispose(); eraseRule=null; } } privatestaticObjectId[]CreateEntities() { Documentdoc=Application.DocumentManager.MdiActiveDocument; Databasedb=doc.Database; ObjectId[]oids=newObjectId[2]; using(Transactiontr=db.TransactionManager.StartTransaction()) { BlockTableRecordspace=tr.GetObject(db.CurrentSpaceId,OpenMode.ForWrite)asBlockTableRecord; // Lineline=newLine(); line.StartPoint=newPoint3d(0,0,0); line.EndPoint=newPoint3d(100,100,0); space.AppendEntity(line); tr.AddNewlyCreatedDBObject(line,true); oids[0]=line.ObjectId; // Circlecircle=newCircle(); circle.Center=newPoint3d(0,0,0); circle.Radius=50; space.AppendEntity(circle); tr.AddNewlyCreatedDBObject(circle,true); oids[1]=circle.ObjectId; tr.Commit(); } returnoids; }
1、类EraseOverrule继承自ObjectOverrule,并重写了Erase方法。
在该方法中,通过抛异常而不是执行删除操作,禁止图元被删除。
2、SetIdFilter确保该规则只对特定ObjectId的图元有效。
ObjectOverrule还有方法SetXDataFilter,可以用来设置只对拥有特定XData的对象有效。
参考文章:Preventdeletion/erasingofentity
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。