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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82168
QQ
发表于 2018-1-10 17:48:41 | 显示全部楼层 |阅读模式

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

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

x

9 N$ o! {# w. H% U
7 n( u$ g+ Y! tNX二次开发源码分享: 获取当前Reference Component的通用方法
# {1 G7 `% t- K9 z( i
: p- z* n! @" c1 a# B  M# H% Z5 z( b: [

5 y) Y7 z# f) l: ]( t: k5 H: {" D7 R+ X' F9 V& ?2 a

% c) N7 j4 K) C" M[mw_shl_code=c,true]static logical attribute_exists(Component cmpnt, char *title)
0 l; R+ i7 M' ~! B{9 D% V& e4 R" i. E
8 W0 }4 T9 g- {& y& c: M4 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.9 f9 @+ b0 H1 R' ^+ L6 C# ^
    # g1 y% ^6 O/ `" A- F7 e
    logical
3 Z5 n+ B2 X# J. e        hasRefAttr = FALSE;* h! m  k8 I! _4 g" r, A  Q) L) K

* w# H$ P: A, u- O+ z3 G5 R) u    hasRefAttr = cmpnt.HasUserAttribute(RO, NXObject::AttributeTypeAny, -1);; O& \4 H+ I$ X7 D
$ N) h. y% J( |) \9 W8 J$ P
    if(hasRefAttr == TRUE)6 i3 Y  B8 i/ ^9 K
    {2 K4 h  l# u( m5 |" ~2 c) n. s
        return TRUE;
8 D4 }% _" h; V! x7 F    }
( Z/ y  U( t% ^# u1 u; h/ s% x' A: p, `
    return FALSE;: |. Z: ^$ |1 f1 A+ D* T9 u
# t. O. E' y9 q) U! i9 h
}
( M5 P. E/ M' |
3 G9 q9 U5 M7 sstatic tag_t ask_next_of_type(tag_t part, int type, tag_t object)
2 b: |- h2 C6 R  {1 K{
5 E9 C( y# l4 G7 [0 c+ |1 h    UF_CALL(UF_OBJ_cycle_objs_in_part(part, type, &object));# Z) L4 p5 L" G3 x+ A, B, ~
    return (object);" h! p4 Y0 X9 h# U! c8 Y' }: }
}
3 a8 m1 G2 W+ I. D6 O' W# K  ~2 b5 {6 M' P* u. K
static void do_it(void)+ t) W* O6 s3 U4 e7 a) P
{
3 t$ {9 P- V7 ~9 z    // Assumes that the display part is the top of the assembly
# u- T0 i" F  x: ?3 c. _0 J
* {5 V) \2 |" j    tag_t
7 ]9 h* X; ~3 l- T        dispPart = UF_PART_ask_display_part();' F! E1 |3 C' y$ @  C

: W6 S! X" N1 o- j6 k9 s    if(NULL_TAG == dispPart)
: [7 T4 d( M' ?( M! m    {0 }! Y, M* R( F
        ECHO("Program requires an active displayed part");
0 B& x* o1 G$ s! g. b        return;0 A" p. O  d* f# k
    }
2 l# a  K( |: \% L9 @9 @" Q! A* j; w* s5 b3 X
    tag_t  L3 A2 y- o1 L; v' V$ C
        compTag = NULL_TAG;
4 j: Y) ~# x+ u; u) w+ y1 @3 _
    while((compTag = ask_next_of_type(dispPart, UF_component_type, compTag)) != NULL_TAG)
# R! s; Q* l1 d8 k3 F$ W! J    {
, |" l! ?4 y! F        char
0 f- K9 G; }; [/ q            msg[512] = {""},
/ e5 ?, V# S' s            fSpec[256] = {""};1 a+ }1 _# i1 X0 E( E. l# H/ k
9 h* Z. V; `2 M4 ^
            tag_t
  D3 V6 @' c/ I9 ~0 F  @/ ~                protoPart = UF_ASSEM_ask_prototype_of_occ(compTag);7 M5 K3 \1 n8 n8 T& A  |7 A

$ [7 K. V3 R; p            UF_CALL(UF_PART_ask_part_name(protoPart, fSpec));
( K  ?+ }: n+ V3 r' m8 J  J9 i' a& ]. o
            // uncomment to see all component names:
9 V4 }7 I3 z5 E6 k6 I/ H. \) H            //sprintf(msg, "Component Part: %s\n", fSpec);9 D% \* p/ }) c& G# o' Z
            //ECHO(msg);8 o5 s% I; ~% {8 v- {$ r2 y( v

2 f3 _3 B! h9 @6 k" g3 R6 h1 |3 B8 s. J            Component *theComponent = (Component *)NXObjectManager::Get(compTag);
9 J: a0 Z7 J  l) e) a            if (attribute_exists(*theComponent, RO))
* }6 u7 y1 D" P- V4 y            {5 J$ V+ c( o$ _, ~- n4 V" u
                sprintf(msg, "**** Reference-Only Component: %s\n", fSpec);2 ^  x3 j# D3 u# h
                ECHO(msg);
& ?& e8 l( ~- i* C5 {: a1 p            }
  t5 c0 @3 |# Y: [4 ]+ G1 |7 u' P    }
3 W/ W) D; S: N/ ^  x}[/mw_shl_code]
+ e7 ]& e( `; K/ h8 p- o$ V* o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了