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

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

admin 楼主

2018-1-10 17:48:41

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

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

x

$ w3 ?' R0 r. s- y3 I% I5 e+ m' H
NX二次开发源码分享: 获取当前Reference Component的通用方法( o) O+ M. V  b9 J

' }5 d3 y2 p* |" U& E7 a* k9 ~0 V$ X* O  u
1 f/ P7 u. L9 C) q, Q

& Y0 G1 J8 G% V$ L& E% V# ~: a7 b+ z+ q% B' ^* l/ Y* V
[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)2 ?) q9 d) n% x
{5 T( N- \7 f; N, R8 H

( X! x/ G2 j: y- h! C  L% 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.
% ~% ^- w4 q5 w' h   
$ P( S4 _0 z5 h9 _$ ?) ^+ N    logical9 i6 O5 J4 h/ J6 K9 W
        hasRefAttr = FALSE;: @( x' X- z& G! [8 I
# {8 I& I6 }  b6 o5 o; l
    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);
- t, p3 h* u- A+ }
9 Z1 q7 }+ C$ |* W1 Q    if(hasRefAttr == TRUE)# k5 V/ m) m% a4 X7 j& I
    {
6 _1 b) S/ |" k# E$ X# Z. Q        return TRUE;
% A3 x7 q$ O  V# v5 V* |    }
" m2 L: Q+ ~# w- w4 }% X- n" \' p: j/ P
    return FALSE;
$ A  d. ^' j* P" Z
5 g' m2 u5 ?! O) \, F4 v+ Y}
$ D3 B: j# Y- p0 W( D0 _# Y' C9 l4 f& ]
static tag_t ask_next_of_type(tag_t part, int type, tag_t object)
" }) r* H9 A$ F+ u; C% ?( K{
8 B0 j8 |8 ?% h) Z6 a9 e    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));
. W  g' V$ U5 P3 K1 a9 U9 k    return (object);- q$ P4 `. h+ p) M5 }  I# k5 _7 y
}/ A' S/ {8 b" [
$ Q# B8 W( W4 ]
static void do_it(void)6 C  v0 J1 ^1 N; E* h# {; ~  f
{, n; ?- |; B( {. l1 d% {7 M2 \8 f
    // Assumes that the display part is the top of the assembly1 ^5 {8 Q7 S/ F" s  D( @
4 c) X! ]* G& [
    tag_t' Y' N2 q* n) I* I6 ~
        dispPart = UF_PART_ask_display_part();
0 C( w! I. V) m- w- Z; B! Q: y4 x# B0 E5 {: N3 `* f
    if(NULL_TAG == dispPart)
* j# g% _( J& d1 U) H4 l& \    {
' G$ ]/ `9 T- h4 t0 Y) w        ECHO("Program requires an active displayed part");
" G% E7 U2 n$ y        return;
2 Z: q1 `; w" K* H# {! H' ^    }
0 U5 \" K6 L- b+ l3 `! d8 K/ Q; H2 p2 J5 M6 G2 B& |1 T* y' C+ B
    tag_t
( k% n+ U: R1 x  Y6 t        compTag = NULL_TAG;
9 P" ^0 o* Y% A6 k; L1 p7 J2 n1 c* w( j
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
7 w' U  W1 f" y1 D  L    {# j0 L$ Q8 h0 R6 ?5 |& h6 e
        char& u$ i5 l2 b4 |/ k7 l& }; a, k
            msg[512] = {""},9 O2 E4 r# o# P2 Q+ E/ Y  k
            fSpec[256] = {""};
) K* W+ C% R% ?) N  q9 v, m/ E( F* f& F4 p
            tag_t
$ r0 b: C9 p8 ^4 T; E5 o                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);7 m' R7 Y2 e* Z& T5 ?
6 h) l2 S3 |. t; ~
            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
( b0 Q* m8 l9 Z' z0 M/ {  t4 ~7 `% k& J
            // uncomment to see all component names:# v! u% j: Q% h' l# `: c+ j5 D
            //sprintf(msg, "Component Part: %s\n", fSpec);
- U1 M8 x( D( U2 k8 Y* e            //ECHO(msg);
2 P. o, L: u$ Y* g* p7 @: M
! b! W9 W! Z9 @" ?            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
8 r/ J2 \4 w4 i# g" ?% M            if (attribute_exists(*theComponent, RO))* i8 a& v/ w& ^$ ?0 V8 l
            {: K5 T3 D' B/ E" c8 [$ e
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);' e* @8 f+ c! N# F: n
                ECHO(msg);
- ]0 u# N; i) a            }
# {4 q* c9 \; a7 O, `8 v4 F( Y    }
) \- A, N" ~% s& G' T  a  V- ^}[/mw_shl_code]
, g$ Y9 T+ n& E
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了