老师,v8i的代码如下。我没看到太懂,这个是不是就是求点?可不可以用如下代码去获取所有点?
int ptCount = mdlLinear_getPointCount(eeh.GetElementCP()); assert(ptCount > 0); linearPts.resize(ptCount); mdlLinear_extract(&linearPts[0], &ptCount, eeh.GetElementCP(), eeh.GetModelRef()); // 提取所有点
EmbeddedDPoint3dArray *pArray = jmdlEmbeddedDPoint3dArray_grab(); mdlElmdscr_extractCompositeLinear(pArray, edP, edP->h.dgnModelRef, FALSE, TRUE); vector<DPoint3d> pts; int count = jmdlEmbeddedDPoint3dArray_getCount(pArray); for (int i = 0; i < count; ++i) { DPoint3d pt; jmdlEmbeddedDPoint3dArray_getDPoint3d(pArray, &pt, i); //DPoint3d stPt = { 0, 0, 0 }; //drawALine(stPt, pt); pts.push_back(pt); } // 首尾两个点不能相同 if (pts.size() >= 2 && mdlVec_pointEqual(&pts.front(), &pts.back()) == TRUE) { pts.pop_back(); } copy(pts.begin(), pts.end(), back_inserter(handlePoints)); jmdlEmbeddedDPoint3dArray_drop(pArray);
这一段代码的关键函数是mdlElmdscr_extractCompositeLinear,它能够提取一个复杂链(想象成由多个Line或Linestring组成一个复杂元素)中的所有子元素的顶点放到一个动态数组EmbeddedDPoint3dArray中。
而你写的代码仅仅考虑了最简单的一种情况:单个Line或单个Linestring的元素。
Answer Verified By: chenxuan chen
符老师,mdlElmdscr_extractCompositeLinear这个好像是未公开得函数,如果我想实现这段代码同样的功能有什么建议吗?