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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x
) @) o* f0 w2 A
8 X% Q  U, P$ j5 c" V. A
NX二次开发源码分享: 获取当前Reference Component的通用方法7 t2 A8 X' r) h

# w4 X3 A, t7 ]: f3 c3 c7 }4 V) U% i/ h6 [: q9 l1 b
) R# M: V0 {, v' ^9 k  p! @
- ]1 {/ V/ U! D: C& B* l$ e$ g
) F% y+ \9 b( @% ^( L3 A4 j9 W
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
" U# Z( }6 k; g; R8 Y: L6 A{$ Z3 g) n" Z/ k( G% k0 \0 C
4 J2 x" A& F% K( W, r/ k
//  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 f" Q$ v/ V! {
   
  c9 k5 \3 O" G8 O0 M  @6 d7 p    logical
8 d. |' G% r1 a6 u5 k$ ~' q  }        hasRefAttr = FALSE;  s) f% ^9 d- A0 K9 n& j, c6 e

. o; z1 y) f1 I$ o    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
7 Z4 s( Z: ?8 b' A, @2 k4 B* x5 }2 q6 ]8 O6 v
    if(hasRefAttr == TRUE)
' e1 p+ |7 G/ K7 v  W+ R% u    {: v( b/ m( r5 P3 t6 o: ~7 ~- q
        return TRUE;
, B) _6 ~0 l/ ]( Q6 E    }
* ^; _# P4 f8 V- }$ \2 h* L: ~
. n- p6 |' ^. G  \    return FALSE;$ p; \6 ~  f$ j7 p1 d( k( m/ U6 Q
7 `- C. F% ~3 j& a" A; x1 P
}
8 |% C# U3 @& n3 c& i% n) S8 X! k- m/ e
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)
9 d1 f5 E& ^; ]{
- ?+ {; j3 H) H% Q* i  r; U    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));$ ^! R# e: @9 R: `& A
    return (object);  J* @& `9 g4 a8 K3 h/ U- _
}
, j7 J* }' X: i' G0 U7 P! O6 n! |$ a+ V2 K
static void do_it(void). A. c: \" d' X, Z0 i( K
{5 z) H9 K+ ^' S5 I! G+ O
    // Assumes that the display part is the top of the assembly
) ?4 |$ b/ p5 X" q9 J% \7 X& \) R$ W9 @4 j- y; h- J$ V' m, \
    tag_t& \5 Y) u4 H! Y# n
        dispPart = UF_PART_ask_display_part();" ?! m5 m; f" Q/ U1 I( N8 B
; A3 v# x' F) i8 c7 d
    if(NULL_TAG == dispPart)   o# A7 R' o; i  ~6 B$ k0 J. _3 s
    {
5 |% l9 ~$ ~) x) O        ECHO("Program requires an active displayed part");
- {; T2 i9 Z# \" a( S        return;# U. {& w7 z( \
    }
, K; H, [; y. S; d9 a7 h$ D0 G: P: j( W
    tag_t* L# @6 U0 n/ Z  Y7 w
        compTag = NULL_TAG;
+ ]- B/ F0 m# B( O! ?
9 a- p- I  |- N' v; n    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
1 M& }  y& e7 C. h/ X) l    {
/ L, w: M5 J" L) u5 E: b        char
6 ]; u- ~  v, N6 t8 {9 f            msg[512] = {""},
& V8 x0 g. Y" z4 d$ G' k' A1 W5 e            fSpec[256] = {""};/ B9 R; n4 ?# F5 a: J
* z- ^7 m  q  h
            tag_t
9 M' }1 N8 [8 O" n" _                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
# L% }; N. `; ?8 s# r9 n  U
7 }. V- p) \1 a: S/ F5 ]7 I0 K            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));, K7 F' h/ C% N0 `6 c. w* t/ j
4 Y4 B$ D  Z7 T! y3 O2 L( S
            // uncomment to see all component names:
; z& y* V  h1 j" M) R            //sprintf(msg, "Component Part: %s\n", fSpec);
- k( `+ t1 c, ]            //ECHO(msg);, x# s, S. ]4 m+ }& I

( N% X7 d' k1 ?7 |$ a7 Y8 t' F/ C            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
6 k- F& k. {# t! J! x& t2 q            if (attribute_exists(*theComponent, RO)); Z+ R3 a1 B; p5 a; N( U- z! J
            {5 j" I) x- u' ^% G* J" b6 S
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);8 b& c4 e+ e% {% W4 B
                ECHO(msg);
3 n5 b' ?7 Z6 e$ L0 E            }
8 ~5 [- z1 ]" z+ P2 Q    }# z! E8 b0 `4 m8 ]  q  N1 w$ b
}[/mw_shl_code]. [% y$ n$ c- w( e
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了