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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

* ?( K9 L. S/ m! \& W) a
. s" p2 g0 S8 t7 l; g" HNX二次开发源码分享: 获取当前Reference Component的通用方法
8 S! O% ]: V8 Q, H* A0 A: g3 g3 m4 c- {# `/ R
5 G( h* f6 o6 h

% E; b" t8 m5 N& a' ~: W6 b* l+ h
1 s3 q- `0 X/ |7 [
- U( K% h  V" }& Z% u# z! n7 w  p[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
. U; U+ V( R6 E{9 m4 a6 t, ?% h$ w7 X) b5 h6 G& k
8 G% W8 j; W0 V% u
//  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.5 Y; G/ s' _+ N- N. [0 |; W5 s' {
    ! {4 f4 i- Q, m) _0 q0 ^1 L9 C  N
    logical" k! Y! q) g9 A4 I# @
        hasRefAttr = FALSE;5 P' m+ p0 G6 r5 p7 q

! F' w  }! z9 X& E) n    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
' S9 o9 H: w  `
# n9 y5 A& X5 n    if(hasRefAttr == TRUE)2 Y) u. O- f4 |$ @8 V" l" Q' n
    {
) ?' O) P7 }; Q: j' w        return TRUE;
. F4 z8 J2 e5 M: L2 R1 i# F- r$ ]9 f    }
2 Z: S& h' ~. g' s6 Q7 M! T( ~1 C. F5 S$ C
    return FALSE;+ G+ Z) ]7 X$ W
# n" [$ H$ H  q; f+ N
}5 s7 \# A9 A# H1 ]
7 t! P0 d2 \" C( ~& X  Q
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)
0 K* J/ V+ i- V: E: F{/ Y2 \1 J" n- v& a* s+ N
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));, Y6 F3 k7 M; T* g8 q1 L9 J
    return (object);
! o) H. r' ~, R}
; o0 I/ I( R, `8 t9 U+ O0 W$ n' I. p1 y% W/ S) ]1 t- ?; @4 B
static void do_it(void)
$ I- j7 s1 l; Z; a2 B" B; r$ j{( J/ j; F& I, v" H7 l) U3 c
    // Assumes that the display part is the top of the assembly
& V5 p/ q1 I, i7 A! c: h" {2 R& ^( v! H8 K/ k  x2 F8 q
    tag_t
1 f' Z! D8 G# D! F, o3 X. x        dispPart = UF_PART_ask_display_part();
) y+ [; V) F/ w" X. {/ T0 H
0 S$ d( j" d' |. k    if(NULL_TAG == dispPart) 5 T0 Y# a) t: e8 H, j3 R
    {
2 O/ {' O5 N3 @$ @/ ~6 g        ECHO("Program requires an active displayed part");6 ]" n; `9 W9 j& M4 h8 m
        return;
& S) F: O3 ]6 {1 F, }) t( }- q    }
2 C+ R- e3 g8 B# I: n1 \- q  t* Q$ ?5 R6 n
    tag_t
+ N+ K/ K% J% r) G4 L, z' `" ^        compTag = NULL_TAG;
& a- q- _* o( S5 y, q8 f6 C- _6 \" G( x! c$ D* b
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
1 k+ z6 U8 b! S5 X    {. v" {! Q  W* i, I8 y) A; V
        char
# m( J, D$ F1 c" P6 ?& F7 L* G            msg[512] = {""},
$ U2 T# P  h3 o, _            fSpec[256] = {""};6 Z, S1 M, t$ J' s5 d' j

+ Z+ G0 s4 K* f. p            tag_t
4 {- C. i$ D% u1 J0 X  ]                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
( r0 A) s0 R5 `" R+ F& w. a- P/ L1 _% M' Q  ?3 L$ e: {) b
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
; s# {9 m5 u3 Z6 K; ^+ W  b
+ k" q3 X+ h, a" C( L: r" A            // uncomment to see all component names:+ d& [3 w! T" ~% t5 h$ }* a% e
            //sprintf(msg, "Component Part: %s\n", fSpec);2 q6 g' p8 Q7 ~5 ]# E7 }
            //ECHO(msg);
, b) z  C# Z) Q4 o4 ~
' ?! x4 K5 q2 Q; L6 b/ |            Component *theComponent = (Component *)NXObjectManager::Get(compTag);, A6 c( S( O( ]: [9 k
            if (attribute_exists(*theComponent, RO))
/ i* {. B" Q& Y" N" _% A5 [; D            {
2 b3 L) {3 X% _9 N1 u6 m                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);+ S. ^5 r; Y/ {( V; b: ~! @+ s
                ECHO(msg);
: X% Q, P( d, B            }/ D( g, c/ `8 R; {9 E' G; ^5 L
    }. Z9 `% T: z* e: D3 i7 u3 Z
}[/mw_shl_code]
5 z9 B  @/ F7 J6 G6 F8 r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了