PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

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

x
3 E0 X2 m: l' O; B* R4 t, |

5 _2 K" q% r4 V/ V1 t# \' U, N个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !2 q# Y5 z+ Z8 E% t; M

+ W" q: q+ j6 V6 h1 t: g5 J
: |/ `* B" ?+ J7 O" r* z3 ^3 l' |* ?$ S3 ~5 ~
[mw_shl_code=c,true]3 p& [. l" z/ ?4 D
        //get the main body
( e& |  b" {* ~        5 x6 S8 p1 g& A3 O
        ----   -----
! a! t' J4 z3 x) z& {& E1 Z{1 c" Y7 {( S5 j
        CATIPartRequest_var spPrtRequest = spPrtPart;
# s' M9 h" g( _  h4 ^" ]2 A        if (NULL_var == spPrtRequest)
7 K7 K/ V$ b& C        {
$ u$ a" t8 w7 S/ K. j7 k                printMessage("NULL_var == spPrtRequest");: V$ B) o) x* U7 E
                return;
  g6 i: i" ]5 h+ n. w- p( Q" V9 y        }0 m) |1 w1 s0 |8 t" o( |4 S( t# ~
        CATBaseUnknown_var spMainBody;' r$ P) J6 Z9 ~- z

& n. O7 U# J) B        rc = spPrtRequest->GetMainBody("",spMainBody);, f9 [4 v/ {3 I+ P! U5 C/ v
        if (FAILED(rc))% ^: E+ K% Q% U* h
        {
! v5 f$ i) i. c6 `                printMessage("Failed spPrtRequest");
$ ?% ~" p, |) r                return;9 E  {+ M/ @" x  |8 K, l9 x$ N
        }) b/ }# N' b0 @. M6 b( \; t( r7 w
6 p1 m$ R. F+ c* h  o
        CATIAlias_var spAliasBody = spMainBody;
4 h( L+ N8 J: c: C: Y! ^! Z8 f* ]0 y& k) Q, U
        printMessage("Main Body" + spAliasBody->GetAlias());6 P$ t1 p7 B2 W/ p- J0 h. i0 V! h
  I& k" W& D6 Q
        CATIBodyRequest_var spBodyRequest = spMainBody;/ q$ A9 B% j" m# a; A: |7 e' b* l
        if (NULL_var == spBodyRequest)
