- UID
- 197233
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-11-27
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在学习几何类时,从图上选择了两个对象,建立它们的几何对象,用getInterval(AcGeInterval& intrvl)得到各自的期间值对象,再用isDisjoint来判断两者的分离关系,发现选择的两个对象无论是相交与否,isDisjoint返回的都是Adesk::kTrue(分离)。
请问各位问题出在什么地方,看后请留言,谢谢!
void abc()
{
ads_name circle;
ads_point ept;
AcDbEntity *pEnt;
AcDbObjectId objId;
AcDbCircle *pDbCir;
AcGeCircArc3d *pGeCir1,*pGeCir2;
AcGeInterval interval1,interval2,intresult;
double lower,upper;
BOOL choice1=false,choice2=false;
if(acedEntSel("\n选择第一个圆: ", circle, ept)==RTNORM)
{
acdbGetObjectId(objId,circle);
acdbOpenObject(pEnt, objId, AcDb::kForRead);
if(AcDbCircle::cast(pEnt))
{
pDbCir=AcDbCircle::cast(pEnt);
pGeCir1=new AcGeCircArc3d(pDbCir->center(),pDbCir->normal(),pDbCir->radius()); //建立几何圆
choice1=true;
pDbCir->close();
}
pEnt->close();
}
if(choice1) //选择到了第一个圆
{
if(acedEntSel("\n选择第二个圆: ", circle, ept)==RTNORM)
{
acdbGetObjectId(objId,circle);
acdbOpenObject(pEnt, objId, AcDb::kForRead);
if(AcDbCircle::cast(pEnt))
{
pDbCir=AcDbCircle::cast(pEnt);
pGeCir2=new AcGeCircArc3d(pDbCir->center(),pDbCir->normal(),pDbCir->radius()); //建立几何圆
choice2=true;
pDbCir->close();
}
pEnt->close();
}
}
if(choice2)
{
pGeCir1->getInterval(interval1);
interval1.getBounds(lower,upper);
acutPrintf("\npGeCir1_lower=%f,pGeCir1_upper=%f",lower,upper);
pGeCir2->getInterval(interval2);
interval2.getBounds(lower,upper);
acutPrintf("\npGeCir2_lower=%f,pGeCir2_upper=%f",lower,upper);
if(interval1.isDisjoint(interval2)) acutPrintf("\n两个对象分离");
else acutPrintf("\n两个对象不分离");
delete pGeCir1;
delete pGeCir2;
}
}
下面的附件是源码和使用的图形。 |
|