青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

青华模具培训学院
查看: 6107|回复: 10

[教程] UG二次开发实用入门教程_程序的基础知识_01

[复制链接]
发表于 2014-3-8 13:29 | 显示全部楼层 |阅读模式
原帖地址:http://www.ugufun.com/?p=97
7 c6 w, B6 C, ^9 ^1 o
函数名称的约定

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

1、标准名称约定

格式:UF_<area>_<name>

说明:

l  UF_,user funciton的简写,表示该函数为UG/Open API函数;

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

l  <name>,表示其实现功能的语言描述,一般由下划线分开的动词和名词(或词组)组成。常用的动词有:ask(查询)、create(创建)、edit(编辑)、set(设置)、delete(删除)等。

例如:

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

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

(2)非标准名称约定

格式:uc<xxxx> 和uf<xxxx>

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

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

函数参数的约定

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

<返回数据类型><函数名>(变量列表);

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

表3-1 参数输入方式说明

元 素

描  述

I

表示参数为输入方式,参数在使用前必须赋值

O

表示参数为输出方式,使用前无须赋值

OF

表示参数为输出方式,且使用后需要释放内存。UG/Open API提供的常用释放内存函数有UF_free()、UF_free_string()和UF_STYLER_free_value()等,至于选择哪种释放函数需视具体情况而定。
# o2 I8 @' A8 v

例如:函数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 函数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返回代号:: m0 T" p2 g4 Q4 G1 S* l) v* Y0 j) y6 Q

为0时表示正常;

非0时表示错误代号

