查看: 2554|回复: 0

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

[复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2018-1-15 14:21:37 | 显示全部楼层 |阅读模式

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

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

×
* |1 c) c3 W, S0 z2 R+ b
8 {, f) R8 y9 _; I& h. g
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !) W& W0 J+ {0 G5 i: G! p
. L7 R6 v9 A  P+ k2 p! M

3 q3 M) ], ?3 ?2 s
7 Y) P- Y9 w2 _: ]5 m3 j$ c[mw_shl_code=c,true]
% r" H  B( ^2 Q        //get the main body, k0 e4 ^# V( P+ \& t4 O
        , B$ o- \) f# r0 n
        ----   -----
5 C" V% r# o* e9 x2 ~{
( p1 t+ C. A5 `7 Y/ M+ _5 i' l        CATIPartRequest_var spPrtRequest = spPrtPart;
/ F, }0 s: {3 k$ k        if (NULL_var == spPrtRequest)
/ l$ |& Z; A- }        {! y/ S2 d( ^- h. o" N
                printMessage("NULL_var == spPrtRequest");3 c* j% A2 P  i0 A; Z  w: @
                return;
& @! D- K% M% {% b6 \( Z% e: D        }
; j- {' p4 n$ s        CATBaseUnknown_var spMainBody;
- @& `9 r% A9 M. q: ~7 x% [4 V; V" X9 D: Z) Z2 m4 \  K
        rc = spPrtRequest->GetMainBody("",spMainBody);
6 o8 _/ E: F8 P) _        if (FAILED(rc))
9 p+ Z; @" _# \, R) S        {
0 V# E8 W1 j( G2 c0 Q, e4 c/ h                printMessage("Failed spPrtRequest");2 i: u& S( a7 V( ^& ~( H* ]
                return;
: P" Y; w; u' x+ f        }3 W3 {3 D) _9 T
# g) j/ `: Y5 ?4 J4 R* _& |
        CATIAlias_var spAliasBody = spMainBody;0 \: A8 x3 u! E4 A

, V4 K9 `+ M" @, G- I4 w        printMessage("Main Body" + spAliasBody->GetAlias());
2 r' [) a" a1 D4 L; z7 |9 u3 p- m* k% T
        CATIBodyRequest_var spBodyRequest = spMainBody;
, O" ]) e" ]( {0 R! v4 D, W; `  @2 ~        if (NULL_var == spBodyRequest)- X$ C4 e6 {: R# [* c
        {
3 z# ?3 g# O8 }! _( F                printMessage("NULL_var == spBodyRequest");  D$ X" ^- w( x; h6 a8 F* I0 J5 X, d
                return;3 I# N# C, w. p  a
        }' N; e' p6 s  f( q; ^6 e, C
        CATLISTV(CATBaseUnknown_var) ListResult;6 n" N( M& _# A$ I* K
        rc = spBodyRequest->GetResults("",ListResult);
  @5 Y2 C9 d. y, |2 Q* n5 e3 l" |/ Z) N        if (FAILED(rc)|| 0 == ListResult.Size())3 Z. B/ s2 Q! W% V* F
        {; p# y% `/ T$ O2 y) _
                printMessage("ListResult failed spBodyRequest");$ Y! r" i9 v  K5 t6 o2 {* q
                return;
& R+ Q# I# _9 |& U5 w$ \        }
; o+ I: Q1 l! J, J4 ]% o! T        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
  }7 n# r# b% d' C- N3 _) h9 d8 p) t4 r1 b- {
        if (NULL_var == spFeatureResultGeomElement)1 R% m# V2 W8 N/ y9 m
        {
+ X, m0 I: f  y9 ?5 K                printMessage("NULL_var == spFeatureResultGeomElement");6 Q, {( _0 Q) u, L0 M/ S7 y- G
                return;
% @3 e. A; H% l3 [$ g3 H        }7 R! P3 _; C8 |8 ]6 h' K+ d

. O  {+ S9 ^9 A8 q. n- g        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();2 R0 w: ?+ V% c2 j7 u; [1 M* r6 J
        if (NULL_var == spTopoBody)" _5 f' ?( S& Z
        {
3 g( Y) W/ {! `1 w& B* y, M                printMessage("NULL_var == spTopoBody");, H; I$ z' w6 n( @
                return;& v3 L, q- x) O0 o7 M0 W) O
        }
  o, C9 F9 O3 c" B( u" v
( N; z9 u0 ^  e+ u: g) z
' S) Q' \. A& f& l# |5 [5 y        CATLISTP(CATCell) cells;, V) }  V( F4 o" n' ~0 a3 i$ N! _
        spTopoBody->GetAllCells(cells,2); //get all the faces
: N) R7 b3 X1 g; R! m2 F! D# e/ B5 r
        char msg[256];6 y1 S/ G$ w6 ?7 N4 Z
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());; B( [0 Z+ ^8 _2 @: ^- R% e
        printMessage(msg);. d& Z, d4 h! W
( W: b) ^2 t' m% X
        for (int i = 1; i <= cells.Size();i++)/ M. P! z- p. `5 f9 a
        {
" H6 b/ K; g6 p* J! u  @3 {                CATCell_var pCell = cells;5 K$ `% U8 u% J- Y4 h4 X) \
                if (NULL_var!=pCell)6 ^, L& b; w! r! `# w3 {$ f& X
                {& k8 H* z4 q+ m* V+ `6 _
                        CATGeometry *pGeometry = pCell->GetGeometry();5 O( @4 q: R8 z0 Z5 d3 ~) x/ |
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face0 ^7 \3 \/ v) s. p  n3 z
                        {+ z& u8 W: }& T+ I) C0 P
/ l8 m( m  x, L; j: K
                                //CATMathPoint CenterPoint;! ]* t; f- S% h. \
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
1 x0 a5 S, V( F# j9 m                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
% @. b; t+ j9 k) S3 s% j6 Q                                //printMessage(msg);3 t! o( p/ V8 F7 c
                                 * L! d4 D0 C! e. i
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);: S1 T3 @3 E! P: T  M
                            if (spBrepAccess != NULL_var). y% S5 n9 c6 \! f  Y" g- B3 F( e
                            {1 @- X+ j0 l9 J7 K
                                        //assign color                                0 p% p- O* P# c
                                        CATIVisProperties * pVisProperties = NULL;
1 v5 A3 v& t+ S                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
  _# \  P, \7 L' |2 n/ M                                        if (SUCCEEDED(rc))
! ^0 `3 G1 w7 @8 r, B9 A( U                                        {
& O9 ]* a9 p; c' Z6 h                                                CATVisPropertiesValues ivalues;
( G# d0 E% J( e2 X2 F                                                ivalues.SetColor(0,0,255);! m+ W* _7 P: i' O
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
  K; W. T5 e% e                                        }, B8 H6 W* o" G2 b1 E
                                        pVisProperties->Release();* U' _8 T7 x" K) V) b. x. n, g# e
                                        pVisProperties = NULL;9 X$ j2 o7 d: v% k  V% O% l
                                , M2 @! Y+ C8 B8 H. K
                                 }* Y1 c* O' f$ H# x6 @" e" n

& |$ u) t% S$ A" Q/ |/ Y                           }1 L/ T3 r/ q( r) k% T9 _, f( t
                                //get alias name and persistentTag to add in the list1 [: i( C! b+ W  ?" R0 p$ g9 e
                        ) S; K7 S% _  p2 _/ F6 e' U
                                / F4 }2 A, `& y! y5 z, V1 `& l1 A" L
                        - l& @  ]7 l) J) C
                        }
7 C3 Z6 e( [, T7 [2 Z$ W: O
+ a8 C8 n" o2 S5 \( I3 A1 z  p                }
+ n. {6 t! w) o+ s; Y; l5 K7 @
5 C; o7 C5 K$ z4 E        // End of User Code
: m  y, s! T1 L. w0 x, I0 I}
$ [7 t& I) r7 }5 F  P+ I7 N[/mw_shl_code]
8 j. d5 X. J) a2 @9 B9 W
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部