}
5.2.7 获得几何图形集等节点
该节主要介绍获得几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体
等节点的方法,主要方法流程图如图 5.3 所示。
获得CATIPrtPart
获得CATIPartRequest
GetAllBodies
GetSurfBodies
几何图形集有序几何图形集
GetSolidBodies
GetMainBody
零件几何体 集合中的几何体
几何体
CATIMmiNonOrderedGeometricalSet
CATIMmiOrderedGeometricalSet
CATIGSMTool
CATIMechanicalTool
获得CATIBodyRequest
CATBody
图 5.3 流程图
例 1:
获得零件中的所有几何体的代码如下。
CATIPartRequest *pIPartRequest =NULL ;
HRESULT rc = spPart->QueryInterface(IID_CATIPartRequest,
(void**)&pIPartRequest );
if ( SUCCEEDED(rc) )
{
CATLISTV(CATBaseUnknow_var) ListBodies;//所有几何体
CATUnicodeString ViewContext ="MfDefault3DView" ;
rc = pIPartRequest->GetSolidBodies(ViewContext,ListBodies);
}
例 2:
获得零件中的所有有序几何图形集的代码如下。
CATIDescendants_varspDescendantsOnPart = spPrtPart;
CATListValCATISpecObject_var spSpecOGSs;//所有有序几何图形集
piDescendantsOnPart->GetAllChildren("CATIMmiOrderedGeometricalSet", spSpecOGSs);
例 3:
获得零件几何体的代码如下。
CATBaseUnknow_var spMainBody;//零件几何体
pIPartRequest->GetMainBody(ViewContext,spMainBody);
例 4:
获得 CATBody 的代码如下。
CATIBodyRequest *pIBodyRequest= NULL;
spMainBody ->QueryInterface(IID_CATIBodyRequest,(void**) &pIBodyRequest);
CATLISTV(CATBaseUnknown_var) ListResult ;
pIBodyRequest->GetResults("",ListResult);
CATIGeometricalElement * pIGeometricalElement = NULL ;
for (int i=1 ; i<= ListResult.Size(); i++)
{
CATBaseUnknown_var spResult = ListResult[i];
spResult->QueryInterface(IID_CATIGeometricalElement ,(void**) &pIGeometricalElement );
CATBody_var spBodyResult = pIGeometricalElement->GetBodyResult();
}
5.2.8 创建轴系
//首先初始化工厂
CATIMf3DAxisSystemFactory * pIMf3DAxisSystemFactoryOnFeatCont = spContainer;
CATMathPoint Origin (150.0,.0,.0);
CATMathVector X (1.0,.0,.0);
CATMathVector Y (0.0,1.0,.0);
CATIMf3DAxisSystem_var NewAxisSystemStd;//创建的轴系
pIMf3DAxisSystemFactoryOnFeatCont->CreateAxisSystem(Origin,X,Y,NewAxisSystemStd);
//对轴系的 X、Y 方向进行修改
NewAxisSystemStd->SetAxisDirection(CATAxisSystemXNumber, pVectorX);
NewAxisSystemStd->SetAxisDirection(CATAxisSystemYNumber, pVectorY);
5.2.9 创建参数和公式
1.创建参数
//初始化 CATICkeParmFactory 工厂
CATICkeParmFactory_var spParmFactory = spContainer;
CATICkeParm_var spParam1 = spParmFactory->CreateLength("Base",0.1);
CATICkeParm_var spParam2 = spParmFactory->CreateLength("Width",0.15);//长度单位为米
CATICkeParm_var spParam3 = spParmFactory->CreateLength("Height",0.2);//创建长度参数
// CATIParmPublisher 与 CATICkeFunctionFactory 功能为将所有参数显示在结构树中
CATIParmPublisher_varspParmPublisher = NULL_var;
CATICkeFunctionFactory_var spFuncFactory =CATCkeGlobalFunctions:
:
GetFunctionFactory();
spParmPublisher=
spFuncFactory->GetCurrentSet(CATICkeFunctionFactory:
:
Parameter,spPrtPart,CATCke:
:
True);
spParmPublisher.Append(spParam1);
spParmPublisher.Append(spParam2);
spParmPublisher.Append(spParam3);
2.创建公式
//创建参数列表
CATCkeListOfParm pList;
pList->Append (spParam1);
pList->Append (spParam2);
pList->Append (spParam3);
//创建公式 Height = Width + Base
CATICkeRelation_varspFormula1=spParmFactory->CreateFormula("Formula","","",
spParam3, pList, "Width+Base", spParmPublisher, CATCke:
:
True);
spFuncFactory->AddToCurrentRelationSet(spFormula1, spParmPublisher);
//修改参数进行测试
spParam1->Valuate(0.5);
5.2.10 创建几何图形集等节点
//初始化 CATIMechanicalRootFactory 工厂
CATIMechanicalRootFactory_var spMechanicalRootFactory = spContainer;
//创建几何图形集
virtual HRESULT CreateGeometricalSet(const CATUnicodeString& iUserName,
const CATISpecObject_var& iDestination,
CATISpecObject_var& oGeomSet,
int iPosition=-1 ) = 0 ;
函数说明如下表 5.1 所示:
iDestination 为零件节点
iDestination 为其他节点
iPosition = -1
几何图形集位于零件最后
几何图形集与 iDestination 在同一父节点
下,且在 iDestination 节点后
iPosition = 0
几何图形集位于零件最后
几何图形集位于 iDestination 中的最后
0 < iPosition <= iDestination 的大小
几何图形集位于零件中
iPosition +1 处
几何图形集位于 iDestination 中的
iPosition +1 处
Otherwise
E_FAIL
E_FAIL
目标
方法
凸台
CreatePad
槽
CreatePocket
旋转体
CreateRotate
孔
CreateHole
盒体
CreateShell
倒圆
CreateFillet
倒角
CreateChamfer
厚曲面
CreateThickness
表 5.2 创建实体特征的方法
表 5.1 函数说明
//创建有序的几何图形集
virtual HRESULT CreateOrderedGeometricalSet (const CATUnicodeString& iUserName,
const CATISpecObject_var& iDestination,
CATISpecObject_var& oOrderedGeomSet,
int iPosition=-1 ) = 0 ;
//创建几何体
virtual CATISpecObject_var CreatePRTTool( const CATUnicodeString& iUserName,
const CATISpecObject_var& iDestination) ;
virtual CATISpecObject_var CreatePRTTool( const CATUnicodeString& iUserName,
const CATISpecObject_var& iDestination
int iPosition=-1) ;
5.2.11 创建实体特征
实体特征主要包括凸台、槽、旋转体、孔、盒体、倒圆、倒角和厚曲面等特征,创建实体
特征采用 CATIPrtFactory 工厂中的方法,相应的方法如下表所示。
现举创建孔的例子如下:
1.常用的创建孔的方法包括三种,依次如下。
public virtual CATISpecObject_var CreateHole( const CATISpecObject_var ihSurface,
const CATISpecObject_varihDirection) = 0
参数介绍:
ihSurface 指支持孔的平面或曲面;ihDirection 指孔的特征方向,特征方向可用
CATIGSMFactory 中的 CreateDirection 创建,孔方向若为 NULL_var,则按照曲面的法向创建孔。
public virtual CATISpecObject_var CreateHole( const CATISpecObject_var ihPoint,
const CATISpecObject_varihSurface,
const CATISpecObject_varihDirection,
const int IsPointOnSurface) = 0
参数介绍:
ihPoint 指在支持面上的特征点;ihSurface 指支持孔的平面或曲面;ihDirection
指孔的特征方向,孔方向若为 NULL_var,则按照曲面的法向创建孔;IsPointOnSurface 的值如
果为 0,说明 ihPoint 不在 ihSurface 上,若为 0,则说明 ihPoint 在 ihSurface 上。
public virtual CATISpecObject_var CreateHole( const CATMathPoint iMathPoint,
const CATISpecObject_varihSurface,
const CATISpecObject_varihDirection,
const int IsPointOnSurface) = 0
参数介绍:
iMathPoin 指在支持面上的数学点;ihSurface 指支持孔的平面或曲面;ihDirection
指孔的方向,孔方向若为 NULL_var,则按照曲面的法向创建孔;IsPointOnSurface 的值如果为
0,说明 ihPoint 不在 ihSurface 上,若为 0,则说明 ihPoint 在 ihSurface 上。
2.设置孔的参数
CATISpecObject_var spHole = spPrtFactory-> CreateHole();
CATINewHole_var spNewHole= spHole;
spNewHole-> SetHoleType
(1);//设置孔类型为简单孔
spNewHole->SetBottomType
(1) ;//设置孔底面类型为平底
spNewHole->SetDiameter(5)//设置直径
spNewHole->SetLimit
(1)//设置为盲孔
CATIHoleLimit_var spHoleLimit = spHole;
spHoleLimit ->SetOffset(5);//设置孔的深度
3.将孔添加在结构树中
spHole ->Update();
CATIGSMProceduralView_var ispProcView = spHole;
if (NULL_var !
= ispProcView ) {HResult rc = ispProcView ->InsertInProceduralView();}
5.2.12 创建零件设计表
//初始化 CATICkeParmFactory 工厂
CATICkeParmFactory_var spParmFactory = spContainer;
//创建设计表的函数如下
CATIDesignTable_var CreateDesignTable( const CATUnicodeString& iRelationName,
const CATUnicodeString&iComment,
const CATUnicodeString&iFilePath,
intorientation = 1,
int sheetWithoutFile = 0 );
函数说明:
iRelationName 为设计表的名字,iComment 为设计表的说明,iFilePath 为创建
表的路径。
创建零件族的步骤如下:
1.创建参数
CATICkeParm_var spPp1 = spFact->CreateInteger ("Column1",0);
CATICkeParm_var spPp2 = spFact->CreateReal ("r",0.0);
CATICkeParm_var spPp3 = spFact->CreateString ("s","");
CATICkeParm_var spPp4 = spFact->CreateBoolean ("b",CATCke:
:
True);
CATICkeParm_var spPp5 = spFact->CreateLength ("l",0);
CATICkeParm_var spPp6 = spFact->CreateAngle ("a",0);
2.将参数显示在结构树上
CATIPrtContainer_var spPrtCont = spContainer;
CATIParmPublisher_var spPubroot = spPrtCont->GetPart();
CATICkeFunctionFactory_var fact = CATCkeGlobalFunctions:
:
GetFunctionFactory();
CATISpecObject_var spParameterSet = NULL_var;
spParameterSet=
fact->GetCurrentSet(CATICkeFunctionFactory:
:
Parameter,spPubroot,CATCke:
:
True);
CATIParmPublisher_var spParmPublisher = spParameterSet;
spParmPublisher->Append(spPp1);
spParmPublisher->Append(spPp2);
spParmPublisher->Append(spPp3);
spParmPublisher->Append(spPp4);
spParmPublisher->Append(spPp5);
spParmPublisher->Append(spPp6);
3.创建设计表
CATIDesignTable_var spDesignTable = spFact->CreateDesignTable();
4.将设计表显示在结构树上
CATISpecObject_var spRelationSet = fact ->GetCurrentSet(
CATICkeFunctionFactory:
:
Relation,spPu