【NX二次开发】属性操作总结
内容包括:
1.属相创建
2.判断属性是否存在
3.读取属性值
4.时间属性转换成字符串
5.统计属性的数量
6.删除指定属性
7.删除全部属性
源码:
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <uf.h> 4 #include <uf_attr.h> 5 #include <uf_cfi.h> 6 #include <uf_curve.h> 7 8 #define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X))) 9 static int report(char *file, int line, char *call, int irc) 10 { 11 if (irc) 12 { 13 char messg[133]; 14 printf("%s, line %d: %s\n", file, line, call); 15 (UF_get_fail_message(irc, messg)) ? 16 printf(" returned a %d\n", irc) : 17 printf(" returned error %d: %s\n", irc, messg); 18 } 19 return(irc); 20 } 21 static void do_ugopen_api(void) 22 { 23 //声明变量 24 tag_t pnt; 25 double zero[3] = { 0,0,0 }; 26 UF_ATTR_value_t value; 27 //创建一个点来分配属性 28 UF_CALL(UF_CURVE_create_point(zero, &pnt)); 29 //分配一个“整型”属性给对象 30 value.type = UF_ATTR_integer; 31 value.value.integer = 1; 32 UF_CALL(UF_ATTR_assign(pnt, "INTEGER_ATTRIBUTE", value)); 33 //分配一个“数字”属性给对象 34 value.type = UF_ATTR_real; 35 value.value.real = 1.5; 36 UF_CALL(UF_ATTR_assign(pnt, "REAL_ATTRIBUTE", value)); 37 //分配一个“日期”属性给对象 38 value.type = UF_ATTR_time; 39 //初始化到当前日期和时间 40 //uc4583 将字符串转换为NX能读取的日期格式 41 //第一个参数:输入日期字符串,如果为空则为当前日期(样式有多种) 42 //第二个参数:输入时间字符串,如果为空则为当前日期(样式有多种) 43 UF_CALL(uc4583("", "", value.value.time)); 44 UF_CALL(UF_ATTR_assign(pnt, "DATE_AND_TIME_ATTRIBUTE", value)); 45 //分配一个“空”属性给对象 46 value.type = UF_ATTR_null; 47 UF_CALL(UF_ATTR_assign(pnt, "NULL_ATTRIBUTE", value)); 48 //分配一个“字符串”属性给对象 49 value.type = UF_ATTR_string; 50 value.value.string = "这是个字符串"; 51 UF_CALL(UF_ATTR_assign(pnt, "STRING_ATTRIBUTE", value)); 52 //分配一个“布尔”属性给对象 53 value.type = UF_ATTR_bool; 54 value.value.string = "这是个布尔"; 55 UF_CALL(UF_ATTR_assign(pnt, "BOOL_ATTRIBUTE", value)); 56 57 //读取属性值 判断属性是否存在 58 UF_ATTR_value_t valueTemp; 59 int iAttrType = UF_ATTR_any; 60 UF_CALL(UF_ATTR_read_value(pnt, "STRING_ATTRIBUTE", iAttrType, &valueTemp)); 61 if (valueTemp.type == 0) 62 { 63 //此属性不存在 64 } 65 66 //valueTemp.type 5 67 //valueTemp.value.string 字符串值abc 68 UF_free(valueTemp.value.string); 69 70 //读取属性值 71 UF_ATTR_value_t valueTemp2; 72 UF_CALL(UF_ATTR_read_value(pnt, "DATE_AND_TIME_ATTRIBUTE", iAttrType, &valueTemp2)); 73 char cDate[20] = ""; 74 char cTime[20] = ""; 75 //uc4582 将NX的日期格式转换为字符串 76 //第一个参数输入{-1,-1}则为当前日期时间 77 //第二个参数为日期样式 78 UF_CALL(uc4582(valueTemp2.value.time, 1, cDate, cTime)); 79 //cDate 08/04/20 80 //cTime 15:48 81 82 //按类型统计属性的数量 83 int iAttrCount = 0; 84 UF_CALL(UF_ATTR_count_attributes(pnt, UF_ATTR_any, &iAttrCount)); 85 86 return; 87 //删除指定属性 88 UF_CALL(UF_ATTR_delete(pnt, iAttrType, "STRING_ATTRIBUTE")); 89 90 //删除所有属性 91 UF_CALL(UF_ATTR_delete_all(pnt, iAttrType)); 92 return; 93 } 94 95 void ufusr(char *param, int *retcode, int param_len) 96 { 97 if (!UF_CALL(UF_initialize())) 98 { 99 do_ugopen_api(); 100 UF_CALL(UF_terminate()); 101 } 102 } 103 int ufusr_ask_unload(void) 104 { 105 return (UF_UNLOAD_IMMEDIATELY); 106 }
效果: