CATIA二次开发(CAA)技术基础之零件设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章零件设计
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 TI SpecObject”,spSpecObjects);
方法二:利用CA TContainer中的ListMembersHere方法
SEQUENCE(CA TBaseUnknown_ptr)ListObj;
long NbObj=piRootContainer—〉ListMembersHere(”CA TISpecObject",ListObj);
for(int j=0;j〈NbObj;j++)//注意从0开始
{}
注意:”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〈NbObj;j++)//注意从0开始
{
CA TIAlias_var spAlias=ListObj[j];
cout<<spAlias-〉GetAlias()〈<endl;//输出参数的名字
}
5.2.7获得几何图形集等节点
该节主要介绍获得几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体等节点的方法,主要方法流程图如图5.3所示。
获得CATIPrtPart 获得CATIPartRequest Get AllBodies
GetSurfBodies
几何图形集有序几何图形集
GetSolidBodies GetMainBody
零件几何体集合中的几何体几何体
CATIMmiNonOrderedGeometricalSet CATIMmiOrderedGeometricalSet
CATIGSMTool 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*pIMf3DAxisSystemFactoryOnFeatCont=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,spParmPublisher);
//修改参数进行测试
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所示:
//创建有序的几何图形集
virtual HRESUL T CreateOrderedGeometricalSet (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 CreatePRTTool ( 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&iFilePath,
int orientation=1,
int sheetWithoutFile=0);
函数说明:iRelationName为设计表的名字,iComment为设计表的说明,iFilePath为创建
表的路径。
创建零件族的步骤如下:
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,&list);
//添加关联
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);
//在XY plane上创建草图
CA TISketch_var spSketch=spSketchFactory->CreateSketch(spRefPlanes[1]));
2.通过原点和两个矢量方向
该方法通过定义一个原点和两个方向pH、pV进行创建。
定义原点和方向:
double pOrigin[3]={0,0,10};
double pH[3]={1,0,0};
double pV[3]={0,1,0};
CA TISketchFactory_var spSketchFactory(spContainer);
CA TISketch_var spSketch=spSketchFactory—〉CreateSketch(pOrigin,pH,pV); 5。
2。
14创建草图几何
//首先声明编辑草图
spSketch—〉OpenEdition();
CA TI2DWFFactory_var sp2DFactory(spSketch);
//下面创建点
CA TI2DPoint_var spPt_bottom_left,spPt_bottom_right,spPt_top_right,spPt_top_left;
double pt_bottom_left[2]={10,10};
double pt_bottom_right[2]={50,10};
double pt_top_right[2]={50,50};
double pt_top_left[2]={10,50};
spPt_bottom_left=sketch2DFactory-〉CreatePoint(pt_bottom_left);
spPt_bottom_right=sketch2DFactory—>CreatePoint(pt_bottom_right);
spPt_top_right=sketch2DFactory->CreatePoint(pt_top_right);
spPt_top_left=sketch2DFactory—〉CreatePoint(pt_top_left);
//开始创建线
CA TI2DLine_var spLine1,spLine2,spLine3,spLine4;
spLine1=sketch2DFactory->CreateLine(pt_bottom_left,pt_bottom_right);
spLine2=sketch2DFactory—>CreateLine(pt_bottom_right,pt_top_right);
spLine3=sketch2DFactory—>CreateLine(pt_top_right,pt_top_left);
spLine4=sketch2DFactory-〉CreateLine(pt_top_left,pt_bottom_left);
//将线的首尾连接起来
CA TI2DCurve_var spCurve1(spLine1);
CA TI2DCurve_var spCurve2(spLine2);
CA TI2DCurve_var spCurve3(spLine3);
CA TI2DCurve_var spCurve4(spLine4);
spCurve1-〉SetStartPoint(spPt_bottom_left);
spCurve1—〉SetEndPoint(spPt_bottom_right);
spCurve2-〉SetStartPoint(spPt_bottom_right);
spCurve2->SetEndPoint(spPt_top_right);
spCurve3-〉SetStartPoint(spPt_top_right);
spCurve3—>SetEndPoint(spPt_top_left);
spCurve4—>SetStartPoint(spPt_top_left);
spCurve4-〉SetEndPoint(spPt_bottom_left);
//然后退出草图:
spSketch—>CloseEdition();
5.2。
15创建草图约束
CA TI2DConstraintFactory_var spConstraint2DFactory(spSketch);
//定义spLine1为水平约束
spConstraint2DFactory—>CreateConstraint(spLine1,NULL,NULL,NULL,NULL,NULL, NULL,Cst2DType_Horizontal,0,0);
//定义spLine2为垂直约束
spConstraint2DFactory—>CreateConstraint(spLine2,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_V ertical,0,0);
//定义spLine3为水平约束
spConstraint2DFactory->CreateConstraint(spLine3,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_Horizontal,0,0);
//定义spLine4为垂直约束
spConstraint2DFactory—>CreateConstraint(spLine4,NULL,NULL,NULL,NULL,NULL, NULL,Cst2DType_V ertical,0,0);
//定义spLine2的长度约束
spConstraint2DFactory-〉CreateConstraint(spLine2,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_Length,0,0);
//定义spLine2与spLine4的距离约束
spConstraint2DFactory—>CreateConstraint(spLine2,NULL,spLine4,NULL,NULL,NULL,NULL,Cst2DType_Distance,0,0);
//定义spPt_bottom_left与X轴的距离约束
CA TI2DAxis_var spSupport=NULL_var;
spSketch-〉GetAbsolute2DAxis(spSupport);
spConstraint2DFactory—>CreateConstraint(spPt_bottom_left,NULL, spSupport-〉GetHDirection(),NULL,NULL,NULL,NULL,Cst2DType_Distance,0,0);
//定义spPt_bottom_left与Y轴的距离约束
spConstraint2DFactory—〉CreateConstraint(spPt_bottom_left,NULL, spSupport-〉GetVDirection(),NULL,NULL,NULL,NULL,Cst2DType_Distance,0,0);
5。
3生成圆柱体实例
5.3.1本实例所实现的功能
本实例主要实现创建圆柱的功能,在对话框中直接输入圆柱直径和圆柱高度,点击确定按
钮,在零件中自动创建相应直径和高度的圆柱体,其界面如图5。
4所示。
图5.4创建圆柱界面
5。
3。
2实现的步骤
5。
3.2.1获得零件指针
//获得文件指针
CA TDocument*pDoc=NULL;
CA TFrmEditor*_pEditor=CA TFrmEditor::GetCurrentEditor();
pDoc=_pEditor->GetDocument();//这里得到了P AR T环境下的文档指针
CA TInit_var spInitOnDoc(pDoc);
//得到零件根容器
CA TIPrtContainer*piPrtCont=
(CA TIPrtContainer*)spInitOnDoc->GetRootContainer("CA TIPrtContainer");
//得到零件指针
CA TIPrtPart_var spPart=piPrtCont—>GetPart();
5.3.2。
2创建草图
//初始化草图工厂
CA TISketchFactory_var spSketchFactory(piPrtCont);
//在XY plane上创建草图
CA TISketch_var spSketch=spSketchFactory—>CreateSketch(spRefPlanes[1]));
5.3。
2。
3创建草图几何
//首先声明编辑草图
spSketch—>OpenEdition();
CA TI2DWFFactory_var sp2DFactory(spSketch);
//这里表示圆心点
double iPoint[2]={0。
,0.};
//下面创建圆圈
CA TISpecObject_var spLine=spSketch—>CreateCircle(iPoint,_Editor003-〉GetFloatValue());
CA TI2DCurve_var spCurveOnLine(spLine);
spCurveOnLine—〉GetStartPoint();
spCurveOnLine—>GetEndPoint();
//然后退出草图:
spSketch—〉CloseEdition();
5。
3。
2.4创建约束
CA TI2DConstraintFactory_var spConstraint2DFactory(spSketch);
//定义spLine1的半径约束
spConstraint2DFactory—〉CreateConstraint(spLine,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_Radius,0,0);
//定义spLine1与坐标原点的同心约束
CA TI2DAxis_var spSupport=NULL_var;
spSketch—〉GetAbsolute2DAxis(spSupport);
spConstraint2DFactory—〉CreateConstraint(spLine,NULL,spSupport—>GetOriginPoint(), NULL,NULL,NULL,NULL,Cst2DType_Concentric,0,0);
5.3。
2.5创建凸台
//从编辑框中获得援助的高度
double firstLimit=_Editor004—>GetFloatV alue();
double secondLimit=0。
;
//圆柱的轴向方向为Z轴方向
CA TMathDirection dirZ(0.,0。
,1.);
//初始化零件工厂
CA TIPrtFactory_var spPrtFactOnPrtCont(piPrtCont);
//创建凸台
CA TISpecObject_var spSpecObj=spPrtFactOnPrtCont->CreatePad(spSketch);
CA TIPad_var spPadOnSpecObj(spSpecObj);
//设置拉伸方向
spPadOnSpecObj->ModifyDirection(dirZ);
//设置凸台第一限制类型
spPadOnSpecObj—〉ModifyEndType(catOffsetLimit);
//设置凸台的高度
spPadOnSpecObj—〉ModifyEndOffset(firstLimit);
//设置凸台第二限制类型
spPadOnSpecObj—>ModifyStartType(catOffsetLimit);
spPadOnSpecObj—>ModifyStartOffset(secondLimit);
//将凸台添加在结构树中
spSpecObj->Update();
CA TIGSMProceduralView_var ispProcView=spSpecObj;
if(NULL_var!=ispProcView){HResult rc=ispProcView—〉InsertInProceduralView();}
5。
4本章小结
本章主要介绍了零件设计环境中的常见接口,最后用生成圆柱体的实例进行了具体应用。