- UID
- 5043
- 积分
- 1347
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-5-13
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Q:
I am having a problem with the AcDbPolyline::getSplitCurves() function. The function is returning a set of entities which is incorrect for the input provided. I call getSplitCurves() on a polyline with two points on the polyline, expecting to get two polylines returned. Instead of getting two polylines, I only get a copy of the original polyline that has two extra vertices added.
A:
The behavior of getSplitCurves() is affected by the order of the points in the AcGePoint3dArray. If the points are appended to the AcGePoint3dArray in the order that they would be if they were measured from the start point of the polyline then the expected behavior occurs. (two polylines are returned). The following code snippet uses this approach. It finds the distance on the curve from the start of the curve to the point, and then add the points to the array in the order of their distance from the start of the curve.
...
AcGePoint3d projpt;
if ((es = pBoundary->getClosestPointTo(sp, projpt)) != Acad::eOk)
return es;
AcGePoint3d projpt2;
if ((es = pBoundary->getClosestPointTo(pt2, projpt2)) != Acad::eOk)
return es;
double dist1;
double dist2;
es = pBoundary->getDistAtPoint(projpt, dist1);
es = pBoundary->getDistAtPoint(projpt2, dist2);
if (dist1 < dist2)
{
// first point is closer to the start point
pts.append(projpt);
pts.append(projpt2);
}
else{
//second point is closer to the start point
pts.append(projpt2);
pts.append(projpt);
}
if ((es = pBoundary->getSplitCurves(pts, ents)) != Acad::eOk)
return es;
...
|
|