当前位置: 移动技术网 > IT编程>开发语言>.net > AutoCAD .Net禁止图元被删除的方法

AutoCAD .Net禁止图元被删除的方法

2018年08月05日  | 移动技术网IT编程  | 我要评论

派对第一季全集,飞跃大明宫 之皇后奋斗记,侯芊浥

本文为大家分享了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 的对象有效。

参考文章:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网