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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

: z1 H6 \" ^+ k" h- X8 R8 |1 o6 Y3 R0 ?* D
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !& t# Q5 n, ^9 L1 V7 d9 T

+ o2 M  \/ ~7 u9 C* n, l8 h
1 p+ g8 y$ M+ S9 L1 v0 i: ~1 F
6 s7 ^& v' u* |" R/ K& Z[mw_shl_code=c,true]1 H! J  l  A* M" z
        //get the main body
% @. U' \+ C! h- K' W        " ?0 G" m" R$ a- k" w5 A' R6 f" G
        ----   -----4 j; f: d* G4 g: X: |: _
{& [+ P: B- [! \" D. u8 A8 ^; y
        CATIPartRequest_var spPrtRequest = spPrtPart;4 }9 u. R# x6 z  J4 z
        if (NULL_var == spPrtRequest)
. P1 I9 e6 o( z: D        {
# T/ N+ ^5 B5 f6 m# `4 B: H+ v7 ]                printMessage("NULL_var == spPrtRequest");; I& f5 o% A1 G  [5 A! u" t
                return;
1 F' F$ N- M! i, I7 D        }7 G% u+ R! c/ P" Z: D- @
        CATBaseUnknown_var spMainBody;2 ^- s5 D- @7 o6 G$ x1 U$ X
& t3 b! t$ E/ f6 o+ a3 |
        rc = spPrtRequest->GetMainBody("",spMainBody);
( K" Q, Q9 b  }4 t6 Z        if (FAILED(rc))  _! O  R$ s( d2 @  Y* P
        {
( G6 \! U* y& q  N# L' t                printMessage("Failed spPrtRequest");& b( r& {/ ~. H3 J( k
                return;
  {! D; i# T; t  E5 }- ~        }* r- Y8 q+ t7 w+ X) m% p! ^- o

! f, l9 o9 c7 t4 i$ A! X+ K        CATIAlias_var spAliasBody = spMainBody;( @' a) r( M  a; y

8 C. F$ ^5 ~5 e4 H        printMessage("Main Body" + spAliasBody->GetAlias());
7 r0 C- f; C8 I/ P& }- H! `) M6 z. o6 I* A4 {" E3 E
        CATIBodyRequest_var spBodyRequest = spMainBody;) o. e' p; J" g) [
        if (NULL_var == spBodyRequest)
; L1 o6 f8 Z, Q; r# T6 \6 @: L        {! n6 ~* c% @- e& M" X9 d
                printMessage("NULL_var == spBodyRequest");
, G/ |) q9 ^* r2 N: R3 F) f2 i) v- b( u                return;
2 F3 M' M6 F& c3 z' P" w9 [        }# _0 W3 U4 m4 b
        CATLISTV(CATBaseUnknown_var) ListResult;5 h! ?/ B% s6 p" @, Q
        rc = spBodyRequest->GetResults("",ListResult);
- }9 h) D- h" s! o8 d& K        if (FAILED(rc)|| 0 == ListResult.Size())
5 c2 f3 N' v1 c) b1 T# b. j" C, O        {$ ?1 \+ ?, N+ o( b
                printMessage("ListResult failed spBodyRequest");8 G' |6 Z1 f8 ~6 z
                return;
& k( \0 C/ Y2 n5 {3 V6 u3 h        }
' U1 M- y9 N7 i# F( o        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];0 {/ m* t" D. j. G$ R8 p4 s7 ?
4 V* N; a5 j' [, X
        if (NULL_var == spFeatureResultGeomElement)" W- _$ z/ s( T# d0 J
        {
1 l+ b- M0 ]4 R                printMessage("NULL_var == spFeatureResultGeomElement");
7 S5 A& I; l# Z) h* t8 q2 ^                return;. q& D4 O# q* ?4 |  u# L$ x
        }" ~, l. ^2 \- L8 Z4 I6 _5 ^6 R
. I& O" z& O! e/ X6 c% h
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();5 B6 z8 G: [; S
        if (NULL_var == spTopoBody): I! J, L# Z, K4 b& e
        {
8 W' ]; g# N' f; j  L" u                printMessage("NULL_var == spTopoBody");1 B2 X4 Y- M- c
                return;7 W  j$ D0 \8 o0 z  M1 S
        }7 e7 V' n, w* E0 }: ]: I1 m

( ]& p# t/ s6 |; d1 l% a% }: n6 R( H9 I4 ?7 h5 t  R. b
        CATLISTP(CATCell) cells;- t5 S' v- [- r7 L& K
        spTopoBody->GetAllCells(cells,2); //get all the faces' d* ]2 @( I7 D
* [9 S# Y: X; o, P! w
        char msg[256];
; |$ @  H8 f0 B2 G% M( F. _        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());* k" x/ c3 @2 W3 U6 e1 i$ t
        printMessage(msg);
* ^+ d' D1 c1 |6 F% T: n+ z% L7 Y1 q) u
        for (int i = 1; i <= cells.Size();i++)) p9 `; W$ |# b# }# V
        {
' \, R" ~6 Z! A& D" h' ~' D  J                CATCell_var pCell = cells;4 ^. M$ I& p+ T# U0 v( e
                if (NULL_var!=pCell)
4 @6 r+ y, a6 d  m* B                {
% L$ M; ^/ a. C% m$ F6 Z                        CATGeometry *pGeometry = pCell->GetGeometry();
/ X' @' s3 T$ V  N; ^- B/ W                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face9 z8 o4 B$ s, Q, E
                        {6 X* F5 Y, q; W5 {5 _) @9 }
* |% J# G1 c4 S- r! l
                                //CATMathPoint CenterPoint;" ^4 `  m% [, I* E+ W, X
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);6 C5 v) e; o7 a0 O& @
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());% t6 y% }; J. q  u/ P
                                //printMessage(msg);/ g% b$ m4 L& ?! c" l
                                 
7 j+ p0 W* O9 n9 `- B7 V                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
9 b" t- i) r2 w. X                            if (spBrepAccess != NULL_var)
, O. ~) g) p! d. U  y% t2 u                            {
- b# }; J" ?$ {" K: o                                        //assign color                               
) L; q% l- s% y' P                                        CATIVisProperties * pVisProperties = NULL;6 r' J; ~; Y, [) ?, s& A7 U
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);1 B' X9 V4 A) `! {2 G( N4 g* P8 \
                                        if (SUCCEEDED(rc))
, Y2 H, p) a' P2 t+ N4 l                                        {
# w' e! n9 w! ~1 c/ v4 n8 U                                                CATVisPropertiesValues ivalues;  D5 ]$ R+ H' i3 L
                                                ivalues.SetColor(0,0,255);! j5 E) ]" b- w2 V  P
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );+ q# a  W& k! K* ?1 m: K
                                        }& C3 p2 c( x9 I9 C% x
                                        pVisProperties->Release();# r, z7 }. p: o! n4 ^
                                        pVisProperties = NULL;0 r: q4 ~9 v: ?! R5 K
                               
. }6 {+ v- l3 k) v6 g# n                                 }
8 _; m% D0 H* M, z$ L% `- w: l5 c" i$ u+ c) A' c: t( c/ M: k
                           }* E. J# o" ^2 f9 ]0 b" M
                                //get alias name and persistentTag to add in the list
9 [2 l7 a& a( r2 {# W3 i                        3 i! R# y9 j$ s5 n9 \4 W
                                / x) ]& D' G0 t' C; l- G/ C; z3 M
                        ) k. ?/ s+ P& A1 w
                        }; _  n' P8 f* ?7 z; \$ {

" f) h" X" v2 c% J' x4 O# E+ C                }
4 f/ u1 k' u( S8 E* t9 J( x; o3 }! [' \9 s3 i
        // End of User Code( \# \; _8 Q) X5 |* H/ U3 |
}
7 c& y7 X5 k4 C$ T9 y[/mw_shl_code]
* X( G7 T) [. W: Z/ h- I/ ]( D
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了