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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
4 S; n+ B) y4 C4 K; u
+ I9 i# S( h2 d& c7 I4 n* u
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !9 J! W- u7 o# p, m+ n3 n6 m
; m6 P+ @$ h6 ?  ]9 q# y8 Q( C0 t

# Z7 _# y1 \; D' M8 F$ D" ^* r% O* v& k. i6 m4 g) r
[mw_shl_code=c,true]
: }2 ^& c, |) E; I8 t6 ]        //get the main body3 {1 h& W, d! B9 s9 \4 {3 ?; q
       
: ]+ j$ G, @9 U        ----   -----( j" N& m, {# a; ]- d# \' f7 B
{: I9 ~# m# \4 M+ g! x; y% Q
        CATIPartRequest_var spPrtRequest = spPrtPart;
- O2 s4 I/ i' X% `        if (NULL_var == spPrtRequest)
$ D" D- @. _& {3 M( N+ V2 @$ I% T        {1 L/ K  ]( y) z( z( F
                printMessage("NULL_var == spPrtRequest");
% D; r! o% [. u. x$ A                return;! }6 U  _' D! l' b$ r% g* S
        }1 p$ W4 n) @! r; e- h/ g
        CATBaseUnknown_var spMainBody;" [* @+ {1 H; ?& u( O+ P

