- UID
- 257504
- 积分
- 71
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-5-11
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我写的截短曲线的算法。
首先找到截断的点,使用返回两条线,删除不需要的那条,为了保证objectId不变,我把新的曲线拷贝到旧曲线中。一切都正常。但是关闭的时候出现崩溃。
似乎跟前面把线加到group有关(这个group有别的用处不能去掉)。
这里似乎也不是copyFrom的问题。如果copyFrom的参数是一个别的对象(不是从getSplitCurves得到的),也不会有问题。
ads_name ss,name;
acedSSGet(NULL,NULL,NULL,NULL,ss);
acedSSName(ss,0,name);
acedSSFree(ss);
AcDbObjectId id1;
acdbGetObjectId(id1,name);
AcDbDictionary *pGroupDict;
acdbCurDwg()->getGroupDictionary(pGroupDict,AcDb::kForWrite);
AcDbGroup *pGroup = new AcDbGroup();
Acad::ErrorStatus err;
AcDbObjectId groupId;
if((err = pGroupDict->setAt("testGroup",pGroup,groupId)) != Acad::eOk)
{
delete pGroup;
pGroupDict->close();
return ;
}
pGroupDict->close();
pGroup->append(id1);
pGroup->close();
ads_point pt;
acedGetPoint(NULL,"\n选择一个点:",pt);
AcGePoint3d pt1,out;
pt1.set(pt[0],pt[1],pt[2]);
AcDbPolyline *obj1;
acdbOpenObject(obj1,id1,AcDb::kForWrite);
obj1->getClosestPointTo(pt1,out);
AcGePoint3dArray pts;
pts.append(out);
AcDbVoidPtrArray array;
obj1->getSplitCurves(pts,array);
AcDbPolyline* cur;//,cur1;
cur = static_cast<AcDbPolyline*>(array[1]);
delete cur;
cur = static_cast<AcDbPolyline*>(array[0]);
obj1->copyFrom(cur);
delete cur;
obj1->close(); |
|