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

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

[复制链接]

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

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

admin 楼主

2018-1-15 14:21:37

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

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

x
8 I7 I) N% R( K! @

: s. W( D& i# S9 \/ D' ^) D! W个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !  ^/ U0 {; S1 W5 n6 G/ P7 q
5 C. f  @6 [2 f$ }
* M, f# [& C& J9 H7 m' V

% j% h3 \, S6 o1 ?+ E[mw_shl_code=c,true]
6 d% b, ?3 T3 o- _& n        //get the main body
4 I$ Y/ o" n' X$ H8 L' ~5 U: M8 m        . @6 H/ \) N- N) l5 g6 w4 U
        ----   -----) K* c; g# u4 o' n2 H  A1 l
{) v' X9 q6 [: |4 n9 ~( G3 p- e! E
        CATIPartRequest_var spPrtRequest = spPrtPart;) t  j0 E# l' g4 S! O2 m" J4 q
        if (NULL_var == spPrtRequest)% G0 x( O" O) @8 O/ D
        {
# p: t1 a: Z4 d1 K' [                printMessage("NULL_var == spPrtRequest");
, f+ z) B! Q- T: E- w; S" h                return;+ i0 }" Z& J& C4 s7 R" w2 Q
        }
) {) o$ j6 j2 U8 h8 z; m        CATBaseUnknown_var spMainBody;
2 f& ~, m& k4 p/ @5 m7 |; m: H& P9 \7 Q
        rc = spPrtRequest->GetMainBody("",spMainBody);
/ e; C1 J8 v6 b- p        if (FAILED(rc))! f! F3 z7 Y" @, Z
        {: m, E4 a% t. H
                printMessage("Failed spPrtRequest");
' M% l2 q' R" `3 I. ~( p# A                return;
5 o  ^. h; A+ `8 T( I: o. Z; m$ v5 y        }
/ L3 r" d0 }. j8 {' F/ p1 w, O5 C# H6 _& j2 U4 e0 M5 `) {
        CATIAlias_var spAliasBody = spMainBody;
( R5 u0 r4 [, R* x; ^$ z9 n3 g/ |% k0 E: M4 T
        printMessage("Main Body" + spAliasBody->GetAlias());6 {* X. r/ ?" h* n) `7 a* y' G
7 M* `1 L6 s0 I
        CATIBodyRequest_var spBodyRequest = spMainBody;
  e( H6 B  q) ^" }        if (NULL_var == spBodyRequest)2 @; u1 m2 M' j3 }6 q, r
        {
) k8 t1 R2 z, }                printMessage("NULL_var == spBodyRequest");( @4 K- Q% h0 E* L- s
                return;
  N7 [4 Q4 {) y4 _4 D        }
  ?# G  O3 {3 ^. L8 |$ c8 J        CATLISTV(CATBaseUnknown_var) ListResult;3 S4 d  Y3 R, J$ }
        rc = spBodyRequest->GetResults("",ListResult);
! B) C9 Y; L% ~" S+ q' e        if (FAILED(rc)|| 0 == ListResult.Size())
+ k# Z4 `4 w4 ?" A        {+ X$ I" ~* r3 M% {6 h, B! W% V
                printMessage("ListResult failed spBodyRequest");
9 z/ p+ q) r2 f( f: v+ r                return;9 S) X8 @+ g. L9 |! C) r/ m8 f) P
        }6 G' f' B- x% n
        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];
