【MSCE U7 C++】EditElementHandle构造函数的几个疑问

API文档中,有从ElementRefP或ElementId构造EditElementHandle的构造函数:


EditElementHandle  ( ElementRefP  elRef, 
  DgnModelRefP  modelRef = 0 
 )  
Construct an ElementHandle from an ElementRefP and a DgnModelRefP.


EditElementHandle  ( ElementId  id, 
  DgnModelRefP  modelRef 
 )  

Construct an ElementHandle from an ElementId and a DgnModelRefP.

Parameters
[in] id The ElementId of the element for this ElementHandle. 
[in] modelRef The DgnModelRefP used to access the element.


有一些疑问向老师请教一下:

(1)既然一个元素的ElementRefP在一个会话期是唯一的,也就是说根据ElementRefP应该就能确定唯一的元素,就能构建相应的EditElementHandle。
那通过ElementRefP构建EditElementHandle时,这第二个参数DgnModelRefP的目的是什么?

(2)同样,一个元素的ElementId在同一个dgn文件里是唯一的,那通过ElementId构建EditElementHandle时,这第二个参数DgnModelRefP的目的是什么?

感觉对这些概念不理解,谢谢老师。

Parents
  • 虽然ElementID和ElementRef在同一个DGN文件中是唯一的,但不排除你要构造的这个EditElementHandle的元素来自于一个参考文件中的某个模型,此种情况下就要指定DgnModelRef了。你看,当不指定这个DgnModelRef时,它默认的就是当前模型。



    MISSING RESOURCE: VerifiedBy 管华明 

  • 非常感谢符老师的解惑,还真没想到还有参考这种可能性^_^。

    EditElementHandle 文档有这么一段话:

    An EditElementHandle can represent an element in three possible states:

    1. Persistent and unmodified. MicroStation will assume that the EditElementHandle's ElementRefP represents the correct state of the element's data. The GetElementRef method will return non-null only in this state. The IsPersistent method will return true only in this state. Most of the time, the handle will contain only an ElementRefP in this state. In rare situations involving legacy code, the handle may contain both an ElementRefP and an element descriptor.
    2. Persistent and modified. MicroStation will assume that the EditElementHandle's ElementRefP does not reflect the element's current state. GetElementRef will return NULL and IsPersistent will return false in this state, even if the descriptor has its h.elementRef field set up. This is to remind you to look in the descriptor for the element's data.
    3. Non-persistent. The EditElementHandle contains only an element descriptor.

    请教一下符老师, 这里的元素状态Persistent and unmodified的意思?

  • 我的理解是:Persistent就是被保存到了磁盘上的意思。所以,当你刚创建了一个元素(保存在元素描述符MSElementDescr中)还未写入磁盘时,其状态为3. Non-persistent。此时该元素没有ElementID和ElementRef。

    当新建的元素被写入磁盘后,其状态为1.Persistent and unmodfied。当你修改了这个元素而还未将其rewrite回磁盘时,其状态为2. Persistent and modified。

    【以上纯属我个人的理解,非Bentley官方解释。供参考】



    MISSING RESOURCE: VerifiedBy 管华明 

Reply
  • 我的理解是:Persistent就是被保存到了磁盘上的意思。所以,当你刚创建了一个元素(保存在元素描述符MSElementDescr中)还未写入磁盘时,其状态为3. Non-persistent。此时该元素没有ElementID和ElementRef。

    当新建的元素被写入磁盘后,其状态为1.Persistent and unmodfied。当你修改了这个元素而还未将其rewrite回磁盘时,其状态为2. Persistent and modified。

    【以上纯属我个人的理解,非Bentley官方解释。供参考】



    MISSING RESOURCE: VerifiedBy 管华明 

Children
No Data