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

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

[复制链接]

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

admin 发表于 2018-1-10 17:48:41 |阅读模式

admin 楼主

2018-1-10 17:48:41

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

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

x
6 v& p) d2 p& v6 {1 J! e
; o0 t1 [+ L# n- X
NX二次开发源码分享: 获取当前Reference Component的通用方法: [' q2 z$ E+ x2 }' h

3 T, V/ ^; f0 `) M6 |4 z& z2 o8 j, s7 d
2 ^, I' q. k- g( c% Q* L
0 V! q  w$ g( y# c! Y4 h0 L

- g0 l+ I- u. W/ ~# x! `& [[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
8 b7 r" a: e3 X6 E! h7 z{0 Z7 Y+ l$ Z/ Z
7 p7 h- Q4 y# w! D- B, v# @, C+ \
//  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.
9 ^( t' U% r2 ~% _, y   
: y/ o! S, j9 |6 Q4 v" O    logical
) u" |# B; {) b        hasRefAttr = FALSE;) a$ Z( ~0 w$ y  N: r' {! j- n$ k# }
& c3 H7 o6 P* \3 {: a
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
( u4 z5 {5 [2 Z  i* r
5 J2 ^7 \' ]- j; V    if(hasRefAttr == TRUE)) {6 D' ~3 u4 j& _/ x, f
    {
3 r) T( R4 Y$ h+ D' \& @        return TRUE;% b$ m' ?; s  V
    }
1 w2 g+ \' d" c# }7 C* |9 ~% w/ A& _$ A2 h
    return FALSE;! G+ [$ t8 R, w. @- D5 Z5 n
4 C- @! m; [$ J& Q6 y9 F0 L
}
0 J3 H# g2 _. e1 H# H0 {9 H) q/ t: ~  M, z- s( u. H
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)8 s/ H1 r, i, f4 l0 }/ m1 j
{
+ ^1 y8 q) ?- W9 J$ P# i/ V    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));6 @- j3 {! B- G0 d
    return (object);, c, X5 N) _  |  T" P3 @
}6 Y! J3 ~+ \6 U% B4 s9 v4 M
, I( I$ e6 W6 c' Z0 I$ s9 B  M# b
static void do_it(void)7 d7 O, L- h3 Q' D/ n
{
* h9 X. D5 l% \- N) G1 |    // Assumes that the display part is the top of the assembly; E, W" }: z! y" m; R+ J
: s; C% b1 p4 r5 m1 H7 q
    tag_t
$ a: P- M, E; j8 s( b6 i1 `        dispPart = UF_PART_ask_display_part();  z' d! s- |" A- m) Z2 }& Q1 m
& O" _0 w4 u- e; f) I0 B
    if(NULL_TAG == dispPart) ! O- E6 d. g. ^' `, Y9 g3 z
    {
: T* Z! l9 p0 J% O# ?9 j, @4 a        ECHO("Program requires an active displayed part");2 j' v: A+ V2 c- I8 Z8 B/ }
        return;% m+ y( l. U. _
    }
5 A) Y! K& m; Y( w' t
! t6 E8 B3 z5 |. V    tag_t
  J/ H& B* W: o        compTag = NULL_TAG;
4 {' m& k- v$ @4 D/ r/ Q% J/ v/ w9 b4 n
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
' Y. j7 e1 j- W1 K7 j3 k  S$ ~    {9 z: G4 f' Q$ y* a+ L; s6 C1 n5 H
        char
. U9 i! m( E% ?            msg[512] = {""},
" M9 W, V( J% [0 S" H' a4 o            fSpec[256] = {""};. R+ t' n& \% ~5 e0 O  {: I  G. X

; f1 {) r4 T# @( n% F# q- U5 c            tag_t
& N6 Y& Y+ {1 |+ f; x                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
" u* {- b* U. v2 n( R/ l
, t) `3 Y! ~! o! \            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));( t' r& n! ]5 q, c9 e$ z' r5 c% z. v
( ]  U9 @6 y; L1 H" o
            // uncomment to see all component names:- d, N% i  h1 W) B) |2 P# N
            //sprintf(msg, "Component Part: %s\n", fSpec);
' D7 [, y' j* ^. Y6 m7 E( k( u9 B            //ECHO(msg);2 S1 j6 S4 t8 S$ ~* l; f

1 i; ^% l+ x* d! z3 d            Component *theComponent = (Component *)NXObjectManager::Get(compTag);1 ~( d2 J# F  {1 F% V) {* j4 V6 @
            if (attribute_exists(*theComponent, RO))$ m7 f: H% U5 s5 b, u- ?- f4 b% _4 [5 G5 U
            {; s+ g1 S) S' l, M
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
' u2 a- B- _5 B/ b! v$ u- l9 j                ECHO(msg);$ Z3 I) l! G! H2 R
            }
: h, ~$ d' x& [% b- ~5 m    }
3 ?) q- O0 m/ n: o+ A( E. X}[/mw_shl_code]
8 I) O' {, D5 l( D3 f. S$ @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了