iCAx开思工具箱
标题:
CAA 选择对象后的类型转换问题
[打印本页]
作者:
liuruixiao205
时间:
2006-3-21 13:10
标题:
CAA 选择对象后的类型转换问题
如图:我得到圆柱的对象,代码如下:
_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);可是得到的对象为空,请问是什么原因?
作者:
liuruixiao205
时间:
2006-3-23 09:18
顶一下,别沉了。还急用
作者:
daoshou
时间:
2006-3-23 19:08
叮叮咚咚叮叮咚咚叮叮咚咚
作者:
acoka
时间:
2006-3-23 22:36
CATISpecObject和CATCylinder实际上是2码事吧
你得先求得CATISpecObject的CATBody,然后求其中的其中的3次元要素。然后其中哪个是CATCylinder
作者:
liuruixiao205
时间:
2006-3-24 09:18
谢谢acoka兄!
作者:
liuruixiao205
时间:
2006-3-24 10:50
如果是1次元要素可以用CATVertex->GetPoint()得到CATPoint,可我得到了CATVolume,可它里面没有成员函数,直接把它赋值给CATCylinder 又不行。应该怎么办呢?
作者:
acoka
时间:
2006-3-27 16:40
看了一下帮助
好久没做这个了,不太确定,但你可以试试看
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;
}
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3