CATIA二次开发(CAA)技术基础之零件设计

更新时间:2024-04-04 00:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第五章 零件设计

5.1 零件设计环境

图 5.1 零件设计环境

零件设计环境中,MyPart1 中包含参考平面(包括 XY 平面、YZ 平面、ZX 平面)、轴系、 参数、几何图形集、有序几何图形集、零件几何体、几何体、集合中的几何体等节点。

几何图形集是无序建模,一般全曲面建模就是他比较管用;有序几何图形集,他里面可以 包含集合中的几何体,几何图形集,几何特征,但建模方式是有序的;几何体是直接插入零件 环境下,他里面可以包含几何图形集,有序几何图形,几何特征,但建模方式是有序的;集合 中的几何体在插入前会询问用户,他可以放在树的根目录下也可以放在有序几何图形集里面,

还可以在插入的同时把有序几何图形集里的特征集合到(集合中的几何体)里面。

5.2 零件设计接口介绍

5.2.1 操纵零件的一般步骤

图 5.2 操纵零件的主要接口及步骤

5.2.2 获得 CATIPrtPart

参考代码如下: CATIPrtContainer_var

spPrtContainer = spContainer;

CATIPrtPart_var spPrtPart = spPrtContainer ->GetPart();

5.2.3 获得零件下所有节点

方法一:利用 CATIDescendants 接口 CATIDescendants_var

spDescendantsOnPart = spPrtPart;

CATListValCATISpecObject_var spSpecObjects;

piDescendantsOnPart->GetAllChildren(\TISpecObject\ spSpecObjects); 方法二:利用 CATContainer 中的 ListMembersHere 方法 SEQUENCE(CATBaseUnknown_ptr) ListObj;

long NbObj = piRootContainer->ListMembersHere(\TISpecObject\ for(int j=0;j

注意:\表示将所有的节点列出,如果想要只列出某种元素,可以将该 参数设置为相应的接口,例如\表示所有的点。

5.2.4 获得参考平面

参考平面包括 XY 平面、YZ 平面、ZX 平面,参考代码如下: CATListValCATISpecObject_var spReferencePlanes; spReferencePlanes = spPrtPart->GetReferencePlanes();

注意:spReferencePlanes 为包含三个元素的数组,数组元素依次为 xy 平面, yz 平面和 zx 平 面。

如果要使用 yz 平面,则参考代码如下: CATISpecObject_var

5.2.5 获得轴系

参考代码如下:

spyzPlane = spReferencePlanes[2];

CATIMf3DAxisSystemManager_var spAxisSystem = NULL_var;

spPrtPart->QueryInterface(IID_ CATIMf3DAxisSystemManager,(void**)& spAxisSystem);

//得到的所有轴系

CATLISTV(CATIMf3DAxisSystem_var) oAxisSystemList; spAxisSystem ->GetAxisSystems(oAxisSystemList);

5.2.6 获得参数

方法一:利用 CATIDescendants 接口

CATIDescendants_var

spDescendantsOnPart = spPrtPart;

CATListValCATISpecObject_var spSpecObjects;

piDescendantsOnPart->GetAllChildren(\TICkeParm\ spSpecObjects); 方法二:利用 CATIParmPublisher 中接口 CATIParmPublisher_var

spParmPublisher = spPrtPart;

CATListValCATISpecObject_var ListFound;

spParmPublisher->GetAllChildren(\TICkeParm\ 方法三:利用 CATContainer 中的 ListMembersHere 方法 SEQUENCE(CATBaseUnknown_ptr) ListObj;

long NbObj = spContainer ->ListMembersHere(\TICkeParm\ for(int j=0;j

CATIAlias_var spAlias = ListObj[j];

cout<GetAlias()<

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 =\ ; rc = pIPartRequest->GetSolidBodies(ViewContext,ListBodies); }

例 2:获得零件中的所有有序几何图形集的代码如下。 CATIDescendants_var

spDescendantsOnPart = spPrtPart;

CATListValCATISpecObject_var spSpecOGSs;//所有有序几何图形集

piDescendantsOnPart->GetAllChildren(\TIMmiOrderedGeometricalSet\ 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(\

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(\

CATICkeParm_var spParam2 = spParmFactory->CreateLength(\长度单位为米 CATICkeParm_var spParam3 = spParmFactory->CreateLength(\创建长度参数

// CATIParmPublisher 与 CATICkeFunctionFactory 功能为将所有参数显示在结构树中 CATIParmPublisher_var

spParmPublisher = 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_var

spFormula1

=

spParmFactory->CreateFormula(\

spParam3, pList, \ 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 int iPosition=-1 ) = 0 ;

函数说明如下表 5.1 所示:

& oGeomSet,

表 5.1 函数说明 iDestination 为零件节点 几何图形集位于零件最后 iPosition = -1 几何图形集位于零件最后 iPosition = 0 几何图形集位于零件中 0 < iPosition <= iDestination 的大小 iPosition +1 处 E_FAIL Otherwise //创建有序的几何图形集

iDestination 为其他节点 几何图形集与 iDestination 在同一父节点 下,且在 iDestination 节点后 几何图形集位于 iDestination 中的最后 几何图形集位于 iDestination 中的 iPosition +1 处 E_FAIL virtual HRESULT CreateOrderedGeometricalSet (const CATUnicodeString& iUserName,

const CATISpecObject_var& iDestination, CATISpecObject_var 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) ;

& oOrderedGeomSet,

5.2.11 创建实体特征

实体特征主要包括凸台、槽、旋转体、孔、盒体、倒圆、倒角和厚曲面等特征,创建实体 特征采用 CATIPrtFactory 工厂中的方法,相应的方法如下表所示。

表 5.2 创建实体特征的方法 目标 凸台 槽 旋转体 孔 盒体 倒圆 倒角 厚曲面 方法 CreatePad CreatePocket CreateRotate CreateHole CreateShell CreateFillet CreateChamfer CreateThickness

现举创建孔的例子如下:

1.常用的创建孔的方法包括三种,依次如下。

public virtual CATISpecObject_var CreateHole( const CATISpecObject_var ihSurface, const CATISpecObject_var

ihDirection) = 0

参数介绍:ihSurface 指支持孔的平面或曲面;ihDirection 指孔的特征方向,特征方向可用 CATIGSMFactory 中的 CreateDirection 创建,孔方向若为 NULL_var,则按照曲面的法向创建孔。

public virtual CATISpecObject_var CreateHole( const CATISpecObject_var ihPoint,

const CATISpecObject_var const CATISpecObject_var

ihSurface, ihDirection,

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_var const CATISpecObject_var

ihSurface, ihDirection,

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& const CATUnicodeString& int orientation = 1, int sheetWithoutFile = 0 );

函数说明:iRelationName 为设计表的名字,iComment 为设计表的说明,iFilePath 为创建 表的路径。

创建零件族的步骤如下: 1.创建参数

CATICkeParm_var spPp1 = spFact->CreateInteger (\ CATICkeParm_var spPp2 = spFact->CreateReal (\ CATICkeParm_var spPp3 = spFact->CreateString (\

CATICkeParm_var spPp4 = spFact->CreateBoolean (\TCke::True); CATICkeParm_var spPp5 = spFact->CreateLength (\ CATICkeParm_var spPp6 = spFact->CreateAngle (\ 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);

iComment, iFilePath,

本文来源:https://www.bwwdw.com/article/3nvr.html

Top