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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
* v4 B" K* w+ \) _9 i( L* b+ o

! M0 ?) S; u4 r) }" o; E# `个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !
- K1 o& a2 e2 L+ L+ W/ `7 ?; U% s3 i7 n5 o  M
5 O1 L; r/ h' L

  ^4 Z  c$ |% t+ B( O[mw_shl_code=c,true]
+ {) W- z% b) w0 x4 R        //get the main body, P0 M; ]  w% f7 h7 L
       
  s2 O0 \& {2 j$ O9 q$ _+ R4 U3 y        ----   -----: k# k8 v; u; U, t8 }" b! M* o
{, \: V3 l2 L& d6 ]! B. i; U( N- k
        CATIPartRequest_var spPrtRequest = spPrtPart;
/ _8 [; w& H7 s) N6 U: \/ F        if (NULL_var == spPrtRequest)
9 ]% x6 y" @" N6 j) |9 G4 T        {# {3 B! k% R, B" s: ?6 `& `
                printMessage("NULL_var == spPrtRequest");# O+ q1 R5 c) L6 {
                return;
, O( N5 |1 l# r6 r0 ]* L3 F. C" N1 {        }
+ a7 L, V% c' a# {; ?        CATBaseUnknown_var spMainBody;
! R2 ?% ]7 J6 \" ~$ Q% K' Z! v( H2 B
        rc = spPrtRequest->GetMainBody("",spMainBody);9 ^0 d/ l5 d; t$ L  p# I
        if (FAILED(rc))
9 h4 K, q9 H' k' M5 w) O        {( \5 ]- S$ f& `: _2 v: Y
                printMessage("Failed spPrtRequest");/ [& |  u  M* p% X0 o1 g
                return;* m6 C6 {$ i3 C0 X3 ?) z
        }) L! G* a8 {3 r9 s9 G
* q& l4 W3 R- Y
        CATIAlias_var spAliasBody = spMainBody;1 K% f7 F) P1 k( U; _% X
* E' c1 T+ c$ t7 @& o0 k3 }- i8 R
        printMessage("Main Body" + spAliasBody->GetAlias());
2 W' Q! j# F0 N5 `: b. I' v3 I( H' u
        CATIBodyRequest_var spBodyRequest = spMainBody;3 o( H: n+ ?# ^) H! x9 X3 U
        if (NULL_var == spBodyRequest)5 _* G& p' \) R& t
        {( v' R( W" o2 c; S: K4 i8 \7 v) e
                printMessage("NULL_var == spBodyRequest");2 u% P; G  @0 P# _5 E: }) [
                return;: }$ i5 C3 T7 j+ M
        }
3 b" O2 m# H/ I, p# ?; `        CATLISTV(CATBaseUnknown_var) ListResult;
1 N7 S3 F5 s8 J. s% [- e1 ~        rc = spBodyRequest->GetResults("",ListResult);
3 ^0 T1 k2 R. S' k  d, u7 V! n        if (FAILED(rc)|| 0 == ListResult.Size())6 l" k# y, {- p5 p
        {( u  n8 D2 z  ]! R* T, y
                printMessage("ListResult failed spBodyRequest");
# U3 Q6 u! h+ ~4 J: T& P. J                return;. H! U( |) ?$ n5 T
        }' n' @9 O' l# f3 Z8 S- D
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];3 T. w" a4 {# p3 G7 o6 l+ ]- _

9 Z& t- x3 \/ `  `        if (NULL_var == spFeatureResultGeomElement)2 Z: d$ |' C( Q9 c$ w" B
        {
; |9 A# O( Y. H6 ?                printMessage("NULL_var == spFeatureResultGeomElement");
8 v4 t. |6 I3 R/ C! }& d9 @                return;, w* {! z2 X7 ^) R! j6 K
        }
0 `0 ?& h3 v0 t+ h- F( n
" T$ P# \. |) G" W7 T( g* Q        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
" A$ |! O1 h6 k  {) t' e        if (NULL_var == spTopoBody)
( M. m$ _: P; l. U' i& k3 S        {3 z% }& U. i2 C; E0 _- E7 ]
                printMessage("NULL_var == spTopoBody");8 Q1 j$ v3 Y; |* r1 _7 j
                return;
: U! u) \9 s6 |4 K% {7 N        }
# \$ t0 {5 c- E$ V# R. ^# P
" B7 H; x; }) j* a  u1 v
2 w( I5 B$ n/ r6 b# O        CATLISTP(CATCell) cells;, T% c" K: a7 ]. I
        spTopoBody->GetAllCells(cells,2); //get all the faces/ J! f3 {+ r9 r( x% k' d
% n, p$ L. Q5 V2 d4 q; P) u
        char msg[256];; D/ D- u9 k# `' D# q- ~9 h$ S
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
: F$ j4 v  o8 @, H& s3 U        printMessage(msg);
9 j$ L8 f9 t  n8 L% O# E: U/ u# W! M# x- Q) r
        for (int i = 1; i <= cells.Size();i++)
# f3 B& A+ }: n, z# M! Y% V5 D" [        {
8 j4 [( U" C0 t5 z( g" o2 ]: t                CATCell_var pCell = cells;% N6 o) F* p' v( b' K6 O% I
                if (NULL_var!=pCell)9 ]4 \5 J& |! v1 @
                {
# V& Y1 p% K' Q( ]& i                        CATGeometry *pGeometry = pCell->GetGeometry();: L% p  b, O2 S
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face. p0 q7 A8 W& |5 R" \
                        {
% a6 [8 Z/ T; h& C; c) r" Z$ i
) d) {5 G+ c, r9 r- y1 N: l% n+ m                                //CATMathPoint CenterPoint;* \, K3 ?# p- I8 q, G
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
1 P% D5 _4 ]0 S2 Y) e# G                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
# Q: j' b( B7 J' m5 p# D: f2 J" a2 C5 c                                //printMessage(msg);
! {0 p0 V8 ?7 X- L; Q$ Q5 p                                 " b7 k' o5 ~/ Q# q5 l8 ?( C* O
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
9 F' X2 ~( X3 H! K                            if (spBrepAccess != NULL_var)
. X* e4 H" M$ d& o' ^7 |: Y                            {" H0 _# L. w( N6 d( l- d
                                        //assign color                               
! ]) c" p' L: D5 a; T7 f                                        CATIVisProperties * pVisProperties = NULL;
9 U  U. F8 X  E7 V                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);! A/ k6 i$ M$ N& ~
                                        if (SUCCEEDED(rc))
