PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

' C8 Z7 Y; Q# @3 K; P8 l* S3 @% H! D
) |8 U% j4 |/ |* U/ F个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
/ X# v5 \5 N3 z0 J- B1 [+ l) w
( r9 q' X# N7 g3 U5 p6 t" ]4 {# ?8 J+ v
/ C7 h- E1 }' M/ Z0 t/ u
) M+ E' i" D7 z+ H8 a5 _[mw_shl_code=c,true]' m" }) i' R4 p0 l7 @) R6 Y
        //get the main body
8 B& Z! Z; E8 c1 v7 s        % e8 P! {* W) _2 Y4 l( \
        ----   -----
8 ^2 a3 z& Y/ v& N% E0 a! Z{$ z4 s, z9 t$ w% }
        CATIPartRequest_var spPrtRequest = spPrtPart;
) [8 ~; Y$ K1 i- `1 H3 s        if (NULL_var == spPrtRequest)
6 R" L+ b* H/ R* B0 C        {' q' u! ^$ n, \0 A, P
                printMessage("NULL_var == spPrtRequest");9 x0 V/ s9 N& @" ^4 q
                return;8 z) }3 m# d% D  R* j
        }+ g- a& Z( n# o2 C/ L3 X: Q
        CATBaseUnknown_var spMainBody;
. _1 |  E0 b+ V, n
0 {, \6 M  t9 @( C        rc = spPrtRequest->GetMainBody("",spMainBody);
5 T+ n% O5 C! H5 X7 v( f1 d        if (FAILED(rc))/ a" e( v7 e1 q, I9 {
        {
9 J/ ]# \$ ?8 E$ i) V                printMessage("Failed spPrtRequest");8 Q! r- x# D! W4 N
                return;
2 t! ^& i) t2 ^, V- W* Q5 y& H4 V        }
# a2 j7 C. }8 b
' R( J8 B0 z; v# [9 L- M        CATIAlias_var spAliasBody = spMainBody;& A! ]7 t: @6 W8 ]9 [' D' ^5 R+ c

' o& k8 m# j* V- ^- b; v        printMessage("Main Body" + spAliasBody->GetAlias());
! b. y. f" K6 v
: ^9 y, W9 c: v6 ~" k9 @! j# _& g9 `        CATIBodyRequest_var spBodyRequest = spMainBody;
. O. u- j1 Y; ~        if (NULL_var == spBodyRequest)4 ]* I  s, {+ B; j" o
        {
' e8 O( n/ e9 c% ~: v8 q, b                printMessage("NULL_var == spBodyRequest");- [+ _$ ?- Z) B9 v( b& Z9 `8 `
                return;' ?% e/ i1 t' r
        }6 a0 r+ D2 y; {5 _
        CATLISTV(CATBaseUnknown_var) ListResult;6 z! N9 f, }: ]6 ^! V
        rc = spBodyRequest->GetResults("",ListResult);. N& A+ D* l7 d5 b
        if (FAILED(rc)|| 0 == ListResult.Size())& o& ^9 o( |0 S  A
        {
6 ~0 |  B. q4 y0 r4 t3 D                printMessage("ListResult failed spBodyRequest");
6 m! r  g' I: K" D+ E: ~" m                return;  a7 G! e% x/ \& {) L+ s
        }
9 [3 L& o8 e% ]& O8 ~/ F        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];  V; s- }" D, N, d5 _, N
5 A+ u: K+ A( L1 h+ ?
        if (NULL_var == spFeatureResultGeomElement)
* k' p2 E9 c) u! \. T  L% u; |2 m        {8 }* y$ u6 }4 W( b* D5 P6 g
                printMessage("NULL_var == spFeatureResultGeomElement");
7 z' l3 f+ w8 U2 |3 k. A/ Q                return;- {* d) J9 Q% z
        }: [3 t) G) Y5 v, D- y1 e
