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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

6 n8 L8 X. L, ]# C  k  Y. v; w5 W8 T' D* C7 m0 ?
个人认为,比较常见吧,如何遍历得到几何体,通过几何体获取到拓扑体,通过体获取到几何元素,通过几何元素获取到单元,单元再到几何进行判断面的种类,对于BrepAccess的获取需要借用 全局函数 CATBrepAccess !* a2 V5 M; o5 c/ W! n
# f" }+ V( l0 |0 s

: H1 R! q& W, V0 m9 ?( H1 m- D) I; P! @2 W, k/ k
[mw_shl_code=c,true]7 d+ F: B3 s$ L( S7 _
        //get the main body1 [: H- `4 p$ J6 t
       
9 @  Q0 {; k0 a' Q& o        ----   -----7 J7 t1 T2 F3 G. z( C' v
{8 R& W6 \' J! D% Z4 A0 ?
        CATIPartRequest_var spPrtRequest = spPrtPart;
  w- q! J7 G! d4 Y) |( u" e, T        if (NULL_var == spPrtRequest)/ b4 r+ o* T& |1 Q& H( C
        {
, ], D# s$ ?7 d# ?                printMessage("NULL_var == spPrtRequest");
3 s1 O" Q# L% K$ J; u$ R: s0 L+ m                return;9 V. F5 l) a2 ~3 X
        }
. G6 c1 R* k' {. Y* m$ w        CATBaseUnknown_var spMainBody;
  L: w: ?3 @, O
* J, }/ L3 a8 m4 c! q$ V+ ^        rc = spPrtRequest->GetMainBody("",spMainBody);. k8 A0 Y5 u* H; ?% E* S! @
        if (FAILED(rc))
! v+ u5 J! j* _) T! x0 E( D8 S* |        {
( p5 L1 Y/ y+ Z1 j) Z. N                printMessage("Failed spPrtRequest");! U  R8 `1 [6 _) i; c6 j5 ^9 o3 T7 }
                return;0 h2 ]* w/ I- B7 h! M: z
        }
$ ]9 J+ K( \( s2 `- S) m) A! K& }9 @6 C2 R
        CATIAlias_var spAliasBody = spMainBody;& R' H; }4 X" r# A- b
2 R+ _6 ]- i8 b2 [/ e# P/ D; l, K
        printMessage("Main Body" + spAliasBody->GetAlias());; a3 T4 w$ y) v+ X0 |! p0 b; g; Z

" ^3 |: w0 Z6 }: m        CATIBodyRequest_var spBodyRequest = spMainBody;
/ x% q: c* z0 c* T0 A, z& [7 g        if (NULL_var == spBodyRequest)/ m2 ^: t4 R* u1 Q- k' Z
        {
% T1 V! ~1 A: t                printMessage("NULL_var == spBodyRequest");, y) F2 ?) h+ Q$ _6 t
                return;1 w/ Z* K) f# m; g6 t! W/ m& {3 ?% _
        }