6 {4 c3 V' K  h& ]# \# A4 a7 |        rc = spPrtRequest->GetMainBody("",spMainBody);; C% t( a; ?) }
        if (FAILED(rc)), J( D# M* Z9 L. _( p
        {& I+ V' `% c8 Y
                printMessage("Failed spPrtRequest");4 C+ E% y' e& P/ u8 C2 z
                return;( D5 Z, _# r8 o3 U7 c
        }
& w, z2 q$ J0 r4 y0 a* k5 i& x9 H7 a6 {3 ~6 F5 }2 ^
        CATIAlias_var spAliasBody = spMainBody;7 i5 B; [; f7 ?- g+ u
/ n, y, k% @+ v1 D5 q" d$ b! A
        printMessage("Main Body" + spAliasBody->GetAlias());
( R" ^* w* ^+ A+ ?" U8 ]! Y# D" f! u. N+ |; l
        CATIBodyRequest_var spBodyRequest = spMainBody;
" Y0 _: [6 u% I1 }        if (NULL_var == spBodyRequest)  V2 \$ D& ]# T/ O2 x3 {4 s
        {8 n" q% e5 `% N& |
                printMessage("NULL_var == spBodyRequest");
  Y3 t8 S+ p) B1 k3 t                return;1 B6 D+ g- P( L' D( x
        }  S; g  L: C: I; S0 w. R9 Y
        CATLISTV(CATBaseUnknown_var) ListResult;* V1 s( \% J1 c9 s0 T- G: m
        rc = spBodyRequest->GetResults("",ListResult);
6 F; i# |3 T; G! r        if (FAILED(rc)|| 0 == ListResult.Size())
8 m3 e$ r/ S) f2 t. o        {
4 m9 F0 Q( {/ v$ |                printMessage("ListResult failed spBodyRequest");
8 Q; }8 `( [, V$ v! S. e/ h, {+ g4 a                return;2 @8 l* {1 {/ V7 |' e
        }& \  g+ V/ P2 n# y" B8 ]
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
7 M$ q$ |* s& j" D( D5 b- G. T* F: P( u+ |6 q* v
        if (NULL_var == spFeatureResultGeomElement)* e% p1 M; r! D" |  ~' s
        {
' `  i: ]/ m4 B, N& ~. R                printMessage("NULL_var == spFeatureResultGeomElement");. c0 x" b( D% {  f3 q3 C
                return;
+ \1 `% M" C& d8 }2 _6 {. t- X        }
5 D/ ~. m% \$ X9 `$ R. J: t! I) x" ?  r
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
/ I1 o  t" b+ K2 T4 P! s        if (NULL_var == spTopoBody)
% c$ Y) w' W9 L0 W( ]        {- i$ Z. V% q+ l
                printMessage("NULL_var == spTopoBody");1 A( ~2 Z* q6 P
                return;
6 D* l3 q, |. C2 r; N3 T  x        }
4 ?4 H6 Q! t! x7 W3 S
' J, D/ |# w5 F! l' g9 J/ _/ r# W: q
        CATLISTP(CATCell) cells;( Z- C  V2 X6 Q2 |9 H. W) v
        spTopoBody->GetAllCells(cells,2); //get all the faces
# ~  O3 f5 @# ?3 h& U; T0 [2 S
* B( q6 V+ q  k4 g$ [( j' f' H, Z) ?( D        char msg[256];
! ^4 N/ o+ t6 T" x. [  o        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());3 P* y- O; I" K: u7 B
        printMessage(msg);
, O( r6 r% r8 ^7 X/ c
# k/ S0 c  B8 Q  P' h$ ]) f        for (int i = 1; i <= cells.Size();i++)# |% L8 \& m' E
        {
2 D% C( ?0 @; X, T                CATCell_var pCell = cells;5 K# Y; |' j8 P5 Z
                if (NULL_var!=pCell)9 B$ U3 N% Q6 O: A: @
                {
2 s! z7 r# z7 w2 }' a1 ^                        CATGeometry *pGeometry = pCell->GetGeometry();
* N; T* z: A8 e+ z                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face8 n5 H8 F# T6 e/ x' T" B2 d+ U
                        {
) D1 i0 |3 k" c: w6 H; c0 _7 x* d) j
                                //CATMathPoint CenterPoint;4 Y' o& o& H9 n
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
! U- K# Y0 H6 k% Q" b% \( k                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());9 c& X2 w# h9 Y$ A
                                //printMessage(msg);6 o8 w$ v$ c$ a/ q$ g! Y* g0 K5 T
                                 
( T) I! e& `5 `/ P9 Y  T                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);1 e' |. @/ v( G) \& [4 _1 A8 u$ Z
                            if (spBrepAccess != NULL_var)
% ]. g8 S* |( Z                            {. K- x4 t2 K) F. E" ?, {1 I  _
                                        //assign color                                , ]: |- ^  C$ j! X9 t  j
                                        CATIVisProperties * pVisProperties = NULL;
0 O$ `$ |' P5 _                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);' c1 f# S' d0 D8 H# N
                                        if (SUCCEEDED(rc))
0 s. R* A2 a( @9 G                                        {
" u% W- T- u! J3 o3 \                                                CATVisPropertiesValues ivalues;
2 l, U, T* X2 b& l$ B, f                                                ivalues.SetColor(0,0,255);
' R" a/ U# c, w! W& @8 a/ h                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
4 ?7 a! i$ _2 [2 t                                        }
& f- P+ f- O: U* V2 n- h                                        pVisProperties->Release();: r7 \1 A: I. b6 w$ x
                                        pVisProperties = NULL;7 h1 T" w; P# A% [, D
                               
& E9 `1 D1 ]1 E                                 }
  P* Q1 A. [0 u. v8 s1 H. D7 p9 \4 ~6 g3 o+ R+ Y
                           }
& R' @% q- v' J2 u; D( m4 |                                //get alias name and persistentTag to add in the list
& T, ~2 f; b: @9 K# g! N                       
5 Z1 V; g, ~/ H0 k1 }: Z                                + p& d' A. E2 \% A2 N( h
                        9 b# N. J$ \" t" R# |+ R
                        }8 A  x2 d$ V( D) L

! u+ f& C; W4 `' B" S% {, [                }
0 a- T7 C0 b1 h* |
; c6 y. l! |' c/ H( o        // End of User Code" b# _6 J4 \) j; h6 R1 P
}
1 V1 V1 i: s5 T[/mw_shl_code]# `2 _$ e4 W6 R" r5 g
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了