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_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 报错 error adding seccomp filter rule for syscall clone3

网上有一些说法&#xff0c;例如重新安装docker 但是我自己尝试&#xff0c;用 –security-opt seccompunconfined 就可以&#xff0c;但是需要把这个命令放到紧挨着run的位置&#xff0c;如果放到偏后的位置&#xff0c;可能不起作用。 以下命令是其他网友启动是的命令&…

UG10.如何设置鼠标滚轮操作模型放大缩小方向?

UG10.如何设置鼠标滚轮操作模型放大缩小方向呢&#xff1f;看一下具体操作步骤吧。 首先打开UG10.软件&#xff0c;在主菜单栏选择【文件】下拉菜单&#xff0c;选择【实用工具】。 点击【用户默认设置】。 文章源自四五设计网-https://www.45te.com/45545.html 选中【基本环…

mongodb 安装问题

1. mongodb启动时显示 Illegal instruction (core dumped) mongodb 5.0之后(包括5.0) 开始使用需要使用 AVX 指令集 2.启动时报错 ERROR: child process failed, exited with 1 通过指令 bin/mongod --repair 查看报错信息 根据报错信息进行修改

Ps 滤镜:波浪

Ps菜单&#xff1a;滤镜/扭曲/波浪 Filter/Distort/Wave 波浪 Wave滤镜可以在图像上创建复杂且可控的波浪形变效果。此滤镜提供了丰富的选项&#xff0c;可以精确调整波浪的形状、大小和分布&#xff0c;以实现不同的视觉效果。 “波浪”滤镜通过对图像应用数学波形函数来扭曲图…

自己写的加密案例4——某东方课程头部sign加密

网址&#xff1a;aHR0cHM6Ly9kc2FwaS54ZGYuY24vcHJvZHVjdC92Mi9jbGFzcy9zZWFyY2g 进行抓包分析&#xff0c;发现请求头中由sign加密&#xff0c;简单判断是消息摘要算法。 Sign:d7c68100ca508bb7c8ae284560754303 进行xhr断点&#xff0c;一下子就发现了位置。 s c.sign&…

linux下 Mysql8.0 离线安装

环境&#xff1a;centos7.9 MysqlL8.0.36安装包 链接&#xff1a;https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码&#xff1a;3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…

单片机 VS 嵌入式LInux (学习方法)

linux 嵌入式开发岗位需要掌握Linux的主要原因之一是&#xff0c;许多嵌入式系统正在向更复杂、更功能丰富的方向发展&#xff0c;需要更强大的操作系统支持。而Linux作为开源、稳定且灵活的操作系统&#xff0c;已经成为许多嵌入式系统的首选。以下是为什么嵌入式开发岗位通常…

Valentina Studio Pro for Mac:强大的数据库管理工具

Valentina Studio Pro for Mac是一款功能全面、操作高效的数据库管理工具&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户轻松管理各种类型的数据库。 Valentina Studio Pro for Mac v13.10激活版下载 该软件拥有直观的用户界面&#xff0c;使得数据库管理变得简单直观。…

自动驾驶控制算法

本文内容来源是B站——忠厚老实的老王&#xff0c;侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦&#xff0c;将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念&#xff1a; 运动学方程 建立微分方程 主要是弄…

探索数学语言模型的前沿进展——人工智能在数学教育和研究中的应用

数学一直被认为是科学的基石&#xff0c;对于推动技术进步和解决现实世界问题具有重要意义。然而&#xff0c;传统的数学问题解决方式正面临着数字化转型的挑战。MLMs的出现&#xff0c;预示着数学学习和研究方式的一次革命。 MLMs&#xff0c;包括预训练语言模型&#xff08;…

不安全软件,2024 年供应商该如何应对漏洞?

关键在于代码 使用专用工具和系统分析产品代码编写的各个阶段。 与安全研究人员合作 理想情况下&#xff0c;每个供应商都应该有自己持续的漏洞赏金计划&#xff0c;以测试基础设施、软件发布流程和最终产品。这将有助于在真正的攻击发生之前发现漏洞&#xff0c;保护客户。…

丰田是如何用精益理念改变制造业的?

丰田&#xff0c;这个全球知名的汽车制造商&#xff0c;不仅以其高质量的产品赢得了消费者的信赖&#xff0c;更以其独特的精益理念深刻改变了整个制造业的面貌。那么&#xff0c;丰田究竟是如何用精益理念引领制造业变革的呢&#xff1f;天行健精益管理培训公司解析如下&#…

思科 Packet Tracer 实验八 DHCP基本配置(以路由为中继)

一、实验目的 了解思科网络设备的配置基本特点及 IOS 命令基本操作方法 了解DHCP的工作原理及基本配置 二、实验过程 1) 实验拓扑如下&#xff1a; 2&#xff09;由于使用DHCP‘协议动态配置ip&#xff0c;所以除了DHCP服务器和路由器接口外其他的主机&#xff0c;服务器的i…

LeetCode 热题 100 Day04

矩阵相关题型 Leetcode 73. 矩阵置零【中等】 题意理解&#xff1a; 将矩阵中0所在位置&#xff0c;行|列置换为全0 其中可以通过记录0元素所在的行、列号&#xff0c;来标记要置换的行|列 将对应位置置换为0 解题思路&#xff1a; 第一个思路&#xff1a; 可以…

CSRF 跨站请求伪造

CSRF漏洞 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&…

[Linux][多线程][二][线程互斥][互斥量][可重入VS线程安全][常见锁概念]

目录 1.线程互斥1.互斥相关背景概念2.多个线程并发的操作共享变量&#xff0c;会带来一些问题3.互斥量mutex 2.互斥量的接口1.初始化互斥量2.销毁互斥量3.加锁4.解锁5.使用 -- 改善上面代码 3.互斥量实现原理探究1.加锁是如何保证原子性的&#xff1f;2.如何保证锁是原子性的&a…

【计算机组成原理】浮点运算方法和浮点运算器

浮点加法、减法运算 浮点数加减法的步骤结合题目分析步骤 浮点数加减法的步骤 ① 0 操作数检查 ② 比较阶码大小&#xff0c;完成对阶 ③ 尾数进行加减法运算 ④ 结果规格化 ⑤ 舍入处理 ⑥ 判断结果是否溢出 结合题目分析步骤 例&#xff1a;设 x 2010 0.11011011&#x…

Hadoop3:HDFS、YARN、MapReduce三部分的架构概述及三者间关系(Hadoop入门必须记住的内容)

一、HDFS架构概述 Hadoop Distributed File System&#xff0c;简称HDFS&#xff0c;是一个分布式文件系统。 1&#xff09;NameNode(nn)&#xff1a;存储文件的元数据&#xff0c;如文件名&#xff0c;文件目录结构&#xff0c;文件属性&#xff08;生成时间、副本数、文件…

springboot整合mybatis-puls登陆注册

目录 创建springboot项目 目录结构&#xff1a; 启动类 测试类 idea建表 pom文件 编写yml文件 qq邮箱设置 登陆注册代码 编写持久层(Dao) 注册代码 业务层 业务实现类 mapper 控制层 前端代码 注册页面 邮件正文&#xff1a; 登录代码 控制层 业务层&#…

索引【MySQL】

文章目录 什么是索引测试表 磁盘和 MySQL 的交互了解磁盘MySQL 的工作原理Buffer Pool 理解索引引入Page 的结构页内目录&#xff08;Page Directory&#xff09;多页情况B 树和 B树聚簇索引和非聚簇索引 主键索引创建 唯一索引主要特点与主键索引的区别使用场景创建 联合索引工…