nx二次开发c语言,NX二次开发-UFUN API函数编程基础

1.NXOpen C 的函数

函数名称的约定

NX Open C 共有2类名称约定:一个是标准的NX Open C 的函数名称约定;另一个是以前版本的原有的名称约定。

1.标准名称约定

【格式】UF__

【说明】

(1)UF:User Funciton的简写,表示该函数为NX Open C 函数。

(2):应用或模块的名称缩写。例如MODL和DISP分别是Modeling模块和Display功能的名称缩写。

(3):表示其实现功能的语言描述,一般由下划线分开的动词和名词(或词组)组成。常用的动词由ask(查询)、create(创建)、edit(编辑)、set(设置)、delete(删除)等。

例如:

UF_MODL_create_block1() 为创建块的函数;

UF_DISP_set_highlight()为高亮显示对象的函数。

【格式】uc和uf

【说明】代表NX Open C 函数,通常为4位数或3位数接一个字母。

例如:uc1601位一个提示信息函数。

-----------------------------------------------------------------------------------------------------------------------------------

函数参数的约定

NX Open C 提供的函数遵守ANSI/ISO C的标准。并以下列格式在头文件中提供函数原型:

(变量列表);

返回数据类型通常是C语言数据类型或NX Open C自定义数据类型。参数的输入输出方式有3种,分别为I(Input)、O(Output)和OF(Output Free),具体说明见表。

参数输入方式说明

元素

描述

I

表示参数为输入方式,参数在使用前必须赋值

O

表示参数为输出方式,使用前无须赋值

OF

表示参数为输出方式,切使用后需要释放内存。NX Open 提供的常用释放内存函数有UF_free()、UF_free_string()和UF_STYLER_free_value()等,至于选择哪种释放函数需视具体情况而定

例如,函数UF_PART_open()的相关信息如下:

【名称】UF_PART_open

【使用环境】Internal & External

【语法格式】

int UF_PART_open(

char *part_name,

tag_t *part,

UF_PART_load_status_t *error_status );

【描述】加载一个NX部件文件到NX的交互环境中,并把它设为工作部件和当前显示部件,该函数的描述见表。

函数UF_PART_open参数描述

6c1555302777729326ca3efa0910d9ec.png

2.NX Open C 的数据类型

除了C语言标准的数据类型外,NX Open C还提供了一些自定义的数据类型,如tag_t类型、结构类型(Structure Type)、枚举类型(Enum Type)、联合类型(Union Type)与指针类型(Pointer Type)等,它们统一用后缀“_t”表示,且这些数据类型的指针用后缀“_p_t”命名表示。

数据类型约定如表所示

后缀

描述

_t

数据类型

_p_t

数据类型的指针

_s

结构类型

_e

枚举类型

_u

联合类型

_f_t

函数指针

tag_t 类型

NX Open C 使用最多的数据类型是tag_t,在“%UGII_BASE_DIR%\ugopen”目录下,文件uf_defs.h中定义如下:

typedef unsigned int tag_t, *tag_p_t;

在NX环境中,tag_t是NX对象的句柄,即任何确定存在的NX对象的唯一标识。它是一种不重复的无符号整型数值,主要用于标识应用程序中的对象,如部件、特征、草图、曲线、属性和表达式导等。NX应用程序只能访问句柄,而不能直接访问句柄所指示的实际对象。应用程序一般通过调用API函数获取句柄,并且在其他API函数中使用这个句柄,以引用它指示的对象,在此过程中,句柄的实际值对程序来说是无关紧要的。NULL_TAG是用来表示暂时不标识任何对象的Tag,相当于初始值为零。此外,tag_p_t是指向tag_t数据类型的指针。

以部件对象为例,下面的代码首先获取工作部件的tag_t值,然后获取该句柄所引用部件对象的文件名:

tag_t tWorkPart;

char cPartName[128];

tWorkPart = UF_ASSEM_ask_work_part();

UF_PART_ask_part_name(tWorkPart, cPartName);

结构类型

NX Open C 采用C语言的语法定义了一些常用的结构类型,将相关的不同类型数据封装在一起使用,这些结构类型用后缀“_s”表示。例如:

struct UF_STYLER_item_id;

{

int reason;

const char *item_id;

int subitem_index;

int count;

int item_attr;

int indicator;

UF_STYLER_value_t value;

}

Typedef struct UF_STYLER_item_value_type_s UF_STYLER_item_value_type_t,

*UF_STYLER_item_value_type_p_t;

结构体UF_STYLER_item_value_type_s封装了UI Styler对话框控件的基本属性,如reason、item_id和value等。

NX Open 使用关键字typedef将该结构类型定义为新类型UF_STYLER_item_value_type_t,用户可以使用它定义结构变量,然后引用结构体内的数据成员。例如:

UF_STYLER_item_value_type_t data;

UF_STYLER_ask_value(dialog_id, &data);

...

UF_STYLER_free_value(&data);

枚举类型

枚举类型将变量的值一一列举出来,变量的值只限于所列举的范围。NX Open C 采用C语言的语法定义了一些常用的枚举类型,使用后缀“_e”表示。以枚举类型UF_ASSEM_load_status_e为例,下面给出其详细定义:

enum UF_ASSEM_load_status_e

{

UF_ASSEM_ok,

UF_ASSEM_suppressed,

UF_ASSEM_not_loaded,

UF_ASSEM_instance_suppressed

};

typedef enum UF_ASSEM_load_status_e UF_ASSEM_load_status_t;

枚举类型 UF_ASSEM_load_status_e 表示部件在装配体中的状态。NX Open C 使用typedef关键字将该枚举类型定义为新类型UF_ASSEM_load_status_t,例如:

char sPartPath[] = "E:\\Example\\part.prt";

tag_t tPart = NULL_TAG;

UF_ASSEM_load_status_t error_status;

UF_PART_open(sPart, &tPart, &error_status);

联合类型

有时候需要将不同数据类型的变量放在同一段内存单元中,这种使不同变量占用同一段内存的结构类型称为联合类型。联合类型与结构类型的定义形式相似,但含义不同。联合类型变量所占的内存长度等于其内部最长数据成员的长度,而结构类型变量所占的内存长度则是其各数据成员所占内存长度之和。

NX Open C 采用C语言的语法定义了一些常用的联合类型,使用后缀“_u”表示。以联合类型UF_STYLER_value_u为例,下面给出其详细定义:

union UF_STYLER_value_u

{

char *string;

char **strings;

int integer;

int *integers;

double real;

double *reals;

UF_UI_selection_p_t selection;

UF_STYLER_notification_p_t notify;

UF_UI_attachment_t attach;

UF_UI_option_toggle_t option_tiggle;

};

typedef union UF_STYLER_value_u UF_STYLER_value_t;

联合体UF_STYLER_value_u 封装了UI Styler 对话框,对话框控件的属性,如string、integer和real等。NX Open 使用typedef关键字将该联合类型定义为新的类型UF_STYLER_value_t,它是UF_STYLER_item_value_type_t中的数据成员value的类型,例如:

UF_STYLER_item_value_type_t data;

double rValue;

sel_data.item_id = REAL_BUTTOM_DIAMETER;

UF_STYLER_ask_value(dialog_id, &sel_data);

rValue = data.value.real;

NX二次开发技术专栏

NX二次开发技术专栏【持续更新】

点击进入专栏

更多NX二次开发内容

NX二次开发-数据类型结构及类型转换博客目录【持续更新】

点击进入目录

NX二次开发-UFUN API函数例子博客目录【持续更新】

点击进入目录

NX二次开发-Block UI控件的获取例子博客目录【持续更新】

点击进入目录

NX二次开发-算法应用博客目录【持续更新】

点击进入目录

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

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

相关文章

JMeter压力测试入门教程[图文]

Apache JMeter是Apache组 织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。…

.NET6之MiniAPI(二十九):UnitTest

MiniAPI的单元测试与asp.net web api的单元测试大体是相同的(毕竟都是asp.net core),只是在小细节上有一些差异,文章中会说到这点。本文测试框架是XUnit,Mock框架是Moq,关于这两个框架和库的学习&#xff0…

vue data数据修改_Vue 超清晰思维导图(7张),详细知识点梳理!

Vue思维导图目录MVC与MVVM的区别Vue基本代码结构Vue指令Vue组件class和style动态绑定computed计算属性EventBusfilter过滤器方法Vue是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有…

界面连接数据库

