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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
; d" i+ e( J  y! J. e* y

7 m3 _" W, C( I# f  Q个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
( Q7 D, y2 g" T/ M) l, y7 @3 p/ F" \) t( d

- M. G% ]8 C$ s( L! _* @7 D( y( q( o5 _* t! l
[mw_shl_code=c,true]" M1 H  t0 Q9 Q& I5 }& C
        //get the main body* x& j9 o9 E% i' W3 V: v
        1 Y" Z. R- _- m- A3 w$ F7 e
        ----   -----5 j. E7 l* J3 V
{
' g( r- C4 \' \1 G4 l: D# b        CATIPartRequest_var spPrtRequest = spPrtPart;. `8 `2 K1 ^% J- H- F
        if (NULL_var == spPrtRequest)
, ]8 s$ F% R, g        {8 n% L9 O& ]( @) L3 ^) a
                printMessage("NULL_var == spPrtRequest");
) n- H5 [' ?: Q% }1 ?/ }3 o                return;
# |) ]0 H. `) X& V2 H        }
( q: C- s6 k/ O. S9 p; y* x: J        CATBaseUnknown_var spMainBody;6 I% z, t2 W4 x8 \! [: ~5 m% J
' q7 ^: P* _( P0 l- \( `0 I
        rc = spPrtRequest->GetMainBody("",spMainBody);) K! m( c7 ~* T/ F+ u
        if (FAILED(rc))
5 ~3 x/ E9 U& g/ l0 W4 w$ u        {
( |* _  y, u" |1 ?0 l6 _                printMessage("Failed spPrtRequest");) a5 y( z. _6 N4 {. o/ v+ W
                return;/ [' J0 Y2 `1 c4 d" H1 |1 F9 s
        }
( e9 a5 N+ c2 p/ d8 L& O
/ O+ i: Z- f0 L        CATIAlias_var spAliasBody = spMainBody;
1 U3 `) _6 i8 Y' J/ f5 \
& X1 H% H; @# W& g0 Y        printMessage("Main Body" + spAliasBody->GetAlias());
, }' z( r& t5 R0 T
7 f8 z" Z0 z/ J1 \. a6 ^0 h; B        CATIBodyRequest_var spBodyRequest = spMainBody;
: F4 ]/ C# T5 y! y2 l        if (NULL_var == spBodyRequest); D9 f/ \' N3 {9 N5 V9 e
        {
0 g4 l6 J1 ^# Q% |: y0 v  @                printMessage("NULL_var == spBodyRequest");
9 g! e" U( e4 _" o! M5 z, d7 g                return;) l$ _5 s6 c# H( @- e/ K% \" r0 H
        }3 g1 @; ^  ]5 q; i% z" @* [
        CATLISTV(CATBaseUnknown_var) ListResult;
0 U: A. a% n5 b8 E2 q9 D! i1 K        rc = spBodyRequest->GetResults("",ListResult);
8 v& P& Q' _, b& \# f& W/ x        if (FAILED(rc)|| 0 == ListResult.Size())/ n1 u" v4 n" ]& R' a3 D/ G: s
        {! ~/ V1 Q4 k0 k! H# d
                printMessage("ListResult failed spBodyRequest");
0 c* U6 z4 w  D3 }* _- p* k; C                return;
3 z$ N5 n( }; Q( \3 Q        }
+ l  H$ [+ Z4 j, x2 R        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];& X" b5 u' h& A4 [& l
8 S- J4 F6 D" R' T  {- k0 v
        if (NULL_var == spFeatureResultGeomElement)& H  d5 ?4 M* n, _6 ?/ F4 z
        {
2 q2 _; d1 J, Y; g; D* P% v, R                printMessage("NULL_var == spFeatureResultGeomElement");6 m  Q6 P0 z  A7 q3 \
                return;
/ {7 L$ I1 r* Y        }7 @1 {2 z5 f" h0 b

: Q) m$ k9 C# Z7 l7 z. i- [        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
; q. v8 Z- s* L  n! X2 k5 {        if (NULL_var == spTopoBody)( c5 q+ ~6 u8 E
        {
& k7 W- z' N# i7 R# r% \; s0 D                printMessage("NULL_var == spTopoBody");" Y& h& A( H  K4 B
                return;
2 k' s  e& K% o, ~" g        }$ B1 r* E" V' [  x3 t$ c

9 l: S* Y1 Y6 ]7 p0 B: P
- K2 p5 E/ O/ G, }) |. ?        CATLISTP(CATCell) cells;: W2 n3 ^" J& `* M! H9 d
        spTopoBody->GetAllCells(cells,2); //get all the faces
0 [3 s( p, u# y, v( p: a3 K8 K. ^0 I, ~" ]+ P' j7 z( k# X
        char msg[256];3 D) e. t+ T) S5 W9 r% z# a
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());2 w* f  [; @' W
        printMessage(msg);
/ p; H$ h* T; n& B5 [; @/ B+ S2 x! }' l% r
        for (int i = 1; i <= cells.Size();i++)
# x  x* ?9 f$ f3 X        {
# ]: F; D0 i. N                CATCell_var pCell = cells;& O0 [1 q. D4 h# j8 q
                if (NULL_var!=pCell)
! L: V8 Y  v7 W                {
0 `4 }& z0 {/ y$ k                        CATGeometry *pGeometry = pCell->GetGeometry();' z5 W  p7 p, s
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
2 }3 V  L! p5 z2 }# L                        {- q. ~. a8 u0 Z4 f  A; }

$ J: ~0 O1 V0 d' C; b                                //CATMathPoint CenterPoint;
- ^' F: I* k% m                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
" [* k5 L& U6 w8 ]                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());6 l' w, \5 z" K- ^
                                //printMessage(msg);3 U# ^) m. N: y% \; C" r" Z  w" V
                                 # F2 H5 s2 A7 S2 q8 w
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);# |6 ?' G% A' T8 H5 W5 I
                            if (spBrepAccess != NULL_var)
" b4 C+ V  P3 {- |) {0 o                            {- E& |- C+ L! M! @: d
                                        //assign color                                + O3 F" B) f# z
                                        CATIVisProperties * pVisProperties = NULL;
, N2 P9 }, G5 {% B+ r- u                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
  N4 y% k2 M& @$ Y' [                                        if (SUCCEEDED(rc))/ v' \+ S7 h7 M1 s: s
                                        {; M! Z, K/ j2 L" s! r8 T
                                                CATVisPropertiesValues ivalues;
* C' {2 {4 p/ p9 H                                                ivalues.SetColor(0,0,255);/ w  r- |0 I- q& I
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
) B6 n* X9 k4 n" o& w4 e                                        }
" r% `* ]. j1 \: j% g                                        pVisProperties->Release();: u# R1 m5 O2 @8 B' G9 O
                                        pVisProperties = NULL;
- o5 J7 L/ ^" q" W2 ?                                ! b8 F1 j0 g, Q7 k
                                 }
" f3 a; f; [8 w: e1 u' ?6 V4 k' M5 [( S8 m+ t& [1 e/ m
                           }
+ i# n2 R2 M8 W; p" h3 _                                //get alias name and persistentTag to add in the list5 |1 n5 Q  ~3 n8 Q2 Y
                        $ {+ m$ t$ _3 w' M$ n% g( s8 C7 W$ h* C) j
                                / {. [; S3 i+ I( V0 {
                       
/ V6 e5 d4 y/ }) ]: [3 \                        }
6 p1 L* a$ W$ Y9 _$ r1 p4 s# T! \* D# k& j4 e
                }6 b) B2 _: `5 k, R- _

! j8 b% u( @# U; {4 X  j2 ]        // End of User Code5 |( a5 ^8 N' R8 p9 u
}
( J% Z5 E" [9 s& r[/mw_shl_code]6 f5 ]! K+ ]$ N' t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了