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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82166
QQ
发表于 2018-1-15 14:21:37 | 显示全部楼层 |阅读模式

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

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

x
! ~5 q- t5 [. m) B: ?, s

; p0 F" J3 }& h% K% t4 I个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !. J0 ?2 W% y/ m  b

8 J2 _/ M- a" V0 k* }
; }  Q5 G3 m! F7 Y
' s2 ~1 w* ~6 g8 R; P* O0 E/ z9 a: R[mw_shl_code=c,true]
/ H" O2 O4 s  V  O        //get the main body
8 X+ ~0 l. w" l. Z& f7 {        2 E7 {2 M# r2 J5 h7 o, _+ b. V2 {# d
        ----   -----
. E! n" T% r8 }8 N) l2 n6 q5 W( O{
' A; k, X* `+ k% c        CATIPartRequest_var spPrtRequest = spPrtPart;
1 p& z( _9 l1 t7 J: q- O; H; W        if (NULL_var == spPrtRequest)
2 R: ?  g; {, H( r        {
0 e. ?" t7 }* F3 g2 U+ A                printMessage("NULL_var == spPrtRequest");$ v+ x" Z* U  y# B2 |
                return;% E" J4 r( a' @
        }
  L/ d3 C+ `( Z1 Q5 S        CATBaseUnknown_var spMainBody;5 X+ G: |/ t5 U% Y. m

9 b" R4 p2 G' X/ [6 ]2 w  c) E% [- [        rc = spPrtRequest->GetMainBody("",spMainBody);$ \' p6 |& f  `3 [7 s' z) X
        if (FAILED(rc))! o2 c" x' m* I" @% W& a
        {
& a: D$ ^' |( g3 ^                printMessage("Failed spPrtRequest");/ y' f3 p- w+ U: V; u2 ^
                return;
, ~7 T( p( Z' r' J; e( V        }
2 U* R5 a) z6 W* J4 ~
7 |; k/ e* f; j9 a( m) `! V        CATIAlias_var spAliasBody = spMainBody;
" ~# _8 k/ [- d& p; k4 m
6 j/ X7 c) p4 k7 ~; _! ?        printMessage("Main Body" + spAliasBody->GetAlias());
! a) i9 F: d% G- n
3 M1 C- b. b* |, `        CATIBodyRequest_var spBodyRequest = spMainBody;) K8 Q' x, n/ o: W7 f6 V
        if (NULL_var == spBodyRequest)+ q5 T7 [! e# Q; d# X- z. z
        {
1 @% y1 T* y  ]; U4 O                printMessage("NULL_var == spBodyRequest");
: p- p5 e( b; r- h0 B4 ]                return;* q! b8 x/ k  y: ]" \: j6 b
        }- b( ~$ m/ w3 o6 x7 ]5 g
        CATLISTV(CATBaseUnknown_var) ListResult;
' b- {0 L8 I; o: l. `, T, Z+ A! a        rc = spBodyRequest->GetResults("",ListResult);) F, l: [7 u/ h7 i! U" k  w& ^
        if (FAILED(rc)|| 0 == ListResult.Size())
- n- m+ X  v8 F5 j# ?        {  E& s! ]1 X- ~; R
                printMessage("ListResult failed spBodyRequest");
1 F/ ]6 I' M* W7 c                return;" O9 ]( D7 V8 d$ r! A# r6 U0 s8 ]
        }
  Z; T5 J6 m6 p$ A: b- I        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
" p1 C$ {7 [3 t& L/ i/ |, ]3 z- i2 F/ L. \9 h8 F
        if (NULL_var == spFeatureResultGeomElement)# D- l& Z) n: m4 N. ]
        {
5 Y2 M7 |5 P2 K7 k$ E                printMessage("NULL_var == spFeatureResultGeomElement");$ w1 g0 V' K7 b. r! S
                return;
- B0 U6 s, {6 A" z. s        }
0 ?! J; R2 O  }* e5 `$ Q# {7 [
4 w( C9 w; @4 S5 m5 B! |5 i        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();4 f7 O- }2 c* i% F; X5 F/ ~
        if (NULL_var == spTopoBody)0 s3 }5 O/ q6 e% ^) [( j
        {
8 j- v. e% m6 A; U+ p1 C                printMessage("NULL_var == spTopoBody");. [7 P3 l! u  @, f- T5 v
                return;' o5 z* d, M7 u2 Q" q, n! B9 L
        }7 M7 `  n5 D. C4 E; Y4 n$ M, N
( z! Y. Y8 Z5 i0 E
3 |: N9 q) X1 F7 T9 p. z$ _
        CATLISTP(CATCell) cells;3 e7 v6 V) ?  p, `
        spTopoBody->GetAllCells(cells,2); //get all the faces
- P3 k3 z* t) o5 p2 P/ p" Q/ ?  B( c2 f
        char msg[256];
! c. A% g9 `5 C3 O" M  p3 D        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());/ ]6 \$ X5 V2 }
        printMessage(msg);. _) I( ^9 F+ W7 ?4 {& T
9 W3 J( s6 J% P' M
        for (int i = 1; i <= cells.Size();i++)
: u$ a* L+ g0 ?( `% @# J  g& Y        {
4 A" L% _1 S: x0 Z                CATCell_var pCell = cells;5 {1 n3 c- t3 V
                if (NULL_var!=pCell); i) F8 n. z9 t1 m
                {
4 b- w  }# z' ^                        CATGeometry *pGeometry = pCell->GetGeometry();( U5 P% I/ [, K+ G& f& S
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
  O, V; z# R4 h# ]. x. W                        {
& q3 q1 d! l2 y" T; C7 G
8 V5 N: D' G- S$ P" y+ y                                //CATMathPoint CenterPoint;
5 [* [" }: E7 A2 O8 S9 u                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);0 M$ M5 e7 T: X) i& j* w
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
; E$ I+ T' ^1 z- X5 P; R/ v                                //printMessage(msg);' F6 q2 a. J) Z$ x4 w. O+ M2 H
                                 
8 Z+ N& n7 P! K0 i0 w                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);- U- C* W$ g/ ^& ~4 W% H
                            if (spBrepAccess != NULL_var)4 t. K7 c' |; H" y( l0 S! W
                            {
$ ^" x9 P0 D1 p0 m0 d! Y                                        //assign color                                # ?$ \& E% W( L6 l! |
                                        CATIVisProperties * pVisProperties = NULL;: L3 Z; b% k  j7 \( \
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);% C. k" [# D: C" Q5 }3 Z7 ^
                                        if (SUCCEEDED(rc))9 a8 y: @% E# ?; h4 [' S
                                        {
- e1 }, ]8 |  Y, d4 H                                                CATVisPropertiesValues ivalues;; ]; J4 D! G: F, ^' V: X9 c
                                                ivalues.SetColor(0,0,255);' @+ u6 K1 w. D1 \8 J# ]
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
4 x! I, r  u# j& i# I0 o                                        }
9 h2 N, I: h1 b3 e. |$ n                                        pVisProperties->Release();
5 I5 y# T* _1 M" c! I- G                                        pVisProperties = NULL;
8 N* y7 w! k8 K                               
- H) Q" e& P8 c  c  o6 k                                 }
' g$ r8 N+ z+ x# {) |2 i/ b; p5 S) n9 A- T: b: u1 i
                           }4 k5 I. K2 H  w3 b( I/ u
                                //get alias name and persistentTag to add in the list
- U% b8 ]/ q$ U8 _+ K: M# R# Q' v) k                        : ^- l2 N! i) W& B. [: h3 J
                                , e# K( {! V# p0 y
                       
* G& U5 @" Q+ z3 L2 Q3 o                        }
& l1 G/ ?! V0 G4 g  E  `0 Y: Z8 [+ R  _" q
                }' W3 v+ ?- M7 b4 ]/ k& ]
7 C! c; `3 b) q; G0 t; ~
        // End of User Code
" q% j+ y3 A  F}
% `  [0 |9 A& a[/mw_shl_code]! e! n( j$ t1 V7 h" f
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了