PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

) z  I% a* `; ^: l0 I& @
1 e( y6 t" t% U个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !& x/ L7 I* @1 r# ]
2 d  ^9 }- y' z7 ^7 E# T

1 G5 O4 w4 ~3 E# ]" F& h) x+ ~/ s4 L0 Q6 d" H( M
[mw_shl_code=c,true]
% y! {, ]  A: e: f3 b. Z        //get the main body
1 _0 V  P. e  W5 k0 [; n' @3 C! x        * R( V; d+ O) a% ~& P
        ----   -----
4 K0 f  D. G9 A{
' C  Z8 J' b1 W# l3 f# B/ e* }        CATIPartRequest_var spPrtRequest = spPrtPart;8 z- ]: J" G# [! M0 j
        if (NULL_var == spPrtRequest)
# S! S0 F+ W* \9 V) G8 d        {  p; g, A3 i' }# g
                printMessage("NULL_var == spPrtRequest");
) Y. I0 X1 V! R" P! J                return;
& y* d( C2 r3 \3 U* t3 P: N7 f        }
% r; `) m( h* U! r8 I0 B* a        CATBaseUnknown_var spMainBody;9 h" j6 s: E5 g, V- ^; ], X
' G$ }  O2 n/ k. Y; V2 e
        rc = spPrtRequest->GetMainBody("",spMainBody);$ s6 e+ @6 X* e
        if (FAILED(rc))( ^' x! q0 E6 i( X" ~. Z. P" ?1 Z
        {6 W& @+ E9 j" f" k3 u5 C% x
                printMessage("Failed spPrtRequest");7 M& f8 q& l9 {0 P4 Y' N2 A
                return;" W% X. f+ c- G& Z
        }
4 O! S% f( U5 Y0 A5 U! T7 o9 k, n) {
        CATIAlias_var spAliasBody = spMainBody;2 d' a6 f2 Q) W+ I

5 _5 M) S3 T2 S0 }( h3 p4 C; h; o4 ^/ d        printMessage("Main Body" + spAliasBody->GetAlias());1 A. `+ Q. j9 Y; A9 w/ W
  v+ }: X! p: c1 g
        CATIBodyRequest_var spBodyRequest = spMainBody;
* E( M# h5 t/ e* y        if (NULL_var == spBodyRequest)4 }3 V8 u! A1 U& B. f' A
        {" ~: e# e; G/ w3 n0 n" M1 v
                printMessage("NULL_var == spBodyRequest");2 C0 R6 v: S9 K  l  m" T1 O
                return;/ Q( j$ T3 {7 p. r4 `
        }9 m: ~' a6 [7 N0 Q
        CATLISTV(CATBaseUnknown_var) ListResult;
  ]8 w- `. l8 }        rc = spBodyRequest->GetResults("",ListResult);' ^+ y6 W0 E/ z8 p7 b  l; d% Y
        if (FAILED(rc)|| 0 == ListResult.Size())
$ u* p' V: m, n# J1 I. @- q        {
# e: ^9 D% F- T) ~( f. j                printMessage("ListResult failed spBodyRequest");
2 V2 J1 A  }4 {) x                return;& ~: e6 x  ~. i% I4 g; ^) A6 \
        }
/ b3 z+ e: f; N        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
" K; j+ q) a- c
' b$ K% q& I1 I3 j6 y        if (NULL_var == spFeatureResultGeomElement)7 ?. s3 P& u4 x( n
        {
0 l8 P! [( |4 z$ e* H' G                printMessage("NULL_var == spFeatureResultGeomElement");6 Z8 Q" y$ h% k
                return;& g# E# e% ]! A- n
        }
0 e: B/ ?* ]- i, t* U. c8 ]$ x4 L! j$ |  ]( ^
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();$ E. i. A, Y/ `
        if (NULL_var == spTopoBody)
8 S  v4 w8 S, |$ h, H        {
  D" y4 Q) O) q8 i# t! Y2 E                printMessage("NULL_var == spTopoBody");: @0 h" N  z, F4 m
                return;0 Q) P" d% E2 K8 Q- T% A! w
        }
