- UID
- 69009
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-8-1
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2003-8-15 13:47:48
|
显示全部楼层
对不起,我记错了,是两AcGeCircArc求距离有问题。如:
AcGeCircArc2d arc1(AcGePoint2d(500,0),500,0.0,PI);
AcGeCircArc2d arc2(AcGePoint2d(1000,-500),AcGePoint2d(500,0),AcGePoint2d(1000,500));
double distll = arc1.distanceTo(arc2);
事实是,相关函数,closestPointTo,getClosestPointTo都有问题,一用就出错。至于求交我没试。
arx202里AcDbCurve函数extend在处理延伸line时,和arx2002处理不同,如参数为newPara,在arx2002里,直接传入起点或终点的参数,如原先终点参数为1000,想扩展100,直接传入1100即可,在arx202里,则必须传入参数100/1000才可.这给软件升级带来很大不便。
bool ExtendCurve(AcDbCurve* pCurve,const double &dist)
{
if(!pCurve)
return false ;
double dParam(0) ;
Acad::ErrorStatus es = pCurve->getParamAtDist(fabs(dist),dParam) ;
if(es!=Acad::eOk)
return false ;
AcDbLine *pLine = AcDbLine::cast(pCurve) ;
double paraSt(0),paraEnd(0) ;
pCurve->getStartParam(paraSt) ;
pCurve->getEndParam(paraEnd) ;
dParam = dParam-paraSt ;
double parm = paraSt -dParam ;
if(pLine)
parm = parm/paraEnd ;//此处要非常注意,因为在arx2002中,直接传入parm就可以了,不要除paraEnd
//Acad::ErrorStatus es1 =pCurve->upgradeOpen() ;
es = pCurve->extend(parm);//扩展起点
es = pCurve->getParamAtDist(fabs(dist),dParam) ;
pCurve->getEndParam(paraEnd) ;
pCurve->getStartParam(paraSt) ;
dParam = dParam-paraSt ;
parm = paraEnd+dParam ;
if(pLine)
parm = parm/(paraEnd-paraSt) ;
es =pCurve->extend(parm) ;//扩展终点
pCurve->getEndParam(paraEnd) ;
pCurve->getStartParam(paraSt) ;
if(es!=Acad::eOk)
return false ;
return true ;
}
在arx202里,沿来一闭合路径,如一矩形,给一顶点朝下的等腰三角形生成实体,生成的实体比想要的实体小。可通过vpoint,通过与原面域比较发现。
各位若有兴趣可自已试试。路径不闭合,生成实体就不会变小。
另外,在实体做布尔运算时,更是想要的实体莫名其妙的没了,不知哪位网友总结出了这方面的规律。 |
|