在创建任何几何对象之前,必须在激活的函数命令中添加以下代码 //获取editor, the document and the container CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor(); if(pEditor == NULL) {
printf(\}
CATDocument *pDoc = pEditor->GetDocument(); CATIContainerOfDocument_var spConODocs = pDoc; CATIContainer* pSpecContainer = NULL;
HRESULT hr = spConODocs->GetSpecContainer(pSpecContainer); if(spConODocs == NULL_var)
{
printf(\}
//设置工厂 CATIGSMFactory_var spGSMFactory = NULL_var; CATIPrtFactory_var spPrtFactory = NULL_var; CATICkeParmFactory_var spParmFactory = NULL_var; spGSMFactory = pSpecContainer;
spPrtFactory = pSpecContainer; spParmFactory = pSpecContainer;
//在这基础上你才可以造型,GSMFactory用于创建底层的
//几何对象比如点、线等。PrtFactory包含创建孔特征、拉伸特征实体等函数。 //ParmFactory 包含设定参数的函数。
//创建一个三维数组(x,y,z)定义点坐标 double Coords[3]; Coords[0] = 0; Coords[1] = 0; Coords[2] = 0;
//创建一个CATIGSMPoint并将其转换为CATISpecObject CATIGSMPoint_var spPoint1 = spGSMFactory->CreatePoint(Coords);
//Creates a point CATISpecObject_var spSpecPoint1 = spPoint1; //Casts the point as a CATISpecObject
//为了在CATIA显示你创建的点,必须将其添加到视图中 spSpecPoint1->Update(); CATIGSMProceduralView_var spPntObj = spSpecPoint1;
spPntObj->InsertInProceduralView();
//利用创建的点创建一条线,并将其转换为CATISpecObject CATISpecObject_var spSupport = NULL_var;
CATIGSMLinePtPt_var spLine1 = spGSMFactory->CreateLine(spSpecPoint 1, spSpecPoint2, spSupport);
CATISpecObject_var spSpecLine1 = spLine1;
//通过参考平面创建草图 CATIPrtPart_var spPart(pIPrtContOnDocument->GetPart());
pIPrtContOnDocument->Release(); //有了CATIPrtPart变量就可以利用其方法GetReferencePlanes(),获取参考 平面
CATLISTV(CATISpecObject_var) spRefPlanes = spPart->GetReferencePla nes();
//然后创建XY plane (spRefPlanes[1])
CATISketchFactory_var spSketchFactory(pSpecContainer);
if ( NULL_var == spSketchFactory ) return (CATStatusChangeRCComple ted);
CATISketch_var spSketch(spSketchFactory->CreateSketch(spRefPlanes [1]));
if ( NULL_var == spSketch ) return (CATStatusChangeRCCompleted); spSketch->OpenEdition(); ······//编辑草图 spSketch->CloseEdition();
//通过原点和两个矢量方向 //定义原点和方向:
double origin[3]={0.0,0.0,10.0}; double x_dir[3]={1.0,0.0,0.0}; double y_dir[3]={0.0,1.0,0.0};
CATISketchFactory_var spSketchFactory(pSpecContainer); if ( NULL_var == spSketchFactory ) return (CATStatusChangeRCComple ted);
CATISketch_var spSketch(spSketchFactory->CreateSketch(origin,x_dir, y_dir));
if ( NULL_var == spSketch ) return (CATStatusChangeRCCompleted); spSketch->OpenEdition(); ······//编辑草图 spSketch->CloseEdition();
//通过三点创建一个参考平面,后面进行圆弧倒角时要用到该平面 CATIGSMPlane3Points_var Supportplane = spGSMFactory->CreatePlane(spPo int1, spPoint2,spPoint3); CATISpecObject_var spSupportplane = Supportplane;
//创建倒角半径的参数 CATICkeParm_var Radius1 = NULL_var;
CATICkeMagnitude_var spRadMag = spParamDictionary->FindMagnitude(\GTH\CATUnicodeString name(\
Radius1 = spParmFactory->CreateDimension(spRadMag,name, .01);
//创建倒角 CATIGSMCorner_var Corner1 = spGSMFactory->CreateCorner(spLine1, spLine2, spSupportplane, Radius1,
CATGSMSameOrientation, CATGSMSameOrientation, FALSE); CATISpecObject_var spCorner1 = Corner1;
//裁剪去多余的线和点 CATIGSMSplit_var Split1 = spGSMFactory->CreateSplit(spLine1, spRadius1, CATGSMSameOrientation);
CATISpecObject_var spSplit1 = Split1; CATIGSMSplit_var Split1a = spGSMFactory->CreateSplit(spSplit1, spRadius3, CATGSMInvertOrientation);
CATISpecObject_var spSplit1a = Split1a;
//将线和圆弧依次连接起来,创建一个序列 CATLISTV(CATISpecObject_var) joincurves; joincurves.Append(spSplit1a); joincurves.Append(spSplit2a);
joincurves.Append(spSplit3a); joincurves.Append(spRadius1); joincurves.Append(spRadius2); joincurves.Append(spRadius3);
//在序列连接起来之前,需要创建一个最小的结合距离 CATICkeParm_var Mergedist = NULL_var;
CATICkeMagnitude_var spMergedist = spParamDictionary->FindMagnitude(\LENGTH\CATUnicodeString mergename(\Mergedist = spParmFactory->CreateDimension(spMergedist, mergename, .0001);
//连接起来并插入到视图中
//Now we can join this list of objects into a single shape and insert it into the part. CATIGSMAssemble_var CurveAssy = spGSMFactory->CreateAssemble(joincurv es,
Mergedist, FALSE); CATISpecObject_var spCurveAssy = CurveAssy; spCurveAssy->Update(); CATIGSMProceduralView_var spCurObj = spCurveAssy; spCurObj->InsertInProceduralView();
//创建(Create the new document)
CATDocument* pDoc = NULL; rc = CATDocumentServices::New(\if (NULL != pDoc) {
cout << \} else {
cout << %ush; return 2; }
//打开(Load the document)
CATDocument *pDoc = NULL; rc = CATDocumentServices::Open(argv[1], pDoc);
if (SUCCEEDED(rc) && (NULL != pDoc)) {
cout << \} else {
cout << \l << flush; return 2; }
//获取当前文档 CATFrmEditor * pEditor = GetEditor(); if (NULL != pEditor ) {
cout << \} else {
cout << \ndl << flush; return 1;
} CATDocument *pDoc = pEditor->GetDocument(); if (NULL != pDoc)
{
cout << \} else
{
cout << \< endl << flush; return 2; }
//提取根容器(Retrieving the Document Root Container) CATInit *piInitOnDoc = NULL;
rc = pDoc -> QueryInterface (IID_CATInit, (void**) &piIn