老师好,我想获取元素上的坐标点,函数如下:,跟踪程序发现 参数el不为空,但是获取的points为0,这是为什么呢?
元素转化为CurveVector类型时,变量cv为空,难道不能转化吗?
你这个元素是什么类型的元素?并非所有元素类型都能转换成CurveVector的,只有线性元素(如Line、LineString、Arc、Shape、Ellipse、ComplexChain、ComplexShape、BsplineCurve、Curve等)才能转换成CurveVector。而像Cell、Text、Dimension以及所有的三维元素都是不能转换为CurveVector的。
符工,按照你说的可以获取直线元素上的起点终点,可以为什么换成其他元素比如BsplineCurve,将其转化为CurveVector,获取的坐标点总是为空呢?
BsplineCurve也没有问题呀,由于BsplineCurve是一个复杂元素,你不能GetPrimitive(0)。还是先要把基本概念搞清楚:①什么是复杂元素/简单元素;②哪些类型的元素是复杂的还是简单的;③CurveVector对应于复杂元素,当然也能表达简单元素。CurvePrimitive则只能表达简单元素。
如下代码就是取得你的BsplineCurve的起点和终点坐标的
DgnModel dgnModel = Session.Instance.GetActiveDgnModel(); Element myElem = dgnModel.FindElementById((ElementId)10312L); CurveVector cv = CurvePathQuery.ElementToCurveVector(myElem); DPoint3d start, end; cv.GetStartEnd(out start, out end);
我们能发现CurvePrimitve和CurveVector都有GetStartEnd方法,那对于一个由一条直线和弧组成的一个复杂链(ComplexChain)元素来说,调用CurveVector下的GetStartEnd得到的是整个复杂链的起点(直线起点)和终点(弧的终点)。如果是调用CurveVector.GetPrimitive(0).GetStartEnd则得到的是直线的起点和终点,调用CurveVector.GetPrimitive(1).GetStartEnd得到的是弧的起点和终点。
对于一些不明白的东西,自己要多多写代码去测试、分析、理解然后记忆、应用。
Answer Verified By: Duo Duo
好的 谢谢符工
我使用了List<DPoint3d> points = new List<DPoint3d>(); cp.TryGetLineString(points);中的TryGetLineString这个函数,这个函数是不是针对线串的啊
是的