找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 590|回复: 0

[求助]:判断两个AcGeInterval对象是否分离的函数isDisjoint

[复制链接]
发表于 2004-12-1 08:24:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在学习几何类时,从图上选择了两个对象,建立它们的几何对象,用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;
        }
}

    下面的附件是源码和使用的图形。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 05:25 , Processed in 0.186206 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表