关于使用CIMSDK开发自定义实体时的成员变量传值问题

各位老师好。

我最近在学习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值:

现在还不知道具体的原因。望解答~

Parents
  • 我感觉这是一个基本的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值。这个令我很费解。

Reply
  • 付老师,可能不是您说的这个原因。

    我的CIMManagedPolyLineCreator带了一个CIMManagedPolyLine类型的属性,然后在Creator的OnDataButton方法中去修改了PolyLine下面的Points属性。

    为了测试是不是您说的这个原因,我在PolyLine中添加了一个Length属性,然后我在Creator的OnDataButton方法中去修改了这个属性:

    然后我在Polyline的OnGeneratePresentation方法中进行调试,查看这个属性的值:

    这应该说明现在OnGeneratePresentation所访问到的对象就是Creator类下面的那个Polyline对象。

    但是如上图所示,虽然Length属性是有值的,本来也应该有值的points却还是null值。这个令我很费解。

Children