1、1,UG软件二次开发概念,任何一款软件都不能完全满足用户的所有需求 购买了UG软件之后,为了更好的使用,针对本单位产品的特点进行一些二次开发是必不可少的 这对提高产品的设计效率,缩短产品的设计周期并使设计符合国家标准等,具有重大意义。,2,二次开发可以做什么?,可利用UG提供的二次开发接口 建立参数化标准件库 建立特定产品的加工模板 开发方便实用的工具库 建立配套的刀具库 ,3,UG二次开发示例标准件库,4,5,6,7,UG开发工具UG/Open,8,UG/Open 介绍,UG/Open是一系列UG开发工具的总称。它们随UG一起发布,以开放性架构面向不同的软件平台提供灵活的开发支持。 UG/O
2、pen的所有文件,包括开发工具、头文件、库均存放在以下目录中:D: EDS(UG主目录) UGOpen,9,UG/Open主要包括,GRIP图形交互程序 API 应用程序接口 UI Styler 用户界面设计工具 Menu Script 菜单脚本语言,10,UG的二次开发接口,UG/Open API UG开放应用程序接口,也称 User Function(用户函数 )。 UG/Open API 是UG/Open二次开发软件包的一个重要组成部分,11,API的功能,API的核心包含了约2000个C函数,分别用来实现大部分的UG操作 使用这些C函数,用户可以建立、编辑、查询并修改UG的各种实体对象
3、,实现用户界面的交互,控制UG行为等,12,UG的实体对象,包括 .part文件、点、线、面、实体、特征、坐标系、表达式等,13,UF,后面的课程中UG/Open API均简称为UF。,14,UF程序的源代码并不能被UG直接执行,它和C程序一样必须通过编辑形成动态链接库 .dll或可执行文件 .exe后才能发挥作用,外部UF和内部UF,15,外部UF和内部UF,程序运行环境不同,外部UF UF程序内部UF,16,外部UF和内部UF,外部UF程序,独立于UG之外的普通C程序,是可执行程序(*.EXE),通过UG的运行库调用API的功能。,运行时只要有UG License的支持,就可以由操作系统直
4、接执行,不需要启动UG Gateway(主界面) 。,17,外部UF,优点,调用灵活,用途广泛 不必启动UG,属于后台运行,节约运行时间。,18,外部UF,缺点,不能和UG Gateway发生联系,因而不能利用UG的显示窗口动态反馈操作结果,同时也不能实现一些须由用户完成的交互操作 。,19,外部UF,外部UF用途,一般多用于Part文件的大量创建、存取和管理或控制出图。不适用于用户交互性的几何建模和修改。,20,内部UF,内部UF程序,运行UG内部的API程序,通过动态链接成为UG的一部分。,以动态链接库(*.DLL)的形式创建并编译的 。,必须启动UG Gateway才能被运行。,21,内
5、部UF,UG调用内部UF的方式,启动UG后,从FileExecute UG/Open User Function或者Ctrl+U(快捷方式)进入, 运行内部UF程序(ufusr接口函数),22,内部UF,UG调用内部UF的方式,从用户创建的菜单中(Menu Script)调出用户定制的界面(UI Styler),运行程序(ufsta),23,内部UF,优点,能处理UG的UI(User Interface)对象接口 实现和UG界面的无缝集成并扩充UG的特定功能,24,内部UF,执行时每个步骤都能从UG的显示窗口中得到动态反映 能方便地通过UI界面对象来实现与用户的交互、屏幕选取等复杂操作,优点,
6、25,注意!,所有的UF函数都可用于内部UF方式,但不一定能用于外部UF方式,26,在UG Document中关于UF函数的注释文件里对每个UF函数都有Internal(内部)和External(外部)的指明。,寻求帮助,27,28,UF函数命名规则,标准命名法 根据函数所属的模块和实现的功能给函数赋予有意义的名称。,29,标准命名法,extern int UF_CURVE_create_point(double point3, tag_t* point);在绝对坐标系中产生一个点。,extern int UF_PART_new(char* part_name,int units, tag_t
7、* part); 生成一个新的part文件,并把它作为工作文件。,30,标准命名法,一般函数开头的大写部分表示此函数所在UG/Open API的库函数名称,如UF_CURVE_create_point即必须在头文件中加以声明,如# include # include ,31,标准命名法,函数名称使程序设计人员很容易知道函数的含义及所属库函数,优点,32,UF函数命名规则,固定命名法 是早期版本所命名的UF函数 如 uc1601 ( );uf5943 ( );,33,固定命名法,缺点,函数名称使程序设计人员很难明了函数的含义及所属库函数,34,忠 告,固定命名法在后面的版本中有部分保留,随着版本
8、升级较容易被放弃。 建议:使用UG的函数时尽量避免使用此类函数,以保证开发程序的延续性。,35,UF的数据结构标识,UF是完全以C语言来实现的,其中大量运用了C的结构、枚举、指针和预定义常数等。一般从后缀上已经对它们的类型进行了明确的标识,36,UF的数据结构标识,_t 原始数据结构类型_p_t 指向该数据结构的指针类型_s 结构类型_u_t 联合类型_u_p_t 指向联合的指针_f_t 指向函数的指针,37,最常用的UF数据类型,tag_t它是任何确定存在的UG对象的唯一标识,这里对象是指UG的Part、Object、Feature、Expression等,38,tag_t 定义,typed
9、ef unsigned int tag_t, *tag_p_t;tag_t其实只是一个整数型,用来作为UG实体的id(唯一标识码)。,39,UF中有一个特殊的Tag-NULL_TAG是用来表示暂时不标识任何对象的Tag,相当于初值为零。,40,最常用的UF数据类型,uf_list_p_t它表示一个UG实体链,是一个结构,由两个成员组成。eid 表示链中的一个实体,* next 表示指向链中下一项的指针,41,uf_list_p_t 定义,typedef struct uf_list_s *uf_list_p_t; struct uf_list_s tag_t eid ; /* Object I
10、D */ struct uf_list_s *next;/* Pointer to the next OID in the list */;,42,路 标,这些结构体定义可以在UGS /ugopen中的uf_defs.h文件中找到 。,43,Object、Body和Feature的区别,在UG中对象包含不同的类型,有Part、Object、Feature和Body等使用UG/OPEN API中的函数时需要用到这些类型,因此有必要分清它们的概念及范围。,44,Object、Body和Feature的区别,Feature它是将用户对UG实体的所有操作过程都以特定(Feature)的方式记录下来,利
11、用UF函数可以从Feature中得到其body。,45,Feature,一个实体往往可以拥有多个特征,如一个block经过倒角、钻孔后,那么在这个实体上就存在了两个特征,并且按照时间先后顺序排列。,46,Object,Object:是指基准轴datum axis、基准面datum plane、草图sketch、直线line、圆circle、二次曲线conic和样条曲线spline等二维元素。 利用UF函数可以从Object中得到一个Feature。,47,Body,Body 指UG三维实体利用UF函数可以从Body中得到所有在其上操作过的Feature,48,5个基本实体特征,BLOCK CY
12、LINDER CONE,SPHERE TUBE,49,操作对象,在使用UF函数时必须分清它们是针对Body操作、针对Object操作,还是针对Feature操作。,操作对象?,50,操作对象,在UF中提供了Feature、Body和Object相互转换的UF函数,哇!它们之间可 相互转换,51,对象转换,从特征feature中取出body UF_MODL_ask_feat_body 从object中取出特征feature 从body中取出特征链features 从特征feature中取出object,52,UF的License,所有的UF程序在运行时都需要UG/Open API License
13、的支持因此程序必须正确地初始化以获得一个License,终止时也要归还曾占用的License以供下次调用UF函数时使用。,53,UF的License使用,int UF_initialize();/*UF初始化*/ int UF_terminate();/*UF终止化*/,License的初始化和终止化的操作使用以下函数:,54,UF的License使用,int UF_initialize();/*UF初始化*/在调用UF函数前调用,int UF_terminate(); /*UF终止化*/在整个程序结束前调用,55,UF的License使用,UF初始化和UF终止化函数的调用对于外部UF和内部UF都是如此,这说明外部UF的运行虽然脱离UG Gateway,但仍离不开API License的支持。,56,寻找UG/Open API Reference Guide 程序/Unigraphics V18.0/ UG Documentation Help UG界面中/HELP/ Documentation,获取函数及说明,57,58,59,60,61,62,