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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
* y, k, @/ t* w3 J) G3 @/ E" }
& y8 Y6 u! ~9 b  `3 B
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
% s. ]: b* f- p
/ B7 t- K3 u- O; y4 Y  b5 y+ Y/ G, d' m; M! P' W" f. i
7 l: L3 C: ~7 n) W
[mw_shl_code=c,true]+ L) W/ {9 L: ~3 e4 U
        //get the main body
+ ]2 `3 l& v0 _! Y       
  c( D# w! f2 Q' i) ^8 |  I- ~1 F        ----   -----* M5 f# o+ n- i0 L* w
{
3 c& e3 ~- z4 n: a/ S% B9 G        CATIPartRequest_var spPrtRequest = spPrtPart;' G, F0 A3 ^6 x8 A4 d/ {
        if (NULL_var == spPrtRequest)2 h; }( \4 U1 e& Q# A1 l
        {
' h; K' f. `6 |                printMessage("NULL_var == spPrtRequest");
% }* W7 m! |, p: B9 z                return;
* Q. ]5 S( q3 ~, [6 V' D        }
2 U% O4 ]# @- L1 [: V8 n        CATBaseUnknown_var spMainBody;
! h. d; M  u5 r6 j  `( f4 H1 ]: ?% F) X+ w' l7 \9 b- h) H
        rc = spPrtRequest->GetMainBody("",spMainBody);
! h. v5 i# X7 q! c7 D+ e        if (FAILED(rc))
. y: ?3 E, L' y+ Q) q        {! {! n' u4 X0 c. Z0 a9 A
                printMessage("Failed spPrtRequest");
4 e$ G5 Q( u7 q                return;
% H% [5 u3 `0 b/ ?9 n        }& M6 g& F( q; A

  u( l$ a4 X5 M+ \$ T; b        CATIAlias_var spAliasBody = spMainBody;
8 i  A) S  _+ X  ?/ {, S- ~% S5 l0 m- o" J8 o4 ^
        printMessage("Main Body" + spAliasBody->GetAlias());$ I( c. w; q) Q) u  p
# n, B1 x7 ^, r, W8 e. k
        CATIBodyRequest_var spBodyRequest = spMainBody;
* ?1 }  E- v" h3 w8 G' @- g* P        if (NULL_var == spBodyRequest)
4 n$ f; s6 e% u& Z6 g        {$ |9 A0 \: G0 q+ K" s2 r. R
                printMessage("NULL_var == spBodyRequest");) q0 J7 q+ h. G) d) [
                return;8 w; ]" ]- w* L, F4 q1 u3 ^9 x1 w8 x
        }( \: N# K# u2 Q+ Q; W4 ~
        CATLISTV(CATBaseUnknown_var) ListResult;
. r& e( o2 l8 Q$ t% ^1 k/ e; A        rc = spBodyRequest->GetResults("",ListResult);  g8 V, d" H6 `1 r! v6 Q9 Y' a. O% ~
        if (FAILED(rc)|| 0 == ListResult.Size())$ @* ?" [! p& W
        {
/ |) M; e$ q0 ]7 F' \; L% e3 |                printMessage("ListResult failed spBodyRequest");
) K- p! p. h  G# h5 l. \                return;
/ r# m8 R6 a0 C' y3 e* ~. c        }
4 c, X3 M7 B. C0 G- l3 j5 U: v        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];; P- x- }4 H- t4 m# |0 ^$ y
% t( W, T; u# y7 q8 G
        if (NULL_var == spFeatureResultGeomElement)
  ]7 `& D' ^" k8 z& s: G( b        {
; Q% y% ]7 s5 j! _- R# I$ @                printMessage("NULL_var == spFeatureResultGeomElement");( j. D& c/ @* _; v1 r6 k# }
                return;3 Y! R% O0 Y: a5 r
        }
4 d8 `) C  o8 G7 f# G& k# P" Q9 ?4 J0 o
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
4 o* d. m. ?3 F7 R) u& L) N        if (NULL_var == spTopoBody)' |1 L6 U4 E! o. p/ Z, D4 K
        {
. I2 d( K6 `) h( Y6 s" J) F( H+ q                printMessage("NULL_var == spTopoBody");$ L# M/ \2 A* q. v
                return;0 d6 e( |5 ], P, @$ O
        }. ^" ], Z# C8 i

' Z5 X: @: T9 r& q% o3 D/ N2 A0 n, |% D8 f4 G
        CATLISTP(CATCell) cells;; }$ E5 M1 `8 f! d% n
        spTopoBody->GetAllCells(cells,2); //get all the faces, e" p' v; C4 Z- p3 ^  j. D: v4 B7 B

' U. C- a( r- H7 z        char msg[256];6 s8 G, b$ v- t
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
1 |2 ?7 R) j: i  K7 a& a4 l' N( Q" h  }        printMessage(msg);
) ~) d$ h  M+ u) t6 [9 `3 H( j8 I: |9 P
        for (int i = 1; i <= cells.Size();i++)
" J* @6 M0 K, I# Z' |7 l, A        {
5 P% O4 }$ \, h1 B                CATCell_var pCell = cells;
( p9 |6 }% I, x* u/ `8 p                if (NULL_var!=pCell). W/ l5 q- g' n4 J# Y) M' T" X
                {) |" k1 W2 `* k0 p1 x
                        CATGeometry *pGeometry = pCell->GetGeometry();' \3 [, _* i# ?3 z: z+ ~0 S
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face! e7 o- a' b. ^2 c' c( d
                        {
3 U4 e% ^. h- t' Q/ L* a2 I
. S' y0 `* ~+ y                                //CATMathPoint CenterPoint;
6 |$ H* {$ x5 ?                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
# z( Y8 R: M& x  b1 T9 C                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
5 f0 n7 w" j5 a                                //printMessage(msg);4 a; x) j# z7 Y# A
                                 
7 e" S6 l! r7 \4 @                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);; |) c; Q$ B  O$ `0 F4 `
                            if (spBrepAccess != NULL_var)
3 T& V% e. Q' |& u2 {; l, Z- c8 o; L                            {$ w, h- N) M2 v' E) ?
                                        //assign color                               
7 R4 B2 s: m. R6 Z9 g8 ]8 l% n0 m4 n                                        CATIVisProperties * pVisProperties = NULL;5 o- p+ Z4 A- S3 U8 j
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
# Z6 H7 \4 I- `                                        if (SUCCEEDED(rc))
3 @! d9 G) s  Y! H+ ]5 T                                        {1 o2 q& K5 c. W0 {. c8 H" y
                                                CATVisPropertiesValues ivalues;
1 N" g$ I1 i9 X" L( U, m5 T                                                ivalues.SetColor(0,0,255);
4 d7 D. E0 K- K2 ?3 a' ~2 R) H                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
, ~4 m' B" ?1 e                                        }7 T8 V& ~+ }5 H) B# m
                                        pVisProperties->Release();
/ u5 k" P! @0 h9 D4 f, I                                        pVisProperties = NULL;+ @1 K' e' e0 s7 `4 r+ ~5 t
                               
$ c  h+ l& T2 M) }4 g' N( ?8 o/ a                                 }0 u+ p2 z8 J/ u' q" g3 c0 g  E0 [

) G: V+ _; f) Y4 i! n                           }8 I. x7 O* a3 D0 V; v& b: N
                                //get alias name and persistentTag to add in the list
; L5 W6 x8 J  f. T7 z& s$ R% q& \                        / o6 v* e& ]3 f3 M, X" `9 \9 m9 C
                                - H- N" }9 o! ~4 s9 U- W6 W
                       
4 e( ], l, ?  v                        }
! ?2 A, G% K# V$ _& l* a. R8 u
  x! Q! A1 D* B. P- s                }/ L* V. ]8 a7 B7 x4 x4 }

; U$ u% \+ W  |0 d. A        // End of User Code
; N6 ^1 W$ ~% A1 t; F" E( M}/ j# x  x! _: r. U$ n7 @$ a
[/mw_shl_code]
  X0 I' F, z$ I
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了