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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

- l" N; v. E; x* |$ Z1 |
; D# e4 c; {  G3 E$ T* P$ C+ v) nNX二次开发源码分享: 获取当前Reference Component的通用方法
2 [: B; @9 @. C0 l- j+ C" N- R

8 z9 |6 ]* J  s. Q5 Y" c; \# X& q( i+ x( N' l9 i1 ~/ q

1 {2 p' }/ J7 U5 F' B' \
, J# x) [5 T3 }" a6 W$ d; b& y' F[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)5 f( l# K7 Y# b0 f
{6 m# E9 s6 T( ~. _2 n# L

2 g$ n  o- H8 u/ }& M  z//  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.
6 S" T" |8 A7 B# ^    ; N0 w4 q$ V9 A' i' b
    logical
+ d8 }& V3 t9 C: p' C        hasRefAttr = FALSE;
- a+ R1 q/ |2 o: P1 P
9 ]$ e1 Q/ M# @/ h    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
$ E% g; t9 Z  X' ?  L2 v0 D8 [: d# A9 C  ?( O# P' L8 B8 L1 ~
    if(hasRefAttr == TRUE)  F9 Z$ H& m. Z7 f/ `, D6 ^. d
    {+ k% Z5 b+ {) t1 A1 i
        return TRUE;0 K4 ^% g. a0 m5 s1 ?) L# P
    }1 L& h* ]& {& p: Q' H6 B

  z/ D/ \' I, I7 E$ p, v/ A    return FALSE;
' b+ J/ V: W* {$ ?) f7 T
8 T& ]( d/ f, @* b3 q}
- Y6 {9 T( g0 A" I; e) Z3 n1 Y% L7 U( Q+ ]( o
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)' a, \" e1 ?$ v# y1 R0 Y1 H* J
{
! L( O0 p& m0 a5 B    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));# j  `+ D/ b' B" Q9 l6 b8 u, }
    return (object);
4 K# K' O  T& @: L5 B, `( k}
4 h9 ~+ k! z5 T' B+ V1 B; ]3 W, W) w6 n
static void do_it(void)
5 X5 b1 W$ }" k2 p{
% c: F# t4 p4 q8 w" ~    // Assumes that the display part is the top of the assembly/ ]3 U7 `% K5 k
2 s, f" `* R: }: D% x
    tag_t1 K0 Z% V/ O% h
        dispPart = UF_PART_ask_display_part();- T2 W  M/ ~; g# L4 H3 t8 w

( q6 O0 m( u/ q5 B# D0 G  j& O    if(NULL_TAG == dispPart) ! z9 ~" F" S- X$ Z4 e& s
    {  j+ u, w8 g: _+ q' _" X  Y8 a9 a+ U
        ECHO("Program requires an active displayed part");1 h" n8 C) B2 Y: t2 M6 p/ z. u
        return;
7 _6 g4 i3 B4 V4 n    }) l" _' V5 E$ x. \3 C+ v# G9 }9 O
3 C( I1 d4 i( E8 \/ a9 d
    tag_t
7 P2 g, R' d+ I  d1 x        compTag = NULL_TAG;! f/ [0 w. V7 W9 l' c
9 m1 u& x# e# {) U, ]
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
. K: r) b& w1 R* K( _    {, [+ d9 b$ l4 r7 {" c
        char
7 g! }7 ?* M7 O9 @            msg[512] = {""},: c7 {( M; J9 c5 m. d
            fSpec[256] = {""};
1 E; G2 m7 K; d3 V" ^  h+ I1 r, W' S# \* g! O; ]
            tag_t
0 B/ \* j- O1 ?                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);, m6 h/ J( T( I7 F

3 u' O  k1 M# A8 K! V# e            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));) D( U, o9 s( e( s6 B6 Y3 L8 D
% ?1 [5 c: m& R, |
            // uncomment to see all component names:- }) }( A1 _7 Y
            //sprintf(msg, "Component Part: %s\n", fSpec);* X2 {5 E5 p' K9 L
            //ECHO(msg);  p% ?/ k, R- r+ ~& a/ o* I
1 P/ T2 {( i  x# @( y+ d1 b) y
            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
5 p$ V: l1 J! P, B# I% H            if (attribute_exists(*theComponent, RO))5 G) r2 p6 D. C8 f7 C
            {0 g/ l. G9 `& A) k& ~% ~* C
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
- {- P( p6 l, ~$ o* h2 r( T                ECHO(msg);6 c. G0 k6 I' o) x: k* N
            }5 r1 Y; r# A, `2 s% j( w
    }. C3 v+ k8 S- F' w$ }4 K
}[/mw_shl_code]4 L6 r* \- p* f
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了