《CATIA二次开发(CAA)技术基础之零件设计(17页).doc》由会员分享,可在线阅读,更多相关《CATIA二次开发(CAA)技术基础之零件设计(17页).doc(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-CATIA二次开发(CAA)技术基础之零件设计-第 17 页第五章零件设计5.1零件设计环境图5.1零件设计环境零件设计环境中,MyPart1中包含参考平面(包括XY平面、YZ平面、ZX平面)、轴系、参数、几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体等节点。几何图形集是无序建模,一般全曲面建模就是他比较管用;有序几何图形集,他里面可以包含集合中的几何体,几何图形集,几何特征,但建模方式是有序的;几何体是直接插入零件环境下,他里面可以包含几何图形集,有序几何图形,几何特征,但建模方式是有序的;集合中的几何体在插入前会询问用户,他可以放在树的根目录下也可以放在有序几何图形集里面
2、,还可以在插入的同时把有序几何图形集里的特征集合到(集合中的几何体)里面。5.2零件设计接口介绍操纵零件的一般步骤图5.2操纵零件的主要接口及步骤获得CATIPrtPart参考代码如下:CATIPrtContainer_varspPrtContainer=spContainer;CATIPrtPart_varspPrtPart=spPrtContainer-GetPart();获得零件下所有节点方法一:利用CATIDescendants接口CATIDescendants_varspDescendantsOnPart=spPrtPart;CATListValCATISpecObject_vars
3、pSpecObjects;piDescendantsOnPart-GetAllChildren(CATISpecObject,spSpecObjects);方法二:利用CATContainer中的ListMembersHere方法SEQUENCE(CATBaseUnknown_ptr)ListObj;longNbObj=piRootContainer-ListMembersHere(CATISpecObject,ListObj);for(intj=0;jGetReferencePlanes();注意:spReferencePlanes为包含三个元素的数组,数组元素依次为xy平面,yz平面和zx
4、平面。如果要使用yz平面,则参考代码如下:CATISpecObject_varspyzPlane=spReferencePlanes2;获得轴系参考代码如下:CATIMf3DAxisSystemManager_varspAxisSystem=NULL_var;spPrtPart-QueryInterface(IID_CATIMf3DAxisSystemManager,(void*)&spAxisSystem);/得到的所有轴系CATLISTV(CATIMf3DAxisSystem_var)oAxisSystemList;spAxisSystem-GetAxisSystems(oAxisSyst
5、emList);获得参数方法一:利用CATIDescendants接口CATIDescendants_varspDescendantsOnPart=spPrtPart;CATListValCATISpecObject_varspSpecObjects;piDescendantsOnPart-GetAllChildren(CATICkeParm,spSpecObjects);方法二:利用CATIParmPublisher中接口CATIParmPublisher_varspParmPublisher=spPrtPart;CATListValCATISpecObject_varListFound;s
6、pParmPublisher-GetAllChildren(CATICkeParm,ListFound);方法三:利用CATContainer中的ListMembersHere方法SEQUENCE(CATBaseUnknown_ptr)ListObj;longNbObj=spContainer-ListMembersHere(CATICkeParm,ListObj);for(intj=0;jNbObj;j+)/注意从0开始CATIAlias_varspAlias=ListObjj;coutGetAlias()QueryInterface(IID_CATIPartRequest,(void*)&
7、pIPartRequest);if(SUCCEEDED(rc)CATLISTV(CATBaseUnknow_var)ListBodies;/所有几何体CATUnicodeStringViewContext=MfDefault3DView;rc=pIPartRequest-GetSolidBodies(ViewContext,ListBodies);例2:获得零件中的所有有序几何图形集的代码如下。CATIDescendants_varspDescendantsOnPart=spPrtPart;CATListValCATISpecObject_varspSpecOGSs;/所有有序几何图形集piD
8、escendantsOnPart-GetAllChildren(CATIMmiOrderedGeometricalSet,spSpecOGSs);例3:获得零件几何体的代码如下。CATBaseUnknow_varspMainBody;/零件几何体pIPartRequest-GetMainBody(ViewContext,spMainBody);例4:获得CATBody的代码如下。CATIBodyRequest*pIBodyRequest=NULL;spMainBody-QueryInterface(IID_CATIBodyRequest,(void*)&pIBodyRequest);CATLI
9、STV(CATBaseUnknown_var)ListResult;pIBodyRequest-GetResults(,ListResult);CATIGeometricalElement*pIGeometricalElement=NULL;for(inti=1;iQueryInterface(IID_CATIGeometricalElement,(void*)&pIGeometricalElement);CATBody_varspBodyResult=pIGeometricalElement-GetBodyResult();创建轴系/首先初始化工厂CATIMf3DAxisSystemFact
10、ory*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-SetAxisDi
11、rection(CATAxisSystemXNumber,pVectorX);NewAxisSystemStd-SetAxisDirection(CATAxisSystemYNumber,pVectorY);创建参数和公式1创建参数/初始化CATICkeParmFactory工厂CATICkeParmFactory_varspParmFactory=spContainer;CATICkeParm_varspParam1=spParmFactory-CreateLength(Base,0.1);CATICkeParm_varspParam2=spParmFactory-CreateLength(
12、Width,0.15);/长度单位为米CATICkeParm_varspParam3=spParmFactory-CreateLength(Height,0.2);/创建长度参数/CATIParmPublisher与CATICkeFunctionFactory功能为将所有参数显示在结构树中CATIParmPublisher_varspParmPublisher=NULL_var;CATICkeFunctionFactory_varspFuncFactory=CATCkeGlobalFunctions:GetFunctionFactory();spParmPublisher=spFuncFact
13、ory-GetCurrentSet(CATICkeFunctionFactory:Parameter,spPrtPart,CATCke:True);spParmPublisher.Append(spParam1);spParmPublisher.Append(spParam2);spParmPublisher.Append(spParam3);2创建公式/创建参数列表CATCkeListOfParmpList;pList-Append(spParam1);pList-Append(spParam2);pList-Append(spParam3);/创建公式Height=Width+BaseCA
14、TICkeRelation_varspFormula1=spParmFactory-CreateFormula(Formula,spParam3,pList,Width+Base,spParmPublisher,CATCke:True);spFuncFactory-AddToCurrentRelationSet(spFormula1,spParmPublisher);/修改参数进行测试spParam1-Valuate(0.5);创建几何图形集等节点/初始化CATIMechanicalRootFactory工厂CATIMechanicalRootFactory_varspMechanicalRo
15、otFactory=spContainer;/创建几何图形集virtualHRESULTCreateGeometricalSet(constCATUnicodeString&iUserName,constCATISpecObject_var&iDestination,CATISpecObject_var&oGeomSet,intiPosition=-1)=0;函数说明如下表5.1所示:iDestination为零件节点iDestination为其他节点iPosition=-1几何图形集位于零件最后几何图形集与iDestination在同一父节点下,且在iDestination节点后iPosit
16、ion=0几何图形集位于零件最后几何图形集位于iDestination中的最后0iPositionCreateHole();CATINewHole_varspNewHole=spHole;spNewHole-SetHoleType(1);/设置孔类型为简单孔spNewHole-SetBottomType(1);/设置孔底面类型为平底spNewHole-SetDiameter(5)/设置直径spNewHole-SetLimit(1)/设置为盲孔CATIHoleLimit_varspHoleLimit=spHole;spHoleLimit-SetOffset(5);/设置孔的深度3将孔添加在结构树
17、中spHole-Update();CATIGSMProceduralView_varispProcView=spHole;if(NULL_var!=ispProcView)HResultrc=ispProcView-InsertInProceduralView();创建零件设计表/初始化CATICkeParmFactory工厂CATICkeParmFactory_varspParmFactory=spContainer;/创建设计表的函数如下CATIDesignTable_varCreateDesignTable(constCATUnicodeString&iRelationName,cons
18、tCATUnicodeString&iComment,constCATUnicodeString&iFilePath,intorientation=1,intsheetWithoutFile=0);函数说明:iRelationName为设计表的名字,iComment为设计表的说明,iFilePath为创建表的路径。创建零件族的步骤如下:1.创建参数CATICkeParm_varspPp1=spFact-CreateInteger(Column1,0);CATICkeParm_varspPp2=spFact-CreateReal(r,0.0);CATICkeParm_varspPp3=spFac
19、t-CreateString(s,);CATICkeParm_varspPp4=spFact-CreateBoolean(b,CATCke:True);CATICkeParm_varspPp5=spFact-CreateLength(l,0);CATICkeParm_varspPp6=spFact-CreateAngle(a,0);2.将参数显示在结构树上CATIPrtContainer_varspPrtCont=spContainer;CATIParmPublisher_varspPubroot=spPrtCont-GetPart();CATICkeFunctionFactory_varfa
20、ct=CATCkeGlobalFunctions:GetFunctionFactory();CATISpecObject_varspParameterSet=NULL_var;spParameterSet=fact-GetCurrentSet(CATICkeFunctionFactory:Parameter,spPubroot,CATCke:True);CATIParmPublisher_varspParmPublisher=spParameterSet;spParmPublisher-Append(spPp1);spParmPublisher-Append(spPp2);spParmPubl
21、isher-Append(spPp3);spParmPublisher-Append(spPp4);spParmPublisher-Append(spPp5);spParmPublisher-Append(spPp6);3.创建设计表CATIDesignTable_varspDesignTable=spFact-CreateDesignTable();4.将设计表显示在结构树上CATISpecObject_varspRelationSet=fact-GetCurrentSet(CATICkeFunctionFactory:Relation,spPubroot,CATCke:True);spPa
22、rmPublisher=spRelationSet;spParmPublisher-Append(spDesign);5.将参数与设计表关联,注意参数名字与设计表的列参数名字一定要相同/参数列表CATLISTV(CATBaseUnknown_var)list;list.Append(spPp1);spDesign-AutomaticAssociations(spContainer,NULL_var,&list);/添加关联spDesign-AddAssociation(Column2,spPp2);spDesign-AddAssociation(Column3,spPp3);spDesign-
23、AddAssociation(Column4,spPp4);spDesign-AddAssociation(Column5,spPp5);6设置配置spDesign-SetCurrentConfiguration(1);创建草图Sketch有两种方式可以创建草图:1.通过参考平面创建/获得参考平面CATLISTV(CATISpecObject_var)spRefPlanes=spPart-GetReferencePlanes();/初始化草图工厂CATISketchFactory_varspSketchFactory(spContainer);/在XYplane上创建草图CATISketch_
24、varspSketch=spSketchFactory-CreateSketch(spRefPlanes1);2.通过原点和两个矢量方向该方法通过定义一个原点和两个方向pH、pV进行创建。定义原点和方向:doublepOrigin3=0,0,10;doublepH3=1,0,0;doublepV3=0,1,0;CATISketchFactory_varspSketchFactory(spContainer);CATISketch_varspSketch=spSketchFactory-CreateSketch(pOrigin,pH,pV);创建草图几何/首先声明编辑草图spSketch-Ope
25、nEdition();CATI2DWFFactory_varsp2DFactory(spSketch);/下面创建点CATI2DPoint_varspPt_bottom_left,spPt_bottom_right,spPt_top_right,spPt_top_left;doublept_bottom_left2=10,10;doublept_bottom_right2=50,10;doublept_top_right2=50,50;doublept_top_left2=10,50;spPt_bottom_left=sketch2DFactory-CreatePoint(pt_bottom_
26、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);/开始创建线CATI2DLine_varspLine1,spLine2,spLine3,spLine4;spLine1=sketch2DFactory-CreateLine(pt_bottom_left,pt_bottom_right);
27、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);/将线的首尾连接起来CATI2DCurve_varspCurve1(spLine1);CATI2DCurve_varspCurve2(spLine2);CATI2DCurve_varspCurve3(spLine3);CA
28、TI2DCurve_varspCurve4(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_le
29、ft);spCurve4-SetEndPoint(spPt_bottom_left);/然后退出草图:spSketch-CloseEdition();创建草图约束CATI2DConstraintFactory_varspConstraint2DFactory(spSketch);/定义spLine1为水平约束spConstraint2DFactory-CreateConstraint(spLine1,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_Horizontal,0,0);/定义spLine2为垂直约束spConstraint2DFactory-Creat
30、eConstraint(spLine2,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_Vertical,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_Vertic
31、al,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轴的距离约束CATI2DAxis_varspSupport=
32、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,NUL
33、L,NULL,NULL,Cst2DType_Distance,0,0);5.3生成圆柱体实例本实例所实现的功能本实例主要实现创建圆柱的功能,在对话框中直接输入圆柱直径和圆柱高度,点击确定按钮,在零件中自动创建相应直径和高度的圆柱体,其界面如图5.4所示。图5.4创建圆柱界面实现的步骤获得零件指针/获得文件指针CATDocument*pDoc=NULL;CATFrmEditor*_pEditor=CATFrmEditor:GetCurrentEditor();pDoc=_pEditor-GetDocument();/这里得到了PART环境下的文档指针CATInit_varspInitOnDoc(
34、pDoc);/得到零件根容器CATIPrtContainer*piPrtCont=(CATIPrtContainer*)spInitOnDoc-GetRootContainer(CATIPrtContainer);/得到零件指针CATIPrtPart_varspPart=piPrtCont-GetPart();创建草图/初始化草图工厂CATISketchFactory_varspSketchFactory(piPrtCont);/在XYplane上创建草图CATISketch_varspSketch=spSketchFactory-CreateSketch(spRefPlanes1);创建草图
35、几何/首先声明编辑草图spSketch-OpenEdition();CATI2DWFFactory_varsp2DFactory(spSketch);/这里表示圆心点doubleiPoint2=0.,0.;/下面创建圆圈CATISpecObject_varspLine=spSketch-CreateCircle(iPoint,_Editor003-GetFloatValue();CATI2DCurve_varspCurveOnLine(spLine);spCurveOnLine-GetStartPoint();spCurveOnLine-GetEndPoint();/然后退出草图:spSketch-CloseEdition();创建约束CATI2DConstraintFactory_varspConstraint2DFactory(spSketch);/定义spLine1的半径约束spConstraint2DFactory-CreateConstraint(spLine,NULL,NULL,NULL,NULL,NULL,NULL,Cst2DType_Radius,0,0);/定义spLine1与坐标原点的同心约束CATI2DAxis_varsp
限制150内