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

Catia二次开发源码分享: 获取装配所有组件列表

[复制链接]

2018-1-10 10:12:25 2607 0

admin 发表于 2018-1-10 10:12:25 |阅读模式

admin 楼主

2018-1-10 10:12:25

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

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

x

3 p% ?! b+ [/ m5 }! jCatia二次开发源码分享: 获取装配所有组件列表& B2 a4 K3 B& S
/ X3 }* k% \( H3 f2 M
( @, Q0 ~+ x/ T6 o6 S: @# \
[mw_shl_code=c,true]/* ----------------------------*/
2 m* L% ~1 I1 r7 \/ h. r+ w+ p: [        /* 2. Retrieves Root Product   */& n2 S7 J) w- K. e7 _8 p. h
        /* ----------------------------*/
' O) {3 N( q% b* r       
7 D7 j& R% ~; }7 i        // Begin navigation throUGh the document => start with the RootProduct.
3 h2 I6 t% }( Z* I7 k9 d2 O- ~        CATIDocRoots* piDocRootsOnDoc = NULL;9 h, x; S( G! b$ `
        rc = pDoc->QueryInterface(IID_CATIDocRoots,0 H6 L  G0 [0 R0 O, v
                                      (void**) &piDocRootsOnDoc);; Q! D6 |- b& O* Z7 R
        if ( FAILED(rc) ) return 3;
' P0 P; D$ m5 R( h3 m       
* ~3 C' |& ~% c# Q, }; u8 M        // get the root product which is the first element of root elements) K8 z& f3 \0 ]0 N
        CATListValCATBaseUnknown_var* pRootProducts =
7 `7 a+ l6 [1 w4 P                piDocRootsOnDoc->GiveDocRoots();
1 y0 u0 x' Z8 m: v0 c# C        CATIProduct_var spRootProduct = NULL_var;4 Q4 ]% w! }- ~: l, p
        1 s0 H4 W4 V' u$ d  p( |+ O/ p
        if (pRootProducts && pRootProducts->Size())
( Z* v- v/ o8 L7 z' T9 g        {  
" L  c# Y1 F* B, z; i                spRootProduct = (*pRootProducts)[1];
8 Z; v, U3 p$ v# }1 p                delete pRootProducts;
8 T5 X5 R! Z1 ~                pRootProducts = NULL;
- |; _0 p0 A) w# Q8 f) y8 A7 |5 u        }0 g9 v' y# c' W- \- R; O, B/ L
/** @anchor err_1 piDocRootsOnDoc not set to NULL after release */
# D$ n  O8 U4 S: D        piDocRootsOnDoc->Release();
0 ~/ x3 D/ x6 w; E        piDocRootsOnDoc = NULL;: G$ C5 a3 t/ I/ f- @- u( v
       
: A9 q& e9 ]  I# Y/ ]1 N        // Get CATIProduct handle on the root product.
' M8 s# _3 x  r8 L: ~0 f        CATIProduct *piProductOnRoot = NULL;
+ Z" A2 C! g7 N0 h5 J# f        rc = spRootProduct->QueryInterface(IID_CATIProduct,4 L+ |0 i- Z% \# b  k8 N
                                               (void**) &piProductOnRoot);$ \8 A$ C( A0 u# O) U
        if ( FAILED(rc) ) return 3;
3 V- d; @. F8 w' {  T9 a% V( l. Y, S; O
        /* ---------------------------------------*/
" v3 F; V( N, R/ d) B3 \        /* 3. Retrieves children under the root   */  t) \* T' i$ A# ]: l" b+ L9 y
        /* ---------------------------------------*/0 s. ^7 y' W1 g; C4 R4 ~
        ; x" a( j9 U1 D; Y, q
        int nbOfDirecTChidren = piProductOnRoot -> GetChildrenCount() ;
3 b$ k2 s8 B) ^: C, Y5 O+ @3 i        cout << " Number of direct children under the root = " << nbOfDirectChidren << endl << flush;
7 v/ i6 _, a8 h       
$ B& G: X& A6 G) ~# z) ~        // then on a root product, get all the children agregated to it.
) O# J; o, M( J2 i        CATListValCATBaseUnknown_var*   ListChildren =" B$ {& Y" E0 G( e3 |
                piProductOnRoot->GetAllChildren();
4 n/ k- j5 r: F( n* O0 Q# |, i7 s/** @anchor err_2 piProductOnRoot not set to NULL after release */
, i$ t& ?  ?2 P        piProductOnRoot -> Release();
' x5 p! T) ?6 }: r) C        piProductOnRoot = NULL;) \4 C& U5 q: O) S; a  F9 D: ]
        if(NULL != ListChildren)
8 R; K7 M* N: f* ^& W3 \: L# F) P        {
& {/ A" N2 X& Y" h$ t* Q! k/ M( m                0 X+ D+ i: d0 v- j2 q& H2 c" H- |
                int numberOfChildren = ListChildren->Size();' M2 e( z: w. y7 B7 b) Q
                cout << " Number of all children under the root = " << numberOfChildren << endl << flush;
3 N' F: {- C% l, D
; H8 w( u( X  ?# m$ |- A5 Z6 u                /* -----------------------------------------------------------*/. ~8 Y5 A* B: z4 Z5 m
                /*  4. For each child, get its partNumber, and InstanceName   */& j- W" ~2 d  ?! v; U/ R
                /* -----------------------------------------------------------*/
  Z! L: V% ]( o! i# v                CATIProduct_var spChild = NULL_var;+ ^6 \7 d: j/ b# ]8 G7 D4 T
                for (int i=1;i<=numberOfChildren;i++)
# s! i4 `5 S  ~: _5 Z2 X/ n                {/ s. g. v. [, E+ c$ }
                        spChild = (*ListChildren);
* D2 S; y, {, P$ ^/** @anchor err_3 spChild not tested before use ( if !! ) */ % T& V! Y6 U$ C' v- Q' N
                        if ( NULL_var == spChild ) return 4;
$ {7 n1 ?; r( q  h# F& C( M+ u                        CATUnicodeString partNumber = spChild -> GetPartNumber();; U; b" V+ o2 `6 ^6 ]0 g6 d
                        CATUnicodeString instanceName (" ");( ~8 P+ c, Y. S- ]
                        rc = spChild -> GetPrdInstanceName ( instanceName ) ;! m' ~) ^( {+ _1 x; M, x
                        if  ( FAILED(rc) ) return 4;4 i6 L) R& G6 f- [# _; o
                       
3 E, [7 d' V) k                        cout << " child number : " << i << endl << flush;7 r) }* l" |6 ?' d% z
                        cout << " has as part number : " << partNumber.CastToCharPtr()  << endl << flush;
' C* y! h3 }9 z: W) A. J% l1 _: A6 C                        cout << " and as instanceName : " << instanceName.CastToCharPtr() << endl << endl << flush;
$ s/ L# l7 [& u+ Z1 Y7 N                }
- o7 @- q8 i  {$ b                delete ListChildren;% j$ p4 c0 d5 b" n1 q* R  f8 P; E5 y
                ListChildren=NULL;5 ]' I! D6 |8 `1 `+ n# a
        }        & ^. ~: |; f9 W; L7 @
        /* -------------------------------------------- */4 j$ z; H% e& g
        /*   Ends the session                        */
$ W! L6 R0 ?- E  x5 Z  }- ]        /* -------------------------------------------- */[/mw_shl_code]
5 `) f; P: Q- J& ^! L9 Q+ j; t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了