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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
6 U8 w1 L9 e! ^+ @
, ^, I8 l2 v6 Q  B& h$ x% t1 a
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !2 v8 r  W7 j2 I, x
. q; N8 {7 ~8 f, Q: q1 V/ `: k

, \$ }; J) O9 D+ p8 l# ~1 l3 y
: G; O3 A6 r3 W' j! D& k[mw_shl_code=c,true]
& \. j5 G% [+ ~; r* X3 g        //get the main body# @2 Z. D4 X7 W0 p% F
       
% S! j  \# n- {2 o8 T6 o/ z        ----   -----5 j4 @* p0 `8 |
{
0 ]5 q. S# c# s6 ^        CATIPartRequest_var spPrtRequest = spPrtPart;
6 E- M/ s/ q( `; D9 Y9 l- C        if (NULL_var == spPrtRequest)9 o+ Y1 ^3 w, E2 z6 s
        {5 F0 F# @4 V- s* A0 ^* k
                printMessage("NULL_var == spPrtRequest");8 C$ O4 \, Z& D
                return;
% F# A' L* P3 F8 K& o/ D8 b        }
7 {( L6 r4 B& K) [, v7 r1 U        CATBaseUnknown_var spMainBody;4 e1 n2 W* }% c

) W0 V9 z8 s, [( a' A        rc = spPrtRequest->GetMainBody("",spMainBody);$ s  W6 |1 h: o! l. u: i
        if (FAILED(rc))% i6 ?8 |$ B; [4 S- X) W9 l
        {
+ L& [' F. c& Q9 n' T% L6 R                printMessage("Failed spPrtRequest");
- B7 D0 J" U9 u+ A0 M% s# P" ]/ n7 N                return;
( {* r+ k1 O7 ]' A1 L, ^6 B: x/ N        }
" h) U8 K9 ~; v1 w$ I: [; t  U/ q7 n, l6 P( R% k/ ?* z0 ?, }. h
        CATIAlias_var spAliasBody = spMainBody;; G5 t# y' d3 k0 N! ^7 a

) o. _6 W$ _2 v+ |- r        printMessage("Main Body" + spAliasBody->GetAlias());- P/ e& B' }2 u& E8 t: n7 k4 h

; L0 u( @* }$ ]& W& W! m        CATIBodyRequest_var spBodyRequest = spMainBody;
8 n! n# i* p) a, l2 x8 A        if (NULL_var == spBodyRequest)
" g, I! b/ M1 L$ e) l; k5 R        {
' A( G9 y- M% L0 C( o2 m4 l$ h1 E                printMessage("NULL_var == spBodyRequest");! r. C; S8 M" x* ]7 T" n! D
                return;, n4 x; F: V: @5 M7 h, r
        }
! y2 ~$ o% }( T9 q2 M% R6 x+ K8 h) N        CATLISTV(CATBaseUnknown_var) ListResult;
) e' u8 t+ u, K; J* U8 [1 l3 G        rc = spBodyRequest->GetResults("",ListResult);
) o$ n6 d' H# y  k; e        if (FAILED(rc)|| 0 == ListResult.Size())
' f; o& _+ {3 f- l2 B& ^& x" s2 Z        {
# z* M; M/ B5 G5 h1 C' C                printMessage("ListResult failed spBodyRequest");" f+ d* X% u, F" d6 q' j7 i! ?
                return;
# B. P3 }( C& w0 T" j4 s' I' G        }
4 u2 p, F" F7 h. |/ i1 H        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
$ m, x* t0 ]  H2 {; y2 x6 ]. \4 E8 l: @- X; I4 q$ t) ~$ W
        if (NULL_var == spFeatureResultGeomElement)
4 a6 W! e3 E/ z- c7 y/ v        {& k6 L3 L  l. \; w: |% A
                printMessage("NULL_var == spFeatureResultGeomElement");8 E% n) S) ~# P7 c) ~' X$ B
                return;: o" T/ t0 y5 A- J$ i( z
        }2 P  z% R, i' e. o* ]
6 d$ I" a- K; P! Y7 ?$ n6 y
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
1 p% y) K0 A# P6 `        if (NULL_var == spTopoBody): k9 l- g2 N& U4 O
        {: v& m$ n: n* u/ g* P
                printMessage("NULL_var == spTopoBody");* U$ R# K8 h( l
                return;
4 T: ~$ Z2 _: z8 S4 Y        }; ]) b  n4 {; C. ]6 Z) a& A5 W

