目录
一、概述
二、函数的介绍
2.1 UF_LAYER_ask_category_info (查询图层类别信息)
2.2 UF_LAYER_ask_category_tag(查询图层类别TAG)
2.3 UF_LAYER_ask_status(查询图层的状态)
2.4 UF_LAYER_ask_work_layer(查询工作图层)
2.5 UF_LAYER_set_status (设置图层状态)
2.6 UF_LAYER_set_all_but_work(设置除了工作图层的状态)
2.7 UF_LAYER_set_many_layers_status(设置多个图层的状态)
2.8 UF_LAYER_create_category(创建图层类别)
2.9 UF_LAYER_edit_category_descr(编辑图层类别里的描述)
2.10 UF_LAYER_edit_category_name(编辑图层类别里的名字)
2.11 UF_LAYER_edit_category_layer(编辑图层类别里的具体成员)
2.12 UF_LAYER_cycle_by_layer(遍历图层)
三、源码文件
一、概述
NX二次开发UF帮助文档中关于图层操作主要以下几个方面
(1) 查找工作层;
(2)查询图层的分类、名字、描述及分类成员;
(3)查取图层状态;
(4)创建或编辑图层类别、名字、描述及分类成员;
(5)设置图层状态;
(6) 遍历图层。
注意:总是使用NX函数来确定给定名称的类别是否存在。不建议使用字符串比较来验证类别是否存在。以下是检查类别是否存在的一般准则。
(1)UF_LAYER_ask_category_tag根据层名称获得层组tag。下面是一个检查的函数示例是否已创建类别。
//根据层名称获得层组tag
static tag_t ask_category_tag(char name)
{tag_t object;UF_CALL(UF_LAYER_ask_category_tag(name, &object));return object;
}
从上述函数返回的非空标记(NULL_TAG)表明存在该类别,否则类别不存在。所有其他类别相关的函数,如
UF_LAYER_ask_category_info(查询图层类别信息)
UF_LAYER_ask_category_tag(查询图层类别TAG)
UF_LAYER_ask_status(查询图层的状态)
UF_LAYER_ask_work_layer(查询工作图层)
UF_LAYER_create_category(创建图层类别)
UF_LAYER_cycle_by_layer(遍历图层)
UF_LAYER_edit_category_descr(编辑图层类别里的描述)
UF_LAYER_edit_category_layer(编辑图层类别里的具体成员)
UF_LAYER_edit_category_name(编辑图层类别里的名字)
UF_LAYER_set_all_but_work(设置除了工作图层的状态)
UF_LAYER_set_many_layers_status(设置多个图层的状态)
UF_LAYER_set_status(设置某一个图层的状态)
可以利用所获得的标签。使用这种方法的优点是,这个函数返回与传递的名称相同的类别的标记。我们认为两个名字是相同的如果它们传递不区分大小写的比较。通过这种方式,即使使用大写,它的存在仍然可以使用混合大小写字符串查询。
二、函数的介绍
2.1 UF_LAYER_ask_category_info (查询图层类别信息)
(1)概述
读取类别名称、成员层和描述。
(2)用法说明
tag_t (tag_t类型) category Input(输入) 图层对象类别的TAG
UF_LAYER_category_info_p_t category_info Output(输出) 图层类别信息指针//UF_LAYER_category_info_p_t
/*
name [MAX_ENTITY_NAME_SIZE+1]
char
这个类别的名称。layer_mask [UF_LAYER_MAX_LAYER]
bool
包括哪些图层,总体来说就是就是true为存在否则不存在,也就是该类别下的图层。
每一层的逻辑,是否属于这一类。layer_mask[0]如果层1属于类别,则为TRUE,否则为false。Layer_mask[1]适用于第2层,以此类推。descr [UF_LAYER_CAT_DESC_LEN+1]
char
该层类别的描。*/
2.2 UF_LAYER_ask_category_tag(查询图层类别TAG)
(1)概述
通过类别名字查找该类别的TAG值。
(2)用法说明
char * (字符型指针) category_name Input(输入) 类别名字
tag_t * (tag_t型的指针) category Output(输出) 类别对象TAG。如果为null则类别名不存在
实例:通过类别名称查询类别的名字、包含的图层、描述:
#include<uf_ui.h>
#include <uf_layer.h>/*获取图层类别中的类别名字、包含的图层、类别描述*/
UF_initialize();
//获取一个图层类别的tag
tag_t categoryTAG = NULL_TAG;
UF_LAYER_ask_category_tag("00_FINAL_DATA", &categoryTAG);
//获得图层类别的信息
UF_LAYER_category_info_t info;
UF_LAYER_ask_category_info(categoryTAG, &info);//数据转化
UF_UI_open_listing_window();
char msg[256];
for (int i = 0; i < 256; i++)
{if (info.layer_mask[i]==true){sprintf(msg, "%d", i);UF_UI_write_listing_window(msg);UF_UI_write_listing_window(" ");}
}
UF_UI_write_listing_window(info.name);
UF_UI_write_listing_window("\n");
UF_UI_write_listing_window(info.descr);
UF_terminate();
2.3 UF_LAYER_ask_status(查询图层的状态)
(1)概述
返回图层的状态。
(2)用法说明
const int layer_number Input(输入) 图层数
int * (整数型指针) layer_status Output(输出) 图层的状态
UF_LAYER_WORK_LAYER 工作图层
UF_LAYER_ACTIVE_LAYER 活动图层
UF_LAYER_REFERENCE_LAYER 引用图层
UF_LAYER_INACTIVE_LAYER 不活动图层#define UF_LAYER_WORK_LAYER 1
#define UF_LAYER_ACTIVE_LAYER 2
#define UF_LAYER_REFERENCE_LAYER 3
#define UF_LAYER_INACTIVE_LAYER 4
实例:分别打印四类工作状态
int layer_status, layer_status1, layer_status2, layer_status3;UF_LAYER_ask_status(1, &layer_status);UF_LAYER_ask_status(3, &layer_status1);UF_LAYER_ask_status(8, &layer_status2);UF_LAYER_ask_status(9, &layer_status3);UF_UI_open_listing_window();char msg[256], msg1[256], msg2[256], msg3[256];sprintf(msg, "%d", layer_status);sprintf(msg1, "%d", layer_status1);sprintf(msg2, "%d", layer_status2);sprintf(msg3, "%d", layer_status3);UF_UI_write_listing_window(msg);UF_UI_write_listing_window("\n");UF_UI_write_listing_window(msg1);UF_UI_write_listing_window("\n");UF_UI_write_listing_window(msg2);UF_UI_write_listing_window("\n");UF_UI_write_listing_window(msg3);
2.4 UF_LAYER_ask_work_layer(查询工作图层)
(1)概述
返回工作图层。
(2)用法说明
int * (整数型指针) layer_number Output(输出) Layer number
2.5 UF_LAYER_set_status (设置图层状态)
(1)概述
设置图层状态为:工作层、活动层、参考层、或者说非活动层。当前工作层的状态不能被改变。你必须先设置另一层为工作层,然后更改状态前一个工作层。
(2)用法说明
const int layer_number Input(输入) Layer number
const int layer_status Input(输入) Layer status
UF_LAYER_WORK_LAYER
UF_LAYER_ACTIVE_LAYER
UF_LAYER_REFERENCE_LAYER
UF_LAYER_INACTIVE_LAYER
2.6 UF_LAYER_set_all_but_work(设置除了工作图层的状态)
(1)概述
按指定设置除工作层外的所有层的状态。
(2)用法说明
const int layer_status Input(输入) Layer status
UF_LAYER_WORK_LAYER
UF_LAYER_ACTIVE_LAYER
UF_LAYER_REFERENCE_LAYER
UF_LAYER_INACTIVE_LAYER
2.7 UF_LAYER_set_many_layers_status(设置多个图层的状态)
(1)概述
将指定层设置为相应的指定状态。工作层不是引用的或不活动的。只有一个层可以是工作层。如果出现任何错误,则不修改任何层的状态。
(2)用法说明
const int count_of_layers Input(输入) 指定图层的数量
UF_LAYER_status_info_p_t changes Input(输入) 一种结构数组,其中数组中的每个元素都是包含层号和状态的结构。
//UF_LAYER_status_info_p_t
/*
layer_number
int
此状态所对应的层号。有效的层是UF_LAYER_MIN_LAYER到UF_LAYER_MAX_LAYERlayer_status
int
对应图层的状态
UF_LAYER_WORK_LAYER
UF_LAYER_ACTIVE_LAYER
UF_LAYER_REFERENCE_LAYER
UF_LAYER_INACTIVE_LAYER
*/
实例:设置图层4~11为活动图层
int count = 8;
UF_LAYER_status_info_t infox[256];
for (int i = 0; i < count; i++)
{infox[i].layer_number = 4 + i;infox[i].layer_status = UF_LAYER_ACTIVE_LAYER;
}
UF_LAYER_set_many_layers_status(8, infox);
2.8 UF_LAYER_create_category(创建图层类别)
(1)概述
创建类别名称、成员层和描述。
(2)用法说明
UF_LAYER_category_info_p_t category_info Input(输入) 类别消息结构体
tag_t * (tag_t型的指针) category Output(输出) 类别的TAG
//UF_LAYER_category_info_p_t
/*
name [MAX_ENTITY_NAME_SIZE+1]
char
这个类别的名称。layer_mask [UF_LAYER_MAX_LAYER]
bool
包括哪些图层,总体来说就是就是true为存在否则不存在,也就是该类别下的图层。
每一层的逻辑,是否属于这一类。layer_mask[0]如果层1属于类别,则为TRUE,否则为false。Layer_mask[1]适用于第2层,以此类推。descr [UF_LAYER_CAT_DESC_LEN+1]
char
该层类别的描。*/
实例:1~5图层进行创建类别,以及命名描述
UF_LAYER_category_info_t category;tag_t categoryTAG = NULL_TAG;strcpy(category.name, "图层类别名字");strcpy(category.descr, "图层类别描述");for (int i = 0; i < 256; i++){if (i>=0&&i<8){category.layer_mask[i] = true;}else{category.layer_mask[i] = false;}}UF_LAYER_create_category(&category, &categoryTAG);
2.9 UF_LAYER_edit_category_descr(编辑图层类别里的描述)
(1)概述
编辑图层类别的描述。
(2)用法说明
tag_t (tag_t类型) category Input(输入) 图层类别TAG
char * (字符型指针) cat_descr Input(输入) 图层类别的新的描述
2.10 UF_LAYER_edit_category_name(编辑图层类别里的名字)
(1)概述
编辑图层类别的名字。
(2)用法说明
tag_t (tag_t类型) category Input(输入) 图层类别TAG
char * (字符型指针) cat_name Input(输入) 图层类别的新名字
2.11 UF_LAYER_edit_category_layer(编辑图层类别里的具体成员)
(1)概述
编辑图层类别的名字。
(2)用法说明
tag_t (tag_t类型) category Input(输入) 图层类别TAG
logical layer_mask[UF_LAYER_MAX_LAYER] Input(输入) A logical for each layer, does it belong to this category or not. layer_mask[0] is TRUE if layer 1 belongs to the category, otherwise it is false. layer_mask[1] applies to layer 2, and so on.
实例:将上述的1~5图层换为6~10
UF_LAYER_category_info_t category;tag_t categoryTAG = NULL_TAG;strcpy(category.name, "图层类别名字");strcpy(category.descr, "图层类别描述");for (int i = 0; i < 256; i++){if (i>=0&&i<5){category.layer_mask[i] = true;}else{category.layer_mask[i] = false;}}UF_LAYER_create_category(&category, &categoryTAG);for (int i = 0; i < 256; i++){if (i >= 5 && i<10){category.layer_mask[i] = true;UF_LAYER_edit_category_layer(categoryTAG, category.layer_mask);}else{category.layer_mask[i] = false;}}
2.12 UF_LAYER_cycle_by_layer(遍历图层)
(1)概述
用来遍历图层的,它可以查找某一个图层下面的所有对象;或者是所有图层的所有对象,得到它的tag值。比如我们想开发一个一键删除所有图层的的所有对象的工具。
(2)用法说明
int (整数型) layer_number Input(输入) 要遍历的图层,如果为0,遍历所有的图层
tag_t * (tag_t型的指针) object_tag Input/Output 图层中对象的TAG,如果没有对象,则object_tag = NULL_TAG
实例:遍历指定图层,删除图层中所有的对象
#include <uf_object_types.h>
#include <uf_layer.h>
#include <uf_ui.h>
#include <uf_modl.h>
#include <uf_obj.h>UF_initialize();
tag_t objTAG = NULL_TAG;
char msg[256];
//UF_UI_open_listing_window();
int i = -1;
uf_list_p_t list;
UF_MODL_create_list(&list);
do
{UF_LAYER_cycle_by_layer (0, &objTAG);i++;UF_MODL_put_list_item (list,objTAG);//sprintf (msg, "%d",objTAG);//UF_UI_write_listing_window (msg);//UF_UI_write_listing_window ("\n");
} while (objTAG !=NULL_TAG);//删除链表里面的所有对象
int coutlist;
tag_t objectTAG = NULL_TAG;
UF_MODL_ask_list_count (list,&coutlist);for (int i = 0; i < coutlist; i++)
{UF_MODL_ask_list_item (list,i,&objectTAG);UF_OBJ_delete_object (objectTAG);
}
UF_MODL_delete_list(&list);UF_terminate();
三、源码文件
https://download.csdn.net/download/weixin_47753171/89207997
https://download.csdn.net/download/weixin_47753171/89208115