各位老师好。
我最近在学习CIMSDK开发ORD自定义实体的功能,遇到了一个成员变量传值的问题。
我参照官方教程定义了两个类用来描述一个多段线自定义实体:CIMManagedPolyLine和CIMManagedPolyLineCreator。
CIMManagedPolyLineCreator里面包含了一个CIMManagedPolyLine类型的成员变量。
在CIMManagedPolyLine中我定义了一个成员变量用来记录多段线的各个顶点:public List<GeometryNET.DPoint3d> points;
然后,我在CIMManagedPolyLineCreator的OnDataButton函数中加上处理,当鼠标点击某处时,将坐标点加入到CIMManagedPolyLine的points成员变量:
protected override bool OnDataButton(DgnButtonEvent ev) { if (m_points.Count < 10) { NotificationManager.OutputPrompt("Select a point of the line."); m_points.Add(ev.Point); m_cimManagedPolyLine.points.Add(ev.Point); pointNum++; } else { // m_cimManagedPolyLine.AddToModel(true); // EndDynamics(); // OnRestartTool(); } return true; }
在调试的时候,确定点数据是能够加入到points成员变量的:
但是,当我在CIMManagedPolyLineCreator的OnGeneratePresentation函数中去使用这个points中的值的时候,points确是一个null值:
现在还不知道具体的原因。望解答~
我感觉这是一个基本的C# 编程问题吧?OnGeneratePresentation是属于CIMManagedPolyLineCreator,而你的points是属于CIMManagedPolyLine的,故你在CIMManagedPolyLineCreator中没有直接的成员变量(其实成员变量这个词是在C++中用的,C# 中可能应该叫做属性)points,而应该先取得CIMManagedPolyLine对象后再取得其下的points。
付老师,我想到是否可能是因为CIMManagedObject.01.00.ecschema.xml的配置问题呢?
我昨天没有把这个points属性配置进去。
今天这个points属性我是按照下图进行配置的,他是一个List类型。但是目前还是无法获取在CIMManagedPolyLine里面获取到值。
目前再OnGeneratePresentation获取里面,无法获取成员变量的数据,要用EC获取,EC需要再schema文件中用数组类型,ECPropertyArry这个类型,具体例子都有的。
例如:
<ECArrayProperty propertyName="ThicknessOfLayers" typeName="double" displayLabel="Thickness" minOccurs="0" maxOccurs="unbounded" >
这个是double类型的数组,就这么定义。