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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
2 a- }5 T' u% C& h, Y4 P
6 e6 {( ^, ^$ W6 I9 d1 L# w
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !7 r: ^4 X+ Z$ Y7 D4 v$ n

9 H/ k4 Q! p7 T( E1 f3 X) O2 t$ f# w2 R: [7 j6 W

% [. _0 ~% \3 \2 U6 ^[mw_shl_code=c,true]: k& o7 j: z6 j6 G3 W9 {
        //get the main body
1 d" k: W0 D8 ~9 B& g       
* E) L" p2 l; P$ f        ----   -----
! O! v0 d! j4 O0 w{
) s+ Z" k9 `2 b$ s        CATIPartRequest_var spPrtRequest = spPrtPart;" l+ |$ r2 v' ]( k) U* B: I6 U
        if (NULL_var == spPrtRequest)/ v2 y2 a) n( E/ a' o
        {5 J1 E  ]! V: [2 W
                printMessage("NULL_var == spPrtRequest");
5 X% f6 h# ?+ o  ~: A& O5 I  ?                return;5 M  T1 B  H; F3 q/ ]4 G
        }9 e# O& x+ w$ F  q+ s
        CATBaseUnknown_var spMainBody;+ E3 }' @* P" D. x9 v

, C$ C  s( h; L        rc = spPrtRequest->GetMainBody("",spMainBody);
8 b1 b5 L, |. d6 n4 ~! ?        if (FAILED(rc)); t# @) R2 o; N4 K
        {
5 F# ?/ A! q6 G+ W! w% F/ y& [                printMessage("Failed spPrtRequest");& F3 d) f* ?5 n8 Z+ l& O& c3 [
                return;) a6 d3 Z2 S7 i6 Y
        }2 S; R: q/ |; v, t, c  H+ e( `3 _& U7 u
, A9 ]' g5 m$ e  B  F- b, R
        CATIAlias_var spAliasBody = spMainBody;( ~8 t  ^: Y! l7 m3 h! a  E
+ o' d) W4 @2 `: t* E+ q( Q$ _
        printMessage("Main Body" + spAliasBody->GetAlias());
4 S9 S* T; _) X6 m1 z6 h, E4 n1 m5 R
& Y3 z) `% w0 O6 z        CATIBodyRequest_var spBodyRequest = spMainBody;# N. e4 {) V! s% A# [# f# g3 h
        if (NULL_var == spBodyRequest)
5 p# ]0 q2 U) M9 Z1 R2 [& j6 d2 A        {
+ d5 N7 _6 N# I- Y+ {% \% Z                printMessage("NULL_var == spBodyRequest");
2 |9 r. [+ S3 U" D8 C' r- s                return;
( L$ X. @# a# R6 G        }
. U/ j* v) u% n: N1 `( I9 a        CATLISTV(CATBaseUnknown_var) ListResult;- ]$ w+ ~, _  Z0 [+ P8 j! w
        rc = spBodyRequest->GetResults("",ListResult);3 w7 H0 H1 Z) |  j
        if (FAILED(rc)|| 0 == ListResult.Size())
' `2 Y6 u$ G6 R' A& y        {5 M4 z8 e1 r. h
                printMessage("ListResult failed spBodyRequest");
) P0 [3 I, E% ^                return;
" F$ E% y; W+ h! M1 N) `        }
6 l4 n  A. H) _        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];+ v9 O7 T* H3 U
6 n/ T6 a/ B/ s0 s
        if (NULL_var == spFeatureResultGeomElement)+ f9 F/ _3 w5 v
        {
/ ~7 ]+ {1 U  a8 `                printMessage("NULL_var == spFeatureResultGeomElement");2 I/ q7 R$ Z! T& H& y% w
                return;
  `$ h- }& X% }3 |  f        }
