属性操作讲解
#include <uf_attr.h>
UF_ATTR_assign 创建属性
UF_ATTR_read_value 获得属性值
UF_ATTR_delete 删除属性
UF_ATTR_delete_all 删除所有的属性
UF_ATTR_assign 分配属性
UF_ATTR_count_attributes 计算属性
属性是附加给部件或对象的信息,一般用于对部件或对象进行解释或说明。由于这些
信息随同模型一起保存在部件文件中,因此属性在建立相关应用模型时非常有用。属性中
的信息可以是字符串、整型值、实型值、日期/时间和引用。
//----------------------------------------------------------------------------
【与属性相关的数据结构】
(1)数据结构 UF_ATTR_part_attr_t
该数据结构用于返回部件的属性值,
成 员 变 量 成员变量描述
char title[UF_ATTR_MAX_TITLE_LEN+1] 属性标题
UF_ATTR_value_t value 部件属性值
char string_value[UF_ATTR_MAX_STRING_LEN+1] 部件属性字符串值的缓冲区,字符串指针 value.value.string
指向该缓冲区
(2)数据结构 UF_ATTR_value_t
数据结构 UF_ATTR_value_t 用于定义属性值,
int type
成 员 变 量 成员变量描述
UF_ATTR_integer; 整数
UF_ATTR_real; 实数
UF_ATTR_time; 时间
UF_ATTR_null;
UF_ATTR_string; 字符串
UF_ATTR_reference
(3)数据结构 UF_ATTR_value_u_t ,value属性值
数据结构 UF_ATTR_value_u_t 是一个共用体数据类型,用于存储属性的实际值
成 员 变 量 成员变量描述
int integer 属性是整型值,用于存储该整型值
double real 属性是实型数,用于存储该实型数的值
int time[2] 属性是日期/时间型数据:time[0]存储 UG 计算的日期;time[1]存储 UG 计算的时间
char *string 属性是字符串型值,用于存储该字符串
char *reference 属性是表达式引用类型,用于指向该属性值的指针,使用函数 UF_ATTR_read_value()可以获取该表达式的值
//----------------------------------------------------------------------------
【常用的属性操作函数】
UF_ATTR_ask_part_attrs 获得部件中属性的个数
参 数 I/O 类型 描 述
const tag_t part_tag Input 部件标识
int * n_attributes Output 部件中属性的个数
UF_ATTR_part_attr_p_t * Output to be 保存属性标题及属性值的数据结构的指针,使用 UF_free()释
attributes freed 放内存
UF_ATTR_count_attributes 计算对象中指定类型的属性的个数
函数用于计算对象中指定类型的属性的个数。如果属性类型为 UF_ATTR_any,则返回
所有类型的属性个数,
参 数 I/O 类型 描 述
tag_t object Input 可以为:部件标识;部件中对象的标识
int type Input 属性类型
int * count Output 属性个数
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
【属性操作源代码】
//头文件
#include <uf_modl.h>
#include <uf_obj.h>
#include <uf_attr.h>
#include <string.h>
//设置选择的实体类型
static int init_proc( UF_UI_selection_p_t select, void *user_data )
{
int errorCode = 0;
//选择类型 曲线或直线
// int num_triples = 2; //选择类型 数量
// UF_UI_mask_t mask_triples[]={UF_spline_type,0,0,UF_line_type,0,0,}; //定义选择类型
//只是选择实体
int num_triples = 1; //选择类型 数量
UF_UI_mask_t mask_triples[]={UF_solid_type,0,0,}; //定义选择类型
//只是选择 面
//int num_triples = 1; //选择类型 数量
//UF_UI_mask_t mask_triples[]={UF_face_type,0,0,}; //定义选择类型
errorCode = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_triples, mask_triples);
if( errorCode == 0)
{
return UF_UI_SEL_SUCCESS;
}
else
{
return UF_UI_SEL_FAILURE;
}
}
//----------------------------------------------------------------------------
// Activation Methods
//----------------------------------------------------------------------------
// Unigraphics Startup
// This entry point activates the application at Unigraphics startup
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{
/* Initialize the API environment */
int errorCode = UF_initialize();
if ( 0 == errorCode )
{
/* TODO: Add your application code here */
char *message="梅雷提示!请选择实体。";
char *title="梅雷-QQ1821117007";
int scope=UF_UI_SEL_SCOPE_WORK_PART;//UF_UI_SEL_SCOPE_NO_CHANGE
int response;
tag_t object_tag;
double cursor[3]={0.0};
tag_t view=NULL_TAG;
//加锁
//UF_UI_lock_ug_access (UF_UI_FROM_CUSTOM);
UF_UI_select_with_single_dialog(message,title,scope,init_proc,NULL,&response,&object_tag,cursor,&view); //选择框】
UF_DISP_set_highlight(object_tag,0); //1高亮显示 0不高亮显示
//UF_OBJ_set_color(object_tag,20); //改颜色
//解锁
//UF_UI_unlock_ug_access (UF_UI_FROM_CUSTOM);
// 返回值response;
//UF_UI_BACK 后退
//UF_UI_CANCEL 取消
//UF_UI_OK 确定
//UF_UI_OBJECT_SELECTED 选择的对象
//UF_UI_OBJECT_SELECTED_BY_NAME 所选对象的名字
if (response==UF_UI_OBJECT_SELECTED)
{
// 创建属性
char ssa[100]="模板名称"; //属性标题
char sva[100]="台面"; //属性值
UF_ATTR_value_t attr_va;
attr_va.type=UF_ATTR_string; //属性类型 字符串
attr_va.value.string=sva;
UF_ATTR_assign(object_tag,ssa,attr_va);// 创建属性
// 获得属性值
char mess[100]="",sval[100]="";
char ssaa[100]="模板名称"; //属性标题
int type=UF_ATTR_string; //属性类型 字符串
UF_ATTR_value_t attr_value;
attr_value.value.string=sval;
UF_ATTR_read_value(object_tag,ssaa,type,&attr_value); //获得属性值
sprintf(mess,"模板名称的属性值为:\n%s",attr_value.value); //attr_value.value返回属性值
uc1601(mess,1);
// 计算对象中指定类型的属性的个数
int typea=UF_ATTR_string; //属性类型 字符串
int count=0;
UF_ATTR_count_attributes(object_tag,typea,&count);
char msg[64];
sprintf(msg, "%d",count); //数字转字符串
uc1601(msg,1); //弹出框 显示
}
/* Terminate the API environment */
errorCode = UF_terminate();
}
/* Print out any error messages */
PrintErrorMessage( errorCode );
}
_____________________________________________________________________________ _
中磊UG二次开发教程 梅雷著 qq1821117007
学UG就上UG网 http://www.9sug.com/
|