【NX二次开发】属性操作相关函数的使用方法

内容包括:
1.属性创建
2.判断属性是否存在
3.读取属性值
4.时间属性转换成字符串
5.统计属性的数量
6.删除指定属性
7.删除全部属性
效果:

【NX二次开发】属性操作相关函数的使用方法

 

 

 源码:

#include <stdlib.h>
#include <stdio.h>
#include <uf.h>
#include <uf_attr.h>
#include <uf_cfi.h>
#include <uf_curve.h>

#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report(char *file, int line, char *call, int irc)
{
        if (irc)
        {
                char    messg[133];
                printf("%s, line %d:  %s\n", file, line, call);
                (UF_get_fail_message(irc, messg)) ?
                        printf("    returned a %d\n", irc) :
                        printf("    returned error %d:  %s\n", irc, messg);
        }
        return(irc);
}
static void do_ugopen_api(void)
{
        //声明变量
        tag_t       pnt;
        double    zero[3] = { 0,0,0 };
        UF_ATTR_value_t value;
        //创建一个点来分配属性
        UF_CALL(UF_CURVE_create_point(zero, &pnt));
        //分配一个“整型”属性给对象
        value.type = UF_ATTR_integer;
        value.value.integer = 1;
        UF_CALL(UF_ATTR_assign(pnt, "INTEGER_ATTRIBUTE", value));
        //分配一个“数字”属性给对象
        value.type = UF_ATTR_real;
        value.value.real = 1.5;
        UF_CALL(UF_ATTR_assign(pnt, "REAL_ATTRIBUTE", value));
        //分配一个“日期”属性给对象
        value.type = UF_ATTR_time;
        //初始化到当前日期和时间
        //uc4583 将字符串转换为NX能读取的日期格式
        //第一个参数:输入日期字符串,如果为空则为当前日期(样式有多种)
        //第二个参数:输入时间字符串,如果为空则为当前日期(样式有多种)
        UF_CALL(uc4583("", "", value.value.time));
        UF_CALL(UF_ATTR_assign(pnt, "DATE_AND_TIME_ATTRIBUTE", value));
        //分配一个“空”属性给对象
        value.type = UF_ATTR_null;
        UF_CALL(UF_ATTR_assign(pnt, "NULL_ATTRIBUTE", value));
        //分配一个“字符串”属性给对象
        value.type = UF_ATTR_string;
        value.value.string = "这是个字符串";
        UF_CALL(UF_ATTR_assign(pnt, "STRING_ATTRIBUTE", value));
        //分配一个“布尔”属性给对象
        value.type = UF_ATTR_bool;
        value.value.string = "这是个布尔";
        UF_CALL(UF_ATTR_assign(pnt, "BOOL_ATTRIBUTE", value));

        //读取属性值 判断属性是否存在
        UF_ATTR_value_t valueTemp;
        int iAttrType = UF_ATTR_any;
        UF_CALL(UF_ATTR_read_value(pnt, "STRING_ATTRIBUTE", iAttrType, &valueTemp));
        if (valueTemp.type == 0)
        {
                //此属性不存在
        }
        
        //valueTemp.type 5
        //valueTemp.value.string 字符串值abc
        UF_free(valueTemp.value.string);
        
        //读取属性值
        UF_ATTR_value_t valueTemp2;
        UF_CALL(UF_ATTR_read_value(pnt, "DATE_AND_TIME_ATTRIBUTE", iAttrType, &valueTemp2));
        char cDate[20] = "";
        char cTime[20] = "";
        //uc4582 将NX的日期格式转换为字符串
        //第一个参数输入{-1,-1}则为当前日期时间
        //第二个参数为日期样式
        UF_CALL(uc4582(valueTemp2.value.time, 1, cDate, cTime));
        //cDate 08/04/20
        //cTime 15:48

        //按类型统计属性的数量
        int iAttrCount = 0;
        UF_CALL(UF_ATTR_count_attributes(pnt, UF_ATTR_any, &iAttrCount));
        
        return;
        //删除指定属性
        UF_CALL(UF_ATTR_delete(pnt, iAttrType, "STRING_ATTRIBUTE"));

        //删除所有属性
        UF_CALL(UF_ATTR_delete_all(pnt, iAttrType));
        return;
}

void ufusr(char *param, int *retcode, int param_len)
{
        if (!UF_CALL(UF_initialize()))
        {
                do_ugopen_api();
                UF_CALL(UF_terminate());
        }
}
int ufusr_ask_unload(void)
{
        return (UF_UNLOAD_IMMEDIATELY);
}

 

上一篇:NX二次开发-调用NX自带的拉伸命令对话框


下一篇:数据操纵实验