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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
) ~4 q* }6 q8 Z6 @

" d7 a7 z; r7 E7 {个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !* y' L( O+ y2 }) p# l
8 P9 Z, D3 B/ U  O

: u' x5 x0 [. W" x6 s0 Y
$ @+ q' e- [$ C4 A- y6 d[mw_shl_code=c,true]; P7 |& }1 x1 \! M4 ^5 t
        //get the main body1 L! v3 n1 k" c9 t1 |) K3 h
        8 A9 `- S& K7 ^6 R: Q% X
        ----   -----
. ~! |& f* ]7 G8 c/ y- W& c! T{, [% Q# y$ O. E' i
        CATIPartRequest_var spPrtRequest = spPrtPart;# u9 R' L+ C0 N# h" L
        if (NULL_var == spPrtRequest)6 M$ r' q3 A; C% F1 N' k8 K
        {2 B  [( O; L  V# l, I
                printMessage("NULL_var == spPrtRequest");
% v; `. M% H; H3 |                return;
2 j: K- N* @; M' h( n( j% O& }        }
4 d% R' F) X1 Q& S9 ~* w        CATBaseUnknown_var spMainBody;" J3 b. A5 X1 {& O# c2 L
, i9 n$ J: T1 [" C
        rc = spPrtRequest->GetMainBody("",spMainBody);
5 i7 ~! W) ]* q* N3 X        if (FAILED(rc))& ^( q& D& v' w& u, Q
        {
: a7 u$ }4 C3 w7 H/ I# \                printMessage("Failed spPrtRequest");
" T9 `, ?5 d4 ^0 j- C! ?                return;/ N# M, C& G( Y# r0 ?) q
        }- \* B; @9 N# O1 F8 m9 U5 B

8 g; x' x, ^" k- m# W, x0 a0 l  H" K        CATIAlias_var spAliasBody = spMainBody;4 U" O" l( [* D) Z) M8 V
3 r4 N' W1 v* w% W! ^& T0 K
        printMessage("Main Body" + spAliasBody->GetAlias());
- y# G% T7 J" ^$ Z0 N. \- B% b: \2 @. S5 E
        CATIBodyRequest_var spBodyRequest = spMainBody;
& t3 J, w( W+ n& _4 ]        if (NULL_var == spBodyRequest)
; S9 W4 h% u% @" p4 g6 F. U        {, _& T  B4 Y( i" b' A; G
                printMessage("NULL_var == spBodyRequest");
