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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82166
QQ
发表于 2018-1-15 14:21:37 | 显示全部楼层 |阅读模式

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

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

x
* P! C1 z# V9 G6 j6 K0 E: K
: ~" z& \+ u, J5 X0 c9 }) t
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !' L# V* G$ u( x7 O5 ]2 U2 ?
! p8 |! w( u9 s& x

) S- B; V' }7 v) t# f
/ \. n! f0 k; K9 e/ W' S8 l[mw_shl_code=c,true]) J& }" m% p2 z: m' w8 E
        //get the main body# i! p  g8 f$ |0 P1 H3 e
       
, I& \& F& B* i1 `        ----   -----
6 \1 o( {3 I! l& v! q# R, {; x9 }- w{; d4 q2 y8 K! N
        CATIPartRequest_var spPrtRequest = spPrtPart;; A7 c5 I. \. w9 V: z4 @' J6 u
        if (NULL_var == spPrtRequest)) D& \- R3 d8 P; d1 p
        {
( b) W" M$ F! X7 }( B0 a                printMessage("NULL_var == spPrtRequest");6 f/ \, H; D) O& ^# Q7 u3 F$ I3 [
                return;
# S4 N  ^# W- }6 ]. W: a. C        }
) B, n6 H& s' U* _+ I( Z; ^        CATBaseUnknown_var spMainBody;0 M5 h: T; E& G; Z8 B
8 I6 u) @6 W3 {2 B5 m% j; l' o
        rc = spPrtRequest->GetMainBody("",spMainBody);
* a/ e' v2 W. U! u- j- W6 B        if (FAILED(rc))% {+ a! Y, g/ s/ m
        {
1 V0 c' G& C$ j  T7 q' F                printMessage("Failed spPrtRequest");
3 m+ f5 N+ n- X+ s! w5 M                return;
& X: D" L3 i0 ^; G/ b9 y& w        }+ O9 @: k) m: h- U8 ~- K

9 u" w0 A, ~0 H; m        CATIAlias_var spAliasBody = spMainBody;9 Y# Q; `& V- p7 ^3 f

( X. j# f: u5 Y+ t$ F! c        printMessage("Main Body" + spAliasBody->GetAlias());* {" t$ I4 L; L, P8 I( S
- K* u% f: J+ |3 Q9 v7 ~
        CATIBodyRequest_var spBodyRequest = spMainBody;: z+ t. F3 D5 ]' B  ?) [: z( K
        if (NULL_var == spBodyRequest)
0 B, s9 Y( I5 ~9 m- L5 X) F8 j        {4 X" Z% m! g2 D5 g7 @  i8 Z$ d
                printMessage("NULL_var == spBodyRequest");- S( |& L2 H9 e# \$ z
                return;
0 ]0 ^8 y0 X) Z        }, T7 k8 {0 L% z& n( K, C6 k% Q, j& w
        CATLISTV(CATBaseUnknown_var) ListResult;( t- H% V' V- O
        rc = spBodyRequest->GetResults("",ListResult);) X8 F' t. s9 ^4 r+ F. w) {: y
        if (FAILED(rc)|| 0 == ListResult.Size())
* W: ~9 l6 K" D& O& F0 b        {
, z8 E1 L: L: [0 K- x8 k, V4 V# A                printMessage("ListResult failed spBodyRequest");
) l- u7 s0 B4 K: X# W6 @! s                return;
$ ^  }0 |" p; y: p7 n7 z7 V        }
& x8 Q& r4 @' a9 G* P        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];" R" F- }$ N1 S' Q7 ]
) t" b# A3 I' v1 H. F2 {/ @
        if (NULL_var == spFeatureResultGeomElement)
  k- ^) T" |8 L; ?- P  r        {7 Q$ c. I' G; L  F) O' ?
                printMessage("NULL_var == spFeatureResultGeomElement");