1、获取本机的SQL Server服务器名 private void Form2_Load(object sender, EventArgs e){listBox1.Items.Clear();SQLDMO.Application SQLServer = new SQLDMO.Application();SQLDMO.NameList strServer = SQLServer.ListAvailableSQLServers();if (strServer.Count > 0){f…

Xamarin效果第二十篇之GIS中加载三维白模

在前面文章中简单玩了玩GIS的基本操作、Mark相关、AR和测距,今天再次分享一下N年前就像玩耍的效果;啥也不说了都在效果里:再来看看手机端的效果:1、关于效果我也是偶然见看到了别人实现:https://blog.csdn.net/arcgis_all/article/details/769991042、关于实现就是在三维场景图…

visa虚拟卡生成器_虚拟卡有哪些功能?赶紧了解一下

现在很多人都会有机会出国,或者是直接在国外生活,他们时不时的会到国内办理一些事情,而这个时候为了确保信用卡在使用的时候安全,有些人就会申请使用虚拟信用卡,这样不但可以解决跨国支付的麻烦,从而确保在…

android编程绘图,Android编程绘图操作之弧形绘制方法示例

本文实例讲述了Android编程绘图操作之弧形绘制方法。分享给大家供大家参考,具体如下:/*** 绘制弧形图案* description:* author ldm* date 2016-4-25 下午4:37:01*/public class ArcsActivity extends Activity {Overrideprotected void onCr…

BeetleX实现MessagePack和Protobuf消息控制器调用websocket服务详解

最近有用户问如何使用BeetleX封装一个基于Protobuf格式的websocket服务并支持控制器调用;其实BeetleX.FastHttpApi是支持Websocket服务和自定义数据格式的,但需要对组件有一定了解的情况才能进行扩展;接下来通过封装一个支持Protobuf和Messag…

vue 获取url地址的参数_2020年 vue常见面试问题总结(干货)!

1.什么是mvvm模式,谈谈你的理解? MVVM - Model View ViewModel,数据,视图,视图模型view 可以通过 事件绑定 的方式影响 model,model 可以通过 数据绑定 的形式影响到view,viewModel是把 model 和…

CSS 定位之绝对与相对

static,relative,absolute,fixed含义 static(静态定位):元素框正常生成。块级元素生成一个矩形框,作为文档流的的一部分,行内元素则会常见一个或多个行框,至于其父元素中。默认值。没有定位,元素出现在正常的流中(忽略…

[第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui。使用 OAuth 2.0 和 OpenIdConnect 进行保护随着应用程序越来越多地使用 OAuth 和 OpenIdConnect,应用程序很有可能使用 OAuth 和 OpenID…

python opencv 图像切割_【OpenCV+Python】图像的基本操作与算术运算

图像的基本操作在上个教程中,我们介绍了使用鼠标画笔的功能。本次教程,我们将要谈及OpenCV图像处理的基本操作。本次教程的所有操作基本上都和Numpy相关,而不是与OpenCV相关。要使用OpenCV编写更好的优化代码,需要Numpy的丰富知识…

光伏领跑者火热前行 可靠性护航“长跑”

随着第三批光伏领跑者申报标准的出台,在目前普通电站指标有可能缩水的情况下,2017年8-10GW的光伏领跑者项目又将成为各电站投资商争夺的“红海”。光伏领跑者在过去两年时间里为行业带来的变化有目共睹,从模式创新到电价下降,快速…

鸿蒙os系统被推送,鸿蒙来了!华为大规模推送鸿蒙OS系统,造成网站一度瘫痪...

千呼万唤始出来,期盼已久的手机鸿蒙OS系统终于迎来了大规模推送!今年2月份在华为Mate X2折叠屏手机发布会上,华为就曾表示将在4月份开始大规模推送鸿蒙OS系统,4月27日通过测试申请的用户正式接到升级鸿蒙OS系统的通知,…

jps、jinfo、jstat、jstack、jmap、jconsole等命令简介

2019独角兽企业重金招聘Python工程师标准>>> JDK提供了几个很实用的工具,如下: jinfo:观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数,java class path等信息。命令格式&…

读《底层逻辑》

《底层逻辑》本书作者是刘润,他在得到上开设了课程《5 分钟商学院》,我也是在得到上知道的这本书,这本书在豆瓣上的评分不是很高,褒贬不一,不过我看着觉得挺好。看了一些豆瓣的评论,觉得这本书不好有这么几…

2016年:勒索病毒造成损失预估超过10亿美元

根据趋势科技公布的最新报告(PDF),2016年是敲诈勒索软件频发的一年,同比增长752%,预测由Locky、Goldeneye等勒索病毒所造成的损失超过10亿美元。报告中同时指出企业和个人是勒索软件的重灾区,而且勒索病毒还…

python3.6字典有序_为什么从Python 3.6开始字典有序并效率更高

在Python 3.5(含)以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插入字典,但是当你打印字典的Keys列表时,你会发现B可能在A的前面。 但是从Python 3.6开始,字典是变成有顺序…

Linux的进程/线程间通信方式总结

2019独角兽企业重金招聘Python工程师标准>>> Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式:包括信号量(Semaphore), 消息队列(Me…

开源作者去世后,代码谁来继承?

文 | 肖滢出品 | OSC开源社区(ID:oschina2013)2008 年初,澳大利亚一对兄弟 Simon Zerner 和 Toby Zerner 开始了 esoTalk 的开发。不幸的是, esoTalk 尚处于 Alpha 阶段,主力开发人员哥哥 Simon 就在 2009 年年中去世。…