% ?+ D) ^5 z5 ?( y" \8 \        CATLISTV(CATBaseUnknown_var) ListResult;. s5 S( l1 x( h! Q3 y
        rc = spBodyRequest->GetResults("",ListResult);- J! X, R2 X5 q* M2 a9 d. F
        if (FAILED(rc)|| 0 == ListResult.Size())9 r; D& G- g+ V* T
        {
+ i1 I& X# d' A$ P) E% L! y( [                printMessage("ListResult failed spBodyRequest");, u9 [  k# T$ P2 B6 G, I
                return;8 I9 R3 @1 `6 x# R5 V
        }
# J" ~7 ?" U+ C( C        CATIGeometricalElement_var spFeatureResultGeomElement = ListResult[1];: W" X1 f) U' ~, e
) ]5 b* `3 \/ G2 D: W( N
        if (NULL_var == spFeatureResultGeomElement)
  b0 n( W7 m  h+ M7 o        {" S& }, V* T' n: M+ n" X+ j/ k
                printMessage("NULL_var == spFeatureResultGeomElement");/ Q& L8 G. e* R( T
                return;+ p" K% o6 t6 r! |9 z
        }
/ f( H% _! L' B* p
* E( J. ]6 _, U8 G        CATBody_var spTopoBody = spFeatureResultGeomElement->GetBodyResult();
. ?' g. O. C6 z$ J# K        if (NULL_var == spTopoBody)
7 \2 w1 o4 }+ r        {
# j2 H9 u- U7 h" J8 i1 J4 i                printMessage("NULL_var == spTopoBody");$ g0 ]) }; y9 y1 X' {: t" G- w
                return;* v& q: Q# Q& w( G: Z7 C+ q/ N$ D/ Z
        }
; A+ R0 z& N' x  J+ f2 [6 e( v4 C1 P& r" r9 ]  J' f

# J7 p! O0 E; O( X        CATLISTP(CATCell) cells;2 |& \9 h" l! s0 n
        spTopoBody->GetAllCells(cells,2); //get all the faces
' V& ^* b' C8 W# l: c8 z, q
- W7 Q. j9 [  n7 s        char msg[256];! y+ r# n$ ~8 P8 K$ K
        sprintf_s(msg,sizeof(msg),"Face Number :%d",cells.Size());
) L9 ~/ W, k9 e  b7 P: f        printMessage(msg);
" ~) _7 ~) @' T6 _
8 q& o2 K; b: T5 x/ y, {* |, Y        for (int i = 1; i <= cells.Size();i++)! X; D1 s# x% ?& \
        {5 n- J, C, @3 R! W
                CATCell_var pCell = cells;( l, ]3 ?3 P, e) \& Y! z& R
                if (NULL_var!=pCell)
; Z, c6 e4 O) }* Q( S6 s                {2 D5 j9 f2 U$ }4 y* B6 {) y0 H) ~3 l
                        CATGeometry *pGeometry = pCell->GetGeometry();# q* c2 k; @! A, `8 X2 ?; E) l: m5 `
                        if (NULL!=pGeometry && pGeometry->IsATypeOf(CATPlaneType)) //plane face6 R  I$ D  }7 o7 Y" Z8 C
                        {
2 o& K" V$ Z) p; _4 x" O9 E7 f! k3 ^' D9 V, V6 }/ V+ `
                                //CATMathPoint CenterPoint;
' H5 F! |) M" ~3 I7 e                                //pGeometry->GetBoundingBox().GetBoxCenter(CenterPoint);
& C; B/ u) _2 T                                //sprintf_s(msg,sizeof(msg),"Face center :%f,%f,%f",CenterPoint.GetX(),CenterPoint.GetY(),CenterPoint.GetZ());
0 O. ~  ^+ H/ o* j% e                                //printMessage(msg);
; o2 x5 O- ?: }5 q( f                                 
8 }* Y! J5 r5 v  \3 b, i                                CATIBRepAccess_var spBrepAccess = CATBRepDecode(pCell, spFeatureResultGeomElement);
) ]0 y* b5 j5 U* j, Y                            if (spBrepAccess != NULL_var)
/ d! Y! z6 i; e. T                            {, P/ }$ h& }* z( l
                                        //assign color                                ! O) b, |4 P- E( s
                                        CATIVisProperties * pVisProperties = NULL;
) ]+ u1 S2 E7 ^0 o) ?                                        rc = spBrepAccess->QueryInterface(IID_CATIVisProperties,(void **) &pVisProperties);
' |# A2 v  Y2 L- d" y                                        if (SUCCEEDED(rc)); Y7 R, X4 B+ H4 b8 W) A9 U, {) \
                                        {
9 K& |$ y0 W( z4 p& [( d                                                CATVisPropertiesValues ivalues;
. s$ F" S0 r& Y8 m6 {  b                                                ivalues.SetColor(0,0,255);
9 z3 w* n+ J3 ^& T& d4 i                                                pVisProperties->SetPropertiesAtt(ivalues,CATVPColor,CATVPMesh );
) \# m7 z1 x6 w  O, W" [. G( A9 s0 M                                        }  Q+ X9 Q5 U. E8 r% S
                                        pVisProperties->Release();
6 ~* w4 d: a, N4 ?* j; H" `                                        pVisProperties = NULL;3 z: G3 Y+ B. Y  T( Q4 c
                               
0 T  c8 m. h1 Z! s5 v  f                                 }
8 B/ g% S5 ^7 W+ R5 x
0 j0 P+ M3 O' G1 `/ y) s                           }
3 d5 v+ j6 F" }: n- |% x# ?+ U1 k                                //get alias name and persistentTag to add in the list
3 e2 x+ u$ x% ~7 W) d                        & P4 g% |9 C. N
                               
0 F: h- t% `# B                        8 P6 j' J, Q; k! P/ u3 R; [
                        }
& s5 z6 F1 l8 h/ V" ]% j
3 U  e; f1 ^4 \4 Y                }
: r& m% z2 S5 m; a* k" [, h) X: \# }
/ R) e5 M' }& S* ^2 Z& L. P/ X6 i        // End of User Code
7 b7 b5 z) k1 X/ A% a+ G+ v}
; A. \9 S* a3 O% {5 o: ][/mw_shl_code]
# j, b' T. h, h) Q  t: _: J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了