- a* }" P5 c  H( P4 B                                        {" ]5 a  X! }# b: Y2 E( {0 D6 G2 S
                                                CATVisPropertiesValues ivalues;; M& B$ @" @; _* `  B) ]2 j& c
                                                ivalues.SetColor(0,0,255);6 E, W, j2 J, E9 \; w4 Y
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
- G& I) @: N# J* J* E                                        }% H" t+ l  k" d6 @" s- F! n, h
                                        pVisProperties->Release();3 U4 U3 A2 @) \4 @3 M. K
                                        pVisProperties = NULL;8 O5 {+ w1 X- {. \9 w9 m/ q- D
                               
& W; t. r5 L3 C; T2 ?, }* X$ X! i                                 }
& ^1 y% w1 W3 B5 g+ N+ [+ M% G& N- _- O2 b5 X4 t" b/ b# i
                           }/ Y7 p: @+ U/ q6 D0 U. t4 X
                                //get alias name and persistentTag to add in the list0 ]- e1 c8 c7 s* q8 G
                        0 K7 ?- B' j; }+ C! m
                                " C  u. G8 Q: w. u* k  U
                        0 ?/ m* e+ {( s- F- S
                        }) m$ t! u) d" _; W; S0 d

2 B8 {$ t* c" r- n                }2 [8 M6 K9 V0 m% z; u5 F
: \1 |; ]$ |, j6 p' [6 _
        // End of User Code: s" L( k# ~! P& @8 H) N: i: T# `
}, Y  t7 \% w# A. u' r% Y5 B) e
[/mw_shl_code]6 ?" ?, w  J4 _8 v  W
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了