0 W  y' _% y5 H8 M8 O5 P, H( F
% ~+ W8 \6 P, U- G$ h. C1 b5 h0 T        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
6 Y/ Y& U. n- p( Y3 ?5 h8 C        if (NULL_var == spTopoBody). K4 K& ~2 c' ^% Q- b9 }7 S
        {
3 @% _/ b$ v6 L) Z                printMessage("NULL_var == spTopoBody");. t$ w  K6 Y# A
                return;4 t0 W4 p2 ?% f
        }
) G: A& t( [" E. X0 M7 H
- [# A9 r: s" U! F' ^2 Y
+ E5 H5 U% _( c0 O4 p, c        CATLISTP(CATCell) cells;. {$ F: d$ m! z4 t1 C
        spTopoBody->GetAllCells(cells,2); //get all the faces
8 P3 a% |; |  w/ r( ~9 `
; _+ ?. p4 M! _% `9 P6 q        char msg[256];) i5 W- n6 N: v. R
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());: {. {+ L$ V. k! A( Z
        printMessage(msg);
8 m1 e5 b& I( `& }2 E9 g, j) _
. e) U3 @2 c, s* {0 P3 _1 N        for (int i = 1; i <= cells.Size();i++)* m' w! b, \8 a7 Z. A  d* T' c: T% `
        {! f# |! ~) s# U5 c' X
                CATCell_var pCell = cells;) L4 S: i. l% A# S& n* B
                if (NULL_var!=pCell)
9 b9 S' Y4 M7 N3 V7 N                {2 j1 p$ l! ?7 l
                        CATGeometry *pGeometry = pCell->GetGeometry();
/ B. j7 W  D9 e% o2 |  n6 {                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face3 p  _2 r* S" R9 n0 k% y
                        {
1 Q) x; `1 x/ ^* |4 {' N# `/ N  w. D( Y% P
                                //CATMathPoint CenterPoint;: s7 k1 I6 C6 a# E9 @! p6 `
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);4 J9 f+ F, @( O; I2 _8 L
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());- T4 ?1 V' U* \
                                //printMessage(msg);
  u6 j- F; ~3 S8 k2 H: F0 q0 @2 M                                 # E4 W7 B2 ?2 f. N  h
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
+ A  v. L# t( y( L                            if (spBrepAccess != NULL_var)% {# z" M1 n; M, X4 B3 o* e
                            {/ G& L+ Q- F- y% Q
                                        //assign color                               
  R8 p1 u' i1 @3 D1 A% r0 u                                        CATIVisProperties * pVisProperties = NULL;
+ G0 D7 V5 s" _8 K                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);, A! g$ q& y2 a3 M' V% g! e
                                        if (SUCCEEDED(rc))
! s, b* C% h: c( \( g2 |1 {                                        {* n7 O% X' u6 j( [
                                                CATVisPropertiesValues ivalues;
5 n5 m* Q' `' A6 @                                                ivalues.SetColor(0,0,255);
$ t! h0 c9 d6 x$ p. E4 P                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );' \2 e. f3 U2 c
                                        }
; f6 C  v9 Q& R                                        pVisProperties->Release();, E+ C- Z2 l* h
                                        pVisProperties = NULL;0 D) i6 O* s* _' |# x
                               
8 C3 t& ~: Q/ l( C4 x                                 }
) a6 \6 K8 E7 ?) u
, r6 N) |  h" H  b& \- {                           }
0 }4 p- ~2 q; M' _5 p                                //get alias name and persistentTag to add in the list! Z0 B9 Z' i1 t, Z% i' @8 S
                       
$ a+ O+ M/ M: ?8 X# L9 G6 V; X                                5 J9 a$ H& f; K) m% C  ^( }6 [
                        ( q8 b; _' ]' Z( B
                        }
* K% P* L6 f9 v, n4 h7 b) S
% d* G  v$ f7 b) ~' h                }* Q6 X: I- A( z7 W7 ~

5 ~2 ~* R  }6 U: A$ z2 Z$ y6 Z        // End of User Code
6 G7 Y, f! o& F6 w}0 m: @: X' x) i$ X; o
[/mw_shl_code]3 D+ R/ C+ u! J' m3 S% ~! I6 z) y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了