8 S  t3 w* ?8 f1 Q- ~
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
5 q* O$ c# a5 Z# n0 k5 Z" z        if (NULL_var == spTopoBody)
9 q6 K' R  T# e/ g+ H" x8 U/ x5 n        {( V0 {) S7 P' P! N2 z
                printMessage("NULL_var == spTopoBody");5 N' W. T" y/ c( [! w2 m
                return;# e3 h7 H3 l& R, R8 y+ t* e; E
        }) R& i7 C" m) w6 i. A0 G" J( O
  D+ r% C( U* c6 K0 }9 A

; T( T- K7 W6 P- _. ?" _        CATLISTP(CATCell) cells;
% ?9 i% ?* B2 V        spTopoBody->GetAllCells(cells,2); //get all the faces3 q- [& s/ S3 g  b3 S
/ [/ j8 w" G0 ?# B
        char msg[256];
  b% z  B% |. f        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
( W! Q1 ^. U! o; Z& d, v) J) F8 T        printMessage(msg);
9 ^3 f; o# `/ S. }7 y8 U1 v7 W2 ~" u" ~# S
        for (int i = 1; i <= cells.Size();i++)% j8 @6 \: d- c( i: R
        {" [- V. |, f2 D7 ], P5 a
                CATCell_var pCell = cells;
+ y. Y. g/ |  [& @. |9 k3 r- {                if (NULL_var!=pCell)
1 a$ e# {  `: _! l& J                {
! O* U8 M7 k: f6 D) K3 u" E. e" }                        CATGeometry *pGeometry = pCell->GetGeometry();5 H" W8 n: H7 [2 U. ]
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face) c6 s9 }4 G5 K, V  j+ ]
                        {2 F) D! c0 y( J2 o, c1 x4 d: C' v

2 O/ ^; ^+ c9 I$ \1 L) i                                //CATMathPoint CenterPoint;
8 }: e. F: x! o' U& z; k                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
, |- s* e' [0 O                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
$ t6 T) r. f+ M' w( W                                //printMessage(msg);
6 ^) c( }$ w' Z: K                                 
  j9 \' Q4 z' N( |! q, K                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);5 K4 Q6 }5 u/ T
                            if (spBrepAccess != NULL_var)
0 G" H0 P* `; ?/ Z3 w; ^0 \) i/ W0 \4 o                            {
) p/ a# F& F& k; A: C                                        //assign color                               
6 d8 u7 \/ C" J: \  |                                        CATIVisProperties * pVisProperties = NULL;
/ D* h9 V' }& Z                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
/ o- T5 O% g# j+ G( [& W& z  j7 i1 n                                        if (SUCCEEDED(rc))
& F: L9 l! Y. q$ @* x                                        {
, w, L6 Y7 D8 J8 B. p                                                CATVisPropertiesValues ivalues;' y, e: b" A6 o( \, H
                                                ivalues.SetColor(0,0,255);4 _2 }8 D; T2 L- c2 w& m$ c1 f
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );; Y$ Q9 B/ h% x* Q" o5 ?) W
                                        }
2 U4 S3 H# z: q4 ^( }- I6 ?6 x                                        pVisProperties->Release();3 s: l; z& q3 j1 m) A" Z# b
                                        pVisProperties = NULL;: o( T- f0 I  D: ^6 p7 m- m. i: B2 r
                                . N& C8 K6 y5 N! s  d4 _
                                 }6 v* Q# j" M; X" ^4 b" L& `

, z5 d( F- X- N                           }
! ~0 K1 X) o% A" i6 `                                //get alias name and persistentTag to add in the list
. X. k5 [" t& O- [1 N2 r                        4 [& n; _8 {6 Q9 k2 t% v
                                7 _( ~& ]+ b6 E* v) a
                        - ~3 L& F( S. v: u; w
                        }1 F1 L% s# ~6 J7 |% q
! b! `( g& E: m  k" j% y% i$ I
                }6 C6 Y9 F" y% x, J( l& v
$ O9 h$ |; N+ x+ v* y$ [  W
        // End of User Code
+ [1 z; [6 O5 M}
; y# r9 T, G7 |4 H4 R2 ]8 _$ v, J[/mw_shl_code]
$ L0 F* a  c6 X7 i  A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了