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

[二次开发源码] NX二次开发源码分享: 获取当前Reference Component的通用方法

[复制链接]

2018-1-10 17:48:41 2304 0

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82170
QQ
发表于 2018-1-10 17:48:41 | 显示全部楼层 |阅读模式

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

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

x

. a: a5 I  \% p/ t7 {8 u
  Y1 q# R  q" tNX二次开发源码分享: 获取当前Reference Component的通用方法
, x1 {5 D# D' T& D" W9 @
3 y, J* b$ o. v  @
, |6 A& H3 f' Q) Q7 E* r* v5 x- }
0 U# g& k7 G  }' B* S& L6 W& i; x0 o6 t) z' [( f, `

  V+ J; ?' o$ ~7 T  @2 K: M[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title): U7 N9 W3 h5 @" f  D$ S  T
{; z1 f* R$ p- X, o1 h" }
; T5 w( ?/ p4 {$ o
//  The traditional method of asking for all of the components recursively//  does not work if you are looking for reference-only components,//  because they are not retured when you ask for the children.////  Also, asking for the AssembliesGeneralPropertiesBuilder.ReferenceComponent //  Property  does not work in versions earlier than NX12.////  The workaround is to cycle for components the old-fashioned way,//  and then ask whether each one has the REFERENCE_COMPONENT attribute.////  If you have multiple occurrences of a given component in the assembly,//  each one will be reported.
) V+ b6 C6 p$ I$ O    - }6 k$ E& H; V" B& |( Z' P  w
    logical
$ \7 N; X; W0 w% i* F+ G        hasRefAttr = FALSE;
3 N/ D9 M- R2 w# q% n, h3 I6 r9 K1 s, n0 n" A+ X
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
6 C7 V2 X0 ]  H/ h0 G3 K) a& h" ^, m/ m: \) {4 Y) [
    if(hasRefAttr == TRUE)# _0 U3 V7 ?& _- g
    {
0 e# D1 l! @2 g* a' o$ j8 X6 s        return TRUE;; z* K, u0 k, Y
    }$ f) o+ o0 Z/ F4 ]4 c! x
5 ]/ B# q5 Q$ b: ]) V/ Z$ {9 `) g
    return FALSE;. F. W+ Z! P7 u6 f4 [; l0 U5 N

3 E2 U2 _3 Y, S# o}
# h5 _, V8 u$ ?3 J/ I, {: l" Y# r3 _6 w
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)+ X7 L8 n0 i. [: _% p( ^7 [5 o
{! Y8 S+ r" _* N: j( N* ?0 j
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));5 b3 G4 }4 w; M" o) |. q
    return (object);# ~. N$ ~+ E* n/ ], R3 Q: o
}
# [8 x" @( N) ]) D& u" w" O) V, h4 E& |
static void do_it(void)5 g0 a# |$ y6 k
{
( n; N! s$ r( \' ~( K    // Assumes that the display part is the top of the assembly! M0 E' }$ ]# |$ O  j
2 e7 ^+ {- ?) t3 p
    tag_t7 c" A) C. {# C+ S" Q
        dispPart = UF_PART_ask_display_part();
0 P; o3 y$ I6 b. C# ]* p- Z* Y1 @
    if(NULL_TAG == dispPart)
* K6 K( T* s% U1 o    {" B6 K0 [+ [  ^% F. a& u
        ECHO("Program requires an active displayed part");0 x. ^2 m5 K- [. [4 s+ H/ _
        return;2 a4 V6 x, y' n; S6 D3 q8 Y7 I
    }
4 P  q+ ]& B$ a
0 N+ T" u6 d* J7 `, D    tag_t
; S0 T& |/ b3 @- x& B2 t        compTag = NULL_TAG;
* I/ o; u4 x8 I6 i* u/ o6 J3 |9 z2 J
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)$ I7 t1 u  e$ ?& K* |4 b
    {1 r' e; a6 `; J- U
        char5 B5 l# \  [3 I6 W& S
            msg[512] = {""},
# g0 L4 n  o, B& p& ^            fSpec[256] = {""};
" y, D3 c. v0 h6 d4 s% _3 D6 h3 I
5 y' `- s6 @" v# E            tag_t* u$ z7 d2 q8 b7 A' ~
                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);1 L9 O" w) @/ Z- J/ H& f
  l$ i7 W& z: Y; d. }
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
. F* z" {5 P! O$ D+ e8 ?
' h9 v8 R5 ]/ d& U, Y$ D/ H4 Y            // uncomment to see all component names:
2 y. v3 v$ p6 Q, w, H  N9 S            //sprintf(msg, "Component Part: %s\n", fSpec);( l8 o, J& g! Z2 |+ L0 J
            //ECHO(msg);
  l) R0 a; C. [* J
, o2 I$ d" I" B            Component *theComponent = (Component *)NXObjectManager::Get(compTag);& Q* G* V6 U. V6 o3 O; \4 r/ N
            if (attribute_exists(*theComponent, RO))& ]+ U8 p- u" s! a, d
            {% B8 z: }' q" @8 F; h
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
+ Q' l2 i) p( _- z( }/ \+ _  F                ECHO(msg);
/ n5 l5 A: U( p) k8 p9 F, x            }+ E* h% F) i$ T- ~" B
    }9 a/ w8 O; C' O' i* j$ u% a
}[/mw_shl_code]
" }' Z8 O* N3 Y6 {$ S9 h) S) L
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了