注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

NXOpen C属性操作(1)  

2014-05-17 11:09:51|  分类: UG NX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

NX中的零件可以包含属性,而一个属性则由多个属性项构成,可以使用菜单栏中的“GC工具箱-GC数据规范-属性工具-属性工具”查看,如图:

image

NXOpen中也提供了相关的数据结构和函数来实现对属性的操作。

1.与属性相关的数据结构

UF_ATTR_value_s

根据后缀s可知该类型为一个结构体,在头文件uf_attr.h中,其定义如下:

struct UF_ATTR_value_s
{
    int type;                 /* The type of the attribute.  Valid types are:
                                 UF_ATTR_bool
                                 UF_ATTR_integer
                                 UF_ATTR_real
                                 UF_ATTR_time
                                 UF_ATTR_null
                                 UF_ATTR_string
                                 UF_ATTR_reference
                              */
    UF_ATTR_value_u_t value;  /* The attribute value */
};
第一个值指定了属性的数据类型,值定义如下:
#define UF_ATTR_integer    1
#define UF_ATTR_real       2
#define UF_ATTR_time       3
#define UF_ATTR_null       4
#define UF_ATTR_string     5
#define UF_ATTR_any        6
#define UF_ATTR_reference  7
#define UF_ATTR_bool       8
通过该值,告诉UG需要接收一个什么样的数据类型,该数据类型在第二个成员UF_ATTR_value_u_t中给出,会在接下来介绍。
并且,在头文件uf_attr.h下,该结构体还有两个别名:
typedef struct UF_ATTR_value_s UF_ATTR_value_t, *UF_ATTR_value_p_t;

我们用的比较多的是第一个别名。

UF_ATTR_value_u

先说明,这个就是前面提到的UF_ATTR_value_u_t,从头文件中可见:

typedef union UF_ATTR_value_u UF_ATTR_value_u_t, *UF_ATTR_value_u_p_t;

我们再看看这个联合体的定义:

union UF_ATTR_value_u
{
    logical  boolean;
    int    integer;
    double real;
    int    time[2];
    char   *string;
    char   *reference;
};

根据指定属性的类型不同,NX对这个联合体采用不同的解析方式,如果提供的是UF_ATTR_REAL,则将其解读为double型,如果是UF_ATTR_TIME,则解析为一个数组time[2],其中time[0]是NX中的日期,time[1]是NX中的时间,注意这些采用的是本地时间。还需要说明的是,如果提供的是字符串,则字符串的长度不应超过UF_ATTR_MAX_STRING_LEN的大小,从预定义中可以知道该值为132。

2.创建或者编辑属性

使用函数UF_ATTR_assign指派一个属性,但是如果所提供的标题已经存在,则修改该属性的值。函数原型如下:

UF_ATTR_assign
(
tag_t object, //Part tag or part attribute tag
char * title, //Attribute Title (maximum character length is UF_ATTR_MAX_TITLE_LEN+1)
UF_ATTR_value_t value//Typed Attribute Value
)
测试代码如下:
#include <uf.h>
#include <uf_part.h>
#include <uf_ui.h>
#include <uf_ui_ugopen.h>
#include <uf_attr.h>
#include <uf_exit.h>
#include <string>
void XDAttributeTest()
{
    tag_t disPart=UF_PART_ask_display_part();
    UF_ATTR_value_t attrData;
    attrData.type=UF_ATTR_string;
    attrData.value.string="HELLO NX";
    UF_ATTR_assign(disPart,"NXOPEN",attrData);
}

//入口函数
extern DllExport void ufsta( char *param, int *returnCode, int rlen)
{
    if(UF_initialize()) 
        return;
    //Add your code here
    XDAttributeTest();
    UF_terminate();
}
//退出函数
extern int ufusr_ask_unload()
{
    return UF_UNLOAD_IMMEDIATELY;
}
运行之后将会在NX中创建一个名为NXOPEN,值为HELLO NX的属性。如果所提供的属性名已经存在,则将该属性修改为新值,修改的新值可以和原来的类型不一致。
3.删除属性
这个比较容易操作,有两个函数支持此项功能,UF_ATTR_delete和UF_ATTR_delete_all,前者删除某个属性项,而后则删除某一类型的属性项。函数原型分别如下:
extern UFUNEXPORT int UF_ATTR_delete(tag_t object,int type,char * title);
extern UFUNEXPORT int UF_ATTR_delete_all(tag_t object,int type);

例如我们可以删除一个部件的某一个属性项:

UF_ATTR_delete(disPart,UF_ATTR_any,"CHECKER");

或者所有属性项:

UF_ATTR_delete_all(disPart,UF_ATTR_any);
不要以为调用第二个参数之后部件文件的属性项就真的全删除了,实际上还剩下两个:MaterialMissingAssignments和MaterialMultipleAssigned,这个应该是函数内部的实现机理。
  评论这张
 
阅读(525)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016