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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

; F8 E( q0 E& S2 \% O  E7 X+ I3 r: o8 G  l1 c
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
. V, T- L3 H# n' y' y3 }7 I
: e  o. S6 J( E- z' l: c7 m/ O- p+ ~! q

1 V$ B6 v9 [5 j[mw_shl_code=c,true]  B$ Z  @5 O5 L; M
        //get the main body% S; t2 T; j" B5 x! g  G7 k
       
7 p8 S; q  z' M        ----   -----) E' K/ V4 E* d6 Q
{% C, c1 \8 `5 @
        CATIPartRequest_var spPrtRequest = spPrtPart;
2 {, u5 Y1 W. h, W$ n        if (NULL_var == spPrtRequest)
, e) p( g) l$ ^, Y- v* V7 c. g* S& b, K' W        {- v" w/ O3 t8 z$ u
                printMessage("NULL_var == spPrtRequest");
% p* P& V. k" e7 B( |% p$ G$ b                return;/ J: f8 \" k1 k3 L" J+ h# O
        }
# Y9 C& a" f2 v7 m. i# O        CATBaseUnknown_var spMainBody;) V. {# t7 }% c' @# n

9 e0 z! q" b: G        rc = spPrtRequest->GetMainBody("",spMainBody);) Q9 |0 Q) i6 U: {# g9 E7 l' h- @
        if (FAILED(rc))
8 m2 ~/ [9 C( Y5 p6 X5 z! r/ d( _        {
0 ]9 k4 T3 P4 j! [6 `                printMessage("Failed spPrtRequest");
" U; d- }  F0 ]* ]                return;& S9 J( M5 ^9 x4 g4 D2 g
        }
8 Z. U/ q  B2 ^* c2 e2 H6 X- X8 b7 c" o
        CATIAlias_var spAliasBody = spMainBody;  P) M+ u$ \) C) M3 K

/ K4 s/ w) d8 J; G3 ~1 F1 g. B        printMessage("Main Body" + spAliasBody->GetAlias());
8 z0 N2 I8 F  g8 |* S, W  }7 d. B9 d/ {( d) T' I7 h; g
        CATIBodyRequest_var spBodyRequest = spMainBody;7 O. l" V, G5 ]  f; r5 K6 _1 \
        if (NULL_var == spBodyRequest)# ~& n5 W: g" c
        {+ q- p/ {) B, O9 A
                printMessage("NULL_var == spBodyRequest");& I2 X( W! \+ E8 }! o
                return;
4 X9 v7 W7 i  P) ?8 u        }
0 T7 C0 k% W. E2 i* J7 r& Q        CATLISTV(CATBaseUnknown_var) ListResult;
7 E( a" @$ a/ Z3 |7 q3 t4 S8 A# z        rc = spBodyRequest->GetResults("",ListResult);
( c) c0 k# S& R% S9 D        if (FAILED(rc)|| 0 == ListResult.Size())4 ?! V7 \6 B0 z. O/ _% l
        {, @3 t) i* A: g5 F6 W
                printMessage("ListResult failed spBodyRequest");3 p% I% F" ^+ y: q! }3 S) Q
                return;
* A9 @5 w; O& q( b+ Z) h. Z3 H        }
/ g* h) ?+ s: p1 O# I9 m        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];; u6 C. S2 l( e

