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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x
7 ?  G& a/ z1 R4 U( i$ a
2 L" y' e/ v0 w# w( l
NX二次开发源码分享: 获取当前Reference Component的通用方法
7 a2 N. a) x9 a- q$ ^5 e0 q
8 E9 d9 E+ p' n3 _# }6 ?6 p$ L; M# \0 [( G8 g& w+ y% C6 [

# d; L8 V( E% w$ ], i6 N
: b1 i- E& F- {) P6 t& b6 h2 C  x  E- f, O
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
0 P5 I! P" c0 p/ t; i{: a4 |' u1 g/ H9 c
8 E; Y; Y; O6 M* `4 O
//  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.' Q& l/ S5 C7 n2 P8 c
    ; x; U: L) o$ O" t/ T9 j
    logical
$ |% r+ y+ u- G% Z/ [        hasRefAttr = FALSE;+ H( Q: s: d# o
. {( a: w) z# \: h
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);* E+ C$ l) e' V/ x7 ^5 d

4 C, j, A. A! X* Y    if(hasRefAttr == TRUE)
2 m. e* ~5 G8 }$ o2 Y/ j* j1 M& ^    {
* y# v5 `/ H/ F6 g$ Y* E. n        return TRUE;2 f/ X' i. o. w6 ~- `& D* K
    }
. T: u/ g: q2 r1 P/ I$ ?
$ W* W5 y# w' C' o6 L/ p    return FALSE;
; k  a9 V9 F* ~  {- o& u$ R" m4 z& k7 S3 \; `6 p: [
}* b9 H! j" N* ^
$ i4 w( Q$ u- Q% s; g, ^8 j
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)
. B# X: f, L- ]8 W6 ?9 A{- W/ l6 |% U1 Y
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
* G+ j# y/ E% e: P, ^- f* O    return (object);5 |! W+ D" D. f: g
}
2 @0 K" d& C  ]( p: f5 I3 l9 a7 N2 h# n6 ^
static void do_it(void)( o/ f" \* H. o8 A! b7 ^1 }
{
0 {$ z* o  T( Q5 a7 L8 `) ]    // Assumes that the display part is the top of the assembly5 b* u6 G8 q$ c  `/ p# c- E5 B

; f2 U+ L/ o  a8 m. B( N    tag_t+ O7 _( ?6 Y3 e% l1 d, S2 E
        dispPart = UF_PART_ask_display_part();; n: p6 p+ S+ r3 O% r) S

9 F# l- B& q3 g    if(NULL_TAG == dispPart) 2 @. i9 I% s) `! P; E) Z) ?2 P
    {
9 ~+ `* n0 l! y# }* n        ECHO("Program requires an active displayed part");  _& J, b+ M# K
        return;
  W7 d6 m  k( A- r: i. V1 u    }
4 ^: Q4 e$ p! |9 i) k" x9 ]6 l( C/ _. x
    tag_t8 y- X0 ^1 u8 S6 k  Q1 a* w! g
        compTag = NULL_TAG;
+ q0 w7 L4 _( F) D  E) v. ?6 i: e
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
- f9 L/ B' `2 q    {
! Z. D2 ?- D: F  F$ D8 ^! L0 _        char: e6 t- {% I: f( n$ d2 s! I6 m
            msg[512] = {""},
! x8 P2 Y% G4 @! S2 x5 o            fSpec[256] = {""};0 W# z( B& h* s7 R" C

' J, O4 h3 o' X0 [' v) p            tag_t
( [- H) E! Y8 [+ ^* b                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
9 K( V: m: Z9 j
' v0 Y( }2 ]# u# C& A) }# Q" N            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
3 B0 s  A; b) K( N6 k* Z2 `+ g3 T8 S) B; M2 A3 _; b3 f- u
            // uncomment to see all component names:
0 r, y0 G+ z8 w0 P  P, m4 c+ B            //sprintf(msg, "Component Part: %s\n", fSpec);7 a; Y7 l0 k$ Y0 s: ]  `3 N
            //ECHO(msg);
: i8 k4 T1 X8 o# U. i6 L
) F1 y1 y  k% a8 S% B            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
% |: I3 D/ R; w2 K6 G" m3 d            if (attribute_exists(*theComponent, RO))4 D" s! T* A- @2 v$ L
            {. h3 O6 u3 D2 q/ x6 `, A
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
# h" [. G# i, J- N4 C& G# D6 C( |5 @                ECHO(msg);( E8 @: W$ d1 O: j# R7 n
            }
1 E- d, a! l; s+ f4 u) B    }
7 v  ~9 q. P$ \% V5 o}[/mw_shl_code]
2 q2 T) D+ W. X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了