热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

3.1UGOpenAPI函数3.1.1函数名称的约定UGOpenAPI共有两类名称约定。一个是标准的UGOpenAPI的函数名称约定;另一个是以前版本原有的名称约定。

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。

4e04f4a19ba5514b793bc7f33d10cd9b.png

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

319982f2fe3a8c8336ec44701e77d8b0.png

989b87124fa2ef3ab4fba0f6d1c51837.png

3.2 UG/Open API的数据类型

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

09d1d04a4d37b68ffd3dc5a117ecc6a0.png

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



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
author-avatar
琳琳小朋友m
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有