3.1 UG/Open API函数

3.1.1函数名称的约定

UG/Open API 共有两类名称约定。一个是标准的UG/Open API的函数名称约定;另一个是以前版本原有的名称约定。

(1)、标准名称约定

格式:UF__

说明: UF_,user funciton的简写,表示该函数为UG/Open API函数;

,应用或模块的名称缩写。例如modl和disp分别是 Modeling模块和Display功能的名称缩写;

 ,表示其实现功能的语言描述,一般由下划线分开的动词 和名词(或词组)组成。

常用的动词有:ask(查询)、create(创建)、edit(编辑)、set(设置)、delete(删除)等。

例如:

UF_MODL_create_block1()为创建立方体的函数;

UF_DISP_set_highlight()是高亮显示对象的函数;

(2)非标准名称约定

格式:uc和uf

说明:代表UG/Open API C程序,通常是四位数或三位数接一个字母。

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

3.1.2 函数参数的约定

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

(变量列表);

返回数据类型通常是C数据类型或UG/Open API自定义数据类型。参数的输入输出方式有3种:I(Input)、O(Output)或OF(Output Free),说明见表3-1。

例如:函数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

);

描述:加载一个UG部件文件到UG的界面环境中,并把它设为工作和当前显示部件,该函数的描述见表3-2。

3.2 UG/Open API的数据类型

除了C语言标准的数据类型外,UG/Open API还提供了一些自定义的数据类型,如tag_t类型、结构类型(structure type)、枚举类型(enum type)、联合类型(union type)与指针类型(pointer type)等,它们统一用后缀“_t”表示,且这些数据类型的指针用反缀“_p_t”命名表示。数据类型约定如表3-3所示:

3.2.1 tag_t类型

UG/Open API 使用最多的数据类型是tag_t ,在UG/Open API的uf_defs.h中定义如下:

typedef unsigned int tag_t ,*tag_p_t;

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

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

tag_t tWorkPart;

tWorkPart = UF_ASSEM_ask_work_part();

3.2.2 结构类型

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

struct UF_STYLER_item_value_type_s{

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封装了对话框控件的基本属性,如reason、item_id和value等。UG/Open API使用关键词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 );

3.2.3 枚举类型

枚举类型将变量的值一一列举出来,变量的值只限于列举出来的值的范围。UG/Open API采用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表示部件在装配体中的状态。

UG/Open API使用typedef关键词将该枚举类型定义为新类型UF_ASSEM_load_status_t,例如:

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

tag_t tPart = NULL_TAG;

UF_PART_load_status_t error_status;

UF_PART_open(sPartPath, &tPart, &error_status);

3.2.4 联合类型

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

UG/Open API采用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_toggle;

};

typedef union UF_STYLER_value_u UF_STYLER_value_t;

联合体UF_STYLER_value_u封装了对话框对话框控件的属性值,如string、integer和real等。UG/Open API使用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;

分页: 1 2

