在ORD中创建断链单元时添加了一个AlignmentEdit元素,请问创建后如何获取它的ElementId,或者将它转化为Element对象。例如创建了一个AlignmentEdit对象al,如果直接调用al.Element.ElementId会出错并直接导致软件崩溃,是否有较好的方法解决这个问题。
如果al.Element为空的话,可以使用al.DgnECInstance.Element.ElementId获取ID。al.Element.ElementId与al.DgnECInstance.Element.ElementId的ID值是相同的。
感谢回复,按照您提供的方法尝试之后还是存在之前的问题。在调用al.DgnECInstance或调用al.Element这一步时都会出现throw AccessViolationException的情况导致软件崩溃。
元素在未加入到DGN文件之前仅仅在内存中,是没有ElementId的,必须添加到文件后才有ElementId。肖工给您说的con.PersistTransients()后台应该就是将元素添加到DGN模型中的。(在MS层面调用的是AddToModel)
Persist = 永久化,Transient = 临时元素。故PersistTransients就是将临时元素永久化,即写入DGN模型中。
您确认确实调用了con.PersistTransients()吗?
是的,可以确认确实执行了con.PersistTransients(),且在模型中也确实已经添加了这个元素,al.DgnECInstance的调用也在con.PersistTransients()之后,但在获取al.DgnECInstance时仍然会出现问题。
刚才有一点没说清楚,就是虽然调用al.DgnECInstance会显示程序出错并导致软件强制关闭,但是再次打开软件后发现,使用了al.DgnECInstance.Element.ElementId这个参数的后续程序还是能够正确执行,目前仍未找到该问题的原因,麻烦前辈指教了。
这个问题解决了吗?我也遇到了同样的问题出错并导致软件强制关闭
确实有这样的问题,请耐心等待,我跟ORD开发组沟通下。
刚我按肖老师的方法试了下,是可以的: