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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

5 e: V0 @6 f! y! ^3 m/ f* ?* V: _+ k: s, F
NX二次开发源码分享: 获取当前Reference Component的通用方法
: N; _  v5 Z7 j! ?9 x3 q; y; f2 Y1 t' T# _8 Z) d# r3 v

! Q" \" g7 _! [- }: P7 G( H0 d0 A" r! P- @, J
% h0 Q/ U% Z" C) {9 C" U

: V4 m* \! G! _4 r4 k5 ~" x3 ]( b[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)/ }2 j) }' t/ m3 U/ B2 Q7 \
{2 x1 g7 q7 [7 i7 ~  w) w1 E
( f1 _) _0 c5 j. N: ^5 p. a8 W& v  l
//  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.4 e+ X9 ~9 x: s0 i6 q
   
8 n9 U  ~0 S# H: B4 @- ^1 y    logical
+ t- @! g2 Q, g1 W8 W% u' @        hasRefAttr = FALSE;
) r& @7 p7 j  f
, e+ x, z8 p4 M3 I7 |    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);" e/ a7 r7 N4 w0 r) a% o
+ m$ `$ i; W9 w+ f" i
    if(hasRefAttr == TRUE)6 `: |; m* n# o3 H; A/ q
    {' q8 E/ W7 F6 r" R
        return TRUE;
) I0 K5 g* {, j4 _+ i( B! W/ O  U    }) F* o7 y' L+ }1 n0 C
* L( M1 V6 a; l. |3 H. _
    return FALSE;! S0 w. P6 C) A, Z" c& \

/ o) G% B- f8 o' w& j) v0 j}
2 w; S7 p  M  S: H; t( }& M) d+ v" s* w2 {( M
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)
' }( v  n) _2 [9 `) @{& |# e) U$ o  ^! g. i6 I
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));0 \- P. n$ @( h* a3 P4 `
    return (object);
/ S9 I5 V0 e7 ?5 X; i! d}  M6 B1 R! @- ?; q
3 v" i2 z6 c8 V8 T4 b* g
static void do_it(void)9 E% g. _6 n6 }1 W$ _6 \
{
( }/ H; L$ S, K, c- }& T    // Assumes that the display part is the top of the assembly
( A3 B3 k" T6 d# G0 T; O9 i
( c4 \6 b/ O/ ^7 m8 W    tag_t
  E/ L9 _* ^2 l3 M' q) F3 t        dispPart = UF_PART_ask_display_part();
$ g2 O  r5 N% J; D% h8 P
# L0 @' d; h  O6 L  A! L" |    if(NULL_TAG == dispPart)
* k" ]/ E- B6 p/ ~! i0 j    {# Q# A3 @! @. w* z( h! Q
        ECHO("Program requires an active displayed part");
+ p' L) ~5 W0 {, B) J& N        return;
& e4 k. ?: B% E9 g' }    }0 `' `# o% H* R! H" m2 X) c

6 Q- V# Y. x. t5 m    tag_t& k' k9 E6 z2 n$ c
        compTag = NULL_TAG;
) c- Y' I- X3 K6 j  L9 C7 P& t
* K1 e4 ?" A/ v% S/ S    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
9 a3 M( a4 C7 M! [# `9 x9 v# h" f1 \) {    {
0 a1 G7 i7 n2 n        char
+ ?! t' M" F5 I6 h) [! j            msg[512] = {""},
0 R/ U: L7 U% h/ H8 S            fSpec[256] = {""};
, w0 B1 ^0 v# f/ L+ @! S: G% ~- @/ U& F2 l" m0 G% @! U( y3 b; E
            tag_t
0 C( c# C3 y+ k                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);, N2 k! {* E: t. b

4 h# \: b6 W! h            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));( C5 a0 i7 u: U
% U7 s; q6 ?. O2 E; q; @% S
            // uncomment to see all component names:
5 f3 H2 [; G3 c            //sprintf(msg, "Component Part: %s\n", fSpec);
! M! x) R- \8 W. }$ z$ L9 W            //ECHO(msg);
  L1 a9 h) Y/ U" Q* c1 X1 `& z/ u* r2 C0 C
            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
/ P6 ^' q$ l& C) _, O" B2 I- K            if (attribute_exists(*theComponent, RO)): r6 P0 ~! Y; ]* j( [$ n  X; I; z
            {7 V) l) ^0 I6 @$ a) R
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
" L' {4 D( `6 {) x                ECHO(msg);6 @" b( Y; r' i; i# ?1 s
            }
4 W9 h$ M* R7 W! p! w    }; @& |' R# J$ A0 `  R" Z4 b
}[/mw_shl_code]
/ x& O, l! I* ~. z9 |) @+ c
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了