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参数描述

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二次开发-算法应用博客目录【持续更新】

点击进入目录

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

  1. arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO

    作者:爪爪熊 链接:https://www.jianshu.com/p/0495c0554a63 來源:简书 之前将go语言的运行环境给搭建起来了,但是没有开始真正的试试Go 语言操作树莓派硬件的效果 ...

  2. 本构二次开发 c语言,umat二次开发超弹性本构.doc

    umat二次开发超弹性本构 APPENDIXNeo-Hookean Hyperelatic Material User SubroutineThis program is based on the d ...

  3. 国二试题库c语言,国二c语言笔试试题库(试题).doc

    PAGE 49 第一章 C语言概述 一 单项选择题 1.一个C程序的执行是从( ). A) 本程序的main函数开始,到main函数结束 B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结 ...

  4. tc开发c语言的,TC简单开发

    概要 在第一章中,我们已经看到程序中使用的变量都应预先加以定义,即先定义,后使用.对变量的定义可以包括三个方面:数据类型 存储类型 作用域 在本章中,我们只介绍数据类型的说明.其它说明在以后各章中陆续 ...

  5. c开发 易语言支持库,易写易库-用易语言开发易语言支持库.pdf

    易写易库-用易语言开发易语言支持库 易写易库(EXEK)用户手册 版本:0.2 作者:liigo,/liigo 时间:2008.10 概述 EXEK EXEK "易写易库(EEXXEEKK) ...

  6. 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建

    ‍原文链接:区块链基础语言(二)--Go语言开发环境搭建 一.操作系统位数的查询方法‍ 在安装前首先要了解个人的电脑系统位数是32位还是64位. 1.1Windows系统查询方法 右击"计算 ...

  7. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  8. acr单片机c语言开发入门,AutoCAD2013二次开发C语言第一个ObjectArx2013程序HelloWorld.docx...

    AutoCAD2013 二次开发 C++语言的第一个 ObjectArx2013 程序 HelloWorld .八,.■ 刖言 AutoCAD2013 二次开发 C++语言的 ObjectArx SD ...

  9. Python 语言 SAP2000 二次开发 实例

    目 录 Blog Links Remarks Example Blog Links DalNur | 博客总目录 Python语言 SAP2000 二次开发 -- 概述 Python语言 SAP200 ...

最新文章

  1. oracle分页的方法,Oracle数据库分页的集中方法(三种方法)
  2. SQLAlchemy的使用---外键ForeignKey数据库创建与连接
  3. 一起谈.NET技术,浅谈如何使用.NET存储XML数据
  4. P1477-[NOI2008]假面舞会【构图,dfs,gcd】
  5. [bash]删除文件中含特定字符串的行
  6. 服务器系统核心和带gui区别,Windows Server 2012图形用户界面(GUI)和服务器核心(Server Core)之间的切换...
  7. KernelShark Documentation
  8. cad渐开线画法lisp程序_cad渐开线怎么画
  9. 项目经理的商务指南系列之四:认识谈判(不做传声筒,不做顶门闩,进退之策,进退之法,有机事者必有机心)...
  10. 网页打不开微信连接到服务器失败是怎么回事,微信打不开网页怎么回事?
  11. java文件转base64
  12. matlab手眼标定,机器人手眼标定(eye to hand和eye in hand)
  13. mac上如何官网下载安装virtualbox
  14. Google Map Web服务API
  15. 计算机房灭火器采用哪种类型,机房灭火器类型有哪些
  16. rfm模型python_使用python实现RFM模型
  17. matlab求逆函数— inv函数
  18. 洛谷P2664 树上游戏 【点分治 + 差分】
  19. 思博伦PosApp(Positioning Application)使用方法——如何设置动态载具
  20. Discuz!教程之论坛编辑器默认勾选HTML代码的修改方法

热门文章

  1. 2020.NET开发者大会大会线上同步直播,以及参会秘籍
  2. .net5+nacos+ocelot 配置中心和服务发现实现
  3. .NET Core 下的爬虫利器
  4. 带你深入探究云原生时代的分布式操作系统 Kubernetes
  5. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化
  6. .NET 社区 NB,2019 中国 .NET 开发者峰会
  7. 编写优雅代码,从挖掉恶心的if/else 开始
  8. VS2017 无法连接到Web服务器“IIS Express”终极解决方案
  9. Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用...
  10. 祝大家狗年家庭事业旺旺旺