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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

, @  C3 F5 I3 D1 r, \  u  `. F8 X
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
! ?' u5 y4 P6 P0 S9 w" Z9 g) ^, i) G) h( d: _& a* V1 n
1 \0 S5 B& b; ?+ p% |( @$ K

: ?4 y& D0 a, v[mw_shl_code=c,true]# x( O  U: W, g4 E
        //get the main body) \1 |$ ^0 @5 h5 H4 f
       
* J1 @' J- Y8 c6 g5 P        ----   -----
* n( F; }) k! \; d; L$ z2 U{
* @* g% D5 L* `6 B7 t6 X3 e' T4 c$ D        CATIPartRequest_var spPrtRequest = spPrtPart;2 w) w4 b0 r5 ?' V6 G  i" G( u0 Y
        if (NULL_var == spPrtRequest)
; C- M) i: Q: d* U5 U4 Q5 D6 l        {
  A) B, [9 \! _                printMessage("NULL_var == spPrtRequest");
% I8 ~5 N9 n- b% K% {. O                return;
) [- E: I& L  A2 r. o' R  C        }
9 }3 y- |* ^9 r, S. q: N# D7 V# Y9 @        CATBaseUnknown_var spMainBody;5 k6 J8 d2 I* Q+ \0 H3 V  `' m
$ g0 J% G# |9 C$ z; c
        rc = spPrtRequest->GetMainBody("",spMainBody);
' ^1 b' H5 z6 S0 E7 d/ P        if (FAILED(rc))& R9 D. \1 W( Z0 m# S9 l" }
        {/ L( t. `/ Q( F2 ~+ f7 q) p
                printMessage("Failed spPrtRequest");: F% D3 B, ~* i/ T5 X3 b# ]. }8 i
                return;
4 }7 R/ ^; x' W4 R% u# V4 T        }
% X) C2 p* H; B; |0 u3 @0 W$ K; a- o- j2 p$ a! m8 y6 d$ m/ ]5 S
        CATIAlias_var spAliasBody = spMainBody;# Z8 [) ^9 g; x

/ y4 P2 H4 W; r        printMessage("Main Body" + spAliasBody->GetAlias());
0 [7 F4 [& t. `6 w9 {5 z1 s& \# D& k# L8 {7 [( p3 X8 R
        CATIBodyRequest_var spBodyRequest = spMainBody;
; \0 W- f0 e6 s) D1 p        if (NULL_var == spBodyRequest)
* V$ L9 _* {- `        {
) o7 N6 m' {' R7 y) d                printMessage("NULL_var == spBodyRequest");3 O6 O8 n3 {4 {/ Y
                return;
4 F- \: Y8 z+ Q: s        }
. K. t1 [. A! q5 r$ S7 W% _        CATLISTV(CATBaseUnknown_var) ListResult;3 m* k9 _0 q9 i' ?
        rc = spBodyRequest->GetResults("",ListResult);' A0 v6 V7 r3 h; Y: d/ Q9 d
        if (FAILED(rc)|| 0 == ListResult.Size())
! W1 f$ J$ E0 O  J        {1 H6 m3 q) F  x( C- d% [4 A
                printMessage("ListResult failed spBodyRequest");' [  X9 g+ y1 V( Q( o9 ^
                return;
2 k. B! R0 k& Y! v" C        }! N9 F' q5 J  D
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
6 V7 R" _4 C: B+ q3 |' n* P% ?7 x& Q7 \2 p
        if (NULL_var == spFeatureResultGeomElement)/ D" }) D! G6 p) t# ~
        {+ |- g0 t: |$ L/ T" i3 M2 }2 V
                printMessage("NULL_var == spFeatureResultGeomElement");) Y* j; E; r2 F% f8 i8 c
                return;
0 M# M/ z' I* R. Z        }" N( W  i2 u1 t+ ^& e; K' o2 k

8 P3 D  `  z: e" j& m        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
3 m* p& p2 u7 R/ L0 M5 _        if (NULL_var == spTopoBody)
9 X, o% ^- ?, v: {% j        {
" Z* u2 i- n% Q  V0 S1 I% @' F! J2 c" [                printMessage("NULL_var == spTopoBody");
  U/ |! c' o9 x7 D2 F                return;
/ l( @4 [0 o4 m        }" S, p& v8 Y  d1 a* q! u1 Y5 t: e% [: e

5 _' H5 C  n0 B( ?
9 |/ A! C: f& P6 F$ P" h( a        CATLISTP(CATCell) cells;0 o$ H8 m9 b  u- ~" d3 V/ s( r
        spTopoBody->GetAllCells(cells,2); //get all the faces. p4 [9 ^* F5 ^5 ~8 {

4 ~# b9 O$ `; L8 e; o% ^# K* y# W        char msg[256];4 V: Q$ F1 j# @7 b
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
& D0 K2 @6 i9 D6 _        printMessage(msg);
+ B- ?% [% p5 d+ z' B3 n6 b% u8 ^. j8 M. p4 R, v6 r
        for (int i = 1; i <= cells.Size();i++)
8 b7 I- W# J; M) w( s. X        {# E+ Y! \7 X/ e0 h: h# s: n
                CATCell_var pCell = cells;
. ^# e$ X/ u0 A3 {2 t6 E  v                if (NULL_var!=pCell)
  K' @4 w' @! [$ O- N. t1 \                {, M. e$ x' \/ Z
                        CATGeometry *pGeometry = pCell->GetGeometry();
' q" S* h. ]+ [* H. u& Y! O                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face+ F/ j, p1 i/ l# I
                        {
8 S4 q" Z3 U* t! F
# _; ?9 T8 S' Z4 K2 b( I' \) Y                                //CATMathPoint CenterPoint;4 {# A1 S% A# f2 x9 t9 k
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
, M" c3 n: |* K: _* g& P                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
3 _: P3 |% N5 ^; N, h" H                                //printMessage(msg);" i3 S, u; W4 u# p. ~3 z7 O$ T
                                 * k* O) r9 L, |+ I1 l
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
6 Q$ U$ _/ w% D  {& N3 L                            if (spBrepAccess != NULL_var)
' G7 a5 t, r& o% T( t                            {  J) @, Y* b% U  Q! e
                                        //assign color                                / _" \. [  `3 T) I
                                        CATIVisProperties * pVisProperties = NULL;; r1 s: t2 u0 z$ ]/ s, Z
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);+ s' y; {' U* y: @8 B- P
                                        if (SUCCEEDED(rc))
* N0 B& c& ^) ]8 M4 g0 l; t* J                                        {
, `7 ^/ i- v- X8 l( B0 |                                                CATVisPropertiesValues ivalues;0 u/ _& \+ ^: {5 U# f( ^
                                                ivalues.SetColor(0,0,255);
7 z3 a* k0 \7 V                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );' b; b$ k+ L! S* c: U
                                        }, H8 z: d/ Z; r
                                        pVisProperties->Release();
6 }4 \3 Q7 g* X- z0 o                                        pVisProperties = NULL;# Y; }9 w2 _1 c/ W- H  M
                               
8 J  e  ^2 v$ P9 h( [                                 }
3 d; F' A" ^2 {1 w2 S
% M5 u5 {7 z# p2 v6 j; y  i0 W( z3 [                           }# L2 T  t# p0 N
                                //get alias name and persistentTag to add in the list5 I+ C0 j% Z% e3 [7 n  J
                        2 _/ p  i  [. r9 M. ^
                                % `. T* |2 H9 S" e6 [
                        " V" Q2 S. |' k  |  b: T
                        }
8 d' H) k3 D* L( f+ k9 j# |' h/ u6 S. c/ [9 x# r1 o. ^/ d$ u
                }2 v0 \$ v5 r! U1 d/ _. n% D- p

  b) b. R: w8 r. ~; d* d        // End of User Code' ~' D2 T/ X) m" E2 i% s# E& q
}
# s& I6 t5 y; }" k4 t[/mw_shl_code]. Z) f$ z5 O9 D# t  n. [9 p
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了