( f) C6 ^  A1 Z' `1 {- {4 O1 v
/ B" ^. R9 D' q& _& F- Q" h3 K! h2 f( `* p, q4 O
        CATLISTP(CATCell) cells;7 Q# p# Q5 D4 [! @" B& A: j
        spTopoBody->GetAllCells(cells,2); //get all the faces
' e- k( {& {# w8 s) q+ @; ~! q2 F$ B' M- M/ p' |
        char msg[256];# l6 Q: H& a. s: d
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
5 w0 M- \9 e4 ?        printMessage(msg);
7 y4 Y4 r; Q7 R. ]9 F0 m% W7 \; A
( @" ^; J6 O3 _4 c4 V! O        for (int i = 1; i <= cells.Size();i++)
1 |8 ~: e- p- F4 E0 N! o- H        {
( G1 g9 y- c0 @/ y$ X0 f* e( C                CATCell_var pCell = cells;% {# ], s8 q- ~) b- }0 `) E3 J* y, ?1 q
                if (NULL_var!=pCell)
! g- y6 e) j& z1 |# ?) M* A                {
2 L4 o: w! m7 _                        CATGeometry *pGeometry = pCell->GetGeometry();9 _; ^& T* }+ p
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
3 X) o0 C5 K2 E/ r, D5 j, D1 c                        {# }/ c% v' m- C' ~
8 H- h: t$ K. F+ l7 S2 q
                                //CATMathPoint CenterPoint;+ M& Q7 r' K# U1 q
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
1 f5 s2 U; S/ O. y: g) K                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
3 v- g2 P# k9 _2 h( b3 m                                //printMessage(msg);
' o1 x0 Y6 \* F, A! X( Y                                 
* \9 b+ W. I: Z% B: h                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
1 h! X6 i% e8 r                            if (spBrepAccess != NULL_var)
2 Z* a8 @+ J4 Y) n                            {4 H$ W. L) D5 r- O
                                        //assign color                               
) L- ?0 K! F1 L: d( g- w6 ]                                        CATIVisProperties * pVisProperties = NULL;
1 K7 W# O8 v% Z9 C                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);# j0 [9 J3 x8 M' ^
                                        if (SUCCEEDED(rc))' ?1 |+ c# Y3 X. D: l/ A) Y
                                        {
+ T; k+ n" {/ Z' ?                                                CATVisPropertiesValues ivalues;
5 a' a# `6 j; f) s                                                ivalues.SetColor(0,0,255);
8 G' j# m. r/ C, j# n# l( ?                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );& W3 b. |; t9 y4 M
                                        }
% W5 A, A/ `* o6 V; |' K                                        pVisProperties->Release();: a! ]  Y2 _6 k2 e* h
                                        pVisProperties = NULL;
$ d& Q+ Y! `5 K  z" L+ }( J" d  E                                / h' k" u" h; C' v
                                 }
( e: Y: W' P1 m; \, E6 n
' c& L# p+ N' I7 Q1 U5 y                           }# c' R3 U! P( J2 S3 d$ P
                                //get alias name and persistentTag to add in the list
. p1 b% j- c7 w0 J                        . \  {7 e2 S0 o; F5 @4 M
                               
; \4 R* i- u$ ^$ |                        5 A1 k( t/ w; s/ L( A+ X2 n' x$ y
                        }
) D  t' R9 Q* o& @. N( g  x# l1 A: @* Y) `
                }
# K: h+ c' F" l$ ?7 d0 T* D1 o, V& P2 y/ q/ U& s8 V
        // End of User Code& \$ Q3 R/ U$ h* i% H9 Z3 Q: c4 _
}
5 S! Z% L( m, ~, f[/mw_shl_code]
. c9 n+ T0 b# d) t  G$ V+ g4 z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了