上图中,左侧为一mesh元素,中间为利用MS提取边界命令提取出来的边界(正常),最右侧为利用代码提取出的边界(未封闭),提取方法如下:
int pNumIndexPerFace=1; EmbeddedIntArray* pIndices=jmdlEmbeddedIntArray_grab(); EmbeddedDPoint3dArray* pXYZ=jmdlEmbeddedDPoint3dArray_grab(); EmbeddedDPoint3dArray* pEdgeXYZArray=jmdlEmbeddedDPoint3dArray_grab(); mdlMesh_getPolyfaceArrays(ppResultDescr,pIndices,pXYZ,&pNumIndexPerFace,NULL); mdlMesh_filterMultiplyDrawnEdgesExt(pIndices,1,TRUE,TRUE); mdlMesh_edgeCoordinates(pEdgeXYZArray,pIndices,pXYZ,1,TRUE); int count=jmdlEmbeddedIntArray_getCount(pIndices); DPoint3d *tmpPoint=new DPoint3d[count]; for(int i=0;i<count;i++) { jmdlEmbeddedDPoint3dArray_getDPoint3d(pEdgeXYZArray,&tmpPoint[i],i); } mdlLineString_create(&el,NULL,tmpPoint,count);
利用代码提取的线串除了没有封闭以外,还在多个位置出现交叉,见下图。
请问:
1、出现这种情况的原因是什么,是否与直接利用点建立线串有关系?
2、英文论坛提供了以下解决方案,是否能解决问题?请问第4条如何操作,看意思是将每个边缘建立一直线,再组合成复杂链,但是mdlMesh_edgeCoordinates提取出的pEdgeXYZArray中边缘线的起始点和终点是如何分布的,如何分辨各个边缘线的起始点和终点?