PLM之家PLMHome-工业软件与AI结合践行者

Catia 二次开发源码分享: 获取所有的平面并着色

[复制链接]

2018-1-15 14:21:37 2286 0

admin 发表于 2018-1-15 14:21:37 |阅读模式

admin 楼主

2018-1-15 14:21:37

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x

2 I; \, r7 j8 G: W. |0 Z7 o$ M3 ~* U
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
1 k6 V# u) x2 L" G! L
: e" e. U- a7 G# d1 P- a- J4 z5 p! b& f0 R+ b

; k5 W5 {3 n0 A- v[mw_shl_code=c,true]# ~: K/ |2 f$ b- Y
        //get the main body
; Q+ a3 T; r9 P1 K0 F2 {/ A        0 ?' U) L6 G7 _9 Y/ `
        ----   -----; ]6 A7 T7 U  A* |( i9 w' j- C4 @
{- b: ~4 h) |& t
        CATIPartRequest_var spPrtRequest = spPrtPart;, m" }5 B7 n8 ^$ @( y
        if (NULL_var == spPrtRequest)
0 h; D6 {3 Y- P+ |/ T5 k  b        {" E- Z! c$ e% N
                printMessage("NULL_var == spPrtRequest");& c3 C- w0 L0 Z" a
                return;* p1 J& D8 X2 }7 G
        }
$ p6 G$ [" g, h$ d! }+ N- W6 e" d3 p        CATBaseUnknown_var spMainBody;
3 |+ d( R, H0 X7 d: T0 k0 ^" D8 g" y. u- ^) w
        rc = spPrtRequest->GetMainBody("",spMainBody);
4 h* r! {  q. |/ O# V        if (FAILED(rc))3 k- O- ~1 n4 y* H# V
        {& o4 M3 ^- a7 L9 L* a
                printMessage("Failed spPrtRequest");
7 n% w9 w+ _7 S8 ^                return;
! B, p- @( `$ {        }, `; Z+ F* C( |1 i* K9 T; v3 ^

6 m" I8 g% l/ N0 o/ W$ b        CATIAlias_var spAliasBody = spMainBody;4 t& i% l' N. \# Z
( x' j( A6 G1 ], @# Y5 J$ E0 A
        printMessage("Main Body" + spAliasBody->GetAlias());
, c+ J$ A; R. s
! |3 E3 O  r2 n        CATIBodyRequest_var spBodyRequest = spMainBody;* [9 I3 C5 A# J, D& M( Q3 ^
        if (NULL_var == spBodyRequest)% \3 H  D8 s3 m& }; T% m* @
        {
4 D/ L( o! U: K3 r# g- G3 j                printMessage("NULL_var == spBodyRequest");# }& l3 f2 D$ v3 j
                return;, H7 m) C; N, x8 I! g! I/ \0 q: s
        }
2 s: Q" R& Z; X0 J- W8 S        CATLISTV(CATBaseUnknown_var) ListResult;
- r) i" `2 Y. Z& b/ u; r4 A        rc = spBodyRequest->GetResults("",ListResult);
! O& ?" J& O0 W" I: M+ Y7 O5 q        if (FAILED(rc)|| 0 == ListResult.Size())$ O6 U% o% E. P
        {0 e/ k% a+ Z3 D
                printMessage("ListResult failed spBodyRequest");  g0 h6 ^+ G8 a  `$ c
                return;
$ v1 g6 k' A  r7 }9 Z        }$ j; g  v% W* g8 r) J
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];9 x  x6 n8 x8 v+ {. l
+ y; ~1 W8 v; v
        if (NULL_var == spFeatureResultGeomElement)
' p* R. h! K4 f: U! v1 a. ?9 C8 Z        {
1 G' H7 R3 ^: v                printMessage("NULL_var == spFeatureResultGeomElement");6 z+ T" i8 m  `1 P( w) e5 b0 @
                return;
0 t' x+ N3 \- x. L        }
( r5 b* t# d4 R7 I0 _, w8 x5 D8 ]. ]. p
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
! y; f) Q4 j$ Q2 V6 G        if (NULL_var == spTopoBody)
) q( P. K+ }$ ~9 q6 h! W        {
. d  q4 h. J/ M2 ~4 I                printMessage("NULL_var == spTopoBody");
% Z3 I8 H" T0 x/ m& o8 v                return;
1 a, k5 t! K( d" @5 z+ B& I  J0 Y        }
8 W1 Y7 [% j- U
4 Z3 w4 |1 I5 P! ~$ ?: t( ]8 @4 d% L0 A, U- E+ G. C
        CATLISTP(CATCell) cells;) i% o' R, K, v8 [/ E  h
        spTopoBody->GetAllCells(cells,2); //get all the faces0 |, P( t  W( u. b& I

, q9 B7 c2 {3 U+ b+ k        char msg[256];* ?1 j' T6 l# J2 }
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
2 B" Y. u% z: `( v$ C, ^$ L        printMessage(msg);
/ N6 I! _( r" `1 d' U% R  c% X' Z/ J  X) c) C+ E. Q/ w3 _
        for (int i = 1; i <= cells.Size();i++)
9 M7 s9 I( ?; z$ C4 i        {# t6 ?5 Z' d0 O7 U; l) @+ a$ G
                CATCell_var pCell = cells;
5 @& k& B" M6 n) X                if (NULL_var!=pCell); u) b3 w; e) L6 m3 J
                {
* M' d$ {3 t) J                        CATGeometry *pGeometry = pCell->GetGeometry();
. F! T5 F, m0 b! Z- T8 k                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
2 \8 _+ H- v) z) ]5 S                        {
- q7 v' O' d- g2 F2 k5 R. z' m% _/ W0 |  [; [- n& Z
                                //CATMathPoint CenterPoint;+ y, }; j2 h+ `- ]4 |* W
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);+ S% e: U' g5 [0 m3 U
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
* g" Y& Z8 S2 E. z4 M                                //printMessage(msg);
  h- n  G  y0 x) O2 s% @! Z                                 & l( b8 k8 A! H/ d1 Z; M+ R1 s
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
% a& _+ W* ^; ], P                            if (spBrepAccess != NULL_var)
! D  b3 W( I0 n+ v! R                            {
% q: d$ X* H, p+ v8 Q# @" y3 M                                        //assign color                                $ W1 K* q/ U) w# S+ @1 ~% D0 ^
                                        CATIVisProperties * pVisProperties = NULL;+ h8 J4 ^2 t& b, N5 S2 ]0 c$ H
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
2 Z0 U9 A7 n4 o                                        if (SUCCEEDED(rc))" F  m0 L: |' l4 @8 C: p: M
                                        {+ m3 |* f; \2 O% U& Z
                                                CATVisPropertiesValues ivalues;: _  z) i) w' r
                                                ivalues.SetColor(0,0,255);
5 Y$ X5 |+ }' e/ B  {! @                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
9 p+ Z* F# j1 s& G) ?# J                                        }
1 G  K! P6 p- f1 M5 Z% n% {                                        pVisProperties->Release();
5 s; L( S9 E  L3 Q* {                                        pVisProperties = NULL;
# g: i: e' W+ d& ^) S9 n                               
# w) E% `# d+ v' R1 q                                 }& ~" @( c/ D* `- ~5 W) b' J4 Y
! q; s8 R. w# @/ ?9 r$ w- r- P
                           }) E- V# M3 ^' E. s
                                //get alias name and persistentTag to add in the list
& R6 i3 b) L0 h                       
- Q3 _9 M+ _$ B: [                               
3 ~9 S5 h6 M: w1 t! f                        $ Q: V! n  S5 R8 d5 r
                        }
$ V3 L1 a# T$ w1 l& ]6 t/ W0 ?1 y6 S6 e, u! J' _* R( i7 H8 k  c
                }
2 p0 S' X9 r, |, Q: n* V1 @
) q2 k1 I* ]$ c, r& q+ ~        // End of User Code
  X: W/ g; S! _& `* ~4 u}
0 P. x+ i2 x/ P* Q9 V7 d4 J% S[/mw_shl_code]; J" k7 M; b% T: w2 r
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了