3UG二次开发实用教程 第三章.docx
- 文档编号:5781585
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:16
- 大小:24.87KB
3UG二次开发实用教程 第三章.docx
《3UG二次开发实用教程 第三章.docx》由会员分享,可在线阅读,更多相关《3UG二次开发实用教程 第三章.docx(16页珍藏版)》请在冰豆网上搜索。
3UG二次开发实用教程第三章
第3章编程基础
3.1UG/OpenAPI函数
3.1.1函数名称的约定
UG/OpenAPI共有两类名称约定。
一个是标准的UG/OpenAPI的函数名称约定;另一个是以前版本原有的名称约定。
1、标准名称约定
格式:
UF__
说明:
●UF_,userfunciton的简写,表示该函数为UG/OpenAPI函数;
●,应用或模块的名称缩写。
例如modl和disp分别是Modeling模块和Display功能的名称缩写;
●
常用的动词有:
ask(查询)、create(创建)、edit(编辑)、set(设置)、delete(删除)等。
例如:
UF_MODL_create_block1()为创建立方体的函数;
UF_DISP_set_highlight()是高亮显示对象的函数;
(2)非标准名称约定
格式:
uc
说明:
代表UG/OpenAPIC程序,
例如:
uc1601是一个提示信息函数。
3.1.2函数参数的约定
UG/OpenAPI提供的函数遵守ANSI/ISOC的标准,并以下列格式在头文件中提供函数原型:
<返回数据类型><函数名>(变量列表);
返回数据类型通常是C数据类型或UG/OpenAPI自定义数据类型。
参数的输入输出方式有3种:
I(Input)、O(Output)或OF(OutputFree),说明见表3-1。
表3-1 参数输入方式说明
元素
描述
I
表示参数为输入方式,参数在使用前必须赋值
O
表示参数为输出方式,使用前无须赋值
OF
表示参数为输出方式,且使用后需要释放内存。
UG/OpenAPI提供的常用释放内存函数有UF_free()、UF_free_string()和UF_STYLER_free_value()等,至于选择哪种释放函数需视具体情况而定。
例如:
函数UF_PART_open()
名称:
UF_PART_open
使用环境:
internal&external
语法格式:
intUF_PART_open(
char*part_name,
tag_t*part,
UF_PART_load_status_t*error_status
);
描述:
加载一个UG部件文件到UG的界面环境中,并把它设为工作和当前显示部件,该函数的描述见表3-2。
表3-2函数UF_PART_open()参数描述
参数
输入\输出
类型
描述
part_name
输入
char*
要打开的部件文件名
part
输出
tag_t*
打开部件的标识,当打开部件文件失败时为NULL_TAG
error_status
输出
UF_PART_load_status_t*
当加载部件失败时该结构中将包含错误代码和部件文件名称,使用结束后应使用函数UF_free_string_arry()和UF_free()释放内存
return
输出
int
返回代号:
为0时表示正常;
非0时表示错误代号
3.2UG/OpenAPI的数据类型
除了C语言标准的数据类型外,UG/OpenAPI还提供了一些自定义的数据类型,如tag_t类型、结构类型(structuretype)、枚举类型(enumtype)、联合类型(uniontype)与指针类型(pointertype)等,它们统一用后缀“_t”表示,且这些数据类型的指针用反缀“_p_t”命名表示。
数据类型约定如表3-3所示:
表3-3数据类型约定
后缀
描述
_t
数据类型(datatype)
_p_t
数据类型的指针(pointertodatatype)
_s
结构标识(structuretag)
_u_t
联合类型(uniontype)
_u_p_t
联合类型的指针(pointertoauniontype)
_f_t
函数指针(pointertoafunction)
3.2.1tag_t类型
UG/OpenAPI使用最多的数据类型是tag_t,在UG/OpenAPI的uf_defs.h中定义如下:
typedefunsignedint tag_t,*tag_p_t;
在UG环境中,tag_t是UG对象的句柄,即UG对象模型的唯一标识。
它是一种不重复的无符号整型数值,主要用于标识应用程序中的对象,如部件、草图、曲线、属性和表达式等。
UG应用程序只能访问句柄,而不能直接访问句柄所指示的实际对象。
程序一般通过调用API函数获取句柄,并且在其他API函数中使用这个句柄,以引用它指示的对象。
在此过程中,句柄的实际值对程序来说是无关紧要的。
此外,tag_p_t是指向tag_t数据类型的指针。
以部件对象为例,下面的代码首先获取工作部件的tag_t值,然后获取该句柄所引用部件对象的文件名。
tag_ttWorkPart;
tWorkPart=UF_ASSEM_ask_work_part();
3.2.2结构类型
UG/OpenAPI采用C语言的语法定义了一些常用的结构类型,将相应联系的不同类型数据封装在一起使用,这些结构类型用后缀“_s”表示,例如:
structUF_STYLER_item_value_type_s{
intreason;
constchar*item_id;
intsubitem_index;
intcount;
intitem_attr;
intindicator;
UF_STYLER_value_tvalue;
}
typedefstructUF_STYLER_item_value_type_sUF_STYLER_item_value_type_t,*UF_STYLER_item_value_type_p_t;
结构体UF_STYLER_item_value_type_s封装了对话框控件的基本属性,如reason、item_id和value等。
UG/OpenAPI使用关键词typedef将该结构类型定义为新类型UF_STYLER_item_value_type_t,用户可以使用它定义结构变量,然后引用结构体内的数据成员,例如:
UF_STYLER_item_value_type_tdata;
UF_STYLER_ask_value(dialog_id,&data);
…
UF_STYLER_free_value(&data);
3.2.3枚举类型
枚举类型将变量的值一一列举出来,变量的值只限于列举出来的值的范围。
UG/OpenAPI采用C语言的语法定义了一些常用的枚举类型,使用后缀“_e”表示。
以枚举类型UF_ASSEM_load_status_e为例,下面给出其详细定义:
enumUF_ASSEM_load_status_e{
UF_ASSEM_ok,
UF_ASSEM_suppressed,
UF_ASSEM_not_loaded,
UF_ASSEM_instance_suppressed
};
typedefenumUF_ASSEM_load_status_eUF_ASSEM_load_status_t;
枚举类型UF_ASSEM_load_status_e表示部件在装配体中的状态。
UG/OpenAPI使用typedef关键词将该枚举类型定义为新类型UF_ASSEM_load_status_t,例如:
charsPartPath[]=“E:
\\Example\\part.prt”;
tag_ttPart=NULL_TAG;
UF_PART_load_status_terror_status;
UF_PART_open(sPartPath,&tPart,&error_status);
3.2.4联合类型
有时需要将不同数据类型的变量放在同一段内存单元中,这种使不同变量占用同一段内存的结构类型称为联合类型。
联合类型与结构类型的定义形式相似,但含义不同。
联合类型变量所占的内存长度等于其内部最长数据成员的长度,而结构类型变量所占的内存长度则是其各数据成员所占内存长度之和。
UG/OpenAPI采用C语言的语法定义了一些常用的联合类型,使用后缀“_u”表示。
以联合类型UF_STYLER_value_u为例,下面给出其详细定义:
unionUF_STYLER_value_u{
char*string;
char**strings;
intinteger;
int*integers;
doublereal;
double*reals;
UF_UI_selection_p_tselection;
UF_STYLER_notification_p_tnotify;
UF_UI_attachment_tattach;
UF_UI_option_toggle_toption_toggle;
};
typedefunionUF_STYLER_value_uUF_STYLER_value_t;
联合体UF_STYLER_value_u封装了对话框对话框控件的属性值,如string、integer和real等。
UG/OpenAPI使用typedef关键词将该联合类型定义为新类型UF_STYLER_value_t,它是UF_STYLER_item_value_type_t中的数据成员value的类型,例如:
UF_STYLER_item_value_type_tdata;
doublerValue;
sel_data.item_id=REAL_BUTTOM_DIAMETER;
UF_STYLER_ask_value(dialog_id,&sel_data);
rValue=data.value.real;
3.3UG对象类型及基本操作
UG中的所有对象都是通过唯一的tag_t值进行标识,这些对象大致可以分为部件对象、UF对象、表达式、链表和属性。
3.3.1部件对象
部件对象是UG最基本的操作对象之一,不仅包含了零件的几何信息,而且更包含了大量的非几何信息,非几何信息包括:
创建部件的计算机类型;保存部件的UG版本;部件的历史信息(例如部件文件的保存记录等);状态、描述和用户区的可永久保存在部件文件中的信息。
UG/OpenAPI提供的访问和操作部件文件的函数包括部件文件的创建、打开、关闭、保存和信息的查询等。
表3-4对部件对话操作的函数
函数
描述
UF_OBJ_cycle_objs_in_part()
在部件中查询对象
UF_ATTR_ask_part_attrs()
访问部件的属性
UF_PART_close()
UF_PART_reopen()
关闭和再打开部件
UF_PART_ask_part_name()
获取部件的文件名
UF_PART_ask_customer_area()
UF_PART_ask_description()
UF_PART_ask_status()
查询其他信息,包括:
查询用户定义的数据、部件文件的描述信息,部件文件的状态信息
UF_PART_ask_part_history()
查询部件文件的历史
UF_PART_ask_compression_flags()
UF_PART_set_compression_flags()
查询及设置部件文件的压缩标记
部件对象基本操作涉及的函数主要有UF_PART_new、UF_PART_open、UF_PART_close_all、UF_PART_save和UF_PART_close。
(1)UF_PART_new
externintUF_PART_new(
char*part_name,
intunits,
tag_t*part
);
参数part_name是指向保存被创建文件路径和名称的字符串指针,units是输入参数,表示被创建文件使用的单位制,1表示米制,0表示英制。
part是输出参数,是指向新创建部件文件的tag_t。
该函数的返回值是错误代码,可以利用函数UF_get_fail_message得到其所对应的错误信息。
(2)UF_PART_open
externintUF_PART_open(
char*part_name,
tag_t*part,
UF_PART_load_status_t*error_status
);
参数part_name是指向保存被创建文件路径和名称的字符串指针,是输入参数。
error_status是输出参数,表示打开文件的操作是否产生错误。
(3)UF_PART_close_all
externintUF_PART_close_all()
将当前会话中的所有部件文件关闭。
对于被修改的部件文件,UF_PART_close_all并不会导致这些文件被存盘,也不会提示用户存盘。
UG仅仅向用户确认是否将当前部件文件关闭。
(4)UF_PART_save
externintUF_PART_save()
将当前会话中显示的部件文件存盘。
由于UG本身并不对部件文件自动存盘,所以存盘需求都需要户进行维护。
(5)UF_PART_close
externintUF_PART_close(
tag_tpart,
intscope,
intmode
)
其中参数part是输入参数,表示关闭操作的部件的标识。
参数scope是输入参数,表示被关闭文件涉及的范围。
scope=1表示关闭部件文件和其所有子装配;scope=0表示仅仅关闭部件文件本身。
参数mode是输入参数,表示是否请求用户确认。
当mode=0时,如果被关闭的部件文件被修改过,则询问用户是否关闭;mode=1表示即使文件被修改了,也要执行关闭操作;mode=2时表示如果部件文件被修改了,则放弃关闭操作。
3.3.2UF对象
UF对象是那些具有标识的实体、包括几何对象和非几何对象。
几何对象包括点、线、面、实体等;非几何对象有坐标系、矩阵、尺寸等。
UG中所有具有标识的实体,如点、线、面、基准等,都可以称为对象。
模型中包含的对象包括几何实体对象、非几何对象。
其中几何实体又可细分为实体、点、直线、圆弧等。
非几何实体对象则有坐标系对象、尺寸对象、颜色、线性等。
UF利用类型与子类型来区别部件文件中不同对象。
每个UF对象都有一种类型,在头文件uf_object_types.h中详细定义了这些对象的类型(type)和子类型(subtype),子类型可以更加精确地描述UF对象,但是不是所有的对象都拥有子类型,例如:
#defineUF_group_type15
……
#defineUF_dimension_type26
#defineUF_dim_horizontal_subtype1
#defineUF_dim_vertical_subtype2
#defineUF_dim_parallel_subtype3
#defineUF_dim_cylindrical_subtype4
#defineUF_dim_perpendicular_subtype5
#defineUF_dim_angular_minor_subtype6
#defineUF_dim_angular_major_subtype7
#defineUF_dim_arc_length_subtype8
#defineUF_dim_radius_subtype9
#defineUF_dim_diameter_subtype10
#defineUF_dim_hole_subtype11
#defineUF_dim_conc_circle_subtype12
#defineUF_dim_ordinate_horiz_subtype13
#defineUF_dim_ordinate_vert_subtype14
#defineUF_dim_assorted_parts_subtype15
#defineUF_dim_folded_radius_subtype16
#defineUF_dim_chain_dimensions_subtype17
#defineUF_dim_ordinate_origin_subtype18
#defineUF_dim_perimeter_subtype19
#defineUF_dim_chamfer_subtype20
其中,UF_group_type表示组类型,类型值为15,无子类型;UF_dimension_type表示尺寸类型,类型值为26,1~20表示它的子类型的值,分别表示为垂直尺寸、水平尺寸、平等尺寸等。
UG/OpenAPI提供的访问和操作UF对象的函数包括UF对象的查询、遍历、等。
对象操作函数请参考头文件uf_obj.h中的定义。
表3-5UF对象基本操作函数
函数
描述
UF_OBJ_set_name()
UF_OBJ_ask_name()
UF_OBJ_delete_name()
指定、查问及删除单个对象的名称
UF_OBJ_cycle_objs_in_part()
UF_OBJ_cycle_all()
UF_OBJ_cycle_by_name()
UF_LAYER_cycle_by_layer()
查询遍历对象,可以在指定部件中遍历对象,在当前工作部件中遍历对象,通过对象名称和图层查询对象
UF_MODL_delete_exp()
UF_MODL_delete_feature()
UF_OBJ_delete_object()
UF_OBJ_delete_array_of_objects()
对象删除
UF_UI_select_single()
UF_UI_select_by_class()
UF_UI_select_feature()
UF_UI_select_sketch()
对话选择
1、对象状态
对象的状态可通过使用函数UF_0BJ_ask_status()来查询。
对象共有下列几种状态:
表3-6UF对象状态标识
状态标识
描述
UF_OBJ_DELETED
被删除的状态
UF_OBJ_TEMPORARY
临时状态。
例如临时坐标系由UF_CSYS_create_temp_csys函数创建,不会被保存
UF_OBJ_CONDEMNED
不正常状态。
一般由于对象被删除,但它是其它对象的参考,只有所有的这些参考被删除后,该对象才从模型中被删除,该状态的对象永远不被显示
UF_OBJ_ALIVE
激活状态
2、对象访问
在创建对象时,可以直接得到对象标识。
但是,多数情况下需要访问已经在部件文件中存在的对象。
一般可能通过以下两种方法来确定UF对象的标识:
一是循环法。
即可在获取目标体上面标识的循环过程中,插入下段程序。
该段程序会高亮显示目标体上表面并弹出一个需用户确认的对话框,对话框中显示该对象的标识号。
其中tem_tag为目标体上表面的标识。
UF_DISP_set_highlight(tem_tag,1);
Sprintf(mess,"Theobjectis%d!
",i);
uc1601(mess,1);
UF_DISP_set_highlight(tem_tag,0);
二是参数法。
即可利用函数UF_MODL_ask_face_data获得目标体上表面的参数,包括表面的类型、表面的法向和表面的原点等信息。
比如下面一段程序是为了获得圆柱体的圆柱表面。
//通过圆柱特征标识,获得圆柱表面的链表
UF_MODL_ask_feat_faces(cyl_eid,&face_list);
UF_MODL_ask_list_count(face_list,&num);
for(i=0;i { UF_MODL_ask_list_item(face_list,i,&face); //获得每个圆柱表面的参数 UF_MODL_ask_face_data(face,&type,point,face_dir, box,&radius,&rad_data,&sense); //将类型为的16(圆柱表面)表面取出赋给变量tem_tag并退出循环 if(type==16) { tem_tag=face; break; } } //删除链表,释放内存 UF_MODL_delete_list(&face_list) 3、设置可显示的UF对象信息的函数。 UG/OpenAPI提供了对可显示的UF对象的层、颜色、线型等属性进行设置和查询的接口。 注意除了高亮状态外,其他信息都可以保存到part文件中。 表3-7设置可显示UF对象函数 函数 描述 UF_OBJ_ask_display_properties() 用于查询可显示UF对象的显示属性 UF_OBJ_set_layer() 用于设置可显示UF对象的层 UF_0BJ_set_color() 用于设置可显示UF对象的颜色 UF_0BJ_set_blank_status() 用于设置可显示UF对象的blank状态 UF_OBJ_set_line_width() 用于设置可显示UF对象的线型 UF_OBJ_set_font() 用于设置可显示UF对象的字体 UF_DISP_set_highlight() 用于设置可显示UF对象的高亮(highlight)状态 3.3.4表达式 3.3.4.1表达式的定义 UG/OpenAPI创建的表达式和UG的交互界面产生的表达式同样在“表达式编辑器”中可见。 表达式提供UG中的参数化建模的机制,表达式能控制特征,特征也随表达式的变化而改变。 —个表达式可在多个特征中使用,这样它的变化将能改变多个特征。 表达式的形式一般是: “name=value”。 表达式名的首字符必须是字母,其他字符可以是数字、字母、下划线等。 表达式名是大小写敏感的,一个部件文件中的表达式名应唯—。 表达式值可以是数字和条件等式,表达式名可以用于表达式值中。 3.3.4.2表达式的使用 UF函数允许用户创建、查询和编辑表达式和几何表达式,对表达式进行各种操作的函数包含在头文件uf_modl.h中,对几何表达式进行各种操作的函数包含在头文件uf_gexp.h中。 如果表达式串中,仅仅提供表达式值,UG软件会自动给它—个名字。 如表达式串定义如下: “diameter/2” UG会赋给它一个类似“p0”的名字。 建议按下列形式赋值 “radius=diameter/2” 可以用函数UF_MODL_create_exp()创建表达式;当需要得到创建的表达式的标签时,使用函数UF_MODL_create_exp_tag()。 常用表达式操作函数如表3-8所示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 3UG二次开发实用教程 第三章 UG 二次开发 实用教程 第三