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 1995 0

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

admin 楼主

2018-1-10 17:48:41

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

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

x

+ q: ?! d1 O' v# i! t, W4 v1 \# \& m8 w' L
NX二次开发源码分享: 获取当前Reference Component的通用方法  D$ N- I/ y8 |; V  d* [

8 [, R* ^! X! M8 L* z2 h& X2 W
  D1 l) |6 I7 O* Q# C9 e3 i
" S. G+ I: D: m3 c- A3 n& c2 t# K1 @
8 Q9 V! y( h+ b; {
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
; c. ~* x- d5 j0 c3 O# ^7 v{, p8 M$ V0 f; I; S

7 w6 C+ ]5 ?- S. B1 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.
" Q3 g! E+ V6 k$ p3 _. A2 B. S3 f9 y    ) M- B- M0 [8 h4 Y
    logical
" r' S$ j/ _" v) Z        hasRefAttr = FALSE;
5 Q8 Y5 P% Q% m- r/ `# f; I& l$ l( e7 X4 ?, G0 s
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
2 x7 `# t9 q5 n2 i/ `3 B4 o
- D, N) b5 L% L  x    if(hasRefAttr == TRUE)' l- v) Z% b5 L: Z9 r6 `
    {
2 s. n2 U4 B2 O; x: R        return TRUE;# q; d: L( Z7 m/ I9 V
    }: u  p5 l8 [) y. Q. r
2 ^/ |( ~7 D/ U# w, t
    return FALSE;
# L4 k1 w( v- [- q% _# }/ I7 L! E- F% ?' p
}% S1 H& h  m+ Q9 M2 L6 l2 h

. C( O1 {8 Z6 `8 ?" Xstatic tag_t ask_next_of_type(tag_t part, int type, tag_t object)
- }8 Z# ?8 z3 t7 L$ n7 Y6 e1 v1 P% L{! z0 S9 p5 B' ^
    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
  j& w% c$ G+ O# ?% q    return (object);
8 T/ k1 O* b, o( x}
; ]0 E2 k) A/ C) ~7 ]# ~5 z5 P. I/ Z6 _" L( W( U6 d
static void do_it(void)7 Y4 @, k* E3 `% T2 T
{
$ ~) B9 |" X  J  G$ Q    // Assumes that the display part is the top of the assembly
! [) f1 g* i$ @$ j# j3 b
* j$ O8 r4 C1 W" h5 \! T5 f    tag_t
+ p# v: L5 ^- ?. n: }        dispPart = UF_PART_ask_display_part();
0 N" ]5 U4 h+ L, |. E/ Y0 n- ~7 |/ W/ k  S5 u
    if(NULL_TAG == dispPart) 4 L  U5 y% P% s
    {+ y4 w) ~, o8 w8 e0 m3 Z2 ]
        ECHO("Program requires an active displayed part");  U# O2 V& t1 P) N  U/ t; I
        return;
% z# o  Y; ?( Q9 Y% j$ i; O9 n    }, i8 r- U$ B0 e. V: E
" d1 t3 s" y. T. \: B) W
    tag_t
# W) X4 `; K% x: ~. p        compTag = NULL_TAG;
5 f" {6 n( G9 y" [% j0 _5 f0 Q9 ]! Y' y, k4 J6 ^  y9 `) X3 x
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG). w& h* M$ R2 C! `: I% a6 J" E7 i3 H
    {) f/ Y8 A( {1 ~2 J1 s
        char
/ L5 z4 n' I5 d2 W2 r( r            msg[512] = {""},
5 ^: q& [) H* o- ~9 K# {2 ^+ R            fSpec[256] = {""};# i3 C1 c( v+ F; |5 E) ^1 |

9 J' p" T% G4 C( i* P            tag_t
* f4 h& w8 j8 k/ L                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);
+ s6 p& x! M1 U2 N( O: _/ j! Q
6 e: V: M+ U5 d8 W6 y* w0 X4 J            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));) c+ D7 F/ L6 f3 H0 E8 `

( G+ m, S( ?( v( I. m* k            // uncomment to see all component names:
1 r4 r, h1 u6 _, S0 \: f            //sprintf(msg, "Component Part: %s\n", fSpec);
+ T) q0 B, a3 b1 l            //ECHO(msg);
# }4 {: q. ~* T1 B+ b1 J; z, y  i! R  x
            Component *theComponent = (Component *)NXObjectManager::Get(compTag);9 f4 n; l  r& Z4 R
            if (attribute_exists(*theComponent, RO)). r7 |7 B- E" Y& J8 \1 P" ]1 _6 Q2 S
            {
% ~; N. |7 s" @- `" V/ z                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);
6 Z5 I' a3 B  |' q0 _5 z6 z                ECHO(msg);5 @% K- N: \9 [: j& s  y
            }: S; @4 Y5 [) z! Q. e$ r8 h
    }
5 _! D& @( I9 B3 }2 W}[/mw_shl_code]
2 f" N0 T  _( ?3 D$ l
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了