Brep相关接口

//retrieves the feature associated to the BodyOUT

  CATISpecObject_var FeatureSolid = shapefeat->GetResultOUT();

  if ( NULL_var == FeatureSolid )

  {

    cout <<"Error, the Feature Solid is NULL" << endl;

    return 1;

  }

 

 

  //6 - 2 retrieving its associated geometry

  //

 

  CATIMfGeometryAccess_var geoAccess = FeatureSolid;

  if (NULL_var == geoAccess)

  {

    cout <<"Error, the geometry access is NULL" << endl;

    return 1;

  }

 

  //6 - 3 retrieving BRepAccess from geometry

  //

  CATLISTV(CATBaseUnknown_var) breps;

  int nbfaces = geoAccess -> GetBReps(breps);

  if (0 == nbfaces)

  {

    cout<<"Error, there is no face associated to the geometry"<<endl;

    return 1;

  }

 

  CATLISTP(CATIBRepAccess) ListBreps;

    CATIBRepAccess * Brep = NULL;

  CATBaseUnknown * Unk = NULL;

   

    for(int compt = 1; compt <= nbfaces; compt++)

  {

       Unk = breps[compt];

    Brep = (CATIBRepAccess * )Unk;

    if (NULL != Brep)

    {

      Brep->AddRef();

      ListBreps.Append(Brep);

    }

    }

  breps.RemoveAll();

  nbfaces = ListBreps.Size();

  if (0 == nbfaces)

  {

    cout<<"Error, there is no face in the BRepAccess List"<<endl;

    return 1;

  }

  else

  {

    cout<<"There is(are) "<<nbfaces<<" face(s) on the part"<<endl;

  }

 

  //

  //7 - retrieving and displaying current faces colors

  //

  cout<<"--------------------------"<<endl;

  cout<<"Retrieving current colors"<<endl;

  CATListOfInt retrieveRed,retrieveGreen,retrieveBlue;

  

  rc = CATMmrApplicativeAttributes::GetColorsOnFaces( ListBreps, retrieveRed,retrieveGreen,retrieveBlue);

  if (E_FAIL == rc )

  {

    cout<<"Error, an error occured while retrieving current part colors"<<endl;

    return 1;

  }

 

  for (compt =1;compt<=nbfaces;compt++)

  {

    cout<<"for the "<<compt<<" face, associated color components are : R "<<retrieveRed[compt]<<" G "<<retrieveGreen[compt]<<" B "<<retrieveBlue[compt]<<endl;

}

 

2. o Access to hierarchy of features within part,

Part1//                     filtering on fillets

Part2//      o Access to topology associated to features

//                  o Graphical modification of this topology

Part1//

  // 6-1 Gets the fillet features

  //

  CATLISTV(CATISpecObject_var) filletFeatures;

  CATIDescendants *pPartAsDescendant = NULL;

  rc = spPart->QueryInterface(IID_CATIDescendants, (void**)&pPartAsDescendant) ;

  if( FAILED(rc) )

  {

      cout <<" The MechanicalPart does not implement CATIDescendant" << endl;

      return 1;

  }

         

  pPartAsDescendant->GetAllChildren("CATIFillet", filletFeatures);

 

  for(int currentFillet=1; currentFillet<=filletFeatures.Size(); currentFillet++)

  {

     const CATISpecObject_var& currentfilletFeature = filletFeatures[currentFillet];

     if ( NULL_var != currentfilletFeature )

     {

        //

        // 6-2 Gets the BRep associated with the fillet

        //

        CATIMfGeometryAccess *pFilletAsGeomAccess = NULL;

        if (NULL_var != currentfilletFeature)

           rc= currentfilletFeature->QueryInterface(IID_CATIMfGeometryAccess,

                                                      (void**)&pFilletAsGeomAccess) ;

        else

           rc = E_FAIL;

             

        if ( SUCCEEDED(rc) )

       {

           CATLISTV(CATBaseUnknown_var) filletBReps;

           pFilletAsGeomAccess->GetBReps(filletBReps);

 

           // 6-3 Colorizes BRep

           for(int currentBRep=1; currentBRep<=filletBReps.Size(); currentBRep++)

          {

              CATIVisProperties *pFilletBrepAsGraphics = 0;

              const CATBaseUnknown_var& currentfilletBRep = filletBReps[currentBRep];

              if (NULL_var != currentfilletBRep)

                 rccurrentfilletBRep->QueryInterface(IID_CATIVisProperties,

                                                              (void**)&pFilletBrepAsGraphics) ;

              else

                 rc = E_FAIL;

 

              if ( SUCCEEDED(rc) )

             {               

                 CATVisPropertiesValues color;

                  color.SetColor(0, 255, 0); // green

                  pFilletBrepAsGraphics->SetPropertiesAtt(color, CATVPColor, CATVPMesh);

 

                  pFilletBrepAsGraphics->Release();

                  pFilletBrepAsGraphics = NULL ;

             }

          }

           pFilletAsGeomAccess->Release();

           pFilletAsGeomAccess = NULL ;

       }

     }

   }

   pPartAsDescendant->Release();

   pPartAsDescendant = NULL ;

 

