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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

- O3 L  y, s4 [' A3 y& i0 r0 ~7 F
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
& L$ }/ h1 D- H" P/ ?2 U) O% [9 H6 I( {$ n4 D* O

% P7 e! _0 ]5 A1 J
8 S# q9 k: a, Y; L[mw_shl_code=c,true]6 u6 j5 n6 I1 T3 |
        //get the main body- e$ V' U* S; C0 c* L  s$ L& `" N
       
2 m$ W7 V& A" B! g3 s        ----   -----
/ H0 w* i) Y& a1 j: s{
% y+ J* w9 h# q7 Q& h# G$ @0 }3 e* P        CATIPartRequest_var spPrtRequest = spPrtPart;
5 |* F; b$ e+ Q( `  y4 K        if (NULL_var == spPrtRequest), L+ r5 ~( \9 R5 n8 {
        {
" y$ T) O7 w2 `8 v- Y3 |+ ]: \5 d                printMessage("NULL_var == spPrtRequest");* J% R; p9 A8 K
                return;
( i5 y. f8 I9 D1 F+ |        }5 E& r' C% A, m* B
        CATBaseUnknown_var spMainBody;* H2 @6 _$ x" h5 V8 z/ i$ p

# s7 S5 c- m* @3 C        rc = spPrtRequest->GetMainBody("",spMainBody);
: @. ]3 H+ O. w- h1 d  Q        if (FAILED(rc))
- M+ |/ s: x1 O9 `$ F        {
6 N. F$ B( I) u1 I                printMessage("Failed spPrtRequest");# x9 x* S3 P$ @0 `5 o
                return;
, Q) W; J5 @* ^3 A* k        }
5 l  D+ i' r  e% f; p3 H; }( q' N0 S$ b" |) n. Q& y% v) k1 P0 d
        CATIAlias_var spAliasBody = spMainBody;4 J6 q( l1 L2 w5 ^  o2 ]

