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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x

9 e% W$ f7 K) D3 J
, g9 a/ N6 o0 G5 s# U. S1 x4 e8 \, w个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !8 j( {. Q" |* O

3 G) g+ @' r$ J7 A
  ?( m9 E' u  y+ q8 W! n! w1 g7 ]
[mw_shl_code=c,true]" C; l2 [; l4 j6 d3 x& [' e
        //get the main body4 d* |# z: p9 E0 x4 e" Q' x% F
       
/ r( x6 D. Z* S% {9 L7 P4 v        ----   -----$ ?' |: T6 E9 \  y' d; \
{9 T$ X  }+ h0 R" B7 X; t
        CATIPartRequest_var spPrtRequest = spPrtPart;* Y/ @9 P9 a8 D& N
        if (NULL_var == spPrtRequest)1 ?( u4 C* t! N6 A1 [
        {
& G2 G. ~' C* x. X* [/ U& P                printMessage("NULL_var == spPrtRequest");1 [( D# m% |' D9 q0 l2 e( p& G
                return;4 Y: Q0 j# _6 C2 [' z
        }
5 p" r; b9 e9 G7 T1 s/ n4 o        CATBaseUnknown_var spMainBody;
  V) ^: N  b3 g) J1 h
5 ?( V- k+ ]) i- S! x        rc = spPrtRequest->GetMainBody("",spMainBody);
5 ?. S/ |- O7 A8 U' W        if (FAILED(rc))
9 m5 S, P6 A  |) ]+ w        {
' H: d1 B1 z9 |                printMessage("Failed spPrtRequest");6 ?" \- Y& B- v. u) B; G1 j
                return;" _" h! H5 U2 G
        }
# K% P% |) u! j- Q  G( l2 O
6 f. L" I; |. ]' K8 Z2 b        CATIAlias_var spAliasBody = spMainBody;* @+ \; d3 X' U7 V

  I6 d2 x6 V9 t        printMessage("Main Body" + spAliasBody->GetAlias());
# n8 T, U$ u& {% w; W! Y
) ?* A$ F) `  l2 b2 z% t- i2 u        CATIBodyRequest_var spBodyRequest = spMainBody;
. v2 G) ^( F$ C4 U: ?        if (NULL_var == spBodyRequest)
# f" l7 U& h" J) ]; S5 f3 Z; K        {4 s& m0 _1 z& P
                printMessage("NULL_var == spBodyRequest");
* Z( l% \7 L) D, J. a3 e5 [                return;
& p! ?- {, J  m, B: _# q  D% Y        }- e; S! s' }. l: P* H2 v/ W
        CATLISTV(CATBaseUnknown_var) ListResult;
4 m+ x/ }3 r: t- t  J; D        rc = spBodyRequest->GetResults("",ListResult);
3 L) o) L  v+ C% h5 b8 q& z& e4 P        if (FAILED(rc)|| 0 == ListResult.Size())
4 K! l  K+ R7 a        {
/ D. L7 W/ _, c2 B5 }; d                printMessage("ListResult failed spBodyRequest");+ K/ m+ ?0 q$ {
                return;8 X' u0 h, ?5 L6 b$ W& J
        }
2 [7 ^0 E+ x& t        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
6 X- ^4 V- ^& w: |  E# ~7 N. s, S% B" Z6 j; ?/ w* M' l- i
        if (NULL_var == spFeatureResultGeomElement)0 }$ w- W% D- I, o7 R3 G% ^
        {; Q2 M: t3 X6 V0 S9 J$ g5 ^
                printMessage("NULL_var == spFeatureResultGeomElement");
6 V7 a+ q$ G% L$ j& X- X                return;
5 ~/ z: `; W! c4 V3 N        }1 r% ~; B: F5 V$ [6 {0 Q

5 _* H1 f0 [7 d6 F" r! K' i        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();3 Y: |7 m# F# s. l& E& I
        if (NULL_var == spTopoBody)7 F1 I7 q+ H6 a1 L( o
        {+ R0 m! r4 E0 u* ^9 }
                printMessage("NULL_var == spTopoBody");
& ^' Y  T) p& q4 @" Z3 o                return;
6 J+ R# q# X1 J# c% B0 c0 F        }4 a) q2 V% @, D0 Z8 f2 J% c. G* J

6 S6 }4 ~. O, H" G( ?
" M2 f7 Z6 n& F: @1 A        CATLISTP(CATCell) cells;( Q1 W$ Q9 v& r$ w5 l0 ~
        spTopoBody->GetAllCells(cells,2); //get all the faces* }' Y* u1 E& d, j& L" y

" z8 ~% f9 F# f        char msg[256];
# t5 b5 g: J" ~3 N        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());/ P8 `+ _- R% g
        printMessage(msg);
2 ~7 n4 y5 b8 n" z5 C, M" v) v, k! Z' Q. d1 S3 |
        for (int i = 1; i <= cells.Size();i++)4 s: k$ @- X6 G4 Y
        {7 O+ t* _& |9 S% d. e7 v
                CATCell_var pCell = cells;( A% U) H( B: m
                if (NULL_var!=pCell)* c! m& k, |+ E8 }$ q% Z! G; U) _  u" m
                {
9 ?4 B! d! G* ?( L6 r' P0 x                        CATGeometry *pGeometry = pCell->GetGeometry();
& W8 r! Y6 N! [0 {" ]. W                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face6 k) C7 W! o' _0 C+ s+ O
                        {
, d6 h" P4 ]+ N1 s; k# l4 w+ Z3 _: R$ j0 |& W) y4 ]2 b
                                //CATMathPoint CenterPoint;+ Q" i9 J% v7 h2 `7 [- A% c
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);0 K$ F  W) Q. L6 q
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());1 ?1 f, v- V9 V* j
                                //printMessage(msg);6 v7 g6 l4 t+ x
                                 
- _: z, K5 [- @, q' S                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);$ u! w; g5 j. r" o  ~, X! r, M
                            if (spBrepAccess != NULL_var)0 M& \: e5 I( C+ ?: G% p
                            {
/ n7 ~5 m" l0 v8 q! P& Q# {8 B& L! }                                        //assign color                               
6 F! m* M# h: e6 }                                        CATIVisProperties * pVisProperties = NULL;  X) K0 F& ?! F: i* f, X, w
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);: ^* {; D# o' e) a! E6 {8 U
                                        if (SUCCEEDED(rc))
" G+ e: o9 w- f& I) b  q                                        {( p6 D. Q8 u2 ~, m
                                                CATVisPropertiesValues ivalues;
* v; O3 y* [$ ^/ [( Z% }% r3 B/ r, l                                                ivalues.SetColor(0,0,255);
- A* G5 I/ H* I- r                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );& a& X, t' O+ @& I8 E9 W0 L) D
                                        }
! e# Y& c2 [5 T2 p8 |                                        pVisProperties->Release();
' o5 J1 }. r  n. A! h6 ]                                        pVisProperties = NULL;+ j. W# {% G- Y; _
                                6 T# b) w1 t, k
                                 }8 a  Q* y) T5 V' h
2 h# G8 o! T: s" l- ]. p& r! A( B
                           }
& @  O# S3 B" l( m0 \                                //get alias name and persistentTag to add in the list# Z$ J$ |% Z( b* b3 J
                       
8 o; v1 P; W6 }3 ?/ K- R                                ! ^' D$ W6 z0 ?; T: i
                       
5 A: J' h+ T3 a% v7 I; t                        }
0 Q, |- O5 `/ r4 k$ x8 h3 V$ u! u
                }
; L- n3 i* g  A: w2 ]
! o5 U. s5 L+ K+ [  \2 }6 D, Q        // End of User Code5 V9 y0 _( P0 ?& K# N4 B
}" D" M4 b3 j/ Y( U% s7 N+ I6 F
[/mw_shl_code]
6 s; j0 c9 x2 ^3 b  P* Y* M
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了