CATIA二次开发CAA技术基础之零件设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CATIA二次开发CAA技术基础之零件设计
第五章零件设计
5、1零件设计环境
图5、1零件设计环境
零件设计环境中,MyPart1中包含参考平面(包括XY平面、YZ平面、ZX平面)、轴系、
参数、几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体等节点。
几何图形集就是无序建模,一般全曲面建模就就是她比较管用;有序几何图形集,她里面可以包含集合中的几何体,几何图形集,几何特征,但建模方式就是有序的;几何体就是直接插入零件环境下,她里面可以包含几何图形集,有序几何图形,几何特征,但建模方式就是有序的;集合中的几何体在插入前会询问用户,她可以放在树的根目录下也可以放在有序几何图形集里面,
还可以在插入的同时把有序几何图形集里的特征集合到(集合中的几何体)里面。
5、2零件设计接口介绍
5、2、1操纵零件的一般步骤
图5、2操纵零件的主要接口及步骤
5、2、2获得CA TIPrtPart
参考代码如下:
CA TIPrtContainer_var spPrtContainer=spContainer;
CA TIPrtPart_var spPrtPart=spPrtContainer->GetPart();
5、2、3获得零件下所有节点
方法一:利用CA TIDescendants接口
CA TIDescendants_var spDescendantsOnPart=spPrtPart;
CA TListV alCA TISpecObject_var spSpecObjects;
piDescendantsOnPart->GetAllChildren("CA TISpecObject",spSpecObjects);
方法二:利用CA TContainer中的ListMembersHere方法
SEQUENCE(CA TBaseUnknown_ptr)ListObj;
long NbObj=piRootContainer->ListMembersHere("CA TISpecObject",ListObj);
for(int j=0;j<="">
{}
注意:"CATISpecObject"表示将所有的节点列出,如果想要只列出某种元素,可以将该
参数设置为相应的接口,例如"CATPoint"表示所有的点。
5、2、4获得参考平面
参考平面包括XY平面、YZ平面、ZX平面,参考代码如下:
CA TListV alCA TISpecObject_var spReferencePlanes;
spReferencePlanes=spPrtPart->GetReferencePlanes();
注意:spReferencePlanes为包含三个元素的数组,数组元素依次为xy平面,yz平面与zx平面。
如果要使用yz平面,则参考代码如下:
CA TISpecObject_var spyzPlane=spReferencePlanes[2];
5、2、5获得轴系
参考代码如下:
CA TIMf3DAxisSystemManager_var spAxisSystem=NULL_var;
spPrtPart->QueryInterface(IID_CA
TIMf3DAxisSystemManager,(void**)&spAxisSystem);
//得到的所有轴系
CA TLISTV(CA TIMf3DAxisSystem_var)oAxisSystemList;
spAxisSystem->GetAxisSystems(oAxisSystemList);
5、2、6获得参数
方法一:利用CATIDescendants接口
CA TIDescendants_var spDescendantsOnPart=spPrtPart;
CA TListV alCA TISpecObject_var spSpecObjects;
piDescendantsOnPart->GetAllChildren("CA TICkeParm",spSpecObjects);
方法二:利用CATIParmPublisher中接口
CA TIParmPublisher_var spParmPublisher=spPrtPart;
CA TListV alCA TISpecObject_var ListFound;
spParmPublisher->GetAllChildren("CA
TICkeParm",ListFound);
方法三:利用CATContainer中的ListMembersHere方法
SEQUENCE(CA TBaseUnknown_ptr)ListObj;
long NbObj=spContainer->ListMembersHere("CA TICkeParm",ListObj);
for(int j=0;j<="">
{
CA TIAlias_var spAlias=ListObj[j];
cout<GetAlias()<<="">
}
5、2、7获得几何图形集等节点
该节主要介绍获得几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体等节点的方法,主要方法流程图如图5、3所示。
获得CATIPrtPart 获得CATIPartRequest Get AllBodies
GetSurfBodies
几何图形集有序几何图形集
GetSolidBodies GetMainBody
零件几何体集合中的几何体几何体
CATIMmiNonOrderedGeometricalSet CATIMmiOrderedGeometricalSet
CATIGSMT ool CATIMechanicalTool
获得CATIBodyRequest
CATBody
图5、3流程图
例1:获得零件中的所有几何体的代码如下。
CA TIPartRequest*pIPartRequest=NULL;
HRESUL T rc=spPart->QueryInterface(IID_CA TIPartRequest, (void**)&pIPartRequest); if(SUCCEEDED(rc))
{
CA TLISTV(CA TBaseUnknow_var)ListBodies;//所有几何体
CA TUnicodeString ViewContext="MfDefault3DView";
rc=pIPartRequest->GetSolidBodies(ViewContext,ListBodies);
}
例2:获得零件中的所有有序几何图形集的代码如下。
CA TIDescendants_var spDescendantsOnPart=spPrtPart;
CA TListV alCA TISpecObject_var spSpecOGSs;//所有有序几何图形集piDescendantsOnPart->GetAllChildren("CA TIMmiOrderedGeometricalSet",spSpecOGSs);例3:获得零件几何体的代码如下。
CA TBaseUnknow_var spMainBody;//零件几何体
pIPartRequest->GetMainBody(ViewContext,spMainBody);
例4:获得CA TBody的代码如下。
CA TIBodyRequest*pIBodyRequest=NULL;
spMainBody->QueryInterface(IID_CA TIBodyRequest,(void**)&pIBodyRequest);
CA TLISTV(CA TBaseUnknown_var)ListResult;
pIBodyRequest->GetResults("",ListResult);
CA TIGeometricalElement*pIGeometricalElement=NULL;
for(int i=1;i<=ListResult、Size();i++)
{
CA TBaseUnknown_var spResult=ListResult[i];
spResult->QueryInterface(IID_CA TIGeometricalElement,(void**)&pIGeometricalElement);
CA TBody_var spBodyResult=pIGeometricalElement->GetBodyResult();
}
5、2、8创建轴系
//首先初始化工厂
CA
TIMf3DAxisSystemFactory*pIMf3DAxisSystemFactoryOnFeatCon t=spContainer;
CA TMathPoint Origin(150、0,、0,、0);
CA TMathV ector X(1、0,、0,、0);
CA TMathV ector Y(0、0,1、0,、0);
CA TIMf3DAxisSystem_var NewAxisSystemStd;//创建的轴系
pIMf3DAxisSystemFactoryOnFeatCont->CreateAxisSystem( Origin,X,Y,NewAxisSystemStd);
//对轴系的X、Y方向进行修改
NewAxisSystemStd->SetAxisDirection(CA TAxisSystemXNumber,pV ectorX);
NewAxisSystemStd->SetAxisDirection(CA TAxisSystemYNumber,pV ectorY);
5、2、9创建参数与公式
1.创建参数
//初始化CA TICkeParmFactory工厂
CA TICkeParmFactory_var spParmFactory=spContainer;
CA TICkeParm_var
spParam1=spParmFactory->CreateLength("Base",0、1);
CA TICkeParm_var spParam2=spParmFactory->CreateLength("Width",0、15);//长度单位为米CA TICkeParm_var spParam3=spParmFactory->CreateLength("Height",0、2);//创建长度参数
//CA TIParmPublisher与CA TICkeFunctionFactory功能为将所有参数显示在结构树中
CA TIParmPublisher_var spParmPublisher=NULL_var;
CA TICkeFunctionFactory_var spFuncFactory=CA TCkeGlobalFunctions::GetFunctionFactory();
spParmPublisher=
spFuncFactory->GetCurrentSet(CA TICkeFunctionFactory::Parameter,spPrtPart,CA TCke::True);
spParmPublisher、Append(spParam1);
spParmPublisher、Append(spParam2);
spParmPublisher、Append(spParam3);
2.创建公式
//创建参数列表
CA TCkeListOfParm pList;
pList->Append(spParam1);
pList->Append(spParam2);
pList->Append(spParam3);
//创建公式Height=Width+Base
CA TICkeRelation_var spFormula1=spParmFactory->CreateFormula("Formula","","", spParam3,pList,"Width+Base",spParmPublisher,CA TCke::True);
spFuncFactory->AddToCurrentRelationSet(spFormula1,spPa rmPublisher);
//修改参数进行测试
spParam1->V aluate(0、5);
5、2、10创建几何图形集等节点
//初始化CA TIMechanicalRootFactory工厂
CA TIMechanicalRootFactory_var spMechanicalRootFactory=spContainer;
//创建几何图形集
virtual HRESUL T CreateGeometricalSet(const CA TUnicodeString&iUserName,
const CA TISpecObject_var&iDestination,
CA TISpecObject_var&oGeomSet,
int iPosition=-1)=0;
函数说明如下表5、1所示:
//创建有序的几何图形集
virtu
al HRESU
L T Create
OrderedG
eometrical Set (const CA TUnicodeString& iUserName,
const CA TISpecObject_var& iDestination,
CA TISpecObject_var
& oOrderedGeomSet,
int iPosition=-1 ) = 0 ; //创建几何体virtual CA TISpecObject_var CreatePRTTool( const CA TUnicodeString& iUserName,
const CA TISpecObject_var& iDestination) ;
virtual CA TISpecObject_var CreatePRTT ool( const CA TUnicodeString& iUserName,
const CA TISpecObject_var& iDestination
int iPosition=-1) ;
5、2、11 创建实体特征
实体特征主要包括凸台、槽、旋转体、孔、盒体、倒圆、倒角与厚曲面等特征,创建实体特征采用 CA TIPrtFactory 工厂中的方法,相应的方法如下表所示。
现举创建孔的例子如下:
1.常用的创建孔的方法包括三种,依次如下。
public virtual CA TISpecObject_var CreateHole(const CA TISpecObject_var ihSurface,
const CA TISpecObject_var ihDirection)=0
参数介绍:ihSurface指支持孔的平面或曲面;ihDirection指孔的特征方向,特征方向可用
CA TIGSMFactory中的CreateDirection创建,孔方向若为NULL_var,则按照曲面的法向创建孔。
public virtual CA TISpecObject_var CreateHole(const CA TISpecObject_var ihPoint,
const CA TISpecObject_var ihSurface,
const CA TISpecObject_var ihDirection,
const int IsPointOnSurface)=0参数介绍:ihPoint指在支持面上的特征点;ihSurface指支持孔的平面或曲面;ihDirection
指孔的特征方向,孔方向若为NULL_var,则按照曲面的法向创建孔;IsPointOnSurface的值如
果为0,说明ihPoint不在ihSurface上,若为0,则说明ihPoint在ihSurface上。
public virtual CA TISpecObject_var CreateHole(const CA TMathPoint iMathPoint,
const CA TISpecObject_var ihSurface,
const CA TISpecObject_var ihDirection,
const int IsPointOnSurface)=0
参数介绍:iMathPoin指在支持面上的数学点;ihSurface指支持孔
的平面或曲面;ihDirection
指孔的方向,孔方向若为NULL_var,则按照曲面的法向创建孔;IsPointOnSurface的值如果为
0,说明ihPoint不在ihSurface上,若为0,则说明ihPoint在ihSurface上。
2.设置孔的参数
CA TISpecObject_var spHole=spPrtFactory->CreateHole();
CA TINewHole_var spNewHole=spHole;
spNewHole->SetHoleType(1);//设置孔类型为简单孔
spNewHole->SetBottomType(1);//设置孔底面类型为平底
spNewHole->SetDiameter(5)//设置直径
spNewHole->SetLimit(1)//设置为盲孔
CA TIHoleLimit_var spHoleLimit=spHole;
spHoleLimit->SetOffset(5);//设置孔的深度
3.将孔添加在结构树中
spHole->Update();
CA TIGSMProceduralView_var ispProcView=spHole;
if(NULL_var!=ispProcView){HResult
rc=ispProcView->InsertInProceduralView();}
5、2、12创建零件设计表
//初始化CA TICkeParmFactory工厂
CA TICkeParmFactory_var spParmFactory=spContainer;
//创建设计表的函数如下
CA TIDesignTable_var CreateDesignTable(const CA TUnicodeString&iRelationName,
const CA TUnicodeString&iComment,
const CA TUnicodeString&i,
int orientation=1,
int sheetWithoutFile=0);
函数说明:iRelationName为设计表的名字,iComment为设计表
的说明,i为创建
表的路径。
创建零件族的步骤如下:
1、创建参数
CA TICkeParm_var spPp1=spFact->CreateInteger("Column1",0);
CA TICkeParm_var spPp2=spFact->CreateReal("r",0、0);
CA TICkeParm_var spPp3=spFact->CreateString("s","");
CA TICkeParm_var spPp4=spFact->CreateBoolean("b",CA TCke::True);
CA TICkeParm_var spPp5=spFact->CreateLength("l",0);
CA TICkeParm_var spPp6=spFact->CreateAngle("a",0);
2、将参数显示在结构树上
CA TIPrtContainer_var spPrtCont=spContainer;
CA TIParmPublisher_var spPubroot=spPrtCont->GetPart();
CA TICkeFunctionFactory_var fact=CA TCkeGlobalFunctions::GetFunctionFactory();
CA TISpecObject_var spParameterSet=NULL_var;
spParameterSet=
fact->GetCurrentSet(CA
TICkeFunctionFactory::Parameter,spPubroot,CA TCke::True);
CA TIParmPublisher_var spParmPublisher=spParameterSet;
spParmPublisher->Append(spPp1);
spParmPublisher->Append(spPp2);
spParmPublisher->Append(spPp3);
spParmPublisher->Append(spPp4);
spParmPublisher->Append(spPp5);
spParmPublisher->Append(spPp6);
3、创建设计表
CA TIDesignTable_var
spDesignTable=spFact->CreateDesignTable();
4、将设计表显示在结构树上
CA TISpecObject_var spRelationSet=fact->GetCurrentSet(
CA TICkeFunctionFactory::Relation,spPubroot,CA TCke::True);
spParmPublisher=spRelationSet;
spParmPublisher->Append(spDesign);
5、将参数与设计表关联,注意参数名字与设计表的列参数名字一定要相同
//参数列表
CA TLISTV(CA TBaseUnknown_var)list;
list、Append(spPp1);
spDesign->AutomaticAssociations(spContainer,NULL_var,&l ist);
//添加关联
spDesign->AddAssociation("Column2",spPp2);
spDesign->AddAssociation("Column3",spPp3);
spDesign->AddAssociation("Column4",spPp4);
spDesign->AddAssociation("Column5",spPp5);
6.设置配置
spDesign->SetCurrentConfiguration(1);
5、2、13创建草图Sketch
有两种方式可以创建草图:
1、通过参考平面创建
//获得参考平面
CA TLISTV(CA TISpecObject_var)spRefPlanes=spPart->GetReferencePlanes();
//初始化草图工厂
CA TISketchFactory_var spSketchFactory(spContainer);。