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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
8 |" o! A2 ^  t" p9 f" d, l9 ^# t, \

7 R# p) r6 q& t% D个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !6 B' l  \6 z6 d

4 k9 l4 o$ D/ l: t2 |  g5 ]: d& V' S" A/ w/ @6 k$ A* s. K
& N3 s# G; I' r* ~4 f, b+ c
[mw_shl_code=c,true]7 d. Z2 P7 Q- ]  X
        //get the main body( u& q& j/ D! T$ x' t
       
- J& x3 z# Y4 w: l4 e        ----   -----
( P3 g, i9 w& ~8 m$ R# p{
  I2 i# i0 x. d6 F& l( _        CATIPartRequest_var spPrtRequest = spPrtPart;
" R! O) Z! w& U3 p$ C        if (NULL_var == spPrtRequest)
0 s9 v; d5 b5 E9 T% s        {
/ D" |% g8 ]! T$ [. C, k                printMessage("NULL_var == spPrtRequest");' C, g* E- O( ?& Z; Y0 v
                return;% Z: `" x& R- q2 n, s  F
        }3 w: a0 _, H1 p' y7 S4 `8 }; T
        CATBaseUnknown_var spMainBody;
% w3 L3 j0 U9 V! m5 P. Z- n7 T  o: A7 T4 l2 e; V% a
        rc = spPrtRequest->GetMainBody("",spMainBody);3 \/ m' O  @1 `/ H: ]1 u3 P( ^# v
        if (FAILED(rc))! x  H) M: p# Q$ W5 u
        {
9 F  {6 D/ b7 r- ^" Z0 K2 L6 a                printMessage("Failed spPrtRequest");0 t/ b, k/ B9 h& ^9 {- [
                return;
, U1 ?5 l/ O- S8 t: k+ t4 D" ]        }
& T4 `! a3 g  _, f
5 B; s! S5 S5 P' p" Q6 k6 f; `        CATIAlias_var spAliasBody = spMainBody;
. P8 K* r: b6 N5 o+ Q( d2 v) a
+ J6 }2 S  m8 o7 d* _& E  \* `        printMessage("Main Body" + spAliasBody->GetAlias());
. E, N* C" {# b1 z9 B: `9 ~' B
# @( t# n% n  ~( A; u# |$ ]        CATIBodyRequest_var spBodyRequest = spMainBody;
/ H8 Q! C# ?' F0 y, b) X) ~        if (NULL_var == spBodyRequest)
; b# C- c" m& R; S1 c1 E        {
6 U* ^& K2 N( [/ \                printMessage("NULL_var == spBodyRequest");
: N1 Y' ]8 {5 J% Y0 |0 l  g                return;6 g8 B( }$ a% ]2 D' l9 m/ A  X1 j
        }
. J5 _' {+ a/ J  y* e5 }        CATLISTV(CATBaseUnknown_var) ListResult;2 u* j9 P0 u8 F; b" c
        rc = spBodyRequest->GetResults("",ListResult);
) Q1 J1 K3 L. k) \: T" {. h% w* f        if (FAILED(rc)|| 0 == ListResult.Size())
6 N' K3 _$ X( [. i: o% Z2 [; G        {; ]/ k2 r3 M9 D% w& D7 J4 R
                printMessage("ListResult failed spBodyRequest");
1 w# a. L, T7 @) n                return;
0 f" m3 D5 ?% f        }3 V) Y" y" k" p3 D% B% C* k
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
) P3 d/ a" B0 f9 u
& H7 H) h- @/ y- ?        if (NULL_var == spFeatureResultGeomElement)
' t8 o, ~/ T6 m3 f1 d1 L        {
0 q5 w0 h) }( d0 ^                printMessage("NULL_var == spFeatureResultGeomElement");8 j& D4 I4 a# d7 j# s/ }3 [, G
                return;7 ]4 W2 o4 m/ K0 H& h
        }
