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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

) m7 z9 i: u- G2 g) l! `6 G- {* L. ]/ o
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
! D0 N, A1 m! t: C5 Q
+ G. L0 C) ^$ n! w( d6 }& C% O+ W: Q, F& x0 m+ o: g" p# n1 V/ T
; T& p% ]# _( Y9 C  o
[mw_shl_code=c,true]  X! b9 p4 U6 i- A/ E  |+ J$ J
        //get the main body
4 }( y: h& D% C$ c        & `' N, {7 M- X! J5 I9 S
        ----   -----. D: Y# z* G; G
{
+ {0 s2 f5 o& x, w( ~        CATIPartRequest_var spPrtRequest = spPrtPart;6 s& D! a9 C7 X, N+ M. e; m. U1 n
        if (NULL_var == spPrtRequest)
0 y- y3 r: X/ K5 N7 h6 z, d! a; G        {- O8 p3 C: a+ x" m
                printMessage("NULL_var == spPrtRequest");0 U8 O& K  N; j7 s% N0 X
                return;
# X; V" o2 @7 m. O        }, p2 W4 ~: P. M- E$ Z# J
        CATBaseUnknown_var spMainBody;- p; x2 w" h" l1 H$ G" r
4 f) w' `) s5 O1 H+ j4 _9 I
        rc = spPrtRequest->GetMainBody("",spMainBody);: i5 K! J/ V7 M$ H: |! M# g0 H
        if (FAILED(rc))8 |1 s: F; n0 C8 V0 y& C' S" S+ U
        {
: S* l+ M. Z7 E, O  j                printMessage("Failed spPrtRequest");
9 ]3 ]$ r* u4 S5 Z. c                return;# ]5 x3 A5 c* |: X- Z9 M; ^
        }
: X  k0 I; G6 ]$ I0 F, O& R
7 p. c1 o2 i" ]# S" `' {( |# l+ O! x        CATIAlias_var spAliasBody = spMainBody;# \; [. ?( T3 r: y' z! s* h2 i

3 b1 o: b) v. ~- E& F6 |3 B        printMessage("Main Body" + spAliasBody->GetAlias());+ U4 m2 E, ~3 f7 E6 r8 ?/ A

0 }; X* W7 L! O" Q, ]9 D5 P+ y1 \1 V        CATIBodyRequest_var spBodyRequest = spMainBody;1 z5 V& J: h# X& Y
        if (NULL_var == spBodyRequest)0 m! J* M# J4 K2 W; H5 H
        {) S& ?3 x" n* b. C$ Q% _
                printMessage("NULL_var == spBodyRequest");
2 Z6 n+ F% x9 ~; {) `8 V  V8 k                return;7 @+ a* v5 V4 U7 u% Q& }  Y; c
        }
