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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
% U4 Y4 |4 T. I* |& H7 b$ Q
: u2 C. S! n: S
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !8 @( t* q5 Y, n

) _3 G/ X: ]3 K' [1 w' O0 A1 |
: ]* P* x% Z! d0 i* G
. o- x, O2 X: o& U; w( R[mw_shl_code=c,true]) r7 }8 ?# t( t* k8 A
        //get the main body
5 Q- I6 x3 o- D8 E$ C- R        0 C! E3 \  A( Q' k$ {. p4 N+ N
        ----   -----. h/ Z7 X% q7 g
{4 Z, T. }# J( _2 T7 A" a1 p: o4 N
        CATIPartRequest_var spPrtRequest = spPrtPart;. ?& C8 }& x2 Y2 q
        if (NULL_var == spPrtRequest)
, Y1 A& A! X+ j( ~. q( k        {# b0 v8 T' x0 T3 X" E* C2 C! D9 d
                printMessage("NULL_var == spPrtRequest");
! B9 W1 f# A. W7 U6 Z4 l                return;
5 E( B2 _1 I3 U0 t( b0 Z6 l1 t        }9 Q6 W7 a# P  M5 ^( {# O  f, {
        CATBaseUnknown_var spMainBody;
1 _3 k( n3 y( O  Z6 `( z, }$ ~) S' T* ]
        rc = spPrtRequest->GetMainBody("",spMainBody);: V8 s6 b4 \6 _' f) L
        if (FAILED(rc))' P" }: U  U; I) c0 v3 g9 I( H
        {
8 L& s0 I3 O" M/ w( ^                printMessage("Failed spPrtRequest");( R2 o) L- I2 O/ s
                return;
. T9 h/ d2 P0 ~$ H! e' B$ C7 P/ R        }2 Q. W+ e& j" O. v

) V( X& x9 G2 M6 j( z        CATIAlias_var spAliasBody = spMainBody;
: t' V' X) q: P9 f# }& p: S! N; x2 l7 U$ b/ k- N9 |! }- M/ y
        printMessage("Main Body" + spAliasBody->GetAlias());
6 F! d" `" Q/ M& J4 O
" |3 Y- u8 y2 r! T% Y        CATIBodyRequest_var spBodyRequest = spMainBody;: J7 a; E/ \6 m- g* z
        if (NULL_var == spBodyRequest). |5 P/ a' w) T
        {6 S3 [# n7 k# g9 }; ?2 ^
                printMessage("NULL_var == spBodyRequest");
( P" ~% Q% T0 M0 x                return;
9 M2 Z1 a4 [8 }! _' z3 u        }6 j+ d8 v. m3 A3 W# i
        CATLISTV(CATBaseUnknown_var) ListResult;5 v, I; }6 R$ U$ @# v, g8 ^7 ]
        rc = spBodyRequest->GetResults("",ListResult);
8 N) n/ i4 z' y' t! {! ~        if (FAILED(rc)|| 0 == ListResult.Size())
0 C8 q0 J' }; i5 |% i: b        {
2 W  X; Q/ C! p, F8 s6 q                printMessage("ListResult failed spBodyRequest");) n9 ~: ^% w8 w6 ^% U0 I
                return;1 D6 h" T# }, N" L0 d. o
        }
; M$ Q# n, R% D. |        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];& m7 l4 X  T; p% \) P  c. E( B
3 l1 m( J4 b, j9 l
        if (NULL_var == spFeatureResultGeomElement)
) O0 `. L: c1 o6 A        {
* \( S9 j; s0 p  z* h                printMessage("NULL_var == spFeatureResultGeomElement");( b+ p, P# f" x: G6 n" Q
                return;8 y* k2 B- v! L3 ^$ h
        }" r. T" O" P( p' e8 L7 [: U
* D( k$ @4 o: {' U- |5 j; }
        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
+ j4 Q1 _3 f  ]% \1 E/ Y3 `        if (NULL_var == spTopoBody)6 S9 o6 p7 ^" B2 u+ t  f
        {
* ~; h1 f" p4 s6 X) a                printMessage("NULL_var == spTopoBody");) p* i) {4 T1 f9 |) {
                return;
# ?0 H1 ~8 A1 i0 ]* F* m        }$ b7 j6 R5 r3 V9 B4 r& I

/ i7 w! e4 Z) @6 T8 z# x
" r7 R# U/ y7 z- E! {0 R8 Y        CATLISTP(CATCell) cells;
) b, D' E4 c0 ~        spTopoBody->GetAllCells(cells,2); //get all the faces
5 q& q) T* o# e  r  v9 `4 a) X1 h( _5 _' @) p3 |
        char msg[256];
3 {& x: B$ n( }2 g$ Y4 G; m        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());9 u" y+ o3 F  x6 a/ t
        printMessage(msg);; G$ Z7 b' m9 T! e3 B, h
- L' i5 H% B6 J( F: R
        for (int i = 1; i <= cells.Size();i++)
/ D) c' @! C& a        {
; j- R. }6 b. ~/ z7 p( C, a$ s                CATCell_var pCell = cells;
4 d3 X& M2 Q. n                if (NULL_var!=pCell)( k" y: Z5 c- T, G! ^7 @! s$ h$ x
                {/ R, A8 o6 F7 x3 g
                        CATGeometry *pGeometry = pCell->GetGeometry();
# l9 B2 s' k" J2 j7 ?                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face
' w( _- c" a% `3 e                        {
, X6 D+ q4 ]+ X+ b3 h
( Z2 m' R! @% E8 T8 w                                //CATMathPoint CenterPoint;
0 J9 u' {: U& ], A/ K  K                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);% `& w7 Q4 U6 y- ^: x, ]
                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
' x4 Y- Q# E! C! b" F3 B                                //printMessage(msg);! B* u5 J: ~/ [2 F  K6 {& v
                                 
$ v2 O5 A* Q7 X' |8 ?& k                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);1 }$ E/ H  N" L. c% M' m# s
                            if (spBrepAccess != NULL_var)
8 Z5 l* L: \+ j2 _  W  R$ E                            {
! v- {2 o) j( l3 I9 B                                        //assign color                                * v6 i) C+ i& C' S0 J% @" V0 l
                                        CATIVisProperties * pVisProperties = NULL;
, E9 C4 I: D0 \$ f6 F, N0 W                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
6 }5 p  p$ I; Q& h! ~' \$ C                                        if (SUCCEEDED(rc))* L/ w" e" P0 a# d: q8 Q7 Q. O
                                        {
; j, W9 T$ R7 h7 \- v0 X, r; t                                                CATVisPropertiesValues ivalues;
$ W; x; o) `7 N2 D! ^                                                ivalues.SetColor(0,0,255);
* G9 ]' B4 o$ Z' R: ]" S: D* |                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );/ F1 m' A! N9 S* J
                                        }2 Z" r' k8 v6 U8 i: M$ c
                                        pVisProperties->Release();6 ^9 f/ w/ N1 S8 c& J  @  F
                                        pVisProperties = NULL;; y! A- Y& v, o
                                1 f5 W& x' \1 ?$ L
                                 }9 P- F( X5 @& F. e

. s: g: I/ [* C1 V                           }0 H! q  b, D6 ]) e$ P* W
                                //get alias name and persistentTag to add in the list
1 S$ |# n6 ]7 Y% N2 e* B8 c                        2 |! [. m) X2 S2 ?. \0 ~
                               
- z. i; e: w& h! {4 E                       
4 T% x) a1 c  [# Z/ v7 }& S/ y                        }
4 D0 @; `* K# G6 N/ T9 [, k
; @9 |3 N4 K/ ~+ T% _                }; f& T- p2 L; N/ c5 n
( e. ^) r" K8 e. r: l
        // End of User Code
& O! `5 {2 T2 M& m% @( n}
4 N+ m3 e% o, D' e[/mw_shl_code]
. r% S6 H5 C) 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二次开发专题模块培训报名开始啦

    我知道了