PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

+ n* f9 r2 e' z3 X/ N- i/ T  p' H3 X
& U; @; t3 \3 ^) R, bNX二次开发源码分享: 获取当前Reference Component的通用方法8 j2 ~( [' [* o
5 L& _/ L; K6 O) x  z0 R0 ~

  H! r0 X# C, }$ \2 q' J( v9 r5 L' P) p2 b, Z# M# i* V
6 ^  g' o# e) }: x4 q5 p
. Z* r0 B+ p# l1 o9 O
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
; x' D4 {( B' Y9 E" l{  f0 d4 _5 v0 u/ R
3 J- V  Q- A' t
//  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 `* m( I) G( _    + z/ N' J3 O% a: Z/ b1 M
    logical7 ]$ b/ g: N: w' t* |
        hasRefAttr = FALSE;& f! ~/ i: w* O7 M

5 I% C4 E# B/ k1 |# C4 j    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
' D2 _: j3 l) e; w' Q9 D% [$ h+ Y' j7 @; ?% z/ T4 K* D* U
    if(hasRefAttr == TRUE)
5 f' X/ A" Z# d    {
& _4 ]4 R2 B: o$ |7 Q0 I9 Q, d6 D! Y+ e        return TRUE;$ d8 r: O/ G3 ]& G
    }5 \2 E* `* g% o0 z) ~: m  \

; j0 B  H2 Z, l/ q4 X, n    return FALSE;
6 f" B( ~2 i- n' a3 l# \) H$ F
: K1 I6 S$ t" s6 V; w8 X}" }3 W4 `# H# P8 j6 n. L" [" x( r
, m+ V0 G- v* n. h! \1 I
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)9 p9 N% v+ @9 z! d% S
{
% \. ~$ d& M4 V# b8 S3 D    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));4 E' f3 F% f+ V# X. {! `
    return (object);( I/ [8 S& u# u, x$ x7 |0 t" A/ B  O$ W
}
+ m0 Q2 _9 g: A3 Y( X1 q/ O- U* s$ ^* y  h. ?1 }8 ]
static void do_it(void)* G) P" a3 `7 d" O$ H
{$ K7 I$ g6 u, |# Z
    // Assumes that the display part is the top of the assembly
7 V5 [3 V. R" r2 s+ g3 S  P4 _4 R& ?. r
% H5 z5 J- I1 b" D# [& D0 v    tag_t
0 G4 r! ]- a+ E; {: O0 J7 i5 X        dispPart = UF_PART_ask_display_part();
+ y" A& L1 o! V6 N# F7 c
/ i  F1 q/ y' n5 w& b* C# f    if(NULL_TAG == dispPart)
( ?' d# i( H" I8 W5 N2 K# o    {
2 u1 F2 a  G2 o: h' K        ECHO("Program requires an active displayed part");' U' ]( T& h% F  z
        return;
/ Y7 s6 J8 ~, x    }
( N+ s" u" \' k0 p3 i* ?
5 _1 u$ g% _9 n# r8 u; o    tag_t* q8 G; `, I4 @; {+ Q
        compTag = NULL_TAG;. {4 F6 p, Y$ A6 K

1 ^& g8 l- s$ q4 C    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)- N: B# g: |8 `) ]6 Z
    {9 c8 i( v1 \) s& O
        char: f2 K/ M0 e! ]2 \: K& t& l5 X
            msg[512] = {""},
  q% T8 B3 G3 @( t$ m$ Y, n* }! s            fSpec[256] = {""};$ U2 G' `  @/ Q) U9 ]9 C3 z
$ g$ A5 X$ k) f+ l& v# h) k" E
            tag_t
  L. i" C, ], Y/ }7 B3 O5 N. @                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);9 u+ O. O& d- S6 L( l3 ^

+ M) g! Y. a( {2 d            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));, h/ S) a5 e+ G) L3 G( A: b5 t* H% x
1 z6 a( {+ R- O: b- b# {" u
            // uncomment to see all component names:2 }0 \  P2 H/ |5 g# R' P
            //sprintf(msg, "Component Part: %s\n", fSpec);: v+ Q7 n+ U  d+ @" J" f( c
            //ECHO(msg);4 Z+ n! F4 m% U: i2 y7 c
$ T0 O, i$ Y/ A  O( D
            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
1 g# ~  X0 e4 g; @8 b* d8 ^            if (attribute_exists(*theComponent, RO))- t, U( D  N; j( S! [+ S4 `8 l
            {
- t8 T( L8 s# T$ z                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
4 h  M+ G- m7 @4 n+ L; m                ECHO(msg);
1 p: a, l* K7 F. y4 ^. g            }
' _' p  ^/ k4 _$ X/ j3 {3 B3 O2 ]    }
  x5 F* R$ x- F3 W+ ~# d}[/mw_shl_code]) @3 C7 e" j7 z2 l9 A' m; _
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了