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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

) x$ y* h3 C! R1 P! ~
  |* E/ a! O& F, MNX二次开发源码分享: 获取当前Reference Component的通用方法% ]1 {" O9 C2 d% b

1 m. Z! m& a6 u( A0 M1 l( d+ K2 Y& _9 s. b) C1 N
: Q; E0 s3 ^- x6 w5 T
4 h3 h4 k+ c& n0 n+ \+ ~4 ~
9 a3 g  r. `! T% f& i8 D  i: ?
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)2 p1 E' G/ }8 E. V
{
! P( i& {9 ]3 _, y6 {8 f
5 q! k; N* J6 z5 p1 A1 A! s//  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 c$ Y% e3 ?' L! j; o
    % @) [' R' t& [, G0 \7 E% j
    logical
3 K/ Z1 L% ~, L) K6 c9 {9 }        hasRefAttr = FALSE;
& L" ~; p4 ~2 h3 z
# r* s0 \" l  ?# m/ H! F    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);& Q( j. F* O- Q& t9 \# Q3 [
# X. C$ f$ x: g1 @: ^1 G
    if(hasRefAttr == TRUE)
/ l0 h6 W2 Y: z( x; F    {: |% K; d1 [8 H8 J- [. {
        return TRUE;
( G, _. W) s1 n& r1 C: R    }
! P+ c) O# U+ F& c
* P3 w( W+ o, W9 Z, ~! {    return FALSE;  D0 }" J+ C0 t2 t( N3 I1 I" H! o; W

/ s: v5 R( C' n" l; k}
4 Z" p, t' d) Q0 C5 e7 k9 e( [" G1 w/ [2 V/ n3 `
static tag_t ask_next_of_type(tag_t part, int type, tag_t object): @* ~: T7 X- ~. s0 p
{' Q6 u& F' t! e. L
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
, q: k, s6 C; {0 i1 B! `' d( j' ]    return (object);
. |$ @6 ^+ L$ ?, ^}
+ I; T7 W6 f0 d( Q& j7 g$ W! t
static void do_it(void)
$ ?2 P  C- {" P5 Z2 P4 ?- s{% [+ x% u3 r- x; ]" R- g4 y  |2 e
    // Assumes that the display part is the top of the assembly
: Q5 o" t; u4 @* X: g  J6 R2 i$ c$ m, f6 l( ^+ w  c2 b
    tag_t
& ~- y* n1 l1 x2 n% E5 O; X        dispPart = UF_PART_ask_display_part();8 y: L$ K' Q' t0 }3 A1 }
4 W5 d, k4 |- q' Z+ }) c
    if(NULL_TAG == dispPart)
# x" J# `. w! r: x    {  i$ I& W0 R; b' Y  F
        ECHO("Program requires an active displayed part");
- e# ~- s# ]* O2 o: P! u: F        return;
& z9 l! Y4 k, Z  p$ @9 b8 U    }* q+ z. }2 t& I+ `. l& T
, z: J8 {6 N3 T: b
    tag_t
5 _7 }' q! Z+ _. |        compTag = NULL_TAG;5 j  }' d7 b9 Q5 [6 H
8 X( A" ], C2 N" Z+ c
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)7 v* d' o9 D7 A# `' k, Y
    {8 _1 n4 k1 C) Z! O$ i7 q
        char5 J$ H% h# w1 ?) t' Q+ j
            msg[512] = {""},) I* K+ s( T5 m6 L  \: A
            fSpec[256] = {""};% D" b; ]% c3 H8 d" v$ U: o; S
1 J+ A: v+ l% R+ p
            tag_t
% g8 T( A# q2 J4 e                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);( y3 R( H2 \/ M* m$ P
5 q% |6 ?% f3 m* b: F- _6 d
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));0 h/ `! z7 t" {

. x- S3 c% I+ P: N" U            // uncomment to see all component names:
. p" w. k/ h' e5 b  U            //sprintf(msg, "Component Part: %s\n", fSpec);
$ `& t# U( Z2 |            //ECHO(msg);
6 {0 B% i' ?5 F6 `& o# x% i+ u$ V5 }& F) E: b
            Component *theComponent = (Component *)NXObjectManager::Get(compTag);& E! O1 A( R* B
            if (attribute_exists(*theComponent, RO)). }2 `9 x  |  ?* M- D( ^) Y4 _
            {) F; T( ~7 q% L
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);! ]" P; z8 Y: q, i: v! e8 ]
                ECHO(msg);5 i- Z+ P/ G5 d6 Y. q' y+ I6 a
            }& R9 b/ _' ?2 z0 _
    }7 [* t+ |1 }2 b! [3 Q
}[/mw_shl_code]
0 ^( s9 s; e6 ?' g9 v, ^# d7 y5 D
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了