1©UGSCorp.2007.Allrightsreserved.编程基础日期:2007年8月2主要内容¾UG/OpenAPI函数约定¾UG/OpenAPI的数据类型¾UG对象类型及操作3©UGSCorp.2007.Allrightsreserved.UG/OpenAPIUG/OpenAPI函数约定函数约定4函数名称的约定UG/OpenAPI共有两类名称约定。一个是标准的函数名称约定;另一个是以前版本原有的名称约定。头文件uf_modl.h:uf6548uf6549uf6550UF_MODL_active_partUF_MODL_add_thru_facesUF_MODL_ask_adjac_faces5标准名称约定¾说明:UF_,userfunciton的简写;area,应用或模块的名称缩写。例如modl和disp分别是Modeling模块和Display功能的名称缩写;name,表示其实现功能的语言描述,一般由下划线分开的动词和名词(或词组)组成。常用的动词有:ask(查询)、create(创建)、edit(编辑)、set(设置)、delete(删除)等。¾例如:UF_MODL_create_block1()为创建立方体的函数;UF_DISP_set_highlight()是高亮显示对象的函数;¾格式:UF_area_name6非标准名称约定¾格式:ucxxxx和ufxxxx¾说明:代表UG/OpenAPIC程序,xxxx通常是四位数或三位数接一个字母。¾例如:uc1601是一个提示信息函数。7函数参数的约定UG/OpenAPI提供的函数遵守ANSI/ISOC的标准,并以下列格式在头文件中提供函数原型:返回数据类型函数名(变量列表);变量参数类型通常是C数据类型或UG/OpenAPI自定义数据类型。参数的输入输出方式有3种:I(Input)O(Output)OF(OutputFree)8函数参数的约定元素描述I表示参数为输入方式,参数在使用前必须赋值O表示参数为输出方式,使用前无须赋值OF表示参数为输出方式,且使用后需要释放内存。UG/OpenAPI提供的常用释放内存函数有UF_free()、UF_free_string()和UF_STYLER_free_value()等,至于选择哪种释放函数需视具体情况而定。9函数参数的约定10函数参数的约定UF_PART_openRetrievesanexistingNXpartorSolidEdgepartintothesessionand……(函数说明)SeeAlsoHistoryInV15.0,thisfunctionwasenhancedsothatitcouldopenSolidEdgeparts.externintUF_PART_open(constchar*part_name,tag_t*part,UF_PART_load_status_t*error_status);11函数参数的约定constchar*part_nameINameofparttoretrieve.tag_t*partOThetagoftheretrievedpartorNULL_TAGifpartretrievalfails.UF_PART_load_status_t*error_statusOFTheuserallocatedstructureerror_statusisfilledwiththenamesandassociatederrorcodesofanypartsthatdidnotloadcorrectly.ThestructuremustbefreedwithUF_PART_free_load_status.FordetailsseethedefinitionofUF_PART_load_status_t.EnvironmentInternalandExternal12©UGSCorp.2007.Allrightsreserved.UG/OpenAPIUG/OpenAPI的数据类型的数据类型13概述除了C语言标准的数据类型外,UG/OpenAPI还提供了一些自定义的数据类型,比如:tag_t类型结构类型(structuretype)枚举类型(enumtype)联合类型(uniontype)指针类型(pointertype)它们统一用后缀“_t”表示,且这些数据类型的指针用反缀“_p_t”命名表示。14概述后缀描述_t数据类型(datatype)_p_t数据类型的指针(pointertodatatype)_s结构标识(structuretag)_u_t联合类型(uniontype)_u_p_t联合类型的指针(pointertoauniontype)_f_t函数指针(pointertoafunction)15tag_t类型在UG/OpenAPI的uf_defs.h中定义如下:typedefunsignedinttag_t,*tag_p_t;在UG环境中,tag_t是UG对象的句柄,即UG对象模型的唯一标识。它是一种不重复的无符号整型数值,主要用于标识应用程序中的对象,如部件、草图、曲线、属性和表达式等。以部件对象为例,下面的代码获取工作部件的tag_t值。tag_ttWorkPart;tWorkPart=UF_ASSEM_ask_work_part();16结构类型UG/OpenAPI采用C语言的语法定义了一些常用的结构类型,将相应联系的不同类型数据封装在一起使用,这些结构类型用后缀“_s”表示。structUF_STYLER_item_value_type_s{intreason;constchar*item_id;intsubitem_index;intcount;intitem_attr;intindicator;UF_STYLER_value_tvalue;}17结构类型typedefstructUF_STYLER_item_value_type_sUF_STYLER_item_value_type_t,*UF_STYLER_item_value_type_p_t;结构体UF_STYLER_item_value_type_s封装了对话框控件的基本属性,如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);18枚举类型枚举类型将变量的值一一列举出来,变量的值只限于列举出来的值的范围。UG/OpenAPI采用C语言的语法定义了一些常用的枚举类型,使用后缀“_e”表示。enumUF_DRF_chamfer_dimension_leader_type_e{UF_DRF_CHAMFER_PERPENDICULAR_LEADER=1,UF_DRF_CHAMFER_PARALLEL_LEADER,UF_DRF_CHAMFER_LINEAR_CHAMFER_DIM};19枚举类型枚举类型UF_DRF_chamfer_dimension_leader_type_e表示工程图中倒角尺寸引导线的类型。UG/OpenAPI使用typedef关键词将该枚举类型定义为新类型UF_DRF_chamfer_dimension_leader_type_t。typedefenumUF_DRF_chamfer_dimension_leader_type_eUF_DRF_chamfer_dimension_leader_type_t;20联合类型在二次开发过程中有时需要将不同数据类型的变量放在同一段内存单元中,这种使不同变量占用同一段内存的结构类型称为联合类型。联合类型与结构类型的定义形式相似,但含义不同。联合类型变量所占的内存长度等于其内部昀长数据成员的长度,而结构类型变量所占的内存长度则是其各数据成员所占内存长度之和。UG/OpenAPI采用C语言的语法定义了一些常用的联合类型,使用后缀“_u”表示。21联合类型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;};22联合类型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的类型。23联合类型UF_STYLER_item_value_type_tdata;doublerValue;sel_data.item_id=REAL_BUTTOM_DIAMETER;UF_STYLER_ask_value(dialog_id,&data);rValue=data.value.real;24©UGSCorp.2007.Allrightsreserved.UGUG对象类型及操作对象类型及操作25概述UG中的所有对象都是通过唯一的tag_t变量进行标识,要想对这些对象进行操作必须首先获得其标识。在UG中,对象的类型大致可以分为:¾部件对象¾UF对象¾表达式¾链表¾属性26部件对象部件对象是UG昀基本的操作对象之一,不仅包含了零件的几何信息,而且更包含了大量的非几何信息。非几何信息包括:创建部件的计算机类型;保存部件的UG版本;部件的历史信息(例如部件文件的保存记录等);状态、描述和用户区的可永久保存在部件文件中的信息。UG/OpenAPI提供的访问和操作部件文件的函数包括部件文件的创建、打开、关闭、保存和信息的查询等。27部件对象函数描述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()查询及设置部件文件的压缩标记28部件对象externintUF_PART_new(char*part_name,intunits,tag_t*part);¾part_name是输入参数,指向保存被创建文件路径和名称的字符串指针;¾units是输入参数,表示被创建文件使用的单位制,1表示米制,0表示英制;¾part是输出参数,是指向新创建部件文件的tag_t;¾该函数的返回值是错误代码,可以利用函数UF_get_fail_message()得到其所对应的错误信息。29externintUF_PART_open(char*part_name,tag_t*pa