8 K/ e, |) m- K                return;! `1 b3 u$ s" |- b) Y5 [
        }
0 c7 [( u& m0 v* [, |        CATLISTV(CATBaseUnknown_var) ListResult;/ j& u0 i/ j1 p  A( q. }  K% C
        rc = spBodyRequest->GetResults("",ListResult);) a7 A! R. f3 P  c  H( t' u7 T6 J
        if (FAILED(rc)|| 0 == ListResult.Size())+ n. ^: ~/ a7 L/ l
        {
, U2 g; l! {& Y  t3 q; N                printMessage("ListResult failed spBodyRequest");  C. J2 H9 ], T9 A6 ?" C
                return;
6 A( |  m; ~' Y& e9 ]        }- r9 S! O( P2 S& y* m( t
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];0 `$ H% C: `( F  i  q

3 d" m7 Y/ |) l7 T4 H        if (NULL_var == spFeatureResultGeomElement)7 r0 ^( s2 N; f$ j; ~8 I9 |
        {
* T1 R  K! ?/ V* F( b2 b& S                printMessage("NULL_var == spFeatureResultGeomElement");
) z# T3 ]3 s, C/ m- p                return;
# N1 _, x3 z0 I& O3 I% ~        }
+ {' e; p$ ]) `' @2 D
) j3 Q9 q) c5 m" q' Z) ~        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();' |5 y( v8 D3 k
        if (NULL_var == spTopoBody)  i8 [- L: K; o. d( [, r
        {
8 A) {0 y0 X* j: g6 t$ r8 n                printMessage("NULL_var == spTopoBody");( K9 s  }; y0 i( f
                return;
5 S$ ~" s" H+ {" ~6 [- g        }2 l8 x% t, m- a$ K- y

! V+ `- M3 I  d8 F' L# \! E, r! e8 k+ ]( L# M, u" Z# ]
        CATLISTP(CATCell) cells;; w' `% U) r- J' q6 G. }
        spTopoBody->GetAllCells(cells,2); //get all the faces" t% H, |' q$ U, ^( T  w
( w1 S! U% _& X7 q4 Q; C
        char msg[256];
/ |7 h% j0 O  I' Z3 c. I; c! {        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
) _0 Q0 G6 [/ O0 Q* M- B        printMessage(msg);+ B8 x/ R3 t2 I9 H0 s
0 m  D% \% {6 C- K8 E  F" R7 K
        for (int i = 1; i <= cells.Size();i++)
! t+ j/ J) e; `: H2 w        {
4 ]7 C  g. Y  R8 E& W4 {6 G                CATCell_var pCell = cells;
7 K+ C0 W" l# ^                if (NULL_var!=pCell)' t# v- K2 r, @9 E; R* F% O: a7 {
                {
, ^9 `6 V" `( W) z, p( l                        CATGeometry *pGeometry = pCell->GetGeometry();
4 ^  H0 O1 R; P( ~- l                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
& n) e0 q; k$ |: l                        {/ F* G1 T$ h) {8 }. f% Y( D, @

+ e: |8 [+ a$ Q, f                                //CATMathPoint CenterPoint;
& D6 t5 ^4 e( f                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
% h: H. Q; ^2 M4 X$ z$ k                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());" i7 h$ I1 a& z' n
                                //printMessage(msg);& E: J+ v$ ?( y4 j, N; q& A) ^
                                 & e" P6 n" z! F; f% N
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);( D& d  g+ K7 |! i/ P! J- K' j
                            if (spBrepAccess != NULL_var)# c( \' E& m: E- q- X
                            {
  R6 z* A5 I. b3 L                                        //assign color                               
9 q7 t# D) W  l0 G; H* R" k                                        CATIVisProperties * pVisProperties = NULL;
2 @: e8 I- v6 Z: d' r+ K: S                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);) j  C! o4 u# F0 Z+ |; c
                                        if (SUCCEEDED(rc))
; Y- t, {6 j0 ~  d' s. N                                        {
) U! T0 L0 k/ r. v                                                CATVisPropertiesValues ivalues;
. x/ G& Y, g( g3 I  H( [                                                ivalues.SetColor(0,0,255);
4 K# P5 B3 ?/ F1 C                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );/ _% e' [1 V% V; n+ U
                                        }' x8 m! S. D0 f4 f8 R
                                        pVisProperties->Release();  [( a; |1 L) B4 x# c
                                        pVisProperties = NULL;; N$ l4 H7 z& h6 u3 T
                                . Q. C1 Z" F% @/ ]
                                 }: u. c) M5 t+ ?  u: c) t: h: h
3 f- E4 m: h2 @/ S5 O% T
                           }( N0 o* C7 [3 l7 `* d6 {# T
                                //get alias name and persistentTag to add in the list" {- B% Z$ x2 Q  T% ]' ]
                       
6 ?1 R0 ^- X8 {5 N3 ]1 T                                : \5 E, u* Y2 n' e5 |( t9 `7 K  }
                        6 _- F3 x1 u( S
                        }
) O7 V$ d# m, ^4 G( A  \: d3 X0 o" G# k
4 L* N4 X2 v/ v0 y5 u0 |  x/ _                }2 ]' H: e& L7 w2 l. ]" Q1 x
: `. ]" S1 W, H, N/ [* J
        // End of User Code
! m9 o0 {( Y' |- E1 h, X}
) a1 F, s2 F% p$ W$ B' X6 F[/mw_shl_code]
9 V* p0 S6 Q) Q" N3 x& L) m0 s, V
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了