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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82168
QQ
发表于 2018-1-10 17:48:41 | 显示全部楼层 |阅读模式

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

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

x

1 b5 s) `+ d% i3 [' U. R: `* V1 h  f2 ^
NX二次开发源码分享: 获取当前Reference Component的通用方法* H8 x- Y, F% b6 R
; q" `8 i! Y, s1 X
4 n* e5 d# b3 w  [: N/ v- H& c
- G( T" o& p) K4 p2 {1 }$ b

- T# |# f& ^) ?$ w4 ^" h5 ~- b  y) }" u3 n" |4 A
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
4 v! C5 o2 v) B" B3 D4 Y" V! o: S{
8 t; P- B: ~# Q# V5 G( u! U' I4 u/ |* B* b. V7 x& F
//  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.
2 i. p9 q6 S0 `9 b5 ~   
, v! \8 L* J' a/ T0 Q9 S    logical
" g. P* n" J6 m        hasRefAttr = FALSE;; I3 h, w1 D- X" T
% U$ ^8 S+ x0 A9 |( Q
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);/ B4 ]# L" s% c& _
8 x( _/ i6 l8 U! w
    if(hasRefAttr == TRUE)# o0 |$ c* p+ \& j1 d, q: P* B
    {1 y+ e5 d# J: D2 [4 b; P- r) b  V
        return TRUE;/ Q+ {" t; F! Y" I1 r# {9 B
    }0 a6 A8 O8 y2 L9 Y! o+ j

7 N% L# r- W5 Z+ C4 N$ [    return FALSE;
( H4 b7 e" g! |4 P- j. p
0 r+ [. s. C5 H0 Q$ \}6 g; r- \( m5 m0 i2 V

# y* C, S7 M# a: nstatic tag_t ask_next_of_type(tag_t part, int type, tag_t object)
  u$ F% I5 j( e{2 _7 u2 u, h  ^5 B# J
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));, H2 Q  d+ d& p( J  U; m; l
    return (object);
  z9 ~/ m8 ]2 t2 ?}
( b- T) p  H. p- `- s: A9 T" i- U3 K* F) \% y
static void do_it(void)
8 e$ |) U  z  P% n# n; ?{! R. K, o$ I' g0 j" s3 O3 l" G
    // Assumes that the display part is the top of the assembly
; ]& Z$ ?" N1 U& m1 n1 z9 O% l. [" m4 z3 |* ~
    tag_t
, I3 O/ ]3 h: O4 u7 b2 P5 x; a        dispPart = UF_PART_ask_display_part();
; a3 _1 C3 Q; w/ Z. g, U
% Z  c. m9 s7 _    if(NULL_TAG == dispPart) $ ?0 x% Y* |" G5 t+ p
    {( l  n' J, V4 }1 L
        ECHO("Program requires an active displayed part");
" n3 g0 J1 n! @3 Z- z        return;2 x, T5 U: d+ w* f" v
    }
9 `- i0 ^8 U! i4 c. g
! J/ e# M( w/ a    tag_t$ X( b1 y1 h# E7 Q  M
        compTag = NULL_TAG;
! {( }& a% L9 \2 }: B) k( P  ?! x7 \. v5 g
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)$ e" C& N' h  c! A! u* f
    {
5 Y8 Y( p: T9 Y1 }+ O7 `        char" V1 x2 T2 m3 M9 h/ ?
            msg[512] = {""},
& \$ |+ v5 a( [( _; Z0 u9 C            fSpec[256] = {""};$ E7 m2 _! e* i

/ w3 |: d0 f0 y$ d1 n! l( l; `            tag_t% U# ?: s5 ^% H) y
                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);3 Y1 _. `( M: b: A4 X5 i

, K1 m9 b2 Y, b/ P            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));4 X# }' k+ Q+ \$ w. d

  O8 W2 \; R: X% U3 K1 x            // uncomment to see all component names:: v. E+ S$ C0 j: E8 J7 q1 {
            //sprintf(msg, "Component Part: %s\n", fSpec);8 C4 B, `% v& ~  x! K( |9 Q
            //ECHO(msg);' h  f* B* ^' e5 h1 _! F- @

; x0 s! S/ n& r( p, |4 z% y            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
5 v0 w& P5 n. n; H* ~; ~. Y            if (attribute_exists(*theComponent, RO)), R# a+ b& S# h# I2 z
            {
0 `0 B6 w+ C) B! E                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
8 C' o$ T2 e/ m( ]. T& E$ e                ECHO(msg);
3 w/ |$ ^8 A. O7 G  p+ Z) R            }9 m" a, a* d. G: l1 o- b( |1 E
    }
$ R6 \8 q) g7 B' J! ?& q}[/mw_shl_code]6 H  a0 C6 I- M) [6 l8 Q9 _
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了