8 j) b+ L$ |9 b" H& J/ x; q+ X: S6 ^5 M' Y0 P
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();6 h; }9 R% b" o( P% G
        if (NULL_var == spTopoBody)7 Y# S0 k! i6 X8 G- m% _" I* d  ]
        {' X2 I& E# h7 l
                printMessage("NULL_var == spTopoBody");6 z& e, H' k- G3 i. p0 e; d2 l1 C& @
                return;8 r$ F: V( m) m0 W2 G0 n, ^# J  A
        }
7 R  |7 X) {6 y, w  Z' T
, P: }' [& Y$ v+ ~" ?; b
. U8 r$ r& h* j2 J* [" y0 N        CATLISTP(CATCell) cells;
1 U* N; e& P' J% B        spTopoBody->GetAllCells(cells,2); //get all the faces
% f5 n* n( _- n7 Y3 f# D
7 ?  m& p+ L6 A+ w0 ?; I        char msg[256];
0 V! d- D. ^( s/ O; z2 ?& A        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());5 W6 S' S/ U9 u! F
        printMessage(msg);
: g% t# X% T9 T' {' t$ c* u6 u
: |7 Q% c: h7 W, b        for (int i = 1; i <= cells.Size();i++)
* K+ l; t/ P$ @6 ]2 _        {
; n( G) H5 E$ }+ j% N: h                CATCell_var pCell = cells;
1 G6 _  X* ^- y, \4 E                if (NULL_var!=pCell)
! s4 m, N4 m8 H                {
: U' k6 n; ^# r3 C* y4 k                        CATGeometry *pGeometry = pCell->GetGeometry();
# j& h) v& [8 G9 t  ?                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
1 r! }8 `7 h2 B/ u. }) {) o                        {- d/ @. N3 E# h9 Q& h. w
! M- r; d+ G$ ]1 U' q' G
                                //CATMathPoint CenterPoint;
0 Q& z) g/ B0 o) c1 B                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);7 o9 f+ {/ q' S( {* [
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());' P; E2 j( P6 S# G$ s/ J
                                //printMessage(msg);- C! W  w7 h1 q! j2 R
                                 
4 A7 B, h0 J' t" I$ z* _                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
& \% [0 A# q4 Y+ K+ t# D. W" \                            if (spBrepAccess != NULL_var)1 y+ q: g* E" z8 n
                            {
# `5 \/ l9 P& ]# t2 F- E                                        //assign color                               
& N# }! O' \6 s* C7 i9 j+ J                                        CATIVisProperties * pVisProperties = NULL;9 c* c7 u2 O5 T1 G2 `* X$ ~% G
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
; _4 k7 `8 W! `; p$ _& O                                        if (SUCCEEDED(rc))
. Q4 c! j7 z. I# c/ @                                        {% ?- f4 B* e" Z
                                                CATVisPropertiesValues ivalues;
5 o. C3 t$ d& E$ A                                                ivalues.SetColor(0,0,255);4 l) X5 o& O' _& E/ j$ e
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
8 p9 e8 a) r6 ~* \% D6 \                                        }
# y, R. ~. P; p. M, L2 m                                        pVisProperties->Release();% E: z  A; Y2 I  F  C8 _
                                        pVisProperties = NULL;% X: w0 b( }( p6 t  {
                                # O  w' u; A5 d
                                 }
9 w# b6 t% h; V: `0 p2 P$ T5 F) j. b( G- [+ i- B
                           }
" b7 z0 u% z% |, u$ F! x% o* O                                //get alias name and persistentTag to add in the list
$ S) l3 @$ I5 Z                       
. a8 ?  F4 @2 o# {- O                               
! v6 b7 w+ D* V1 A: w" O                       
* @' L/ L) F1 d( M/ V: b; c                        }
; _: c: ^6 `( ^* @4 w# A* H5 v" F1 c" b
                }0 O+ S$ `5 C6 g4 U

# K& c& l# p8 p, O9 j: ?        // End of User Code) [% j7 r2 i' v0 E
}
' \1 r1 P$ I7 Y' a) m7 w8 \[/mw_shl_code]
' C6 Q6 r( d9 N  Y: i, Y& B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了