PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

5 c" V( @- W3 J) f- Z
) m2 y0 r2 p, q! \个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
/ J8 J. F. B5 h& o2 A" y
( n  }" ~% u$ U  h, X+ x( }& ^' B& L( z- [$ k% F1 P

8 N3 T# S1 U* E[mw_shl_code=c,true]
5 n: G; ^& b8 ^& `% _+ h* a        //get the main body% n) f6 D  s% z9 N% y( i
        " A- X) [) J, u) U( u& z: L9 j" p
        ----   -----
( A4 b2 k0 e7 G$ b$ _{
; R8 f+ q! r! B8 ]: J- D7 h4 }' j( F        CATIPartRequest_var spPrtRequest = spPrtPart;1 p7 ~0 _5 w  I+ w& M, X4 Z2 W& X
        if (NULL_var == spPrtRequest)
7 a. g6 I" S; T) v6 c6 o# B        {
9 u2 v. X% f0 A: Q% G1 e* z0 E- E                printMessage("NULL_var == spPrtRequest");
/ m7 \" L- c& i& Y4 B0 k; b4 P+ C                return;
2 i3 c- c: |1 N, t% k4 \        }
2 A9 c' X* ]1 q3 l# ^2 b: e" h        CATBaseUnknown_var spMainBody;
0 Z6 |. e% h1 v  P8 k
( x5 L5 T' p  g! j: J/ {        rc = spPrtRequest->GetMainBody("",spMainBody);) `0 E. u2 f; @& x4 E
        if (FAILED(rc))) L/ c' x' {! m, l+ N$ I
        {" h' r4 b; p# r
                printMessage("Failed spPrtRequest");  v' U5 A* U, {% e4 d$ A
                return;, `7 c0 M4 ~4 m
        }
' S" z5 o! X9 t& ]& F
" B+ S/ _. l7 x; z0 p        CATIAlias_var spAliasBody = spMainBody;4 j' f. w" Y2 V' w, F1 b; j

* h: i# k1 k7 q' ], j' G$ i& l8 Y        printMessage("Main Body" + spAliasBody->GetAlias());" n3 q6 {, Q! }' I9 g) F
% p3 @* x9 s& z& Q
        CATIBodyRequest_var spBodyRequest = spMainBody;
$ Z' V3 Y1 G% M% {1 J        if (NULL_var == spBodyRequest)
4 {6 {0 q+ M& h( f5 b; L' n        {
9 }3 G. A# {0 O+ ~                printMessage("NULL_var == spBodyRequest");6 C" s7 ]; m; b! \! _; a
                return;: J: l; o7 D1 ]' \2 h9 ?
        }9 X: d7 M( r  j2 E+ r1 g$ |4 v% t
        CATLISTV(CATBaseUnknown_var) ListResult;
/ V, x5 G$ V- q; ~  L9 s4 e$ u; t4 k        rc = spBodyRequest->GetResults("",ListResult);( p8 S# m/ M1 V/ o, @- F" q% e/ h
        if (FAILED(rc)|| 0 == ListResult.Size())
# m, F( n9 U) L9 z# O1 r        {
- |; W3 U# c* r9 B1 c* O! X/ f; J* n                printMessage("ListResult failed spBodyRequest");
# p: A/ R0 _- X0 U                return;; i0 Y2 ?4 N' e/ z  ?- J$ e1 Q( Q
        }
' d7 v5 N* _; T        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];4 [3 T. x" X4 x0 h+ q

1 D& D# @+ K7 {7 P4 [; T) R7 L        if (NULL_var == spFeatureResultGeomElement)
# N' M& n- A, Z, u: i, G( Z        {! P& c$ c  x. f( {3 x6 |
                printMessage("NULL_var == spFeatureResultGeomElement");  w  x0 v' g) Y6 ~' a% S+ D
                return;
6 Q! o! y$ _9 N0 z: o" P        }, {) W9 W1 f! M7 o, B0 Z( w/ n% B
& u% F: W7 P" g2 k1 G( X( H
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
+ ^7 d6 d, {5 Y  Z0 n        if (NULL_var == spTopoBody)
8 x; l- |( e7 s, \        {
0 o3 v0 Y9 k3 v$ U* v! |5 Q                printMessage("NULL_var == spTopoBody");
2 v& l: j# h% ~1 r. U                return;
: V- ^' C' ~" _        }
! x- e, P# i. f+ D0 G" p: D) q" C9 s5 e5 c) q+ `
9 z! X. Z6 q  u/ Z- v' }
        CATLISTP(CATCell) cells;
5 i, a, d1 U7 _  R5 m        spTopoBody->GetAllCells(cells,2); //get all the faces
7 x2 L  ~+ O6 ~, S, G: j! E+ h# Q
        char msg[256];( i3 _( @/ H6 e5 x; U$ ]% k: N8 z
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
8 ~. {) u) r. S6 N7 K        printMessage(msg);8 o8 C5 F+ Y: Q+ X% d+ y6 }/ d
' v+ _' I+ j9 u
        for (int i = 1; i <= cells.Size();i++)* _# Q, _6 Y. ]
        {
% K& i) d- m; T. G* \9 R                CATCell_var pCell = cells;
( j. g( v- J2 I! s' h1 w8 p                if (NULL_var!=pCell)% o: ?9 [" z/ N2 o* W
                {; P9 \$ m% R" q& h; c+ q9 M" c1 @
                        CATGeometry *pGeometry = pCell->GetGeometry();4 d  d- R7 y4 L) ?/ ~3 E
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
2 L! F; o: b3 @; A, _8 c                        {
% n7 p9 f3 W% e. o- W5 e+ m  n/ W: B' o$ ?
                                //CATMathPoint CenterPoint;
" p0 ~) K9 O5 c: X$ Z                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);3 K. f0 M" Z; W$ w
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
: f" o& z5 {1 M4 A$ u9 A                                //printMessage(msg);
* R( k. a( }' z                                 
! P) m% K" v# W  K: |                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);, S1 _  h- w/ _" G7 A$ o5 |& t
                            if (spBrepAccess != NULL_var)$ `, w" U' b2 m' K! ?# r. v4 C- E
                            {% |' U/ F3 v0 L1 L# I  x
                                        //assign color                                2 U0 W$ H; d: ?0 Z4 t
                                        CATIVisProperties * pVisProperties = NULL;
* C9 q8 H. |$ w3 |& s                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);9 V% ?& g4 F) m; u% W0 P8 }
                                        if (SUCCEEDED(rc))
# a* T, m7 ?! X$ J% L+ U                                        {: {+ t. y# I/ w; I" m1 c) E
                                                CATVisPropertiesValues ivalues;+ u* L2 L% l5 t  y5 R6 H! _- c
                                                ivalues.SetColor(0,0,255);; @1 O! @3 c0 I3 F8 N
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );% m# t; V- \! ^, `9 \* a
                                        }% C7 W+ E# k- _6 w- l" p
                                        pVisProperties->Release();
' u' [* W8 w# ?1 E                                        pVisProperties = NULL;
4 [, K$ E: L& |0 V  o1 n                                * \7 M1 f+ @( ], \# }- c/ Y
                                 }! f! ~! C' e; k  B/ m3 N* G3 ~& z
$ E% J! B4 m- y( j  z1 u
                           }
& S7 Y1 _- Q% x. S% [                                //get alias name and persistentTag to add in the list
( ]4 w0 ]$ f% O3 p3 \1 `5 F* ]; J                       
8 `6 Y$ n- O) [# m3 }( w                                , C% c" n0 W7 K( W
                        . F8 j8 v' h* k) w& b
                        }
; X. C8 S  G$ }1 G( f# {0 s$ {4 k7 e
                }
. I8 R/ e# b8 g; w5 x8 |# O: o% n# G5 s7 c% t/ N& w
        // End of User Code
, g: o+ Q$ f; v. c3 w/ Z- v}
, d0 N" j1 m5 T: g- b[/mw_shl_code]! a* X5 ?3 h2 z; _) N) N
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了