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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

2 S. F  Q  Q1 C) A# [) W3 J( Y' x( j0 H% W: [5 x
NX二次开发源码分享: 获取当前Reference Component的通用方法
  V/ t4 G3 e9 e/ B5 ^7 Z4 ]# Y- [* W" K0 t

  r5 d  y: ~* G! n1 K/ o& R4 T" [0 T- x

9 y& B$ _9 @7 D7 l- _5 A7 O9 M. S& p$ E8 R1 y
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
0 N6 c$ n2 u2 e{
* u4 w. o8 {' t% ?# k( A+ E8 m. A8 P6 E) N8 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.
6 b( b& g. x) x4 @3 {# Z& ?8 V    ) H2 U5 I5 h# \9 O
    logical
5 f& n9 q) h6 j  B: t        hasRefAttr = FALSE;
1 v/ E' a3 s9 G$ U
, O9 |3 @$ |- }    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);6 l. B: q6 U& q; s
  p0 l# q' \$ E6 n
    if(hasRefAttr == TRUE)  [4 w* \; }2 d; U) c: \$ Z6 i/ Y
    {% N% f+ D4 B7 X3 T5 I% j- q
        return TRUE;" n7 i. l7 f$ n" [
    }, w; j+ P5 {# t) k3 ~" {4 C7 o) C

4 A' i. H3 @! o7 _$ L    return FALSE;' c! m4 G6 O4 `- C. F: r8 Q

* u" x9 q# E5 h2 h3 R}
& Y) E# h$ }. F* d% X" |! N9 u  d/ O. h+ w& @" v1 f
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)9 d% L2 p' x6 X/ k
{* \8 a; G1 i; W& f( N
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));" L& ?* |( h( @# w" U
    return (object);
7 @5 E3 G8 T  M& ^+ @* L7 E6 @}2 D2 b' K. ]) G  s4 ?
" U! _9 r3 l) ^
static void do_it(void)
/ x* n7 L* v5 D$ e# Z* b{
1 g* }' V8 {# d9 ?3 t    // Assumes that the display part is the top of the assembly% s1 x1 n" _- [* X' U/ ?
8 Z6 L. R1 j, d* C
    tag_t
, c* ?! J: c, w* r: y8 z        dispPart = UF_PART_ask_display_part();, \& {7 ^4 V& b+ M0 ?3 R1 ]
, J1 q4 v0 x5 p7 X" v8 T  i" q# ]2 [: Z
    if(NULL_TAG == dispPart)
  r# _) [4 w% e" Y* K3 @5 w    {
5 Z3 W  L3 o( W9 x) x& l2 o        ECHO("Program requires an active displayed part");
3 v! E" J  ]$ k3 c) M* J        return;
% M4 R: [, Q% m    }, f: s' O# ?6 e( M7 x
, G8 E8 b/ j4 ~  A" \; S4 F% D  `
    tag_t2 C* f0 O# t" ]4 z6 ?' P$ @* P2 J7 p
        compTag = NULL_TAG;
0 N' j7 N9 X% V  O" r) Z* Z* z: d. n7 l9 p
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
8 s+ a& z. N4 B) q4 \; f) T    {0 |6 B' \  h0 T; @% [
        char/ o& V+ J5 s" M4 r% j" Q# q
            msg[512] = {""},7 q! K+ Q& n8 ~
            fSpec[256] = {""};; T8 X" H% p/ U- b

$ N# d4 h: _0 w3 l) `; a            tag_t
0 S5 T$ y0 w" Q" u                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);* G. D- e1 ^+ h) R
% _4 s$ l) M' ]# I, K1 |! g
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
( {0 `9 n, J5 Z4 ?" {1 m$ G  D3 s6 n0 K% |
            // uncomment to see all component names:
( [1 |) A1 h6 m: @) k' h            //sprintf(msg, "Component Part: %s\n", fSpec);
- D4 m8 r) k- d( e            //ECHO(msg);. C4 t/ P( a* G4 C

) O7 }, H; J' X9 O# B* G: S+ p3 ~            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
* c/ F% w1 E8 x            if (attribute_exists(*theComponent, RO)). w/ q3 H, ]" j
            {' F$ w; r7 R$ F1 |2 c& P+ @
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
: S1 h: e5 L0 J1 Y, K; Z+ x8 M                ECHO(msg);
  V: V' e, x5 s& d2 y            }
4 Y; J- U" E8 q; c6 I" A% l    }
8 j- K$ @4 I+ K* A2 o& c, b}[/mw_shl_code]8 F) L7 `: d' @) J, }! y" w" A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了