美文网首页狮猿社CATIA
CAA:CAASchAppSample2

CAA:CAASchAppSample2

作者: 锦囊喵 | 来源:发表于2020-08-05 09:52 被阅读0次
    // COPYRIGHT DASSAULT SYSTEMES  2000+
    //=============================================================================
    //
    // CAASchAppSample2 - Creates a component with multiple GRRs and swaps GRRs
    //
    #include <iostream.h>
    
    // This framework
    #include "CAASchApp.h"
    #include "CAASchAppSample2.h"
    #include "CAASchAppClassNames.h"
    #include "CAASchAppBaseServices.h"
    
    // CATSchPlatformInterfaces
    #include "CATISchComponent.h"
    #include "CATISchCompGraphic.h"
    #include "CATISchGRRComp.h"
    #include "CATISchGRR.h"
    
    // ObjectModelerBase
    #include "CATDocument.h"
    #include "CATIContainer.h"
    
    // System
    #include "CAASchAppErrors.h"
    #include "CATIUnknownList.h"
    #include "IUnknown.h"
    
    
    // Drafting
    #include "CATISheet.h"
    #include "CATIView.h"
    
    //=============================================================================
    //  Constructor
    //=============================================================================
    CAASchAppSample2::CAASchAppSample2() :  _pSchDoc (NULL)
    {
    
      cout << "CAASchAppSample2::CAASchAppSample2()" << endl;
    };
    
    //=============================================================================
    //  Destructor
    //=============================================================================
    CAASchAppSample2::~CAASchAppSample2()
    {
      _pSchDoc = NULL;
    
      cout << "CAASchAppSample2::~CAASchAppSample2()" << endl;
    }
    
    //=============================================================================
    //  CreateComponent
    //=============================================================================
    int CAASchAppSample2::DoSample(const char *iFileToBeLoaded, const char *iPathToOutputFile)
    {
      cout <<"============================================================"<< endl;
      cout <<"===       CAASchAppSample2::DoSample                     ==="<< endl;
      cout <<"============================================================"<< endl;
    
      InitEnvironment(iFileToBeLoaded);
    
      HRESULT RC = S_OK;
    
      CATISchCompGraphic *piCompGraphic = NULL;
      CATISchComponent   *piComponent   = NULL;
      CATISchComponent   *piSchComp     = NULL;
      
      CATIUnknownList *pLIGRRs    = NULL;
      CATIView        *piViewGRR1 = NULL;   
      CATISheet_var   spDtlSheet  = NULL_var;
      
      CATISchGRRComp  *piGRRComp    = NULL;
      CATISchGRRComp  *piGRRComp1   = NULL;
      CATISchGRRComp  *piGRRComp2   = NULL;
      CATISchGRRComp  *piGRRComp3   = NULL;
      CATISchGRRComp  *piNewGRRComp = NULL;
    
      CATISchGRR      *piSchGRR = NULL;
    
      CATTry 
        {
        //-------------------------------------------------------------------------
        //  At this point, we should have a pointer to our reference object.
        //  If not, this might not be the correct drawing.
        //-------------------------------------------------------------------------    
        if (NULL_var == _spAppRef)
        {
           cout << "Cannot find Application reference object " << endl;
           return 0;
        }
    
        //-------------------------------------------------------------------------
        //  Using the reference object, find CATISchCompGraphic interface.
        //-------------------------------------------------------------------------    
        HRESULT rc = _spAppRef->QueryInterface (IID_CATISchCompGraphic,(void **) &piCompGraphic);
        if (FAILED(rc))
        {
           cout << "cannot get CATISchCompGraphic interface " << endl;
           return 0;
        }
      
        //-------------------------------------------------------------------------
        //  Use the CATISchCompGraphic's method, ListGraphicalRepresentations, to
        //  find the current graphical representations for the object. 
        //
        //  Since this object was created in sample1, we know it will only have
        //  one GRR.  Use this to find the detail sheet and view of the GRR.
        //-------------------------------------------------------------------------
        int NbGRR = 0;
        if (SUCCEEDED (piCompGraphic->ListGraphicalRepresentations (&pLIGRRs)))
        {
           unsigned int uSize = 0;
           if (SUCCEEDED (pLIGRRs->Count(&uSize)))
           {
              cout << "Size of GRR List = " << uSize << endl;
              NbGRR = uSize;
              if (uSize != 0)
              {
                 IUnknown *piUK = NULL;
                 if (SUCCEEDED (pLIGRRs->Item(0,&piUK)))
                 {
                    if ( SUCCEEDED (piUK->QueryInterface (IID_CATIView,(void **) &piViewGRR1)))
                    {
                       spDtlSheet = piViewGRR1->GetSheet();
                       if (NULL_var != spDtlSheet)
                       {
                          cout << "Got detail sheet containing the GRR detail "
                               << endl;
                       }
                    }
                    rc = piUK->QueryInterface (IID_CATISchGRRComp,(void **) &piGRRComp1);
                    piUK->Release(); piUK = NULL;
                 }
              } 
           }
        } 
    
        //-------------------------------------------------------------------------
        //  Now that we know the detail sheet and the view from which the GRR
        //  is from, loop through the other views on the detail sheet
        //  to make additional GRRs for the reference object.
        // 
        //  We know the detail sheet will have two other views from which two
        //  additional GRRs will be added.
        //-------------------------------------------------------------------------
        if (NULL_var != spDtlSheet )
        {
           CATLISTV(CATISpecObject_var) LView = spDtlSheet->GetViewList();
           int SizeOfLView = LView.Size();
           cout << "Size of view list = " << SizeOfLView << endl;
    
           if (SizeOfLView >= 3) // See documention for CATISheet Interfaces for why (>=3)
           {
             CATISpecObject *piSpecView = NULL;
             CATISpecObject_var spSpecView = NULL_var;
             CATISpecObject_var spSpecTemp;
             if ( NULL != piViewGRR1 )
             {
              if (SUCCEEDED (piViewGRR1->QueryInterface (IID_CATISpecObject,(void **) &piSpecView )) )
              {
               spSpecView = piSpecView;
               piSpecView->Release(); piSpecView = NULL;
               for (int iView = 3; iView <= SizeOfLView; iView++) 
               {
                 spSpecTemp = LView[iView];
                 if (!!spSpecTemp && spSpecTemp != spSpecView)
                 {
                   if (!!spSpecTemp)
                   {
                      if (SUCCEEDED ( spSpecTemp->QueryInterface (IID_CATISchGRRComp,(void **) &piGRRComp)))
                      {
                       if ( NULL != piGRRComp )
                       {
                        if (SUCCEEDED (piCompGraphic->AddGraphicalRepresentation (piGRRComp)))
                        {
                          cout << "successfully added GRR at position " << iView << endl;
       
                          NbGRR ++;
                          if ( NbGRR == 2 ) piGRRComp2 = piGRRComp;
                          if ( NbGRR == 3 ) piGRRComp3 = piGRRComp;
       
       
                          if ( NULL != piGRRComp && SUCCEEDED (piGRRComp->QueryInterface(IID_CATISchGRR,(void**)&piSchGRR) ) )
                          {
                            switch ( NbGRR )
                            {
                            case 2:
                                     if ( NULL != piSchGRR ) piSchGRR->SetGRRName(CAASCHAPP_GRR_REP2);
                                     break;
                            case 3:
                                     if ( NULL != piSchGRR ) piSchGRR->SetGRRName(CAASCHAPP_GRR_REP3);
                                     break;
                            default:
                              break;
                            }
                            piSchGRR->Release(); piSchGRR = NULL;
                          }
                        } // if (SUCCEEDED (piCompGraphic->AddGraphicalRepresentation
                       } // if ( NULL != piGRRComp )
                      } // if (SUCCEEDED ( spSpecTemp->QueryInterface 
                   } // if (!!spSpecTemp)
                 } // if (!!spSpecTemp && spSpecTemp != spSpecView)
               } // for (int iView = 3; iView <= SizeOfLView; iView++) 
               if ( NbGRR >= 2 ) piGRRComp = NULL;
               cout << "Total GRR after adding is " << NbGRR << endl;
              } // QI for piSpecView
             } // if piViewGRR1
           } // SizeOfLView >= 3
        }
        if ( NULL != piCompGraphic ) { piCompGraphic->Release(); piCompGraphic = NULL; }
    
        //-------------------------------------------------------------------------
        //  Make sure the main sheet is active before instanciating the reference
        //-------------------------------------------------------------------------
        SetMainSheet();
    
        //-------------------------------------------------------------------------
        //  As in sample1, we create a component instance from the reference.
        //  Then a second occurance of the component is activated with a different
        //  GRR.  Finaly all occurances of the component's images are replaced
        //  with 2nd GRR.
        //-------------------------------------------------------------------------
    
        if ( SUCCEEDED(_spAppRef->QueryInterface (IID_CATISchComponent,(void **) &piComponent)) )
        {
          double aDb6Axis[6] = {1.0,0.0, 0.0,1.0, 50.0,170.0};
    
          rc = piComponent->PlaceInSpace (NULL, aDb6Axis, &piSchComp);
          if (SUCCEEDED (rc))
          {
    
            CATISpecObject *piSchCompInst = NULL;
            if (SUCCEEDED (piSchComp->QueryInterface (IID_CATISpecObject,(void **) &piSchCompInst)))
            {
              piSchCompInst->Release(); piSchCompInst = NULL;
            }
    
            double Db2Loc[2] = {220.0,170.0};
            char *pGRRName = NULL;
            if ( NULL != piGRRComp2 && SUCCEEDED (piGRRComp2->QueryInterface(IID_CATISchGRR,(void**)&piSchGRR) ) )
            {
              if ( SUCCEEDED (piSchGRR->GetGRRName(&pGRRName)) )
              {
                rc = piSchComp->QueryInterface (IID_CATISchCompGraphic,(void **) &piCompGraphic);
                if ( SUCCEEDED(rc) && piCompGraphic) 
                {
                  rc = piCompGraphic->Activate(pGRRName,Db2Loc,&piNewGRRComp);
                }
                if ( SUCCEEDED(rc) && piCompGraphic)
                {
                  cout << "Successfully activated " << pGRRName << endl;
    
                  if ( SUCCEEDED(piCompGraphic->SwitchAll(pGRRName)) )
                  {
                     cout << "Successfully switched all images" << endl;
                  }
                  else cout << "Failed to switch all images" << endl;
                }
                else
                {
                  cout << "Failed to Activate " << pGRRName << endl;
                }
              }
              piSchGRR->Release(); piSchGRR = NULL;
            }
            if ( NULL != pGRRName )
            {
               delete [] pGRRName; pGRRName = NULL;
            }
          }
          else
          {
             cout << "Fail in PlaceInSpace for creating first instance " 
                  << "from the reference"
                  << endl;
          }
        }
      } // end CATTry
    
    
      if (NULL != iPathToOutputFile) 
      {
        cout << "Document saved as : " << iPathToOutputFile << endl;
        SaveDocument (iPathToOutputFile);
      }
    
      if ( NULL != piCompGraphic ) { piCompGraphic->Release(); piCompGraphic = NULL; }
      if ( NULL != piComponent ) { piComponent->Release(); piComponent = NULL; }
      if ( NULL != piSchComp ) { piSchComp->Release(); piSchComp = NULL; }
      if ( NULL != pLIGRRs ) { pLIGRRs->Release(); pLIGRRs = NULL; }
      if ( NULL != piViewGRR1 ) { piViewGRR1->Release(); piViewGRR1 = NULL; }
      if ( NULL != piGRRComp ) { piGRRComp->Release(); piGRRComp = NULL; }
      if ( NULL != piGRRComp1 ) { piGRRComp1->Release(); piGRRComp1 = NULL; }
      if ( NULL != piGRRComp2 ) { piGRRComp2->Release(); piGRRComp2 = NULL; }
      if ( NULL != piGRRComp3 ) { piGRRComp3->Release(); piGRRComp3 = NULL; }
      if ( NULL != piNewGRRComp ) { piNewGRRComp->Release(); piNewGRRComp = NULL; }
    
      CATCatch (CATError, error)
        {
        if ( NULL != piCompGraphic ) { piCompGraphic->Release(); piCompGraphic = NULL; }
        if ( NULL != piComponent ) { piComponent->Release(); piComponent = NULL; }
        if ( NULL != piSchComp ) { piSchComp->Release(); piSchComp = NULL; }
        if ( NULL != pLIGRRs ) { pLIGRRs->Release(); pLIGRRs = NULL; }
        if ( NULL != piViewGRR1 ) { piViewGRR1->Release(); piViewGRR1 = NULL; }
        if ( NULL != piGRRComp ) { piGRRComp->Release(); piGRRComp = NULL; }
        if ( NULL != piGRRComp1 ) { piGRRComp1->Release(); piGRRComp1 = NULL; }
        if ( NULL != piGRRComp2 ) { piGRRComp2->Release(); piGRRComp2 = NULL; }
        if ( NULL != piGRRComp3 ) { piGRRComp3->Release(); piGRRComp3 = NULL; }
        if ( NULL != piNewGRRComp ) { piNewGRRComp->Release(); piNewGRRComp = NULL; }
        if ( NULL != piSchGRR ) { piSchGRR->Release(); piSchGRR = NULL; }
    
        cout << "CAASchAppSample2::DoSample *** CATRethrow" 
             << endl;
          CATRethrow;
        }   
      CATEndTry;
        return 0 ;
    }
    
    //=============================================================================
    //  Initialize the environment
    //=============================================================================
    void CAASchAppSample2::InitEnvironment (const char *iFileToBeLoaded)
    {
      CATTry
      {
         CreateCATProductEnv (iFileToBeLoaded);
    
         _pSchDoc = GetDocument();
         GetAppReference ();
      }
      CATCatch (CATError, error)
        {
        cout << "CAASchAppSample2::InitEnvironment *** CATRethrow" 
             << endl;
          CATRethrow;
        }   
      CATEndTry;
    }
    
    //=============================================================================
    //  Get Application reference object
    //=============================================================================
    void CAASchAppSample2::GetAppReference ()
    {
      HRESULT rc = S_OK;
      if (NULL == _pSchDoc)
      {
        cout << "CAASchAppSample2::Cannot find DOCUMENT " << endl;
        return;
      }
      CATTry 
        {
    
        CATIContainer_var spAppCont = GetAppObjContainer();
        if (NULL_var == spAppCont)
        {
           cout << "DoSample:"
                << "Cannot find application container"
                << endl;
           return;
        }
    
        _spAppRef = CAASchAppBaseServices::FindFeatureByName (
                    SCHEDUPart_TestRef, spAppCont);
    
      } // end CATTry
    
      CATCatch (CATError, error)
        {
        cout << "CAASchAppSample2::GetAppReference *** CATRethrow" 
             << endl;
          CATRethrow;
        }   
      CATEndTry;
    }
    

    相关文章

      网友评论

        本文标题:CAA:CAASchAppSample2

        本文链接:https://www.haomeiwen.com/subject/yelnrktx.html