c语言与UGNX编程,第3章 编程基础 (UGNX二次开发实用教程)相关推荐

  1. 基于c语言的ug二次开发,(完整)3_UG二次开发实用教程第三章(16页)-原创力文档...

    第 3 章 编程基础 3.1 UG/Open API 函数 3.1.1 函数名称的约定 UG/OpenAPI 共有两类名称约定.一个是标准的 UG/OpenAPI 的函数 名称约定:另一个是以前版本原 ...

  2. c语言运行时更入下一行,C语言高级语言程序设计(一)_第二章 C程序设计基础(二).ppt...

    C语言高级语言程序设计(一)_第二章 C程序设计基础(二) * 问a,b能否交换?不能.示例 传值调用 如何改变参数的值?在后续章节中介绍 下:传值 * 传值的好处 下:问题3.2 * * * 使用范 ...

  3. python快速入门编程第5章编程题

    已知列表li_num1 = [4,5,2,7]和li_num2 = [3,6],请将这两个列表合并成一个列表,并将合并后的列表中的元素按降序排列 用extend()方法在列表末尾一次性添加另一个列表的 ...

  4. c语言逻辑代数常用公式证明,《数据结构C语言版》严蔚敏第二章逻辑代数基础...

    第二章逻辑代数基础,数字电路,1.2.1逻辑代数与基本逻辑关系,在数字电路中,我们要研究的是电路的输入输出之间的逻辑关系,所以数字电路又称逻辑电路,相应的研究工具是逻辑代数(布尔代数).,在逻辑代数中 ...

  5. 初学编程者开始Revit 二次开发自学教程

    ADN 的AEC WorkGroup的Saikat 和我一起开发了一个面向初学编程,但是对Revit产品熟悉的爱好者学习Revit二次开发的自学课程.一共七课.这个课程面向全球的Revit用户,用英文 ...

  6. 第三章 Java基础 (二)

    文章目录 (八)Java的反射机制 1.什么是反射?--框架设计的灵魂 2.字节码Class对象 3.反射机制 (3.1)类成员变量的反射 (3.2)类成员方法的反射 (3.3)类构造方法的反射 (3 ...

  7. Windows核心编程 第六章 线程基础知识 (下)

    6.6 线程的一些性质 到现在为止,讲述了如何实现线程函数和如何让系统创建线程以便执行该函数.本节将要介绍系统如何使这些操作获得成功. 图6 - 1显示了系统在创建线程和对线程进行初始化时必须做些什么 ...

  8. Windows核心编程 第六章 线程基础知识 (上)

    第6章 线程的基础知识 理解线程是非常关键的,因为每个进程至少需要一个线程.本章将更加详细地介绍线程的知识.尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用.还要介绍系统如何使用线程内核 ...

  9. 计算机绘图二维三维实用教程,计算机绘图二维三维实用教程教学课件作者王建勇第二章.ppt...

    文档介绍: 第2章AutoCAD2007绘图基础§2.1AutoCAD2007的启动§2.2AutoCAD2007工作界面§2.3系统的配置§2.4绘图环境的设置§2.5图形文件的管理§2.6命令的输 ...

最新文章

  1. ubuntu 13.10 amd64安装ia32-libs
  2. hibernate EJBQL QBC QBE
  3. 【Java案例】-Jedis操作redis教程
  4. Kettle使用_25 改变文件编码压缩与邮件
  5. JDBC事务--软件开发三层架构--ThreadLocal
  6. Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页
  7. 查看数据库中存在触发器的表
  8. Codeforces 797B - Odd sum
  9. C++设计模式——从多态到观察者模式到MVC架构
  10. EBS AP 创建会计科目失败
  11. 【转】Java 中正确使用 hashCode 和 equals 方法
  12. Linux制作补丁与打补丁简单用法
  13. Python:通过执行100万次打印来比较C和python的性能,以及用C和python结合来解决性能问题的方法 ....
  14. 杰控连接mysql_杰控组态手册22.数据库连接.pdf
  15. java代码演示经典哲学家就餐问题,以及解决方案
  16. XCTF-攻防世界-密码学crypto-新手练习区-writeup
  17. super-csv文档的部分翻译及基本使用
  18. 【探花交友】保存用户信息、上传用户头像、用户信息管理
  19. 黑苹果睡眠唤醒usb失灵_黑苹果解决USB3.0驱动问题
  20. 采用FFmpeg从视频中提取音频(声音)保存为mp3文件

热门文章

  1. 对博士学位说永别(转自王垠blog)
  2. 3.1 随机抽样函数sample()
  3. 拥有着12万亿市场的部件,主角:射频
  4. php循环分页,如何使用PHP在foreach循环中对行进行分页
  5. 电仪事业部继电保护整定计算管理规定
  6. ERP与SCM相结合会更好-云创集团
  7. 大数据分析师的就业前景如何?
  8. 苹果恢复大师能正确使用时的各个软件版本
  9. arcgis textsymbol overlap
  10. 无痕浏览会被保密局的查到吗_无痕浏览模式真的安全吗?在操作中不留下“蛛丝马迹”?你怎么看...