各位老师, ORD中国版中, 把ORD路线元素, 转换为COM口下的Element元素, 下面这么写不对吗? 为啥运行次数多了会闪崩, 请指教Bentley.Interop.MicroStationDGN.Element bimEE = SampleMixed.ElementOperation.ConvertToInteropEle(Alignment.Element);
.NET中的Element和Interop(或称COM)中的Element确实不在一个内存空间中,它们之间的互转换确实是比较复杂的。郭老师写过一篇文章,相信您也是参考了那篇文章在使用的。
不过那篇文章的前提是:这两种Element在内存中(未被保存到DGN文件中,因此没有ElementId)时的互转换。如果任何一方已经被保存在了DGN文件中了的话,其实是可以通过读取ElementId来获得另外一种形式的Element的。所以,如果您的Alignment已经被写入到了DGN文件中的话,可以改用更简单的形式来处理。
另外,我想了解的是:您要将Alignment.Element转成Interop下的Element的目的是什么?是否某个方法在.NET下找不到了?
老师, 我要获取XDATA数据(BIM.XDataObject oXData = bimEE.GetXData1(xdataName);), 使用场景是这样的, 首先我把获得的路线存储在一个List<Alignment>集合, 作为全局变量使用, 每次运行某过程, 就读取路线集合里每条路线上的XDATA数据, 我发现在ORD中国版里总是闪崩(之前我发帖子问过您), 但是在原来的英文版中也是这么用的, 但是从未出现这种闪崩的情况, 现在找问题找到这块来了, 怀疑是集合中路线多次转换为 COM口元素时崩溃, 请符老师帮忙看看我这个思路有问题吗, 谢谢
老师, 我们是为了保存一些不让用户看到且不可修改的工程数据, 且随着DGN文件可移动, 老师有更好的方法吗
当然有了。如果数据量不大的话,直接用UserDataLinkage,数据量大的话,用XAttribute。
老师, 这两种存储方式, 可否提供案例参考一下
XAttrbute请参考如下文章:
dgn
是的,ord获取Element的方式必须是后者。
老师, 我试了下, ord获取Element用al.Element为啥也行呀? 获取到的都是Bentley.DgnPlatformNET.Elements.Element类型, 请老师帮忙指正他们的区别是啥
目前我们软件里面的元素有两种,一种是基于Bentley.DGNPlatformNET.dll的,该元素的类型就是Bentley.DgnPlatformNET.Elements.Element;
一种就是com的接口,基于Bentley.Interop.MicroStationDGN.dll的,它的类型是Bentley.Interop.MicroStationDGN.Element;
如果想将Bentley.Interop.MicroStationDGN.Element转成Bentley.DgnPlatformNET.Elements.Element,那么可以通过获取其元素id然后再通过该元素id通过Bentley.DgnPlatformNET的方法找到该元素对象的办法。
老师, 我原来也用过通过ID获取, 但是如果元素是参考元素, 这个方法好像就不行了, 只能通过Bentley.Interop.MicroStationDGN.Element bimEE = SampleMixed.ElementOperation.ConvertToInteropEle(Alignment.Element); 才可以获取到
如果是参考文件,您试试ElementCopyContext 将参考元素拷贝到当前模型?
这样的话, 元素上面绑定的XDATA数据也会跟过来吗?