$ ^' p% @2 J, G' d+ {                return;
5 Z9 i! J1 C% D        }
  |& u% d; u4 z! b# m+ z2 j0 y% O* Y% j0 O3 A9 A; a( e8 B0 C5 d3 ]
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();4 j/ S1 `$ m4 w# }7 @* v
        if (NULL_var == spTopoBody)
# V% d6 s; e, g( q        {0 n" }- ?5 ]" Z" m# T( Z
                printMessage("NULL_var == spTopoBody");
" m$ c  ?) N: H: C# o( B; M" {                return;
; {5 V! d4 J1 L  G; k8 Z/ l" K        }
( E8 g5 z5 t* q: P2 N
4 h" I/ s0 x1 g( {, D' L- R
0 y5 `- V+ P2 D% A. d( m/ z        CATLISTP(CATCell) cells;) l1 G; T9 [0 _& m0 ^6 W0 v" O
        spTopoBody->GetAllCells(cells,2); //get all the faces3 o" c: m$ d( p% M/ B. \% h1 t
3 c: O1 T: l( [; ?/ q' @+ }. x
        char msg[256];
- o- u3 g8 _9 v( @        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());. B/ h! g+ x3 {$ y& a7 f  O: C9 K
        printMessage(msg);/ q1 H1 D: J0 F# k

  M0 B2 Z# [  z8 G# }, V9 i- q        for (int i = 1; i <= cells.Size();i++)
2 c5 `  [$ d6 w7 @* X        {& ~5 d1 \7 p' y; q. Y6 @; x6 i
                CATCell_var pCell = cells;
3 E+ n. q3 p; ]' B; D0 |0 s                if (NULL_var!=pCell)
5 m2 i& h' s& @6 ^2 h" M                {. M& v& x$ Y  T8 u9 ~
                        CATGeometry *pGeometry = pCell->GetGeometry();; f+ Q  z. F" B4 a
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
$ ~9 V3 S: g9 g" S$ P; G/ C5 ^                        {; u/ U* G; M! ?! M6 J" l& m& X

3 O' G# M& d/ j4 G' V                                //CATMathPoint CenterPoint;" g* S/ s4 `  ~; U5 N& b) l6 Y
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);  H5 Y1 O; U# ^  Z9 V/ Z( c
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
$ H0 A: y- Y" V                                //printMessage(msg);
$ r6 ]$ \/ z1 D, s* [; ^$ ?. j                                 
( A. u1 _* O. T4 b                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);8 S2 }$ g6 H2 |* \# s
                            if (spBrepAccess != NULL_var)
- t: t+ C$ U- q  X1 f                            {
6 s% w1 P7 M' i% ?& p                                        //assign color                                # G- V4 T4 L- H: J
                                        CATIVisProperties * pVisProperties = NULL;9 k3 _! |' V4 L) m4 x$ n
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);8 [* }+ {  e; N4 @
                                        if (SUCCEEDED(rc))2 \, ^" ?; e, R5 y
                                        {4 C0 B2 e% }8 y; \/ p* q9 g3 \
                                                CATVisPropertiesValues ivalues;$ W# T! S! R' Y+ d( K
                                                ivalues.SetColor(0,0,255);. n5 d6 A3 m- Z! {$ _' E
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );0 s: f, q& G+ L# Y& `) j
                                        }1 H- T7 ^' p8 Y. k
                                        pVisProperties->Release();0 ^: K2 S/ _2 K- I5 u4 I4 p
                                        pVisProperties = NULL;
) k4 g" N; X, g$ D: l1 H7 b4 l                                7 W7 e- @, S: w
                                 }
% I" P" n+ q8 T! B8 f3 w5 B7 d# s  Y" m: s
                           }
1 x" ]9 v7 t: N# c- s* ]                                //get alias name and persistentTag to add in the list* O# k, Z5 o  x0 k+ d  ^
                       
( m/ V( J. f5 _2 b                                % q+ O% b7 l8 l$ F' m
                        4 Z1 Q! v6 ]1 o% s) n8 h  Q. Q
                        }4 k9 G" n. b' _' F. R, q; q2 G8 h+ h
8 T. V. ~' I; ]7 v6 a& L2 u
                }
3 i: ?7 u( D7 H% G, F) V4 V
; ^- L' D' @3 s0 q2 G9 U1 u        // End of User Code, U6 W+ E7 t7 D8 z8 }+ }& ~0 B5 Y
}; d$ `2 q5 e8 ]5 _/ z$ K2 \$ f4 {
[/mw_shl_code], ]( e/ p  x5 I$ Q4 Z" @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了