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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

9 H5 x# O- }1 k, ]3 d: i" Z2 o) h
8 P( l3 F( ]% o5 [0 }0 P7 {( s& |$ UNX二次开发源码分享: 获取当前Reference Component的通用方法* l! J9 @' c) _. W5 g5 y2 q% r
; T& w5 G3 U5 x& i0 Y" f

. C2 T7 ^3 N8 ~+ G1 Z: T
* G. o  K5 f5 [1 K4 C
! r: ?4 c- _% k1 Y$ Y9 ?3 d1 w: G& w3 Q& |; f$ A4 \' A& I
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
; s3 [) O/ t" L6 f{8 c. v$ [4 K: E8 A% E

; E0 i2 [* }8 K; t, 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.
8 ~+ u+ ^" m9 B   
/ G' }) k; Q/ }7 }3 y1 H    logical
& O: e+ o3 l! x0 p" \! p% p+ ~/ L% S        hasRefAttr = FALSE;0 d1 m: a8 H1 ^4 f- @3 g4 h
; T$ I7 O0 v+ ^) @8 V
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
+ W" {: E- P5 F+ S- R6 A
9 M6 X- J' M% u    if(hasRefAttr == TRUE)
$ M2 _9 x4 S4 E1 B    {
, z/ z8 T6 u0 T0 S( ^( f* q        return TRUE;
# z% y0 v$ ~) S) K8 S* i    }
& @* r) h$ e, e; r2 \
9 N" ~- d9 O8 R! r; z/ V; t8 [    return FALSE;* M2 p- B; V+ `' q& T% v- R
3 [, Q* S; R9 ~
}& d- w8 b  I: v: a8 Q9 h
* B- r( K- g5 j% x
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)' i& g$ O. @. Q' a' n- C
{1 B- j: ^/ T+ u: H9 R
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
! M7 s) r5 U7 t3 ?% Q    return (object);
" f1 v' ]9 x. t8 h}2 v4 E/ K1 Q0 U: c

" a" {8 ~5 N5 p) h# ustatic void do_it(void)$ n& r9 t9 n( U0 _: T' d7 l2 P
{
4 _1 q( [# ?; y1 O+ t5 ~    // Assumes that the display part is the top of the assembly% a% d( n8 w7 G5 D
0 S6 r, T) w2 [1 K1 f4 F
    tag_t
1 w7 m3 b: x3 s) |' _% S& `& M/ y        dispPart = UF_PART_ask_display_part();
( F  E9 T9 F9 v& X* G+ u
- @5 x4 a# [6 B* r9 S% ~0 J    if(NULL_TAG == dispPart)
8 I2 d- Z" g1 w3 l* S    {( ~' T3 E9 |+ o' i  K' r# T
        ECHO("Program requires an active displayed part");
# J8 x- s" U! q2 o; n2 ~! H        return;
8 N# J, k+ v. ^! O    }
) x% v* |3 h* n2 _
) G8 q: t& H: `$ j    tag_t  @! J! \0 N. y2 d" ~9 X
        compTag = NULL_TAG;
0 l) W& ]7 ]& d
9 e9 f; L6 a6 s3 ]    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
2 S3 c* R, ]- N/ T# C    {: n/ |% t& X+ Z  [
        char$ Z; U; K. c- ]( A; ?. ]
            msg[512] = {""},7 R" I' ]+ h  L" K& m
            fSpec[256] = {""};
- e' w4 u+ i* X. ^0 T+ V( m5 s; x5 d! W$ j7 @
            tag_t% J& ]) y; i2 r! F# F6 W& X8 i
                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
; c! r, W. T2 {' T) z  F  c# X2 C! k4 Z" K
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
. i+ O5 l, \; B3 i( H5 N( x0 _$ h+ T5 u+ j5 U  P/ {
            // uncomment to see all component names:
+ w; M2 I; d! i% Y            //sprintf(msg, "Component Part: %s\n", fSpec);
- J# A, v5 S' T            //ECHO(msg);0 n& z; g! I+ A: X! [6 ^' c

8 J  R( _0 Z7 m            Component *theComponent = (Component *)NXObjectManager::Get(compTag);! A5 u$ B3 s5 E; y; j; l
            if (attribute_exists(*theComponent, RO))' Q9 G  S) M$ _, e8 M% u
            {
- Z4 F8 [; l& e5 x/ z: O8 g                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
0 S" U4 u1 M, u5 g5 D6 f                ECHO(msg);
! w! Q$ ?* B( E% u7 s- u            }/ Q+ p. M3 f0 [4 T+ ?! _7 x
    }
, @; [& j  {0 `}[/mw_shl_code]4 Z! d: {0 w% f, l& 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二次开发专题模块培训报名开始啦

    我知道了