找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 19164|回复: 6

CAA 选择对象后的类型转换问题

[复制链接]
发表于 2006-3-21 13:10:39 | 显示全部楼层 |阅读模式
如图:我得到圆柱的对象,代码如下:
     _BodyAgent=new CATFeatureImportAgent("surface");
         _BodyAgent->SetOrderedElementType("CATIMfTriDimResult");
     _BodyAgent->AddOrderedElementType("CATBody");
     _BodyAgent->AddOrderedElementType("CATIPad");
         _BodyAgent->AddOrderedElementType("CATCylinder");  
     _BodyAgent->SetBehavior      ( CATDlgEngWithPrevaluation | CATDlgEngWithCSO     | CATDlgEngOneShot         );
     _BodyAgent->SetAgentBehavior ( MfPermanentBody | MfLastFeatureSupport | MfRelimitedFeaturization );
         AddCSOClient(_BodyAgent);


CATBoolean SimVolCmd::BodySelect(void *data)
{
  // TODO: Define the action associated with the transition
  // ------------------------------------------------------
        CATBaseUnknown_var spSelection = _BodyAgent->GetElementValue();
        if(NULL_var!=spSelection)
        {     
                spBody=spSelection;
                if(spBody!=NULL)
                   cout<<"spBody!=Null"<<endl;
                CATIAlias_var spName = NULL_var;
                CATISpecObject_var spBody->QueryInterface(IID_CATIAlias,
                                   (void**) &spName);
            CATUnicodeString name = spName->GetAlias();
            DlgBox->SetBodyName(name);
        }
    _BodyAgent->InitializeAcquisition();
    return TRUE;
}
我用得到的spBody->QueryInterface(IID_CATCylinder ,(void**)&spCysinder);可是得到的对象为空,请问是什么原因?

本帖子中包含更多资源

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

x
发表于 2006-3-23 09:18:47 | 显示全部楼层
顶一下,别沉了。还急用
发表于 2006-3-23 19:08:20 | 显示全部楼层
叮叮咚咚叮叮咚咚叮叮咚咚
发表于 2006-3-23 22:36:31 | 显示全部楼层
CATISpecObject和CATCylinder实际上是2码事吧

你得先求得CATISpecObject的CATBody,然后求其中的其中的3次元要素。然后其中哪个是CATCylinder
发表于 2006-3-24 09:18:10 | 显示全部楼层
谢谢acoka兄!
发表于 2006-3-24 10:50:39 | 显示全部楼层
如果是1次元要素可以用CATVertex->GetPoint()得到CATPoint,可我得到了CATVolume,可它里面没有成员函数,直接把它赋值给CATCylinder 又不行。应该怎么办呢?
发表于 2006-3-27 16:40:47 | 显示全部楼层
看了一下帮助
好久没做这个了,不太确定,但你可以试试看

CATCylinder* VIVSample::GetCylinderFromSpec( const CATISpecOBject_var& ispSpec)
{
        CATCylinder* pCylinder = NULL;

        do {
                if( !ispSpec) {
                        break;
                }
               
                // GetBody(you can create a method named GetBodyFromFeature)
                CATBody_var spSolidCylinderBody = GetBodyFromFeature( ispSpec );
                if( !spBody) {
                        break;
                }

                // Get all of the 2-dim cell
                CATLISTP(CATCell) cellListFace;
                spSolidCylinderBody->GetAllCells(cellListFace,2);

                // Get cylinder wall face
                for ( int iCnt = 1; iCnt<=cellListFace.Size(); iCnt++ ) {
                        CATFace* pFace = (CATFace*)cellListFace[iCnt];
                        if( !pFace){
                                continue;
                        }
                        CATSurface* pSurface = pFace->GetSurface();
                        if ( !pSurface) {
                                continue;
                        }
                        if ( !pSurface->IsATypeOf( CATCylinder)) {
                                continue;
                        }
                        pCylinder = (CATCylinder*)pSurface;
                        break;
                }

        } while ( false);

        return pCylinder;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-24 11:15 , Processed in 0.026403 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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