. x, C5 P. h6 ?3 _$ `8 ~
UG/Open API的数据类型

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

表3-3 数据类型约定

后缀

描  述

_t数据类型(data type)
_p_t数据类型的指针(pointer to data type)
_s结构标识(structure tag)
_u_t联合类型(union type)
_u_p_t联合类型的指针(pointer to a union type)
_f_t函数指针(pointer to a function)

ngc &#65533;U  &#65533; &#65533;&#65533;nt-size:12.0pt; line-height:120%;font-family:宋体;mso-font-kerning:0pt;layout-grid-mode:line'>);


2 a4 c- ^: a- j. z

描述:加载一个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返回代号:; R2 G- G9 D+ d/ I+ R' ~4 j( Q

为0时表示正常;

非0时表示错误代号

+ ?3 y  N2 W& Y# A# L. B
UG/Open API的数据类型

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

表3-3 数据类型约定

后缀

描  述

_t数据类型(data type)
_p_t数据类型的指针(pointer to data type)
_s结构标识(structure tag)
_u_t联合类型(union type)
_u_p_t联合类型的指针(pointer to a union type)
_f_t函数指针(pointer to a function)
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();

结构类型

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 );

& y) E) s3 X4 W* M7 f3 T
枚举类型

枚举类型将变量的值一一列举出来,变量的值只限于列举出来的值的范围。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);

联合类型

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

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;

对象类型及基本操作

UG中的所有对象都是通过唯一的tag_t值进行标识,这些对象大致可以分为部件对象、UF对象、表达式、链表和属性。

部件对象

部件对象是UG最基本的操作对象之一,不仅包含了零件的几何信息,而且更包含了大量的非几何信息,非几何信息包括:创建部件的计算机类型;保存部件的UG版本;部件的历史信息(例如部件文件的保存记录等);状态、描述和用户区的可永久保存在部件文件中的信息。

UG/Open API提供的访问和操作部件文件的函数包括部件文件的创建、打开、关闭、保存和信息的查询等。

表3-4 对部件对话操作的函数

函数

描述

UF_OBJ_cycle_objs_in_part()在部件中查询对象
UF_ATTR_ask_part_attrs()访问部件的属性
UF_PART_close()
0 q9 e5 t1 X3 v3 g  H

UF_PART_reopen()

关闭和再打开部件
UF_PART_ask_part_name()获取部件的文件名
UF_PART_ask_customer_area()
$ Z, ?2 W: b, r& |6 Q

UF_PART_ask_description()

UF_PART_ask_status()

查询其他信息,包括:查询用户定义的数据、部件文件的描述信息,部件文件的状态信息
UF_PART_ask_part_history()查询部件文件的历史
UF_PART_ask_compression_flags()
& r  l) Q$ U& K1 G  T7 a" ]0 @

UF_PART_set_compression_flags()

查询及设置部件文件的压缩标记
6 c; P& z% }7 u0 k. ?9 E4 l

部件对象基本操作涉及的函数主要有UF_PART_new、UF_PART_open、UF_PART_close_all、UF_PART_save和UF_PART_close。

(1) UF_PART_new

extern int UF_PART_new (

char * part_name,

int units,

tag_t * part

);

参数part_name是指向保存被创建文件路径和名称的字符串指针,units是输入参数,表示被创建文件使用的单位制,1表示米制,0表示英制。part是输出参数,是指向新创建部件文件的tag_t。该函数的返回值是错误代码,可以利用函数UF_get_fail_message得到其所对应的错误信息。

(2) UF_PART_open

extern int UF_PART_open (

char * part_name,

tag_t * part,

UF_PART_load_status_t * error_status

);

参数part_name是指向保存被创建文件路径和名称的字符串指针,是输入参数。error_status是输出参数,表示打开文件的操作是否产生错误。

(3) UF_PART_close_all

extern int UF_PART_close_all ( )

将当前会话中的所有部件文件关闭。对于被修改的部件文件,UF_PART_close_all并不会导致这些文件被存盘,也不会提示用户存盘。UG仅仅向用户确认是否将当前部件文件关闭。

(4) UF_PART_save

extern int UF_PART_save ( )

将当前会话中显示的部件文件存盘。由于UG本身并不对部件文件自动存盘,所以存盘需求都需要户进行维护。

(5) UF_PART_close

extern int UF_PART_close (

tag_t part,

int scope,

int mode

)

其中参数part是输入参数,表示关闭操作的部件的标识。参数scope是输入参数,表示被关闭文件涉及的范围。scope=1表示关闭部件文件和其所有子装配;scope=0表示仅仅关闭部件文件本身。参数mode是输入参数,表示是否请求用户确认。当mode=0时,如果被关闭的部件文件被修改过,则询问用户是否关闭;mode=1表示即使文件被修改了,也要执行关闭操作;mode=2时表示如果部件文件被修改了,则放弃关闭操作。

UF对象

UF对象是那些具有标识的实体、包括几何对象和非几何对象。几何对象包括点、线、面、实体等;非几何对象有坐标系、矩阵、尺寸等。UG中所有具有标识的实体,如点、线、面、基准等,都可以称为对象。模型中包含的对象包括几何实体对象、非几何对象。其中几何实体又可细分为实体、点、直线、圆弧等。非几何实体对象则有坐标系对象、尺寸对象、颜色、线性等。UF利用类型与子类型来区别部件文件中不同对象。每个UF对象都有一种类型,在头文件uf_object_types.h中详细定义了这些对象的类型(type)和子类型(subtype),子类型可以更加精确地描述UF对象,但是不是所有的对象都拥有子类型,例如:

#define    UF_group_type                            15

……

#define    UF_dimension_type                        26

#define    UF_dim_horizontal_subtype                   1

#define    UF_dim_vertical_subtype                     2

#define    UF_dim_parallel_subtype                     3

#define    UF_dim_cylindrical_subtype                  4

#define    UF_dim_perpendicular_subtype                5

#define    UF_dim_angular_minor_subtype                6

#define    UF_dim_angular_major_subtype                7

#define    UF_dim_arc_length_subtype                   8

#define    UF_dim_radius_subtype                       9

#define    UF_dim_diameter_subtype                    10

#define    UF_dim_hole_subtype                        11

#define    UF_dim_conc_circle_subtype                 12

#define    UF_dim_ordinate_horiz_subtype              13

#define    UF_dim_ordinate_vert_subtype               14

#define    UF_dim_assorted_parts_subtype              15

#define    UF_dim_folded_radius_subtype               16

#define    UF_dim_chain_dimensions_subtype            17

#define    UF_dim_ordinate_origin_subtype             18

#define    UF_dim_perimeter_subtype                   19

#define    UF_dim_chamfer_subtype                     20

其中,UF_group_type表示组类型,类型值为15,无子类型; UF_dimension_type表示尺寸类型,类型值为26,1~20表示它的子类型的值,分别表示为垂直尺寸、水平尺寸、平等尺寸等。

UG/Open API提供的访问和操作UF对象的函数包括UF对象的查询、遍历、等。对象操作函数请参考头文件uf_obj.h中的定义。

表3-5 UF对象基本操作函数

函数

描述

UF_OBJ_set_name()  ~' U& x& z, }* b1 `& F