/ F1 Q1 @4 k4 G        CATLISTV(CATBaseUnknown_var) ListResult;
, f, [3 a! Q2 Z6 c# R) f. X        rc = spBodyRequest->GetResults("",ListResult);
3 {2 t3 \) z  {' A        if (FAILED(rc)|| 0 == ListResult.Size())
- Y6 S( ~: [# j1 U" J6 v4 K2 y2 ], L7 j; e        {
/ S3 d' A6 R. f; b* M                printMessage("ListResult failed spBodyRequest");8 E; l3 ~7 e5 [6 u+ P, R& N$ X
                return;
1 }0 X5 |6 O' g- r; O        }& }3 X' H: d  D5 N( a7 p8 o
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
0 O, i! A+ \" V+ [" f1 y. K" z! S: j% x+ ]
        if (NULL_var == spFeatureResultGeomElement)
: h5 d3 u5 B6 s5 N9 _$ @        {  u# Y* C$ s; ~0 ~" V- s
                printMessage("NULL_var == spFeatureResultGeomElement");# q( f( [# |: L% z3 M9 J
                return;4 k) t: J$ C' Q: e8 I/ e
        }
6 Z) p# }; f! g% l+ U) q
, f* ?1 M4 j* G/ {! r  i! Z& x( T        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
3 y# V! B, U6 J9 Z        if (NULL_var == spTopoBody)9 |1 Z2 ~+ {+ F
        {6 n1 k, Q' Z, f. z# W4 A
                printMessage("NULL_var == spTopoBody");
: {: \2 C( v2 x' H1 x                return;
0 n9 W4 d. X' l        }. o, {, M; W, H$ i# g
4 o3 Q1 J' `- s, F; o

0 I: U2 j7 H8 }* v3 I* Z2 y) H) {        CATLISTP(CATCell) cells;; I# q1 {& q/ I* s. c
        spTopoBody->GetAllCells(cells,2); //get all the faces. F$ _9 j. S0 [. v- F
6 x# G4 e2 A5 j
        char msg[256];  K0 l2 y, E) D0 l
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
' V3 v  H- a# I' U4 L        printMessage(msg);
: t( T; _' T4 f- A( S- C$ q$ t- E
        for (int i = 1; i <= cells.Size();i++)
! t, a$ f6 N5 N& R        {  A9 A; N6 b( w1 i  k* G; b  J6 D' v6 K
                CATCell_var pCell = cells;
" i. G! s, q4 R5 b% C                if (NULL_var!=pCell)# N( l3 h4 ]  K! A, Z: W! v5 R( I
                {- I0 S& ]  z, q, t& h0 {/ m/ `" z
                        CATGeometry *pGeometry = pCell->GetGeometry();- ~$ G/ X5 ~( `: d
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
- i3 e. Z3 P- B* F# f                        {7 r/ w7 F8 }+ \/ ~" a2 l
) m9 M! e' o; Q3 _  r
                                //CATMathPoint CenterPoint;
( u+ t3 M' R8 R. N" N                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
# P0 f8 J7 ~5 t8 b" l0 m7 f                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
+ H: A# K1 C$ L9 j  u                                //printMessage(msg);  O' M/ G6 Q5 ?# Q- p! b3 r
                                 - G) B; \7 M# f) a
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
; R3 ?' r% P' x                            if (spBrepAccess != NULL_var)
" i& D1 o; W( J; a4 y6 V' y# i                            {
8 K( k2 R" T0 A                                        //assign color                                ! b7 T, R7 K; X+ s4 f
                                        CATIVisProperties * pVisProperties = NULL;
1 n, {) x% b) g1 y                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
& |  y6 G6 V* ]% G                                        if (SUCCEEDED(rc))
* h" O/ D  }- @, y3 L* y+ F                                        {1 v0 V7 o% ?! @6 a/ E2 C5 t: @
                                                CATVisPropertiesValues ivalues;
/ _: a& M$ ~( x) `5 h8 n" `                                                ivalues.SetColor(0,0,255);
8 F# r+ A) u/ C5 M/ c" R                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );4 w4 G! d5 E6 g/ O5 d3 p
                                        }9 a# w6 ~$ R- \9 {6 U  Z  H3 e9 i
                                        pVisProperties->Release();2 X1 K8 K, c! v# v6 Z7 {. ^' d
                                        pVisProperties = NULL;
; m5 ~0 H# z/ ^; o0 b+ d4 L$ k                                2 k) t5 v4 h$ B& O0 Z% w; e4 M
                                 }# N( v2 q( X/ l- f

. A. e/ i& i" i) n                           }
/ K2 b: l0 x0 }) B3 a  t                                //get alias name and persistentTag to add in the list
" B1 K0 p' w$ q9 `2 F                        8 w3 I% q+ i) m* Y
                                . e0 v8 E& `/ _+ ?' e- @
                        6 r2 T6 x+ n+ m6 V) T
                        }( s- \& u& [; A
! n9 g$ a( x0 I' B$ ~- Z" {
                }
" X! M$ G$ m2 d* s; R* l! t$ v
* x$ x4 p" }2 K/ v        // End of User Code  W) j/ M2 W( ]* I2 P; ^4 U; D5 Z
}
) e5 e; \8 J0 {: `4 A0 j( R( [[/mw_shl_code]
* H% x3 a( [. 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二次开发专题模块培训报名开始啦

    我知道了