9 c) S/ f2 [; u' ^/ j+ A        {* B' T/ j5 y! Y; P5 k3 x. H2 h
                printMessage("NULL_var == spBodyRequest");
; I5 E$ |+ r( [  ~9 D6 {+ K                return;
6 I. Z9 j& Q( i$ E+ A3 o$ Q        }
2 C4 `4 O5 N& c$ _        CATLISTV(CATBaseUnknown_var) ListResult;( U1 j: ?4 v9 y* b: ?
        rc = spBodyRequest->GetResults("",ListResult);
  a9 m+ Z, J3 G& H9 R        if (FAILED(rc)|| 0 == ListResult.Size())+ r% j) n5 @. t1 A
        {
" G6 \2 M6 p( T: I3 h' f9 @2 \2 P                printMessage("ListResult failed spBodyRequest");2 z2 c- D9 P4 ^1 i0 W0 a' R) `
                return;- L, {7 J3 ]# y3 B+ W
        }( J; h9 z* j( D
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];2 Q; D" W* H: T$ g3 q/ O; I2 q9 f6 Y

8 S! T1 S9 g* t( O, [8 U        if (NULL_var == spFeatureResultGeomElement)& G4 y, A/ H  \! C) g3 ^
        {
) M) \0 @* i; E6 q1 S                printMessage("NULL_var == spFeatureResultGeomElement");
0 V- ]" D# Y! [                return;+ N: e( {* i8 u5 J
        }
) d0 M  a7 P% M
( T8 D) C# @2 W5 G8 H6 O        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
/ d( E8 ?7 b5 K* H3 U        if (NULL_var == spTopoBody)
0 Q8 l6 \- v' T& t0 c% r; N        {
7 A4 U( X: J' H) Y8 H: f/ [                printMessage("NULL_var == spTopoBody");
- B5 s+ e7 \, ~4 E                return;5 N5 ^% S) _0 a4 a7 a* [: ^
        }& Z+ W; x# o* K6 z( B0 H

7 m1 u( Q" J/ M6 p  C/ ~6 D6 O6 d/ B( H$ ]
        CATLISTP(CATCell) cells;, d8 O% C; @  a5 F+ D4 Z1 ^9 s( K
        spTopoBody->GetAllCells(cells,2); //get all the faces" o# z$ k( y/ F3 U1 A' i

( H2 |9 c/ ^1 f1 g. c. l6 S        char msg[256];5 D; g: U% V2 o% B+ ~, s% ~
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());: i) d, G2 l- X9 x, l7 _- o1 Z
        printMessage(msg);
5 U" a  z. {) ?2 _) `( k! c9 U: j3 f
        for (int i = 1; i <= cells.Size();i++); S4 F3 a& E: [8 {5 Z
        {
/ O) t( q3 _1 Q5 n5 W" b                CATCell_var pCell = cells;  y: d/ B5 Q$ b/ h2 X  n- \
                if (NULL_var!=pCell)9 c2 p7 R* N6 d% x# P) L
                {
7 K" @: M. e' i3 V, x                        CATGeometry *pGeometry = pCell->GetGeometry();
. j3 ^0 f3 F1 X+ `+ P                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
7 Z' p. m0 q  r1 J                        {: V% j6 [3 }! n; m" ]% t
/ Z4 A- y) W: Y4 M; ?
                                //CATMathPoint CenterPoint;! a& O, D8 p! X3 l% s/ Z3 s& x9 R
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);, n+ J: l: [! ]
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());( i/ o! `! [9 j1 c/ d( S. I
                                //printMessage(msg);0 p' i; }& q' s, l
                                 1 s9 W; _' Q. ~  u5 ?, \2 b! R( U
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
! G- Q* \+ L0 F. r/ k% F- ~                            if (spBrepAccess != NULL_var)
  L) }; A+ A/ T+ w- C/ [                            {
0 @6 o8 b8 v6 O) g; a5 [; x+ ]                                        //assign color                                + P3 b) M; e( e$ T
                                        CATIVisProperties * pVisProperties = NULL;" b8 O6 h# x3 H" D' ~; h0 S& O- n
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
3 u, u% O; L; s/ `, Z                                        if (SUCCEEDED(rc))
0 e2 _$ g/ @/ s7 w+ c' u- s                                        {
0 o/ {& n& O7 s7 ]# }                                                CATVisPropertiesValues ivalues;
  J6 Z% j* q) ]( ~; h/ X/ D                                                ivalues.SetColor(0,0,255);, A0 ~1 B# q( a. i4 F
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
/ b! I& B& K- S7 a6 @3 B, f                                        }8 M3 q  B  y( ?. _- K$ c
                                        pVisProperties->Release();- ?$ u# ]! Z1 o5 a; O
                                        pVisProperties = NULL;  b+ Q5 G, `5 q4 z% H5 y9 V1 P
                               
/ h" e! [. z8 T' K7 q. l; s: {1 D" x                                 }' C0 e. I5 L9 j( Z
0 P0 i; F) z8 m! W$ u" F$ y
                           }. @; _* ~. i3 v: \* {! L& I3 K
                                //get alias name and persistentTag to add in the list* `* D! u' m. N3 Z: e
                        ' {& |% A8 p) z4 d
                                0 D9 H+ ?7 o: c1 C8 U; U% @( ^
                       
' w5 G/ M9 F3 \- u3 S. k                        }- J/ L1 a3 h2 L! q

" N: B* ]% A& y7 d0 z5 |                }
" K8 B( E# H2 r3 M
+ l' F: ~1 Q+ f- @( w3 i6 v$ y2 z. P        // End of User Code
8 s1 r( b9 U9 b}3 M+ J; Q) g1 ]" _+ A- S
[/mw_shl_code]0 A4 }* l1 M0 J6 y* l
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了