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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

3 [& _0 d: L0 n" W
, d1 P0 d- [0 f2 w个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
8 D4 n+ M' s6 ?  E+ F! U! ~7 y0 z5 a' E( V7 K

& R% P0 n; {5 X4 n" ?' L* z2 ~( b$ a/ D; d6 j  m, h
[mw_shl_code=c,true]
6 l8 H; L( E& D5 j2 M6 S        //get the main body7 @' q) m- i% B  u$ |6 Y2 o
       
7 Y! I/ v+ A- a, ?- h, F! w8 v        ----   -----: T# `& u. T, V( r
{
0 O' V6 r/ V' P, D        CATIPartRequest_var spPrtRequest = spPrtPart;
- D1 ?8 v3 }( t& r0 K        if (NULL_var == spPrtRequest)
- I  E- J0 R) p. L7 O4 U        {
8 R2 ]6 o8 U& t% `' s; x                printMessage("NULL_var == spPrtRequest");
8 c  G: u# F' `6 b3 X+ d                return;
* {# Z8 {# M7 b3 M7 L4 D. o2 D        }, Y$ E% c9 t1 p
        CATBaseUnknown_var spMainBody;3 E& X, K" ], d, m6 r

( N9 u5 P2 Z3 M" ^6 N" p        rc = spPrtRequest->GetMainBody("",spMainBody);" a7 G) f; ^: W+ v
        if (FAILED(rc))
- f! z6 a# c6 O0 Z4 Z3 B        {! O" L( S  D+ Y% H. @
                printMessage("Failed spPrtRequest");( ^2 T5 n# u$ y! l
                return;+ B9 Z- z8 I" d( H  N
        }
, a* p3 t: `3 L$ Z0 X, j4 u7 [  ^! E9 e8 Z+ }" z9 F3 a$ m
        CATIAlias_var spAliasBody = spMainBody;
$ h" q! m/ u3 V# ~2 o5 c9 S# p% X6 A9 a9 y5 `' R/ W: C7 Q- k
        printMessage("Main Body" + spAliasBody->GetAlias());
7 E, b6 |$ g4 c' K  G' ]5 c$ @$ |" T) G; s8 R( T) e
        CATIBodyRequest_var spBodyRequest = spMainBody;
% B% x0 t+ y/ H" J: k        if (NULL_var == spBodyRequest)' v7 q' p3 P% R/ M7 e# O
        {
$ v; j0 w5 C/ A& ]% Z                printMessage("NULL_var == spBodyRequest");
! c; `0 s# e. o; z  e$ D4 H+ U                return;
8 s( {7 n6 V; q; `% [        }
9 h" l, ?. h* E/ X* }        CATLISTV(CATBaseUnknown_var) ListResult;
* X0 ^7 F) ]8 ?" S7 L% k+ |2 W        rc = spBodyRequest->GetResults("",ListResult);! i( L+ Y" n" Y4 ~9 q. v& k
        if (FAILED(rc)|| 0 == ListResult.Size())5 j/ X+ p+ G/ I* e* U3 ?( o
        {
$ R) ^4 J$ S. l; E9 B; {8 Z4 v, Z                printMessage("ListResult failed spBodyRequest");
$ W6 z; g5 @6 z+ X! ~" r                return;
* j: j- |% E; A+ F) I' _        }
% {5 H* g7 a# R& B6 m        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
# [2 [/ W& f  U2 e3 J9 d* D3 b+ r6 H) R
        if (NULL_var == spFeatureResultGeomElement)8 ~1 p# p/ a5 j
        {
; d$ S" W0 f- M                printMessage("NULL_var == spFeatureResultGeomElement");
) A+ a4 M1 t4 C1 ^. r9 k4 `# _& G                return;& O" e3 P0 N1 P( B, L2 g
        }$ w) G. \4 _" c3 N# r

2 L0 G& L/ d2 Y: D1 p3 ]        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();+ r' Z7 c7 @/ g/ w! t+ n, ~
        if (NULL_var == spTopoBody)$ a* z8 f) T' s" U- Z: F
        {8 q& H1 T% E2 K: F
                printMessage("NULL_var == spTopoBody");
! @- }& K# u4 Y8 ^% E, l  s/ o# E                return;- V1 [* v& V( U- |/ Q
        }8 y- [2 n5 i7 n% r/ V. `
$ r; t9 V) @1 t$ i) A* S

$ S& j2 X: M; I8 d        CATLISTP(CATCell) cells;# g6 i3 Q8 J$ u5 N/ X7 R
        spTopoBody->GetAllCells(cells,2); //get all the faces* J4 Z9 R6 {4 Y' a+ T
8 ^6 x3 D$ W4 a
        char msg[256];! }( {9 T5 ^: {% K/ A& d0 g5 c
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
7 a6 a7 H. W8 L, N- x$ M7 f        printMessage(msg);% ~7 U1 v, E% B% q

7 ~* {; m: X% M1 s# R0 Z        for (int i = 1; i <= cells.Size();i++)
! y7 I- `$ J( d( j7 m        {
- _  z5 ~3 g# \( f                CATCell_var pCell = cells;* U' v- M  A: P5 g0 b" B+ A* u0 M
                if (NULL_var!=pCell)0 w6 Y0 @6 X3 D5 @# g
                {1 |" Z  R  a0 N1 [
                        CATGeometry *pGeometry = pCell->GetGeometry();
* ~% U' }) e) k9 \                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face  Q, w+ Q. H" s0 d  a8 s$ l
                        {
4 ^$ {( f9 ]+ c' |3 Q$ I" p8 X* m) ^& l/ _
                                //CATMathPoint CenterPoint;
! R4 A0 F) N2 J8 P: ?3 m2 g# u/ R                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
- J- q$ F3 a! j3 j5 M  c4 y                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
( u& |- N. f3 m( p8 t                                //printMessage(msg);
% Y1 E- Z9 a. c3 N! c: B* I* `2 D                                 
% ~( ?9 H. r( H# }; V  W                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
+ f0 r& P% M1 M0 K- c                            if (spBrepAccess != NULL_var)0 x2 N5 p4 k1 S1 w
                            {
& g$ k$ K) t# M; q                                        //assign color                               
7 a8 a  ^6 F/ S( b; Y' Z$ Z                                        CATIVisProperties * pVisProperties = NULL;
0 A1 O4 Z4 r& Y' Y. j/ j9 \* H                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);* M6 Z% y7 ~9 y
                                        if (SUCCEEDED(rc))
, v5 {9 O# Z1 I  P6 Y1 {) T                                        {
" X* z' o8 {+ O5 }6 {  U) N" m                                                CATVisPropertiesValues ivalues;0 }/ P0 P6 |! m5 t; J! x
                                                ivalues.SetColor(0,0,255);
% h0 f/ l& t+ M9 T* ]                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
7 s/ c  h: C% |7 E( v& ?2 m/ m                                        }% Y& a  v5 k+ V  F8 I8 B& j3 L6 U
                                        pVisProperties->Release();
& E$ z3 J: x6 p( c                                        pVisProperties = NULL;
8 C' ~/ w. X& e8 [4 j1 X                                ( i$ t# M: G5 Z( ~
                                 }  K) o( j1 o" T% N" Y; e  }

( O  Q7 c1 K% k                           }
0 c2 t6 ^) C" Y. |' Q                                //get alias name and persistentTag to add in the list# ]3 V& C6 O  U9 b
                       
0 ?$ U" X! A* _+ ^$ F+ H                                $ U# c- |$ Q& _
                        & T% C% Z! b9 \) O9 \4 G( I
                        }
, ]. h! O' b7 T" W5 ?+ h" w$ C7 C/ U8 W
                }
' S. @7 j1 R( ]. L& }
- q4 E) f; c3 L' \7 g; V        // End of User Code
, ]1 x5 d' O' i" P6 k5 S2 L  T}! }, b6 J' k0 Y7 G- j; D) T
[/mw_shl_code]
. @% M9 a1 A! U& l7 o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了