& A+ q/ I# r1 G! ^( |: \7 X        if (NULL_var == spFeatureResultGeomElement)3 r* K- `- s+ x# b3 p* ?
        {
$ K+ ~4 k2 E: H( E: ]( O; m! v9 o                printMessage("NULL_var == spFeatureResultGeomElement");2 W. j* M. T( L( Z: j) c
                return;
& q# ]; c5 Z% i  d. {8 e1 O        }( t& G6 X" P) P" R8 O* W' \
% p; ~# y9 A: k" l2 d1 w
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();; c' G/ f6 _, `0 x: ^
        if (NULL_var == spTopoBody)
5 h1 p# T3 d, }9 n* J: Q        {9 F3 g9 N$ P) o% E4 k9 w+ @' Y
                printMessage("NULL_var == spTopoBody");* o  B! P$ J; h" o- [" W9 Z
                return;; ?5 I9 |  w( O% l  K
        }( O5 D0 P$ T" x5 A; B

3 w4 V/ {1 S/ }% p: i
5 w( S0 P+ x$ R! s. g        CATLISTP(CATCell) cells;; h! }* C* u* L* L# i8 v% L
        spTopoBody->GetAllCells(cells,2); //get all the faces
! [9 p% w+ V& Q7 ]) S
. B! R- i  b' L        char msg[256];& w# ~' U- C3 g& B. @
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
( r. d# ^# N. a        printMessage(msg);# u  S: N& C# j5 c  @# t

! h/ q4 `3 ?1 x" O5 `$ w        for (int i = 1; i <= cells.Size();i++)
2 J5 H7 Q. W9 Y2 m2 L! b        {8 c* }7 j9 u: ?
                CATCell_var pCell = cells;
, n$ g; h. L  q1 ]6 e% a- v                if (NULL_var!=pCell)( t! c4 [+ P# x) b
                {
; j. p/ u3 |* i' K  B4 U                        CATGeometry *pGeometry = pCell->GetGeometry();
7 D5 O2 [8 D1 d                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
" j  @! J* q: g( ~. S3 ]- B                        {
. i( D% y( I4 g; R0 [' g
- i9 V" ^4 ~9 Q) C8 [0 x& R                                //CATMathPoint CenterPoint;8 u  Q) W4 A6 {
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
8 @9 O- q- E$ c. Q                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
0 Y: X7 w, \8 B. s                                //printMessage(msg);# a# {- j0 b! X. U! V8 D
                                 
, E0 B3 _1 u# B                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
& m5 }8 Z" z6 c& V1 J$ n# b                            if (spBrepAccess != NULL_var)( @: J( _; m; A0 ~0 u% z
                            {0 W! _1 r6 B9 u; a2 b
                                        //assign color                               
0 c) V: w8 ?/ _+ s4 y/ |7 f6 Y                                        CATIVisProperties * pVisProperties = NULL;
0 j* T# r! l( W' E' v                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);. k& r2 e3 E5 {( n: j* P1 s
                                        if (SUCCEEDED(rc))
# t. e2 ]0 G* \8 {9 _( z                                        {
) h( h& D9 w$ x5 ^% ^5 ~                                                CATVisPropertiesValues ivalues;( A  |" J/ l8 S4 A* ~" R
                                                ivalues.SetColor(0,0,255);
5 a+ p, \- @- k9 f                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
) Z$ L& Q5 ?8 d7 H8 M* ~3 D                                        }
0 }8 E; U6 E( \                                        pVisProperties->Release();
8 ~( p7 a5 Z3 S' y7 o                                        pVisProperties = NULL;% p  G. ]" ?2 v1 L8 \
                               
2 {! t  M: N5 l+ e' ^  t                                 }
+ Y3 y$ N3 c6 _$ }6 R
* `" I/ U/ w2 j. J6 o                           }
7 u' U5 ?' I; |: o6 V                                //get alias name and persistentTag to add in the list
8 W* W0 n/ x5 p& K4 I                       
0 g4 O2 \2 ^" A# h                               
' u: R7 ?0 e7 H- y; ^                       
3 `. L+ }" u9 [8 I                        }
  `/ J5 e1 @# C8 Q+ y2 G
; D. p/ t, o  h; B                }, a0 m1 c7 w+ B) ?/ O4 N
% V! \7 e8 b* _2 @/ A0 F
        // End of User Code1 W$ @3 b+ I# h  Q; o  s- ^
}$ `3 c5 e2 u2 C' O1 r! V
[/mw_shl_code]  n1 H4 Y. R1 w& m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了