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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。