PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x
& z1 g5 d! r' [! l
; {! q+ r( F0 m9 X7 O: c" I
NX二次开发源码分享: 获取当前Reference Component的通用方法
7 h9 R2 K( c5 Y; m7 C
$ B6 v: U% B+ n+ t& X9 V$ k
: e2 z" S$ e; o$ V, B, I5 r  j* d: \2 {1 T6 O& q% a4 e% V6 |2 t' B0 _- j7 `

: h3 ~6 i5 Q# D% I
/ T- l& G) q7 Q/ l: J! a2 p[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title). m1 H/ k/ a4 Y  S
{" v4 i2 x% n! J, Y5 \1 }
( H9 V5 ~' ~+ @5 [3 k/ H
//  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.$ S, y3 q+ f  z& U4 h$ q- _
   
5 U: L: u1 e1 o. o    logical% \2 H% X2 I3 z, e- Z9 B) k5 b8 [8 c
        hasRefAttr = FALSE;. B1 o$ w, n" y  G1 ?/ Q- Z. h
% g' V" ^( s2 {% [# O8 k4 l4 {
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
8 t0 }) a/ Z2 e& `  T/ {/ L0 }( S+ u! a
    if(hasRefAttr == TRUE)2 K1 f# f% M1 k$ `2 r
    {
* S7 J/ J/ r9 W( u5 b8 @        return TRUE;
: m% f% J# b% X3 k, t$ k$ s( R    }
) V3 w! z% o9 [
6 ?# O' v; R! g2 a: e0 ?5 j- \4 \( w    return FALSE;
! e4 d( [# n/ r4 s4 \& Y; \/ J6 m' L( O3 i5 D5 E
}
, I6 F+ i! D( h& d
, G% Z! M  X0 r2 Hstatic tag_t ask_next_of_type(tag_t part, int type, tag_t object)
  Q: v# O+ [' t5 n5 [{; X# o) H3 H5 @
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
) @% a1 n! y# U+ w! ]6 T! a    return (object);
" ~4 W/ D9 p+ t. }' g, ]# T, y}
  k) v) e( v9 o: H/ \8 y* |
* q/ O" C3 f. Mstatic void do_it(void)
9 k/ p3 \6 E9 D7 R{
! v  F' e7 L$ I4 E+ H3 w    // Assumes that the display part is the top of the assembly$ `/ b: Y2 h3 Q* b/ g. b; z1 c/ P
2 _" Y* U5 M* q7 @8 C0 ~- I: c( Z
    tag_t$ l( c+ s3 f: w4 F) a, B
        dispPart = UF_PART_ask_display_part();% `& K% Q0 d  C5 l+ }& {9 _# G- f( Y
: A( t/ l6 u9 H/ e+ d2 [$ Y
    if(NULL_TAG == dispPart) : _0 |  S# X. Z6 d) L$ B! }5 ]4 K
    {% B( K3 n1 j# B! y5 C
        ECHO("Program requires an active displayed part");+ c9 _, Y+ I2 l
        return;  v. Z! @$ L: O) t2 k
    }2 Z/ z* M1 Y5 F7 H! K7 a( _+ G

( Z8 N9 o3 q: v    tag_t
! n5 i  q" N0 [        compTag = NULL_TAG;5 Y9 T5 i& E; r& c; ]6 W. N% D/ L
  B9 }) l6 _" C( |4 i, i8 p: Q
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)+ A; {" U' a6 i/ x* \" B
    {6 m. e2 R( F8 G5 S
        char0 U  s: A2 K- k: y1 o& D/ ?
            msg[512] = {""},9 r& H% e  g4 ?: Y
            fSpec[256] = {""};7 K9 z0 c7 O$ `) ~: Z
9 U$ j8 P5 p5 L- F! `7 b
            tag_t
& K( ?. y1 t. p1 K% q                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
4 o' x2 _( t  d% w/ V' t8 F# Q7 t; h- I
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));- ~7 H0 a2 n2 ?
. G# ^% |/ U# G# Z
            // uncomment to see all component names:) Q7 ]5 H; r. ]3 c7 z  Q
            //sprintf(msg, "Component Part: %s\n", fSpec);
" G+ q. c' _6 `& l$ W            //ECHO(msg);* U5 B' O$ `' e8 F0 ~* y( N7 a8 R

- }" ?5 Y7 W- B6 T            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
" R. W5 r4 y# d; u: W) `9 j5 L6 G            if (attribute_exists(*theComponent, RO))
8 R6 q) r% S, [# z  U  `            {4 N" E/ j  E2 m: z2 P. Q, p3 d
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
4 O2 A/ g8 Z, {+ a7 N                ECHO(msg);
- k7 [  `: C% Q1 A# H            }. }4 d2 R% j" J* m4 _
    }
& ?4 J. _% f- h# n' U0 w}[/mw_shl_code]# I/ l1 q4 Z  d/ C0 v' A5 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二次开发专题模块培训报名开始啦

    我知道了