7.2.3 从3D几何体中提取元素:ElementExtractor类(1)
3D对象可能是复杂的。立方体尤其符合这种情况。一个复杂的立方体由多个简单的立方体组成。这些简单的立方体又由表面组成,它们中的某些几何体构成了立方体中的孔。表面本身由各种元素构成,而这些元素又由环组成。
ElementExtractor类使得对复杂对象的检查和独立组件的提取变得容易,如组成立方体的一个或多个表面。注意,你也可以对一些规则的二维几何体使用提取器。例如,在一个复杂的多边形中,它对提取一个环的线性等高线是很有用的。
可以通过两种方式使用提取器:一个是提取指定的元素,另一个是对所有有效的元素进行迭代。
提示:
ElementExtractor类并不只局限于3D几何体,对2D图形也适用。但是因为其输入必须是J3D_Geometry对象,所以首先要把JGeometry对象转换成一个J3D_Geometry对象。
1. 提取独立元素
你需要做的就是调用静态的getElementByLabel()方法,传入一个用于唯一标记待提取几何体元素的标签。这个标签是一个由逗号分隔的ID号码字符串,该号码指定了待返回的几何体的子集。根据需要可以对以下列出的元素进行指定(对在最后一个指定的元素前的任何一个null元素,为其输入一个逗号)。
点ID
边ID
环ID
多边形ID
表面ID
立方体ID
多重立方体ID
这些ID号是每个元素在每一级上的序列号。序列号从1开始:在多重多边形中第一个多边形是多边形1。它的环从1到N编号。第二个多边形是多边形2,其中的环仍从1到N编号。
例如,下面的代码将从简单立方体的表面2中返回3号多边形:
- J3D_Geometry ring=ElementExtractor. getElementByLabel(solid,"0,0,0,3,2");
注意,当有错误发生时,J3D_Geometry中的validate()方法将返回这样一个标记。你可以通过向ElementExtractor.getElementByLabel()传递这个标记来分离发生错误的元素。
2. 对元素进行迭代
创建一个ElementExtractor对象,向它传递你的查询的参数。这实际上将创建一个在一定详细程度上初始化的迭代器。接着,你可以通过其nextElement()方法来逐个提取对象的组件。然后还可以用另一个ElementExtractor对象进一步地检查第一次循环所得到的每个元素。
表7-9详细介绍了创建一个ElementExtractor对象所要用到的参数。这些参数控制提取器的行为方式。
表7-9 ElementExtractor的参数
参 数 | 目 的 |
geometry | 待分析的3D几何体 |
firstElement | 开始提取的位置,在几何体的SDO_ELEM_INFO 数组中被定义为偏移量。默认值为0 |
extractionLevel | 这个参数决定迭代器处理几何体中元素的方法。 请参见“提取级别”一节获取详细信息 |
allow_comp_sub_elements | 指定为true(默认值)或false。在 MULTICOMP_TOSIMPLE提取级别上, 用户可以通过把这个参数设置为FALSE, 从多个或复合几何体中直接提取 简单几何体。默认值为TRUE, 这意味着用户将先从多几何体中提取复合几何体 |