找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 788|回复: 0

[求助]:通过AcDbRegion生成AcBrBrep再检测点的相对位置,返回总是0?附源程序

[复制链接]
发表于 2003-7-14 22:47:19 | 显示全部楼层 |阅读模式

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

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

×
目的:通过封闭的线生成一个AcDbRegion 再生成AcDbBrep
再检测点或者线与它的相对位置,但返回值总是0 unknowed?

如下:
AcDbObjectIdArray ids;
if( selectEntitys( ids )!=RTNORM )
        return;

Acad::ErrorStatus es;
AcDbVoidPtrArray curves;
AcDbVoidPtrArray regions;
AcDbRegion *pRegion=NULL;
AcDbObject* pObj;
AcDbObjectId regionId;

for( int iii=0; iii<ids.logicalLength(); iii++ )        {
if( acdbOpenObject( pObj,ids[iii],AcDb::kForRead ) ) {
   acutPrintf("\nacdbOpenObject failed");
        continue;
}
curves.append( (void*)pObj );
}
       
if( (es = AcDbRegion::createFromCurves(curves, regions)) != Acad::eOk ) {
        acutPrintf("\ncreateFromCurves failed ");
                AfxMessageBox(" not ok ");
}
else{
AfxMessageBox(" ok ");
int nums=regions.length();
acutPrintf(" num==%d ",nums );
if( nums<=0 ){
   acutPrintf(" 0regions ");
  es=Acad::eInvalidInput;
}
else if( nums>1 ){
acutPrintf(" %d-regions ",nums);
for( iii=0; iii<nums; iii++ ){
   delete ((AcDbObject*)regions[iii]);
}
es=Acad::eInvalidInput;
}
else if( (pRegion = AcDbRegion::cast((AcRxObject*)regions[0])) == NULL){
        acutPrintf("\nCouldn't generate region\n");
        es=Acad::eInvalidInput;
}

}
AfxMessageBox(" === ");
if( es==Acad::eOk )
  postToDb( pRegion, regionId );

for( iii=0; iii<curves.length(); iii++ )
((AcDbObject*)curves[iii])->close();

AcGePoint3d pt;
//AcBrBrep *pBrep=NULL;
AcBr::Relation relation;
int retcode;

       

if( es==Acad::eOk ){
AfxMessageBox("brep---start");
acdbOpenAcDbEntity( (AcDbEntity*&) pRegion, regionId, AcDb::kForRead );

AcBrBrep*pBrep = new AcBrBrep;
pBrep->setSubentPath( AcDbFullSubentPath( regionId, AcDbSubentId()));
AcGe::PointContainment containment;
AcBrEntity* container;

//或者如下生成也同样               
//pBrep= (AcBrBrep*) pRegion->body();
//pBrep = new AcBrBrep;
//pBrep->set( (AcDbEntity&) pRegion );
AfxMessageBox("brep");
if( pBrep==NULL ){
AfxMessageBox("null");
}
else{
while(1){
if( acedGetPoint( NULL,"pt ",asDblArray(pt ))==RTNORM ){
//pBrep->getPointRelationToBrep(pt, relation);
pBrep->getPointContainment( pt, containment,container);

acutPrintf("  AcBr=%d ",containment );
//返回值总是0 为什么???
if( containment==AcGe::kInside ){
                                                retcode=1;
}
else if( containment==AcGe::kOnBoundary){
                                                retcode=0;
}
else if( containment==AcGe::kOutside){
                                                retcode=-1;
                                        }
else{
                                        retcode=-20;
                                        }
                                        //}
                                        //else
                                        //        retcode=-10;
                                        acutPrintf(" %d ", retcode );

                                        //if( container!=NULL )
                                        //        delete container;
                                       
                                }
                                else
                                        break;
                        }

                }

delete pBrep;
                pRegion->close();
        }
       
        //for( iii=0; iii<curves.length(); iii++ )
        //        ((AcDbObject*)curves[iii])->close();

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

本版积分规则

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

GMT+8, 2024-11-13 12:41 , Processed in 0.245673 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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