4.3.2 配合CimPlatform Core使用


        CimPlatform Elements的另一个重要用途就是将其用作用户自定义对象的部分或全部图形表现。用户自定义对象是专业领域里的对象,是专业软件的核心,由开发者基于CimPlatform Core进行设计和实现。用户自定义对象并不是一定要用CimPlatform Elements作为其图形表现,如果对象的图形表现比较简单,则可以直接利用自己的的数据创建几何对象并将它们绘制出来。但是当图形表达比较复杂时,比如其中包含或者直接就是一种MultiLine、Mesh或Cell时,开发者就可以将CimPlatform Elements用作用户自定义对象的图形表现,这样就能在很大程度上降低绘制特定图形的难度并提升效率。将CimPlatform Elements用作用户自定义对象的部分或全部图形表现时,可分为以下几种情形。下面以CimPlatform Elements的C++版本为基础分别介绍常见的几种使用方式。

       

class MyDomainObject : public CimGraphicObject
{
    protected:
        DPoint3d GetStartPointFromECInstance()
            {
            // 利用存储在相应ECInstance中的数据,计算起点坐标
            }

        DPoint3d GetEndPointFromECInstance()
            {
            // 利用存储在相应ECInstance中的数据,计算终点坐标
            }

        virtual BentleyStatus _GeneratePresentation(ViewContextR viewContext) override
            {
            DgnModelRefR modelRef = *mdlModelRef_getActive();

            // 利用存储在ECInstance中的数据,构造创建元素所需要的参数。 
            DPoint3d start = GetStartPointFromECInstance();
            DPoint3d end = GetEndPointFromECInstance();

            // 创建元素,但不保存。
            CimLineElementPtr elementPtr = \ 
            CimLineElement::Create(start, end, modelRef.Is3d(), modelRef);

            // 获取元素的几何数据。注意,并非所有元素都能这样。
            
            // 绘制几何图形
         
            viewContext.VisitElemHandle(elementPtr->GetElementHandle(), true, true);
            // 绘制其它图形表示,如果有的话。
            // ...
            }

        // ...
}