各位老师好。
我最近在学习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。
付老师,可能不是您说的这个原因。
我的CIMManagedPolyLineCreator带了一个CIMManagedPolyLine类型的属性,然后在Creator的OnDataButton方法中去修改了PolyLine下面的Points属性。
为了测试是不是您说的这个原因,我在PolyLine中添加了一个Length属性,然后我在Creator的OnDataButton方法中去修改了这个属性:
然后我在Polyline的OnGeneratePresentation方法中进行调试,查看这个属性的值:
这应该说明现在OnGeneratePresentation所访问到的对象就是Creator类下面的那个Polyline对象。
但是如上图所示,虽然Length属性是有值的,本来也应该有值的points却还是null值。这个令我很费解。
这块您添加一个开关,在OnGeneratePresentation判断points是否有值,因为OnGeneratePresentation会经常调用的.
可能不行,这个points的值在OnGeneratePresentation中调用的时候总是为空。
这不是需不需要判断的问题。
我现在的关注点是如何才能让这个points变量在OnGeneratePresentation函数中调用的时候有值。