符老师,郭老师:
如题,在平时的建模操作过程中,需要将多个引用参考文件合并到主文件中,存在这种情况:将 a.dgn 复制两份重命名b.dgn、c.dgn ,然后在又在 x.dgn 文件中同时 引用挂接了a.dgn,b.dgn,c.dgn这三个文件,对a.dgn,b.dgn,c.dgn 仅做一些位置调整或者少量修改,组合做了一个”合并到主文件的操作“,此时多个dgn文件就变成了一个文件。而这时候,就存在大量的元素的elementID以及各种属性编码产生了重复(因为a.dgn,b.dgn,c.dgn 模型里面的元素elementID和属性是一模一样的),我该如何识别和处理这种情况,自动为重复的元素重新设置elementID和属性以避免造成重复元素的出现?
除了直接复制构件、以及这种合并复制文件,不知道还有没有其他情况会造成元素ID/属性编码重复的情况。或者建模软件有没有一个自动分配的全局唯一的元素编码能够一劳永逸的解决这种元素重复身份识别的问题
其实现实需求就是,需要为每个元素分配一个编码,从创建到删除整个过程中不会改变,全互联网和各种平台交换处理过程中都是唯一的(排除人为故意修改),就像人的身份证号码一样,一旦设定,将来不管什么情况,都不会改变或者和别人身份号码重复。
同一个模型中每个元素的元素id不同,但跨模型就有可能相同,要么,用ec的方式给dgn文件每个模型附加一个id,这个id是唯一的,具体算法网上有相关的例子,要么就是先根据模型,再去判断元素。
ec方式附加的id,当拷贝元素的或者文件的时候,是不是就存在两个id相同的元素了?如何解决?
有个元素回调的函数,当元素添加到DGN里面就会触发,您可以在里面更新EC的ID,请参考这个帖子:
communities.bentley.com/.../627391
因为DGN毕竟是以文件为基础的,想要实现各文件间的元素ID也不重复就比较难做,就像您描述的这种文件复制动作,肯定a、b、c三个文件中的元素的ID都是相同的。合并后虽然Id不同了,但失去了原来的ID特性。在Bentley的Map系列软件中,它采用了MapID+ElementID组合来唯一标识一个元素。这个MapID又和一个具体的文件关联。
比如a.dgn对应的MapID=1,b.dgn的MapID=2,c.dgn的MapId=3。这样,同样的ElementID为100的三个元素,在三个文件中的ID就分别是1-100、2-100和3-100了。