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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
% ^1 Z  y% J1 E" D' _) U

: Z- ^: ^* q" L% z, Q$ _个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !$ S* T# c5 N4 X; x( l: u' V
3 `$ {1 s3 g% b" w) ?" M9 d

2 w$ [6 l2 v* J1 M$ T( U5 h
  @% L- ~! `% J% P[mw_shl_code=c,true], a5 ]& a" L. Y0 w( o% [7 y
        //get the main body. p$ I: U+ p  k& c) C& u3 ]* {6 P
       
/ {" _( Q) `0 d* H- U        ----   -----
, N# ]/ k8 l+ p4 S* l  S) r- i{7 [  N& E% k0 y9 d* i/ D
        CATIPartRequest_var spPrtRequest = spPrtPart;/ I) E. F% S2 B7 B; F% q3 a. c' O
        if (NULL_var == spPrtRequest)
' n4 B6 l; a0 B4 E7 h  W" X' {        {
2 W' L; X8 s8 O0 U5 G  O9 e5 z0 v                printMessage("NULL_var == spPrtRequest");" b, p4 G2 U' ], [+ L
                return;# ?( T( ?1 y2 u
        }0 l* i2 O  l- E' L# y6 v
        CATBaseUnknown_var spMainBody;0 |7 h% l5 n: f( A; g6 }7 w

& Y- w/ \2 d; l        rc = spPrtRequest->GetMainBody("",spMainBody);$ B) n- e: e6 t0 p- }! M4 c% e
        if (FAILED(rc))
