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

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

[复制链接]

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

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

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

x
) k* v' s. s& ^( g2 j& [/ W

& C4 ?4 s) I- M+ _1 r3 ^" G! yNX二次开发源码分享: 获取当前Reference Component的通用方法
" ~( B2 m/ G3 P& i# H4 s% v1 N7 S) O. m9 g6 R4 U) R
4 m* U: p- G0 {8 g" }3 K

9 H* }( h# H0 |+ @2 T# B3 {
$ f/ D* j5 U' H, q3 C* B# ?- U* n
3 v3 j/ ?: @/ r: B[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
: m9 A& i. G1 m{7 O: C+ s! _# Z

/ ^  l+ _& b$ w! q6 v4 }/ `//  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.
5 J# |) q3 X' A- B! K/ G% }   
! `* m0 L2 O3 q$ R% ~    logical" P8 [' f  T3 t0 l$ u
        hasRefAttr = FALSE;& @/ R) p7 C: I3 E9 V! M( S
& X  W  ?) t  W& f5 a4 j% x9 _- j
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
  q% q" |! o, K( B& G' r
8 _7 f/ D0 _3 \    if(hasRefAttr == TRUE)+ b9 u# v3 p7 g7 T, q, s, X4 q
    {
/ p# ^$ O, j5 i0 X6 R        return TRUE;. N0 |* ]8 x, y% M) n4 l6 C, x
    }
( C( o1 a* d1 Y  f2 i8 O/ S7 b, ]  G; o- M0 x$ [7 t! {  J+ ]
    return FALSE;
2 u$ J5 j# ?8 ]$ T3 H( O& ?  ?) l; {# w4 T$ g" p# r8 ^) ^
}
* l) X0 D: M* [4 w8 d
, N' e- V  {% M. ?9 w; N7 Ystatic tag_t ask_next_of_type(tag_t part, int type, tag_t object)
6 v2 {/ B9 E9 ^' x# o2 X{
% m8 Q1 i6 k/ r* S. A    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
6 o8 S4 Q4 {7 J, a5 h% L    return (object);
, I5 U3 y# ~9 u6 V) h! Y}" z5 f) ~% m2 u7 _1 b! M4 O

6 w! F3 e$ X0 h& cstatic void do_it(void)% h, u0 m2 y2 P% k% }" |1 `8 @
{
7 @  E/ z- u; |2 w& M! o. K    // Assumes that the display part is the top of the assembly/ T' g8 N2 t- S6 |

% a5 n+ w( E2 v9 _, `    tag_t- s7 l: i2 b) D# X( {" c! d
        dispPart = UF_PART_ask_display_part();
% m, [+ n  R3 I6 g  o# @# G2 T& K
- l& z8 F+ S+ X1 R; z: J    if(NULL_TAG == dispPart) 4 v9 b9 `$ b! V: [
    {
9 n" `9 q5 A+ {% F& A+ i        ECHO("Program requires an active displayed part");5 ]5 ]% L" W; Y$ g0 i
        return;3 P2 S* t& z/ U; V
    }
. v( \! K1 e% J3 C- @& }% I% m- d2 ]. G  q
    tag_t
3 P, w( R$ g0 R! I# _        compTag = NULL_TAG;' o7 N2 Y) v3 j: F! c, |
: }2 ~1 L: D1 }# l
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)+ c/ {# x8 }& J( [; g
    {% a5 A+ \0 Y! i6 _: I) C! v& b# y, p
        char
) D* s: ~& F- E            msg[512] = {""},
5 v1 L" r$ W& J( p, h8 S            fSpec[256] = {""};
! v  ~5 D0 l0 q, k# @- t. a7 w1 H4 R0 I- r1 v1 o7 A& k% Q6 [1 n
            tag_t4 b, |6 k+ L% L9 v7 U' L: w' g9 `
                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);7 H, ?7 ~4 k" f$ h! \

  R4 [5 }1 y, T: f. d7 W            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));' l: j7 y0 O9 ^# u

" V% x8 `6 g/ n) d/ E  Z' {+ M            // uncomment to see all component names:
% U9 v+ E# @2 O1 E+ \! h% s            //sprintf(msg, "Component Part: %s\n", fSpec);+ ^5 J' H) P, u4 U* p' a+ k- g- H
            //ECHO(msg);
/ c( q6 d2 v9 }1 `
7 c+ k: z- s8 U6 T  b% b4 M  h            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
) o+ W6 p3 A) f; J9 _            if (attribute_exists(*theComponent, RO))
7 r% z( P  n3 \. [3 D9 T- h            {
! l* r: }8 U6 I0 ^+ C                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
1 k6 [6 s7 M8 b- M. ^* x( p: K                ECHO(msg);3 n$ Z( G* h0 b, r3 W  V0 p
            }% c5 V* U# @+ L$ q
    }: c1 B, k4 M( P
}[/mw_shl_code]
5 z$ a: ?4 h6 D: M8 T# n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了