+ ]/ j. w* B+ K4 r  q2 d
7 O: L9 H" N5 Y4 _        CATLISTP(CATCell) cells;  x' |& R! O8 E% w2 N$ K
        spTopoBody->GetAllCells(cells,2); //get all the faces8 x; V& H/ w* M6 z0 F  q

, X0 }) r3 z, ?2 K7 F  L- l& g        char msg[256];
1 x$ U& v; i* v$ y        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());( a9 f2 E4 c5 B8 [$ w$ a( }
        printMessage(msg);- f  X6 B  W- J( q! k

& p8 ]& w' p% f7 D7 W/ t        for (int i = 1; i <= cells.Size();i++)) l' J- K8 A0 e
        {2 ?' K5 x4 F% T
                CATCell_var pCell = cells;
6 L& R* l5 r. M7 y5 N                if (NULL_var!=pCell)* A9 O  T' x5 w) }! R
                {3 |* z. n5 Y8 _5 p6 z
                        CATGeometry *pGeometry = pCell->GetGeometry();! S* M. T4 P1 n% ^( \$ J
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
& n) x  |2 Y: @* l; g                        {
& B: ]* O; m/ H! c& D, d, E( N8 E
* C) u: U2 |4 n* q                                //CATMathPoint CenterPoint;
& d: u0 h9 V. c4 V" K+ z                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);6 J" N8 k1 M* {2 E2 u1 n: j
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
; O6 O3 X  p! P                                //printMessage(msg);
5 |" p! v, s& _; T" j; m! h                                 # N; }, i1 p+ ^2 S
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
7 j. A4 E: X7 U% v9 f                            if (spBrepAccess != NULL_var)
4 ]4 D  C7 t4 m3 E) X/ `" @' V                            {
7 ]  [6 ?) P" @7 W* A9 }* z! k                                        //assign color                                4 J# B) {5 u: Q5 L& `8 D5 t$ o
                                        CATIVisProperties * pVisProperties = NULL;9 e1 D7 K! d- ?. |
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
. O1 P! e' n% V* q; C, o                                        if (SUCCEEDED(rc))
: [+ g3 W5 D& v                                        {9 k! {! l& s& S/ I$ r* f! n
                                                CATVisPropertiesValues ivalues;
: S+ o7 h3 l3 [  Y: ]                                                ivalues.SetColor(0,0,255);
+ z& U- Q& y, O* ^0 B                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );1 N2 @/ h' b4 E% h: f9 x
                                        }. F; A2 M# ?; l2 H
                                        pVisProperties->Release();$ [- S3 X; i, T" J% ^' f
                                        pVisProperties = NULL;9 p1 q# ]$ I) }) n
                               
# Z& q! {0 U" S- o! ]. k* g                                 }
: [2 d: ~; B7 w1 c6 o/ v, A. X! x# x& |+ s0 r% U) Z
                           }. F& ^8 L: g# F: C  U
                                //get alias name and persistentTag to add in the list
, {- P7 e4 K( o+ P0 i! a7 b                       
! W0 L8 L9 o) v! t* u: @0 c                               
# |% q. _! m7 ^/ f8 s! \1 I- p                       
* h( X5 z2 n& ?0 |% A$ j$ U! R                        }
9 j9 Z6 a& }2 C5 K$ i' v9 l  I4 k" J' T4 _
                }0 a) [6 E8 g* P1 r/ U
' {: P6 ^+ U: {+ j2 k+ e. b* {
        // End of User Code; F2 }( \" @' x1 h
}
7 I$ {1 {9 {) m5 w- V; b[/mw_shl_code]
5 y+ \( R; P2 R) X( M: }' [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了