. y5 y4 N, T: e: ^        {
: U5 `: r  z" e2 |( O! i' D& I                printMessage("Failed spPrtRequest");6 ~; J1 t: T4 ]+ f7 v& \% L* U6 p! q
                return;
. d8 }/ _. l0 c+ ]) \, U. i. z; Y        }2 ^2 N$ f7 ~1 \, q9 s4 _

' k' @8 _! j& |/ X0 ^        CATIAlias_var spAliasBody = spMainBody;  H" H- ^% a! t  j; F1 `9 ~$ `7 O
: v$ Z" H# z4 s1 L
        printMessage("Main Body" + spAliasBody->GetAlias());/ k( Y1 M0 h0 _. Q: V5 t; f$ L
$ r5 K0 f/ o2 C0 @2 I, C1 ^9 r
        CATIBodyRequest_var spBodyRequest = spMainBody;; [$ y5 m6 T- R  N$ h' m
        if (NULL_var == spBodyRequest)4 _1 j: N; ^- a
        {
* e+ M3 b3 ^( S1 ]& I) n; T. G7 F                printMessage("NULL_var == spBodyRequest");+ x- }' K# `' X2 K" v, Y
                return;6 c' C0 @8 t4 Y- [% ?, b
        }7 \; E/ t$ F& @8 v! Q  `
        CATLISTV(CATBaseUnknown_var) ListResult;
7 M: Q$ y3 E. [% W        rc = spBodyRequest->GetResults("",ListResult);
/ k( ~3 H1 H( V7 G        if (FAILED(rc)|| 0 == ListResult.Size())
! o! T$ c* n9 u2 |; ^        {; `3 Y- T+ @4 p" z: A7 k1 e1 Z: y
                printMessage("ListResult failed spBodyRequest");2 e0 e: k0 A1 ]7 B$ Q! e( v
                return;
7 b! m; `" I3 O2 r0 N. W        }
/ @! i+ r/ I5 v  F4 ^) R( C# I5 a        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
! @, P! ~7 U8 Y! Y# M, I7 r2 W
0 l* D+ z$ `0 ?# M6 O- u& M        if (NULL_var == spFeatureResultGeomElement)% R' `( h/ x' I$ a
        {/ C/ x9 \1 ?4 }& v- y: e3 N# B
                printMessage("NULL_var == spFeatureResultGeomElement");3 y  p: A" X4 l6 N- X
                return;
8 F; Q3 k# ~) N8 y3 `! h        }
# u0 w2 R2 d& Q$ t$ l+ b! o( P0 A* ~, e( m( z9 D
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
. e+ m2 I1 U  C  B        if (NULL_var == spTopoBody)' R8 D& w. G; O; X& r/ M0 {) f
        {
; [* Y, l& R& z                printMessage("NULL_var == spTopoBody");
$ |6 W* B) M. P5 e) w' l                return;
; P% W' D6 T  I' a" F        }3 F: W# H; ^, U) r( S, ?

  w' S- D5 i# Q1 w2 w! b7 L" m& a$ W* i4 k# o
        CATLISTP(CATCell) cells;
! R3 c1 q* b, g6 ~; P0 ^        spTopoBody->GetAllCells(cells,2); //get all the faces# n$ f3 R3 y- z
) u" C* Q3 J, c; p/ h- Y, {" }6 O6 E
        char msg[256];3 {4 k( ^1 L# x
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
. T" g' T/ B6 X1 R- t8 N        printMessage(msg);+ ~9 H, x) R! `0 H" u

- Y) J. r0 [6 Q. J        for (int i = 1; i <= cells.Size();i++)
/ i+ B6 c$ p. J1 F/ {        {
; T3 V8 D  k8 Z0 q2 x, X9 u8 y9 j, ^; Y6 m                CATCell_var pCell = cells;
; P# I8 A+ ]8 i1 Y                if (NULL_var!=pCell)# F/ ~1 D. a6 J8 G
                {  y# q; _/ \8 a
                        CATGeometry *pGeometry = pCell->GetGeometry();! {: o6 P$ P0 I7 C, F" r& ~
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
9 M, j. w2 L' l# ~* b                        {
8 E" w) L9 k% T% s& l8 [/ `4 f' p. S5 h; e5 u
                                //CATMathPoint CenterPoint;
/ l2 o  Q) p! d$ x* B6 d0 Y, n5 f2 E                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
3 d6 v# [- p7 u. v, v$ [! n- N" Y                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());$ _! a; l) \4 t
                                //printMessage(msg);! d# H5 j+ w, e4 k
                                 
1 J; q  J0 s. {                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);4 y8 ~# J. [* y% |! \$ p" k
                            if (spBrepAccess != NULL_var)* E9 A0 ^! ]& Y! t
                            {
- e  c  ]' q* T# ?: D( g5 H+ p                                        //assign color                               
" ~7 }9 v% q% x# Q% v; V, ~, n                                        CATIVisProperties * pVisProperties = NULL;
3 o/ g; ?# S- D5 N/ A                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
$ Q) D; ]7 u" @- s' |6 _                                        if (SUCCEEDED(rc))
/ _( \* |7 ~$ J) N                                        {4 l  b; D# B6 d& }
                                                CATVisPropertiesValues ivalues;, T8 @; v) \5 M& S+ o
                                                ivalues.SetColor(0,0,255);
" [) A! ]6 c/ k) S2 G                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );( b2 y0 D7 B; p" p4 J, }
                                        }$ U8 E9 q8 i, t3 P. T9 H! b# M
                                        pVisProperties->Release();
5 |  p& S  g$ \8 f6 `& _9 y; W" K+ N) r                                        pVisProperties = NULL;6 `) ^3 E' @1 i, k% F8 K8 f$ Z
                               
" J1 O4 F: S: W0 @+ z4 K/ R                                 }
" h- `& T6 f3 _# |
: C8 a! D5 ]  O) D$ i% ]                           }
' O1 J5 F6 b+ t0 E, Y2 j  t                                //get alias name and persistentTag to add in the list
0 n# F7 ~5 X+ g( r/ z$ D                       
  d- o/ D  J! J& S1 w                                4 Z) |( [0 m- b/ h5 C8 H& j
                       
9 X- P8 n* }3 ~$ z' F! E                        }! X& ]% \" d1 b, B0 K: |5 p
! v; `! g6 G9 l( [
                }6 s# M1 S3 ?) Y1 L

1 ]$ H2 ]4 P1 r( w  V- b6 p        // End of User Code' M& M7 e+ ^; ?: a( I
}
' x4 q: B9 x( _2 E; j9 R& M[/mw_shl_code]( i& G- ^+ y. \4 [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了