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