/ `# g. I5 o, E% i. ^& B2 B6 e+ I
        if (NULL_var == spFeatureResultGeomElement); U" ^" W4 ^9 Q. D4 O" G
        {/ g( y7 I8 R8 s, r0 F2 c
                printMessage("NULL_var == spFeatureResultGeomElement");; O6 w8 ?5 @, a7 ]. [2 ~: h
                return;' h6 c$ x6 T- s6 j. @
        }
  z3 |2 r$ b. z5 f$ A% T: A. ^/ O
; g* i$ C' }: |/ p9 I        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
) g7 m* B/ m( G5 P: }4 P& P) f" q        if (NULL_var == spTopoBody)
4 \! m" t; s; u0 z# [; v) }        {# X2 D! U& l) `( F
                printMessage("NULL_var == spTopoBody");. b: M' Y  U, _! t% ?
                return;
6 f8 C" m% f: W! d7 T/ g        }! E& M$ y5 y& k
" k# q$ D: Y; F: r4 e0 z3 r

+ K  @* R: s: q        CATLISTP(CATCell) cells;
8 ~# Z- {2 }# F, q; n        spTopoBody->GetAllCells(cells,2); //get all the faces7 G+ }) t7 `! y1 i! p* L' O2 w
" i) K% H. B0 H- X, n" D
        char msg[256];4 W8 F$ |: i/ g  m' O1 X( s, G
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());+ f0 x" U/ {4 M# }8 X) ]
        printMessage(msg);
2 F" G3 S. }7 g
$ m% B0 h8 D/ j        for (int i = 1; i <= cells.Size();i++)
- P% B* b/ @% D6 ^- c# U) _        {
  ~9 i2 G$ g% B4 k2 W                CATCell_var pCell = cells;- b: `( [1 R% {" C$ A+ h
                if (NULL_var!=pCell)
5 p& F/ a  }, Y1 C# u4 A                {
1 \* @$ c/ N2 _# `& L& g                        CATGeometry *pGeometry = pCell->GetGeometry();
, c" j4 m  I  ?                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face* A* ?9 n1 i3 v/ l* V
                        {
4 u; G; \! \. d2 d
$ `/ F) R# W( a: J) K1 t                                //CATMathPoint CenterPoint;7 ~2 m. W8 a# w; ]) l& u
                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
& a' Y, V0 Y6 u2 I" `" K8 V% E4 o% ~                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
1 R4 o2 Z% k* f* C9 f$ {, k                                //printMessage(msg);* u9 q& p, H- q+ a
                                 6 u& W2 }& O  e& U& ~5 s7 x
                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);* o$ v, z+ F! `0 Y, T8 w& ?
                            if (spBrepAccess != NULL_var)9 W' A& d1 g& _4 x& l! W
                            {
% F4 w: k) \1 C1 s  G' d                                        //assign color                                8 r. b; r) m9 c0 j1 {. X
                                        CATIVisProperties * pVisProperties = NULL;; G7 q0 Q! I( {2 Y1 C" j* q
                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
3 v9 F' K: Z* u  ~' a0 M' z) _                                        if (SUCCEEDED(rc))
' c3 ~) u# V* l                                        {! Y+ r+ C8 ^! M; o
                                                CATVisPropertiesValues ivalues;9 A( o) ~4 G: Y& x
                                                ivalues.SetColor(0,0,255);" ]9 ?  Q" [8 a
                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );% H2 @! V; R$ M' I( Q: M
                                        }$ ~; B/ j( U/ |# D6 ~% H
                                        pVisProperties->Release();
- s! H$ v$ s3 F7 d+ v) t5 X3 C                                        pVisProperties = NULL;
# Z3 s. ], Y, C; \6 ^3 U                                ; _  ]4 O2 M7 e# I
                                 }& l. z0 s# j) J* z+ y1 l

/ X" B% f' P, _                           }. n" R6 a7 l( _  Z+ i2 B
                                //get alias name and persistentTag to add in the list$ k0 {' c: n# X: }
                        8 c' b& k* L+ y
                               
, M5 t" p/ Q% Q' F/ G  ?& T1 n                        4 `5 [4 {# o1 l+ }
                        }
" w& [+ }& M+ R1 Y7 Z: B
+ J8 f7 p3 b2 T  Y                }9 ^+ k6 `* d" W( q8 I0 N

6 S3 A5 c$ ^, \0 r- R! d; N) H        // End of User Code
5 K- U$ \, l  I2 u% e$ U# y}
' Y! a3 s. i6 y: [: R[/mw_shl_code]6 d6 q/ W* W# j/ |3 ^3 Q
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了