提取GroupHole中的Hole


Mstn中在表达包含有空洞的Shape时,使用的是GroupHole元素类型。我们在使用GroupHole元素时,有时候会需要读取其内部Hole的几何信息。我们在读取基本曲线或者由基本曲线组合而成的图形元素时,通常是通过Bentley.DgnPlatformNET.Elements.CurvePathQuery下的ElementToCurveVector成员函数来获取的,此函数原型如下所示:

public static CurveVector ElementToCurveVector(Element element);

通过此函数我们可以得到一个Bentley.GeometryNET.CurveVector的类型实例,CurveVectorMstn SDK中用来表达线型几何数据的类型,可以表达任意复杂的曲线或者曲线组合而成的Shape,其可以理解为是Bentley.GeometryNET.CurvePrimitive的容器。CurvePrimitive是基本曲线的几何类型,例如直线段、弧、B样条曲线等。我们在获取Mstn中由曲线构造成的图形元素的几何信息时,获取到CurveVector实例后,可以通过迭代其包含的所有CurvePrimitive实例,就可以获取到每一段基本曲线了,而通过CurvePrimitive的GetCurvePrimitiveType成员函数返回值我们可以获取到每一段基本曲线的类型。GetCurvePrimitiveType成员函数的返回值类型为CurvePrimitiveType,其定义如下所示:

对于GroupHole的话,我们该如何区分出代表Hole的所有CurvePrimitive实例呢。通过测试发现,从GroupHole元素获取的CurveVector实例中,其包含的第一个CurvePrimitive实例是GroupHole的外轮廓,之后的所有CurvePrimitive实例就是GroupHole中的所有Hole的几何信息了。但是Hole本身如果不是一段基本曲线构成而是由多段基本曲线构成的话,我们又该如何获取每一段基本曲线呢?在CurvePrimitive下有一个名为GetChildCurveVector的成员函数,对于包含有多段基本曲线的Hole,我们可以通过调用此函数来获取这些基本曲线组合而成的CurveVector实例。迭代GetChildCurveVector返回的CurveVector中的多有CurvePrimtive就可以获取到每一段基本曲线了。