![]() |
【转帖】图层操作时抛出 ewaserased 异常的原因与解决(含代码)
图层操作时抛出 ewaserased 异常的原因与解决(含代码)
www.dimcax.com 图层操作时抛出 ewaserased 异常的原因与解决(含代码) , 例如,当我们新建一个名为“ping“的层后,可以对“ping"层进行任何的属性或删除该层的操作,但是当我们把“ping"层删除后重新建一个新的名为“ping"的层,若想对新建的“ping"层进行删除或属性操作cad就会抛出autodesk.autocad.runtime.exception: ewaserased 异常,当我们检测“ping"层的iserased属性时结果为true,这说明该层已删除! 原因与办法:我们明明删除了名为“ping"的层,又新建了个名为“ping"的层但为什么会出现该层已删除的信息呢?由此 说明cad本身并未真正的删除,所以我们要检测名为“ping"的且没有册除的层对像。这才是我们想要的。 以修正颜色属性为例,具体代码更正如下: public boolean layer_setproperties_color(string layername, short layercolorvalue)//设置层颜色 { using (documentlock doclock = autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.lockdocument()) { database db = hostapplicationservices.workingdatabase; using (transaction trans = db.transactionmanager.starttransaction()) { objectid lttmp = objectid.null; layertable lt = (layertable)trans.transactionmanager.toptransaction.getobject(db.layertableid, openmode.forwrite,false ); if (lt.has(layername) == false) { //图层不存在! return false; } objectid objid = lt[layername]; if (objid.iserased) { foreach (objectid oldid in lt) { if (!oldid.iserased) { layertablerecord ltrtmp = (layertablerecord)trans.transactionmanager.toptransaction.getobject(oldid , openmode.forwrite, false); if (ltrtmp.name.trim() == layername.trim()) { lttmp = oldid; break; } } } } else { lttmp = objid; } //editor ed = application.documentmanager.mdiactivedocument.editor; //ed.writemessage(lt[layername].iserased.tostring()); layertablerecord ltr = (layertablerecord)trans.transactionmanager.toptransaction.getobject(lttmp , openmode.forwrite, false); color layercolor = color.fromcolorindex(colormethod.bycolor, layercolorvalue); ltr.color = layercolor;//设置层颜色 trans.commit(); return true; } } 复制代码 |
| 所有的时间均为北京时间。 现在的时间是 08:56 PM. |