AutoCAD .Net禁止图元被删除的方法
程序员文章站
2022-06-23 21:52:29
本文为大家分享了autocad .net禁止图元被删除的具体代码,供大家参考,具体内容如下
禁止图元被用户删除可以通过 objectoverrule 实现。
以下代码:...
本文为大家分享了autocad .net禁止图元被删除的具体代码,供大家参考,具体内容如下
禁止图元被用户删除可以通过 objectoverrule 实现。
以下代码:
1、命令 adderaseoverrule 创建两个图元并禁止被删除。
2、命令 removeeraseoverrule 移除删除限制。
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("adderaseoverrule")] public static void adderaseoverrule() { if (eraserule == null) { eraserule = new eraseoverrule(); overrule.addoverrule(rxobject.getclass(typeof(entity)), eraserule, true); overrule.overruling = true; eraserule.setidfilter(createentities()); } } [commandmethod("removeeraseoverrule")] public static void removeeraseoverrule() { if (eraserule != null) { overrule.overruling = false; overrule.removeoverrule(rxobject.getclass(typeof(entity)), eraserule); eraserule.dispose(); eraserule = null; } } private static objectid[] createentities() { 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(); line.startpoint = new point3d(0, 0, 0); line.endpoint = new point3d(100, 100, 0); space.appendentity(line); tr.addnewlycreateddbobject(line, true); oids[0] = line.objectid; // circle circle = new circle(); circle.center = new point3d(0, 0, 0); circle.radius = 50; space.appendentity(circle); tr.addnewlycreateddbobject(circle, true); oids[1] = circle.objectid; tr.commit(); } return oids; }
1、类 eraseoverrule 继承自 objectoverrule,并重写了 erase 方法。
在该方法中,通过抛异常而不是执行删除操作,禁止图元被删除。
2、setidfilter 确保该规则只对特定 objectid 的图元有效。
objectoverrule 还有方法 setxdatafilter,可以用来设置只对拥有特定 xdata 的对象有效。
参考文章: prevent deletion/erasing of entity
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。