许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Catia CAA二次开发:批处理程序(batch program)开发

Catia CAA二次开发:批处理程序(batch program)开发

阅读数 27
点赞 0
article_banner

View Code


#include <iostream.h>
#include <math.h>

//System
#include "CATUnicodeString.h"

//ObjectModelerBase
#include "CATDocumentServices.h"
#include "CATSession.h" 
#include "CATSessionServices.h" 
#include "CATDocument.h"
#include "CATIContainer.h"

//ObjectSpecsModeler
#include "CATISpecObject.h"

//PartInterfaces
#include "CATIShaft.h"
#include "CATIPad.h"
#include "CATIPrtFactory.h"

//SketcherInterfaces
#include "CATISketch.h"
#include "CATI2DWFFactory.h"
#include "CATISketchFactory.h"

//MecModInterfaces
#include "CATIContainerOfDocument.h"

//Mathematics
#include "CATMath.h"

int main(int argc, char ** argv) 
{
    //--------------------------------------------------------------------
    // Check Argument
    //--------------------------------------------------------------------
    cout << " -- Check Argument --" << endl << flush;
    if ( argc < 2)
    {
        cout << "    ERROR  : Pass file name as argument" << endl;
        return 1;
    }
    else  cout << "    Argument Checked OK." << endl << flush;

    //--------------------------------------------------------------------
    // Variable declarations
    //--------------------------------------------------------------------
    //char *pFileName = "TSTScrewResult";
    char *pFileName     = argv[1];
    
    //------------------
    // Create a Session
    //------------------
    cout << " -- Create a Session --" << endl;
    char *sessionName = "TSTScrewSession";
    CATSession *pSession = NULL;
    HRESULT hr = ::Create_Session(sessionName, pSession);
    if ((FAILED(hr)) || (NULL == pSession))
    {
        cout << "ERROR in creating session" << endl << flush;
        return 2;
    } 
    
    //------------------
    // Create a Document
    //------------------
    CATDocument *pDocument = NULL;
    hr = CATDocumentServices::New("Part", pDocument);

    if( (FAILED(hr)) || (pDocument == NULL) )
    {
        cout << "ERROR in Create New Document" << endl;
        return 3;
    }
    else
    {
        cout << "---->OK" << endl;
    }
    //---------------------------------------------//
    //    1 - Retrieve Specification container     //
    //---------------------------------------------// 
    cout << " -- Retrieve Specification container --" << endl;
    //retrieve a CATIContainerOfDocument interface on the CATPart document
    CATIContainerOfDocument * piContainerOfDoc = NULL;
    hr = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**) &piContainerOfDoc);
    if (FAILED(hr) || (piContainerOfDoc == NULL)) 
    {
        cout<< "Cannot find interface CATIContainerOfDocument on CATPart" <<endl;
        return 4;
    }

    //with this interface, retrieve the specification container
    //Note: the specification container (CATPrtCont), contains the mechanical features 
    // of a document
    CATIContainer *piSpecContainer = NULL;
    hr = piContainerOfDoc->GetSpecContainer(piSpecContainer);
    if (FAILED(hr) || (piSpecContainer == NULL)) 
    {
        cout<< "Cannot retrieve Specification container " <<endl;
        return 5;
    }
    piContainerOfDoc->Release();piContainerOfDoc=NULL;

    //----------------------------------//
    //    2 - Retrieve Factories            //
    //----------------------------------//
    cout << " -- Retrieve Factories --" << endl;
    //  a - Retrieve the Sketcher Factory
    //        this factory allow us to create sketch feature 
    CATISketchFactory *piSketchFactory = NULL;
    hr = piSpecContainer->QueryInterface (IID_CATISketchFactory, (void **) &piSketchFactory );
    if (FAILED(hr) || (NULL == piSketchFactory)) 
    {
        cout<<"failed to get interface CATISketchFactory from spec. container"<<endl;
        return 5;
    }

    //  b - Retrieve the Part Factory
    CATIPrtFactory *piPrtFactory = NULL;
    hr = piSpecContainer->QueryInterface(IID_CATIPrtFactory, (void**) &piPrtFactory);
    if (FAILED(hr) || (NULL == piPrtFactory)) 
    {
        cout<<"failed to get interface CATIPrtFactory from spec. container"<<endl;
        return 6;
    }
    piSpecContainer->Release();piSpecContainer=NULL;

    //----------------------------------//
    //    3 - Create Sketch for Rod       //
    //----------------------------------//
    cout << " -- Create Sketch for Rod --" << endl;
    double HeadHeight = 11;
    double HeadRadius = 10;

    //  a - Create Head Sketch
    //  Define Origine and main vector
    double origin[3] = {0,0,0};
    double xAxis[3] = {1,0,0};
    double yAxis[3] = {0,1,0};
    double zAxis[3] = {0,0,1};

    CATISpecObject_var spSpecOnSketch = piSketchFactory->CreateSketch(origin, xAxis, yAxis);
    if (NULL_var == spSpecOnSketch) 
    {
        cout<<"failed to create Sketch feature"<<endl;
        return 7;
    }
    //  b - Open Edition
    CATISketch *piSketch = NULL;
    hr = spSpecOnSketch->QueryInterface(IID_CATISketch, (void **)&piSketch);
    if (FAILED(hr) || (NULL == piSketch)) 
    {
        cout <<"failed to get interface CATISketch on sketch" <<endl;
        return 8;
    }
    piSketch->OpenEdition();
    
    //  c - Retrieve 2DFactory
    CATI2DWFFactory *piFactoryOnSketch = NULL;
    hr = spSpecOnSketch->QueryInterface(IID_CATI2DWFFactory, (void **)&piFactoryOnSketch);
    if (FAILED(hr) || (NULL == piFactoryOnSketch)) 
    {
        cout <<"failed to get interface CATI2DWFFactory on sketch" <<endl;
        return 9;
    }

    //  d - Create element
    double P1[3] = {HeadRadius,        0,                        0};
    double P2[3] = {HeadRadius/2.,    HeadRadius*CATSqrt(3.)/2.,0};
    double P3[3] = {-HeadRadius/2.,    HeadRadius*CATSqrt(3.)/2.,0};
    double P4[3] = {-HeadRadius,    0,                        0};
    double P5[3] = {-HeadRadius/2.,-HeadRadius*CATSqrt(3.)/2.,0};
    double P6[3] = {HeadRadius/2., -HeadRadius*CATSqrt(3.)/2.,0};
    
    piFactoryOnSketch->CreateLine(P1, P2);
    piFactoryOnSketch->CreateLine(P2, P3);
    piFactoryOnSketch->CreateLine(P3, P4);
    piFactoryOnSketch->CreateLine(P4, P5);
    piFactoryOnSketch->CreateLine(P5, P6);
    piFactoryOnSketch->CreateLine(P6, P1);

    //  e - close Edition
    piSketch->CloseEdition();

    //----------------------------------//
    //    4 - Create a Pad                //
    //----------------------------------//
    cout << " -- Create a Pad --" << endl;
    //  a - Create a Pad
    CATISpecObject_var spSpecOnPad = piPrtFactory->CreatePad(spSpecOnSketch);
    if (NULL_var == spSpecOnPad) 
    {
        cout<<"failed to create Pad feature"<<endl;
        return 10;
    }
    //  b - Modify Parameter
    CATIPad *piPad = NULL;
    hr = spSpecOnPad->QueryInterface(IID_CATIPad, (void **)&piPad);
    if (FAILED(hr) || (NULL == piPad)) 
    {
        cout<<"failed to get interface CATIPad from spSpecOnPad"<<endl;
        return 11;
    }
    
    piPad->ModifyEndOffset(HeadHeight);
    piPad->ReverseDirection();
    //  c - Update
    spSpecOnPad->Update();
    
    
    
    //releases
    piSketch->Release();piSketch=NULL;     
    piFactoryOnSketch->Release();piFactoryOnSketch=NULL;     
    piPad->Release();piPad=NULL;


    //----------------------------------//
    //    5 - Create a Sketch for Head    //
    //----------------------------------//
    cout << " -- Create a Sketch for Head --" << endl;
    double RodRadius = 5;
    double RodLength = 45;

    //  a - Create a Sketch
    CATISpecObject_var spSpecOnSketchForShaft = piSketchFactory->CreateSketch(origin, zAxis, xAxis);
    if (NULL_var == spSpecOnSketchForShaft) 
    {
        cout<<"failed to create Sketch feature"<<endl;
        return 11;
    }
    
    //  b - Open Edition
    CATISketch_var spiSketch = spSpecOnSketchForShaft;
    if (NULL_var == spiSketch) 
    {
        cout <<"failed to get interface CATISketch on sketch" <<endl;
        return 12;
    }
    spiSketch->OpenEdition();
    
    //  c - Retrieve 2DFactory
    CATI2DWFFactory_var spiFactoryOnSketch = spSpecOnSketchForShaft;
    if (NULL_var == spiFactoryOnSketch) 
    {
        cout <<"failed to get interface CATI2DWFFactory on sketch" <<endl;
        return 13;
    }
    
    //  d - Create element
    double M1[3] = {0,            0,                0};
    double M2[3] = {0,            RodRadius,        0};
    double M3[3] = {RodLength,    RodRadius,        0};
    double M4[3] = {RodLength,    0,                0};

    spiFactoryOnSketch->CreateLine(M1,M2);
    spiFactoryOnSketch->CreateLine(M2,M3);
    spiFactoryOnSketch->CreateLine(M3,M4);
    spiFactoryOnSketch->CreateLine(M4,M1);

    spiFactoryOnSketch->CreateCenterLine(M1,M4);            //轴线

    //  e - close Edition
    spiSketch->CloseEdition();

    //----------------------------------//
    //    6 - Create a Shaft              //
    //----------------------------------//
    cout << " -- Create a Shaft --" << endl;
    CATISpecObject_var spSpecOnShaft = piPrtFactory->CreateShaft(spSpecOnSketchForShaft);
    if (NULL_var == spSpecOnShaft) 
    {
        cout<<"failed to create Shaft feature"<<endl;
        return 14;
    }
    //  b - Modify Parameter
    CATIShaft_var spiShaft = spSpecOnShaft;
    if (NULL_var == spiShaft) 
    {
        cout <<"failed to get interface CATIShaft on the shaft" <<endl;
        return 15;
    }
    spiShaft->ModifyEndAngle(360.);
    spiShaft->ModifyStartAngle(0.);
    
    //  c - Update
    spSpecOnShaft->Update();
    
    // Release pointers
    piSketchFactory->Release(); piSketchFactory=NULL;
    piPrtFactory->Release(); piPrtFactory=NULL;
    
    //------------------
    // Save a Document
    //------------------
    cout << " -- Save document --" << endl;
    // Write the document under the path specified by pFileName
    hr = CATDocumentServices::SaveAs(*pDocument, pFileName);
    if( (FAILED(hr)) || (pDocument == NULL) )
    {
        cout << "ERROR in saving Document" << endl;
        return 4;
    }
    else
    {
        cout << "---->OK" << endl;
    }

    //----------------
    // Delete Session
    //----------------
    cout << " -- Delete the Session --" << endl;
    pSession->Delete_Session(sessionName);
    return 0;
}


需要在Framework->Module中使用,导入相应的CAT模块。


代码说明:

1.Create a Session

   use the global function :: Create_Session

2.Create a Document

   use the static method CATDocumentServices:New

3.Create sketches, a pad and a shaft

4.Save the Document

5.Delete the session


 相关资源:基于3DEXPERIENCE平台的CATIA二次开发下的.pdf_3dexperience二次...
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空