}
5.2.7获得几何图形集等节点
该节主要介绍获得几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体
等节点的方法,主要方法流程图如图5.3所示。
...
获得CATIPrtPart
获得CATIPartRequest
GetAllBodies
GetSurfBodiesGetSolidBodies
GetMainBody
几何图形集有序几何图形集零件几何体集合中几何体
的几何体
CATIMmiNonOrderedGeometricalSetCATIMmiOrderedGeometricalSet
CATIGSMToolCATIMechanicalTool
获得CATIBodyRequest
CATBody
图5.3流程图
例1:
获得零件中的所有几何体的代码如下。
CATIPartRequest*pIPartRequest=NULL;
HRESULTrc=spPart->QueryInterface(IID_CATIPartRequest,
(void**)&pIPartRequest);
if(SUCCEEDED(rc))
{
CATLISTV(CATBaseUnknow_var)ListBodies;//所有几何体
CATUnicodeStringViewContext="MfDefault3DView";
rc=pIPartRequest->GetSolidBodies(ViewContext,ListBodies);
}
例2:
获得零件中的所有有序几何图形集的代码如下。
CATIDescendants_varspDescendantsOnPart=spPrtPart;
CATListValCATISpecObject_varspSpecOGSs;//所有有序几何图形集
piDescendantsOnPart->GetAllChildren("CATIMmiOrderedGeometricalSet",spSpecOGSs);
例3:
获得零件几何体的代码如下。
CATBaseUnknow_varspMainBody;//零件几何体
...
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(inti=1;i<=ListResult.Size();i++)
{
CATBaseUnknown_varspResult=ListResult[i];
spResult->QueryInterface(IID_CATIGeometricalElement,(void**)&pIGeometricalElement
);
CATBody_varspBodyResult=pIGeometricalElement->GetBodyResult();
}
5.2.8创建轴系
//首先初始化工厂
CATIMf3DAxisSystemFactory*pIMf3DAxisSystemFactoryOnFeatCont=spContainer;
CATMathPointOrigin(150.0,.0,.0);
CATMathVectorX(1.0,.0,.0);
CATMathVectorY(0.0,1.0,.0);
CATIMf3DAxisSystem_varNewAxisSystemStd;//创建的轴系pIMf3DAxisSystemFactoryOnFeatCont->CreateAxisSystem(Origin,X,Y,NewAxisSystemStd);
//对轴系的X、Y方向进行修改
NewAxisSystemStd->SetAxisDirection(CATAxisSystemXNumber,pVectorX);
NewAxisSystemStd->SetAxisDirection(CATAxisSystemYNumber,pVectorY);
5.2.9创建参数和公式
1.创建参数
//初始化CATICkeParmFactory工厂
CATICkeParmFactory_varspParmFactory=spContainer;
CATICkeParm_varspParam1=spParmFactory->CreateLength("Base",0.1);
CATICkeParm_varspParam2=spParmFactory->CreateLength("Width",0.15);//长度单位为
米
...
CATICkeParm_varspParam3=spParmFactory->CreateLength("Height",0.2);//创建长度参
数
...
//CATIParmPublisher与CATICkeFunctionFactory功能为将所有参数显示在结构树中
CATIParmPublisher_varspParmPublisher=NULL_var;
CATICkeFunctionFactory_varspFuncFactory=CATCkeGlobalFunctions:
:
GetFunctionFactor
y();
spParmPublisher=
spFuncFactory->GetCurrentSet(CATICkeFunctionFactory:
:
Parameter,spPrtPart,CATCke:
:
Tru
e);
spParmPublisher.Append(spParam1);
spParmPublisher.Append(spParam2);
spParmPublisher.Append(spParam3);
2.创建公式
//创建参数列表
CATCkeListOfParmpList;
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_varspMechanicalRootFactory=spContainer;
//创建几何图形集
virtualHRESULTCreateGeometricalSet(constCATUnicodeString&iUserName,
constCATISpecObject_var&iDestination,
CATISpecObject_var&oGeomSet,
intiPosition=-1)=0;
函数说明如下表5.1所示:
...
表5.1
函数说明
iDestination
为零件节点iDestination
为其他节点
iPosition
=
-1
几何图形集位于零件最后
几何图形集与
iDestination
在同一父节
点
iPosition
=
0
几何图形集位于零件最后
几何图形集位于
iDestination
中的最后
几何图形集位于零件中
几何图形集位
0
<=
iDestinatio
+1处
于iDestination
n
的大小
iPosition
中的
Otherwise
E_FAIL
E_FAIL
//创建有序的几何图形集
virtual
HRESULTCreateOrderedGeometricalSet
(const
CATUnicodeString&
iUserName,
constCATISpecObject_var&iDestination,
CATISpecObject_var&oOrderedGeomSet,
intiPosition=-1)=0;
//创建几何体
virtualCATISpecObject_varCreatePRTTool(constCATUnicodeString&iUserName,
constCATISpecObject_var&iDestination);
virtualCATISpecObject_varCreatePRTTool(constCATUnicodeString&iUserName,
constCATISpecObject_var&iDestination
intiPosition=-1);
5.2.11创建实体特征
实体特征主要包括凸台、槽、旋转体、孔、盒体、倒圆、倒角和厚曲面等特征,创建实体
特征采用CATIPrtFactory工厂中的方法,相应的方法如下表所示。
表5.2创建实体特征的方法
目标方法
凸台CreatePad
槽CreatePocket
旋转体CreateRotate
孔CreateHole
盒体CreateShell
倒圆CreateFillet
倒角CreateChamfer
厚曲面CreateThickness
...
现举创建孔的例子如下:
1.常用的创建孔的方法包括三种,依次如下。
publicvirtualCATISpecObject_varCreateHole(constCATISpecObject_vari
hSurface,
constCATISpecObject_varihDirection)=0
参数介绍:
ihSurface指支持孔的平面或曲面;ihDirection指孔的特征方向,特征方向可用
CATIGSMFactory中的CreateDirection创建,孔方向若为NULL_var,则按照曲面的法向创建孔。
publicvirtualCATISpecObject_varCreateHole(constCATISpecObject_vari
hPoint,
constCATISpecObject_varihSurface,
constCATISpecObject_varihDirection,
constintIsPointOnSurface)=
0
参数介绍:
ihPoint指在支持面上的特征点;ihSurface指支持孔的平面或曲面;ihDirection
指孔的特征方向,孔方向若为NULL_var,则按照曲面的法向创建孔;IsPointOnSurface的值如
果为0,说明ihPoint不在ihSurface上,若为0,则说明ihPoint在ihSurface上。
public
virtual
CATISpecObject_var
CreateHole(
constCATMathPoint
iMathPo
int,
const
CATISpecObject_varihSurface,
const
CATISpecObject_varihDirection,
const
int
IsPointOnSurface)
=0
参数介绍:
iMathPoin指在支持面上的数学点;ihSurface指支持孔的平面或曲面;ihDirection
指孔的方向,孔方向若为NULL_var,则按照曲面的法向创建孔;IsPointOnSurface的值如果为
0,说明ihPoint不在ihSurface上,若为0,则说明ihPoint在ihSurface上。
2.设置孔的参数
CATISpecObject_varspHole=spPrtFactory->CreateHole();
CATINewHole_varspNewHole=spHole;
spNewHole->SetHoleType
(1);//设置孔类型为简单孔
spNewHole->SetBottomType
(1);//设置孔底面类型为平底
spNewHole->SetDiameter(5)//设置直径
spNewHole->SetLimit
(1)//设置为盲孔
CATIHoleLimit_varspHoleLimit=spHole;
...
spHoleLimit->SetOffset(5);//设置孔的深度
3.将孔添加在结构树中
...
spHole->Update();
CATIGSMProceduralView_varispProcView=spHole;
if(NULL_var!
=ispProcView){HResultrc=ispProcView->InsertInProcedura
lView();}
5.2.12创建零件设计表
//初始化CATICkeParmFactory工厂
CATICkeParmFactory_varspParmFactory=spContainer;
//创建设计表的函数如下
CATIDesignTable_varCreateDesignTable(constCATUnicodeString&iRelationNam
e,
constCATUnicodeString&iComment,
constCATUnicodeString&iFilePath,
intorientation=1,
intsheetWithoutFile=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_varspPrtCont=spContainer;CATIParmPublisher_varspPubroot=spPrtCont->GetPart();
CATICkeFunctionFactory_varfact=CATCkeGlobalFunctions:
:
GetFunctionFactory();CATISpecObject_varspParameterSet=NULL_var;spParameterSet=
fact->GetCurrentSet(C