UF_OBJ_ask_name()

UF_OBJ_delete_name()

指定、查问及删除单个对象的名称
UF_OBJ_cycle_objs_in_part()) r$ k- n% |8 d" [, L* U) [7 ~8 Y

UF_OBJ_cycle_all()

UF_OBJ_cycle_by_name()

UF_LAYER_cycle_by_layer()

查询遍历对象,可以在指定部件中遍历对象,在当前工作部件中遍历对象,通过对象名称和图层查询对象
UF_MODL_delete_exp()
$ F: O$ C4 z+ J3 M( f9 T( p

UF_MODL_delete_feature()

UF_OBJ_delete_object()

UF_OBJ_delete_array_of_objects()

对象删除
UF_UI_select_single()7 _  D* @/ o  j# j) V

UF_UI_select_by_class()

UF_UI_select_feature()

UF_UI_select_sketch()

对话选择
1 [8 v9 `9 G6 c% t

1、对象状态

对象的状态可通过使用函数UF_0BJ_ask_status()来查询。对象共有下列几种状态:

表3-6 UF对象状态标识

状态标识

描述

UF_OBJ_DELETED被删除的状态
UF_OBJ_TEMPORARY临时状态。例如临时坐标系由UF_CSYS_create_temp_csys函数创建,不会被保存
UF_OBJ_CONDEMNED不正常状态。一般由于对象被删除,但它是其它对象的参考,只有所有的这些参考被删除后,该对象才从模型中被删除,该状态的对象永远不被显示
UF_OBJ_ALIVE激活状态

: g! r5 u( L$ E* L! N

2、对象访问

在创建对象时,可以直接得到对象标识。但是,多数情况下需要访问已经在部件文件中存在的对象。一般可能通过以下两种方法来确定UF对象的标识:

一是循环法。即可在获取目标体上面标识的循环过程中,插入下段程序。该段程序会高亮显示目标体上表面并弹出一个需用户确认的对话框,对话框中显示该对象的标识号。其中tem_tag为目标体上表面的标识。

UF_DISP_set_highlight(tem_tag,1);

Sprintf(mess, "The object is %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 < num; 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/Open API提供了对可显示的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)状态

2 @, t, j. l1 Z2 S9 p+ a
发表于 2014-3-8 13:44 | 显示全部楼层
啥也不说了,楼主是铁杆级的ug爱好者,就是给力!UG论坛更给力!
回复 支持 反对

使用道具 举报

发表于 2014-3-20 10:45 | 显示全部楼层
啥也不说了,楼主是铁杆级的ug爱好者,就是给力!UG论坛更给力!
回复 支持 反对

使用道具 举报

发表于 2014-3-20 10:58 | 显示全部楼层
楼主精神值得学习
回复 支持 反对

使用道具 举报

发表于 2014-3-23 14:44 | 显示全部楼层
啥也不说了,楼主是铁杆级的ug爱好者,就是给力!UG论坛更给力!
回复 支持 反对

使用道具 举报

发表于 2014-4-19 11:52 | 显示全部楼层
仰望大神!什么时候我才有这水平。
回复 支持 反对

使用道具 举报

发表于 2014-4-21 22:14 | 显示全部楼层
讲得不错,很基础
回复 支持 反对

使用道具 举报

发表于 2014-7-22 12:19 | 显示全部楼层
啥都不说了,感谢分享。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2015-5-11 23:04 | 显示全部楼层
5 ]/ Y9 V% s; t6 i; `/ s1 ^' ^/ O; ~
啥也不说了,楼主是铁杆级的ug爱好者,就是给力!UG论坛更给力!
回复 支持 反对

使用道具 举报

发表于 2015-5-21 20:13 | 显示全部楼层
正是本人所需的,多谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|sitemap|小黑屋|Archiver|手机版|UG网-UG技术论坛-青华数控模具培训学校 ( 粤ICP备15108561号 )

GMT+8, 2024-11-16 17:46 , Processed in 0.064112 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表