NX二次开发UF_LAYER(图层相关操作)常用函数

目录

一、概述

二、函数的介绍

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_LAYER

layer_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

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白雪公主的后妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值