0 P0 O7 b: B; o9 p" S: S        printMessage("Main Body" + spAliasBody->GetAlias());
% J  r5 [* G: Z+ l
. Z7 ^5 X4 w: ~' w( U, I3 `8 m. b( h        CATIBodyRequest_var spBodyRequest = spMainBody;2 Y5 d- m# L4 C% k
        if (NULL_var == spBodyRequest)6 f0 G, x8 V  x  d
        {
# w; k, k5 z! g( z: W' E                printMessage("NULL_var == spBodyRequest");* _* T- ?/ o2 j6 [- E/ i  a3 s$ W
                return;, J1 v% l7 C0 r: }" m. X
        }! s0 b( w' a' Q$ g5 j
        CATLISTV(CATBaseUnknown_var) ListResult;
3 t. `! {0 O0 x, u        rc = spBodyRequest->GetResults("",ListResult);+ O- X4 L: G* j& J9 ^; {
        if (FAILED(rc)|| 0 == ListResult.Size())
- b! d, p; ^  u% E        {1 r; I. j1 Y5 L* n4 \$ |0 s7 k
                printMessage("ListResult failed spBodyRequest");
; E. s! [% Y. i1 k( Y9 F                return;2 O/ o2 O+ g$ w7 l7 |2 }
        }& I3 r4 u1 Y  l1 t- F1 q4 F! m( ]
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];7 D" L4 }; t$ k* B" W; d

0 f, I$ h1 Q5 A# i        if (NULL_var == spFeatureResultGeomElement)
4 n3 h, x- w: S3 d7 f! ?2 h        {1 e. \: ~, N) ^  Q/ z, k
                printMessage("NULL_var == spFeatureResultGeomElement");
/ [7 G: }( K% u4 y                return;
# D# V6 Y# x1 q5 t; c        }$ ], |9 f2 a7 P  {8 u

" B6 j! ]; V9 p  k& F        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
4 k, |' `( x( X; o  o9 |  {* }" O        if (NULL_var == spTopoBody)
# ]9 I# b6 W1 |6 G4 ?( ~        {) N( {6 I; V6 v* M% x
                printMessage("NULL_var == spTopoBody");% K4 H. l" ]. X$ \3 Z5 j- T, e( O
                return;+ r/ n% k  P9 O& l$ n, _
        }6 c- ]8 w8 Q. W# w- [) e7 M3 `

1 l9 R& w& o; A  |9 P9 m8 k1 o; J7 j/ o6 i% W
        CATLISTP(CATCell) cells;
- d: `  W$ W5 s* A2 i# R0 T8 {0 h        spTopoBody->GetAllCells(cells,2); //get all the faces) @- l- Z4 Y- c$ ^
# _8 T2 l1 N, o3 k& J
        char msg[256];" V4 l: v$ b( p5 U( A
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());) G1 j2 m3 B% T) m: Q
        printMessage(msg);
, ], |5 z! q5 H, T" o, K0 F2 e: c8 L# I" z0 u
        for (int i = 1; i <= cells.Size();i++)
& }6 d8 [3 Y4 p( h9 l/ I        {
$ x9 I) j  o7 e) `# `                CATCell_var pCell = cells;
0 h( d+ x, \' L1 S9 K                if (NULL_var!=pCell)" [3 ?; M3 w: ~1 A5 n- }# {
                {1 {# G2 q8 ^  y8 R1 J% Z+ {2 A  O8 X
                        CATGeometry *pGeometry = pCell->GetGeometry();
$ M7 q0 x/ _. [                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
) P9 z: U9 @3 y  h  W+ x" w8 m                        {+ i- Y; [+ G; N6 B1 j/ }+ L
; u! @- o& c4 I' n4 ?
                                //CATMathPoint CenterPoint;
  N/ f. W% s1 `- G( _% P' H                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
  q5 @. J4 \2 j/ K5 O- W                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());5 B8 E4 Z- x% t3 t
                                //printMessage(msg);( J" h2 |9 s% `. Y
                                 ( M8 [7 l6 G  F  Y. o
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
+ q7 m  U; \( _- r' |5 b6 M% b                            if (spBrepAccess != NULL_var)
8 Z7 D2 Z* D5 G                            {
8 w0 m7 G* p  p4 F9 R                                        //assign color                                2 ?+ i/ G2 F3 k; q) G
                                        CATIVisProperties * pVisProperties = NULL;
5 s$ l8 A- U. e                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
# I9 [$ n4 H0 X: I                                        if (SUCCEEDED(rc))
/ F9 ?8 A$ l: \: L  |! _+ P                                        {0 b, L0 h" n* O5 V% ]) U- |
                                                CATVisPropertiesValues ivalues;! C- @' ?/ }6 s- u6 Z5 n+ E
                                                ivalues.SetColor(0,0,255);  O1 e9 E" C- i! I: b3 [: `
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
/ F. X& p4 s, Y; h) L/ N                                        }
8 ]- D+ A' g6 m* B: L0 R, W4 ]                                        pVisProperties->Release();
1 a4 p- T- V6 p& `" G                                        pVisProperties = NULL;
7 ]8 D8 h/ j. b- e7 k- l                               
# s! B7 X/ ?+ l9 R3 W: q% u                                 }
$ K( ~6 R9 M) G
/ ]" Z2 p- L, m0 d. c3 ]                           }8 g" z9 }6 m; [8 `8 @* S
                                //get alias name and persistentTag to add in the list2 f8 p0 t: J* t# L) _4 z8 E
                        - r4 O0 n$ E8 m* m% g# C# _
                               
$ u- Q. |  f& w* K) p# E/ _                        / w+ l( T3 M: o
                        }
4 w6 M% i4 M, z1 a/ e3 J2 A' @4 \7 k3 Z# s' |5 Z7 j4 P
                }
/ |. k* f& @4 ?9 B
9 N4 O8 b% r8 C( c% s) Y. q        // End of User Code
  ?4 Q8 o6 Z2 T  ^}
# L+ z2 J# i; w[/mw_shl_code]! w1 V- z+ J4 d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了