Part2//

//

   // 7-5 Gets all two dimensional topo cells representing the Part body

   //

   CATLISTP(CATCell) cells;

   spPartTopoBody->GetAllCells(cells, 2);

 

 

   //

   // 7-6 Processes the two dimensional topo cells

   //

   for(int currentCell=1; currentCell<=cells.Size(); currentCell++)

   {

      CATCell_var pCell ( cells[currentCell] );

      if ( NULL_var != pCell )

      {

         CATGeometry *pGeometry = pCell->GetGeometry();

 

         if ( (NULL != pGeometry) && (pGeometry->IsATypeOf(CATPlaneType)) )

         {

            CATIBRepAccess_var spBRepAccess ( CATBRepDecode(pCell, spFeatureResultGeomElem) );

            if( NULL_var!=spBRepAccess )

            {

               //

               // 7-7 Colorizes BRep

               //

               CATIVisProperties *pBRepAccessAsGraphics = 0;

               rc= spBRepAccess->QueryInterface(IID_CATIVisProperties,

                                             (void**)&pBRepAccessAsGraphics) ;

               if ( SUCCEEDED(rc) )

               {

                  CATVisPropertiesValues color;

                  color.SetColor(0, 0, 255); // Blue

                  pBRepAccessAsGraphics->SetPropertiesAtt(color, CATVPColor, CATVPMesh);

                 

                  pBRepAccessAsGraphics->Release();

                  pBRepAccessAsGraphics = NULL ;

               }

            }

         }

      }

   }

1.       通过BRep feature询问CATIMfBRep接口

 

HRESULT ColorBrushDlg::SetColorOnFaceBreps(CATListValCATISpecObject_var TargetFace)

{

    -------------------------------------------------

    for(int objId = 1; objId <= TargetFace.Size(); objId++)

    {

 

       CATIMfBRep* pFaceAsBrep = NULL;

       TargetFace[objId]->QueryInterface(IID_CATIMfBRep,(void**)&pFaceAsBrep);

       if ( NULL != pFaceAsBrep )

       {

           //

           // 6-2 Gets the BRep associated with the Face

           //

           HRESULT rc= S_OK;

          

           //此方法可以成功更改颜色属性!但需更新后方能显示

           CATLISTV(CATBaseUnknown_var) selectFaceBreps;

           selectFaceBreps = pFaceAsBrep->GetBRep( TargetFace[objId]);//Returns the selecting objects associated with the BRep feature

           for(int currentBRep=1; currentBRep<=selectFaceBreps.Size(); currentBRep++)

           {

              CATIVisProperties *pFilletBrepAsGraphics = 0;

              const CATBaseUnknown_var& currentselectFaceBRep = selectFaceBreps[currentBRep];

              if (NULL_var != currentselectFaceBRep)

                  rccurrentselectFaceBRep->QueryInterface(IID_CATIVisProperties,

                  (void**)&pFilletBrepAsGraphics) ;

              else

                  rc = E_FAIL;

 

              if ( SUCCEEDED(rc) )

              {               

                  CATVisPropertiesValues color;

                  color.SetColor(ired, igreen, iblue); // set color

                  pFilletBrepAsGraphics->SetPropertiesAtt(color, CATVPColor, CATVPMesh);

 

                  pFilletBrepAsGraphics->Release();

                  pFilletBrepAsGraphics = NULL ;

                  --------------------更新--------没效果------QI失败-------

                  //CATIModelEvents *piME = NULL;

                  //rc = currentselectFaceBRep->QueryInterface( IID_CATIModelEvents,(void **) &piME);

                  //if( FAILED(rc) || piME == NULL ) return rc;

                  //CATModifyVisProperties notif(currentselectFaceBRep, CATPathElement(currentselectFaceBRep), CATVPGlobalType,CATVPColor,color);

                  //piME->Dispatch(notif);

                  //piME->Release();

                  //piME= NULL ;

              }

           }

 

           --------------------更新--------没效果-------------

           //HRESULT hr = ::CAAGsiObjectUpdate(TargetFace[objId]);

           //if(FAILED(hr))

           //{

           //  ::Send_message("Failed to update current select face!");

           //  return E_FAIL;

           //}

 

       }

 

    }  

    //-----------------------------------------

    return S_OK;

}

//刷新Update ,更新视图

for(int bodyId = 1; bodyId <= listTargetBody.Size(); bodyId++)
  {
   CATVisPropertiesValues color;
   color.SetColor(ired, igreen, iblue);
   CATIModelEvents *piME = NULL;
   HRESULT rc = listTargetBody[bodyId]->QueryInterface( IID_CATIModelEvents,(void **) &piME);
   if( FAILED(rc) || piME == NULL ) continue;
   CATModifyVisProperties notif(listTargetBody[bodyId], CATPathElement(listTargetBody[bodyId]), CATVPGlobalType,CATVPColor,color);
   piME->Dispatch(notif);
   piME->Release();
   piME= NULL ;   
   
  }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值