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

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x
$ ]& l/ W! z' o
) U$ F5 P& x- o  P0 e1 C% s  [
NX二次开发源码分享: 获取当前Reference Component的通用方法
9 M4 O8 `* F" R: H
+ |2 q7 x$ K* D4 P& {7 T" u. D5 H
, T  Z8 T( o; i. Z4 E8 v5 f+ B

, p" o* `0 _7 F) O% P4 r# R4 D1 Q* s! W( e# I# k& G
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
$ N/ v, Z# E. c. c{
( w% I, {' ~1 B2 z; I# D' r% [9 O5 P( v- c2 B) i4 ~! ~7 @$ h& D' Z
//  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.& ~% r4 b5 O% I( I
    7 X; c3 h5 Y8 D& u2 V: t
    logical
' U0 n0 V: @1 }7 N) l+ S8 K        hasRefAttr = FALSE;
) [3 a$ m0 j* o; i2 C( W# T; w+ c
( {+ C: l0 V9 Z3 w. e" h! j  q    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
0 {2 v" S6 o+ x+ ]4 {" Y: }5 Q+ ~$ o, \0 b9 g
    if(hasRefAttr == TRUE)
, J0 I: v0 V& [7 e' D* [    {& E8 n! q) ]8 ]9 z
        return TRUE;
5 P; j" K$ K. X( r$ t    }; P. M5 ]2 a/ G0 s) D+ p
7 E! `. S4 m: ^1 S
    return FALSE;5 l# }7 Q& W; y
& G$ F- m2 {8 B% U* K
}
9 X) X7 E+ r+ I9 W; T2 t: x0 w& Y4 i$ ]: \5 p: U7 _2 ]& q
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)
. H! V+ w1 a' ]3 m{$ K4 G  k4 w- X. X1 D# k) E5 P
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));. a% N, Y- @+ d0 o6 ~8 }
    return (object);' Y+ D+ `; G( q3 f" z
}; y& [. e: l! I5 E: j& A
  C  {3 i8 G8 `
static void do_it(void). S' V% v' }; Z5 @' B# A7 r3 X
{3 ]# K6 G; l$ ?! s. D4 D2 c; x5 Y
    // Assumes that the display part is the top of the assembly; u2 H. n6 X5 b, v+ d9 S

  T3 p! B  o4 G4 y    tag_t( m7 U4 o- r# A- O# R' Z
        dispPart = UF_PART_ask_display_part();+ d. y( v8 A$ z& L/ d6 x% _
2 K' u2 @9 v  C. o9 @
    if(NULL_TAG == dispPart)
# A4 D, p5 p# O" E    {
+ N/ D" g+ A/ `1 s, `. Q/ N        ECHO("Program requires an active displayed part");, k% d- K4 [, `% t' [
        return;
# t/ N: E9 Y+ |- n0 H    }. q9 c/ O" t. W8 ~

$ ~/ n' s9 K$ \: T# o. C! ?' w    tag_t
# c9 Q+ V1 f$ p; j, m/ V7 V        compTag = NULL_TAG;
" m* y: v! x3 O% D* w: L/ p% ^1 Z5 u) n$ D2 S+ I: x$ z' b
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
/ K# K3 i6 q0 Z9 r( ~- r    {
: t( R5 ]# Q- I2 x4 m" ^        char' I. U7 A' K! ~7 B' ?
            msg[512] = {""},& u+ @' b5 Y0 a: c. T2 ~
            fSpec[256] = {""};
& {0 m; V4 |- j  ~1 h2 j2 G& E1 j% ^, M6 F& ]
            tag_t5 {/ l; n1 P0 {$ I4 P. R
                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);' ~5 |& _4 ~! @9 Q3 T

) @! S1 K. b5 W5 G/ H, `            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));- M7 Z3 U$ d1 v

: D. m6 r' j) K3 R+ w            // uncomment to see all component names:: \( X/ p& V& R$ c1 ]$ G  Y5 v5 h
            //sprintf(msg, "Component Part: %s\n", fSpec);
/ E$ w7 B' O. X3 r( ^) @) X            //ECHO(msg);
0 R; Y& q3 k: C- s
  D$ o9 [* V3 G            Component *theComponent = (Component *)NXObjectManager::Get(compTag);3 J: u; Q) k, `' i" Q" Q
            if (attribute_exists(*theComponent, RO))
" \5 s5 ]5 n# E( e9 p' ]            {
) R$ S: n- x# b4 e9 d! Y% Z  q                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
4 q& I2 C; a' a0 l# ]; C                ECHO(msg);
9 r' a+ R- q' x. b$ N( ~' L! g            }3 }# x# g& f+ V
    }) D% Y" c4 t& \9 D
}[/mw_shl_code]/ O. f5 q% {. L* C3 Q* A9 Z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了