关于v8里元素elementID的含义

[转载Bentley中文知识库原贴] 快乐小乞丐:在v8格式的数据中,点击"i"可以查看数据更详细的信息,在v8中添加了数据最后修改时间,以及数据的elementID和pos数值,发现在2004版中,新建一个文件,添加元素后发现elementID是从112开始计算的,二pos是从4000000开始记录的,以后的元素顺次添加,想知道这两个数值的含义以及区别!
我想在7.0版本中做一个数据更新模块,由于7.0版本中的数据中没有最后修改日期这一信息,我想在数据更新之前先给所有的数据添加用户属性信息,包括最后修改时间和流水号ID,更新数据时,若ID号不连续的号,中间丢失的号就是删除的元素,新加的ID号就是新增的地物,元素属性里有修改状态,这以值可以知道元素是否被修改过,通过这样的比较我就可以在源文件和修改过的文件之间进行比较,只更新删除、新增、和修改的元素!这只是我的初步设计,还没有进行实施,请大家看看是否油可操作性,如果这个功能可以实现,就可以在单机上实现文件的增量更新,那么就可以是实现以部分的project wise的功能了,是不是这样?

 

[转载Bentley中文知识库原贴] swp160108:每修改一个元素就要添加一个属性信息?

如果你得到的文件没有这个信息怎么办?想法很好, 实现不容易。

 

 

 

  • [转载Bentley中文知识库原贴] Johnson:一个dgn文件里的元素分为2类:控制元素(Control element)和图形元素(Graphic Elements),控制元素的文件位置是在2000000到4000000之间,图形元素的文件位置从4000000开始。实际上filepos是元素的序列号,后一个元素的文件位置比前一个元素的序列号多1。
    ElementID是一个元素生命周期内永远不会变的一个值,它不会随dgn文件的打开关闭而变化,并且一个文件里的ElementID不会重复。

     

    对于单元这样的复杂元素,2个相邻的单元的elemetid并不是差1的。而且也不能用filepos,因为每次打开dgn的时候同一个元素的filepos是在内存里重新分配的,是会变化的。

    [转载Bentley中文知识库原贴] Johnson:我想程序的思路应该这样:同时打开2个dgn文件,然后挨个的对照elementID,而不是判断是否有不连续的ID出现。这样就可以判断出哪些是删除和新增加的元素。但是对于修改的元素,由于ElementID是不变的,所以需要通过你所说的自己写入的lastModified属性值进行对比来判断。而这些属性需要在每次修改元素时,自动写入元素中,这就需要写一个常驻ms session的mdl函数,使用mdlChangeTrack_setFunction函数来监控CHANGE_TRACK_Modify信息,对于每个发生修改的元素,修改其lastModified属性。elementID好像就没有必要记录了。请详见api reference的change tracking部分的详细介绍。

     

    [转载Bentley中文知识库原贴] Johnson:建议还是用8.0以上版本的design history功能,虽然可能文件尺寸会增加不少,但是也比保存好几个版本的dgn文件来的划算。

    不过楼主这样的想法是很好的,充分利用二次开发来实现某些高级功能,可以少花很多钱,呵呵。

     

    [转载Bentley中文知识库原贴] Johnson:这就要求所要处理的所有文件是在一套严格的生产制度和流程下生产出来的。

     

    [转载Bentley中文知识库原贴] MicroStation迷:哈...哈...看起来还是观念上的问题。我如果要做二次开发的话,还是希望开发一些目前没有的比较独特的功能。如果别人已经实现了,自己再重新来过,最终花费的代价肯定是更大的。

     

    [转载Bentley中文知识库原贴] Johnson:从宏观上来看,从社会进步的角度来看,是这样的。但是具体到某个单位,某个公司,就不一样了。


    This is a test