iCAx开思网

标题: 【分享】【资料】UG二次开发入门篇 [打印本页]

作者: huahua    时间: 2002-5-18 10:25
标题: 【分享】【资料】UG二次开发入门篇
1.UG/Open  API(Application Programming Interface, 应用编程接口),使用户可以使用标准的C语言编译器,以习惯的格式编写出面向UG的二次开发程序。此时可以充分地发挥C语言编译和运行效率高,功能强大的特点。实践证明,这些API函数也可以无缝地集成到C++程序中,并利用强大的Microsoft Visual C++ 集成环境进行编译。这样,我们就可以充分地发挥出VC强大的功能和极其丰富的资源,包括MFC类库,使用面向对象的软件工程方法,高效高质地进行软件的开发。同时,也保证了对企业已有的各种源代码资源(通常使用C语言编写)的利用。
UG/Open  API 函数能在两种不同的环境下运行,根据编译链接情况的不同,UG/Open API 二次开发程序又具有两种形式:
a.  外部式(External):此时UG/Open API程序可以脱离UG环境,在操作系统下单独运行,或者作为UG的一个子进程独立运行。
特点:调用灵活,用途广泛。
        无法利用UG的交互界面。
b.  内部式(Internal):此时UG/Open API程序在UG环境下运行,与程序相关的各种事务通过UG代理执行。这样做的一个好处是可执行程序更小,同时链接的速度也更快。另外,一旦程序被装入,它将驻留在内存中,下次使用时不需重新加载,这样也节省了时间。而且这种方式下用户可与计算机交互,开发的程序能与UG无缝集成。
特点:直接控制UG的行为。
         和用户交互。
2.UG/Open是一系列UG开发工具的总称。它们随UG一起发布,以开放性架构面向不同的软件平台提供灵活的开发支持。它使第三软件商和UG用户能在其提供的平台上开发出适合自己需要的CAD产品。
UG/Open 套件组成:API, Grip, MenuScript ,UIStyler。
API:  
UG/Open API也称User Function,通过它可以在C程序和C++程序中以库函数的形式调用UG内部的近2000个操作。
Grip语言:
GRIP(Graphics Interactive Programming)是一种专用的图形交互编程语言,开发者可以用GRIP编程的方法自动实现在UG下进行的绝大部分操作。GRIP命令很像英语单词,语法与BASIC 和FORTRAN相似,有某些情况下对于一些高级操作,用GRIP编程的方法比用UG交互的方法更有效,在UG交互环境下可以实现的功能用GRIP几乎全都可以实现。UG提供了一个名叫UG Open GRIP的GRIP语言编辑器,用这个工具可以编辑、修改、编译、连接程序。
MenuScript:
此项功能使用户或第三方软件商通过文本编辑器编辑UG菜单文件,以生成用户化的菜单进而集成他们的特殊应用。UG/Open MenuScript支持UG主菜单和快速弹出式下拉菜单的修改,通过它可以改变UG菜单的布局、添加新的菜单项以执行用户二次开发程序、User Tools文件及操作系统命令等。UG/Open MenuScript的使用需专门授权。运用UG/OpenMenuScript可以完全改变UG软件的主界面,需谨慎使用以防出现混乱。
UIStyler:
  是用户或第三方软件商开发UG对话框的可视化工具,它比User Tools具有更强的功能。使用这个工具可以避免复杂的图形用户接口GUI(Graphics User Interface)编程。其设计的对话框的方式与Visual C++很相似。即利用对话框中基本控件的组合生成不同的对话框,对话框中所有控件都是实时可见的。
UG/Open UIStyler 生成的对话框可与UG/Open MenuScript、UG/Open API、UG/Open GRIP集成,执行二次开发程序。它们之间的关系如下图所示。
                  
                                                                 
                                                                  
                                                               
                                                               
                                                               
                                                               
                                                               
                                                               
                                                               
                                                               
                            图6-1 UG/Open 套件关系图
6.3 UG/Open 套件的交互原理
一.UG界面二次开发的主要方法
1.用户工具(User Tools)
User Tools是一种生成用户对话框的工具。该工具有两种功能,其一是在UG主菜单的User Tools下拉菜单中添加用户项,其二是生成弹出式对话框。User Tools生成的界面风格和UG 界面一致,通过它可运行对话框文件、宏文件、UG/Open API及UG/Open GRIP程序。用户工具生成的*.utm和*.utd,其中*.utm文件需在UG的初始化文件中指明路径,自动装载;.utd文件通过*.utm文件调入(在UG15.03以后版本中可通过专门菜单界面调用*.utd文件)。*.utm文件和*.utd文件可用Windows NT中的写字板程序进行编辑。
2.UG/Open Menu Script
   该函数原型在uf_mb.h,头文件提供了UG/Open MenuScript程序入口。UG/Open MenuScript功能有以下几方面。
1  让UG用户和第三开发商用ASCII文件,以集成、无缝方式去编辑用户需要的菜单,菜单文件支持自定义主菜单和快速浏览式下拉菜单。
2  支持菜单items前处理和后处理,为标准UG 菜单items和第三开发商开发应用菜单提供和User Exits类似功能。
3  提供Menubar Report Tool帮助预览自定义菜单,诊断问题,并且升级在给将来的Unigraphics放开协助
4  提供功能强大的UG菜单自定义,包括增加,删除,和重新安排菜单项,从主菜单工具中复制或移动菜单项到快速浏览下拉式菜单。增加已存在能执行GRIP 或UG/OPEN API程序的菜单项,执行系统命令(包括运行一个程序或SCRIPT),打开一个UISTYLER 对话框,或打开一个User Tool定制板,所有这些自定义技术不需要用C程序均能完成。
自定义菜单步骤:
1.  建立用户目录。Eg e:\ugs170\gearwizard
在用户目录下建立子目录 startup eg:e:\ugs170\gearwizard\startup
2.  将用户自定义文件.men拷贝到startup中
3.  在WINNT/WIN2000控制面板中设置环境变量如下:$UG_USER_DIR$                                        e:\ugs170\gearwizard
使UG启动时能自动到startup目录下寻找.men文件并执行
示例:下例是在UG18下自定义生成的菜单
  
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP
CASCADE_BUTTON GEARWIZARD_BTN
LABEL 齿轮设计辅助系统
END_OF_BEFORE
  
MENU GEARWIZARD_BTN
CASCADE_BUTTON GEAR_MODELING_BTN
LABEL 生成齿轮模型
END_OF_MENU
  
MENU GEAR_MODELING_BTN
BUTTON NGear1
LABEL 直齿圆柱齿轮
ACTIONS Straight_Cylinder0.dlg
BUTTON NGear2
LABEL 斜齿圆柱齿轮
ACTIONS Helical_Cylinder0.dlg
BUTTON NGear3
LABEL 直齿锥齿轮
ACTIONS Straight_Bevel0.dlg
BUTTON NGear4
LABEL 斜齿锥齿轮
ACTIONS Helical_Bevel0.dlg
  
END_OF_MENU
3.UG/Open UIStyler
    该工具与Visual C++对话框设计相似,UIStyler包含对话框的各种框件,即UIObjiects对象,如Label、Action Button、Bitmap、Integer、Real、String、Radio Box、Scale Integer(Real)、Strolled Window、Selection Box、ToggleButton和SeclectList等,可以随意对它们进行组合并编辑确定其位置。每一UIObjects对象都具有一定的属性、选择性及回调函数,这些性质均应在生成UIStyler 对话框文件之前确定。
在保存UIStyler对话框时共生成3个文件:*.dlg、*._template.c及*.h。其中,*.dlg是UIStyler对话框界面文件,非ASCII格式,封装了对话框的图形界面;*._template.c及*.h分别是UIStyler对话框C语言模板文件和头文件。用户的主要工作是修改*.template.c模板文件并在其中添加用户代码,确定UIStyler对话框被调用的形式及其所实现的功能。这些工作都在Visual C++6.0中完成,最终和*.h编译链接生成可调用的*.DLL文件。
UIStyler对话框的调用
UIStyler对话框有三种调用方式:CallBack、Menu和User Exit。CallBack指被对话框调用,即对话框嵌套;Menu指被MenuScript调用;User Exit指被用户接口调用。不同的调用方式具有不同的接口函数,分别为extern int<enter the name of your function> (int*response)、extern ufsta(char *param,int retcode,int rlen)和extern void ufusr(char param,int *retcode,int rlen)。
确定UIStyler对话框被调用的方式后,应清除*._template.c文件中对应接口函数的条件编译代码、使该函数能够进行编译。
UIStyler对话框CallBack Function的实现
对话框的最终功能是实现与用户的交互操作,如建模。这将在*._template.c中的CallBack
Function 中完成。CallBack Function是对话框响应函数,也称回调函数。
无须专门设定,模板文件*._template.c中提供最基本的Apply按钮回调函数框架,函数名为:
int *_apply_cb(int dialog_id,
             void *client_data,
             UF_STYLER_item_value_type_p_t
Callback_data)
每一个UIObjects对象都可确定一个回调函数。回调函数名在编辑UIStyler对话框时定义,其框架将在生成*._template.c是自动产生。如Radio Button的回调函数为:
    int *_template.c是自动产生。如Radio Button的回调函数为:
  int*_radio_call(int dialog_id,
               void * client_data,
               UF_STYLER_item_value_type_p_t
Callback_data)
在回调函数中,可以调用UG/Open API,这是一个允许用户访问并影响UG对象模型的程序集,它支持C/C++语言,头文件支持ANSI C。UG/Open API 应用程序通过C/C++编程。调用UG/Open API,可把UG及其相关模块各种子功能集成在用户程序中实现用户的特定任务。
所有UG/Open API程序必须正确地开始和终止,以配置和返还UG/Open  API  License。用户可使用两个C函数UF_initialize()和UF_terminate()来实现这一点。定义变量后调用的第一个UG/Open API函数必须是UF_initialize(),最后一个调用的函数必须是UF_terminate()。
6.4 NT平台下的编译环境编译环境设定
1.立一个新项目(Project),依你选择的编译类型而定。[$#376] "Win32 Dynamic-Link Library" (用于UG/Open 二次开发内部式)
[$#376] "Win32 Console Application"   (用于UG/Open二次开发外部式)
[$#376] 选择 "roject->Settings" 菜单条,激活对话框 "roject Settings" ,点击状态条 "C/C++" 。
[$#376] 在 "Category:"列表框里, 选择 "Code Generation".
[$#376] 在 "Use run-time library:" 对话框里, 选择 "Multithreaded DLL".
2.设置 link 选项
[$#376] 在"roject Settings"对话框里单击 "Link" .
[$#376] 在"Object/library modules:" 文本框里,添加需要的Unigraphics 库文件. 按下表所列添加所要的库文件。
UG/Open Application Type  Unigraphics v15或更高  Unigraphics v15前版本
External  libufun.lib  uguser.lib
Internal  libufun.liblibinternal.lib  ugraf.lib
  
3. 设置include选项路径.
[$#376] 选择 "Tools->Options" 菜单去激活"Options” 对话框并且单击 "Directories" 。
[$#376]  在 "Show directories for" 列表框里,选择 "Include files"。
[$#376]  添加 "%UGII_ROOT_DIR%\ugopen" 到列表框里,"UGII_ROOT_DIR" 是环境变量代表UG的安装路径.如e:\ugs170\ugopen.
[$#376] 用向上的箭头按钮将添加的路径放在第一行。
   4. 设置库的路径
[$#376] 选择 "Tools->Options" 菜单去激活"Options” 对话框并且单击 "Directories" 。
[$#376] 在"Show directories for"列表框里,选择 "Library files"。
[$#376] 添加 "%UGII_ROOT_DIR%\ugopen" 到列表框里,"UGII_ROOT_DIR" 是环境变量代表UG的安装路径.如e:\ugs170\ugopen.
[$#376] 用向上的箭头按钮将添加的路径放在第一行,单击 "OK" 按钮。
5.将文件添加到项目里
[$#376] 选择 "roject->Add To Project->Files" 菜单,激活"Insert Files into Project" 对话框.
[$#376] 选择要添加的文件,单击”OK”。
  
6.5应用示例
#include <uf.h>
#include <uf_modl.h>
static void do_ugopen_api(void) {
UF_FEATURE_SIGN      sign = UF_NULLSIGN;
      double block_orig[3] = {0.0,0.0,0.0};
      char *block_len[3] = {"1","2","3"};
      tag_t blk_obj;
UF_MODL_create_block1(sign,block_orig,block_len,[$blk_obj)]
}
void ufusr(char *param, int *retcode, int paramLen) {
     if (!(UF_initialize()) {
          do_ugopen_api();
          UF_terminate();
     }
}
int  ufusr_ask_unload(void) {return(UF_UNLOAD_IMMEDIATELY);}
该程序5、6行是设定模型的参数,第8行的作用是生成立方体,11、12、13是对接口进行处理。最终生成的一个长、宽、高为1、2、3的立方体。
作者: huahua    时间: 2002-5-18 10:28
关系图
作者: huahua    时间: 2002-5-18 10:29
关系图如下
作者: huahua    时间: 2002-5-18 10:30
菜单示例
作者: 双子星    时间: 2002-5-18 10:36
好东西,huahua,再来点呀~~
作者: darkhorse    时间: 2002-5-18 10:50
呵呵。。。华华的看家本领都拿出来了。。。。。。。。
努力在毕业前超过15分。。。
作者: huahua    时间: 2002-5-18 10:54
小马要的,我就给了,高手面前献丑了,DARKHORSE我再怎么努力,也是比不过你的,呵呵
作者: huahua    时间: 2002-5-18 10:55
可惜没有分加啊
作者: darkhorse    时间: 2002-5-18 11:24
老兄。我发现我应该多想你学习谦虚。。
  
会有分加的。。。。
这可是很先进的资料呀。。。不加分是不可能的。。
作者: 双子星    时间: 2002-5-18 11:32
darkhorse wrote:
会有分加的。。。。
这可是很先进的资料呀。。。不加分是不可能的。。

darkhorse兄,你这几句话是说给老版听的吧,哈哈
作者: huahua    时间: 2002-5-18 11:41
呵呵,加分了哦
作者: darkhorse    时间: 2002-5-18 11:49
聪明呀。。。。。哈哈。。。。。。。。。
作者: ycjwolf    时间: 2002-5-18 12:39
老了点儿,17、18中没有这么麻烦的配置。
有没有高级开发的资料?
爽一爽。
作者: 双子星    时间: 2002-5-18 13:13
wolf兄也来了~来点好东东?
作者: lucky_fox    时间: 2002-5-18 20:46
huahua兄:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你给的资料太好了!!非常感谢!!!
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我想斑竹一定会给你加分的!!!  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我希望你能继续贴出来!! 共大家学习讨论!!
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再次感谢!!!
作者: 13089625    时间: 2002-5-19 13:32
不胜感激!
作者: 风缘    时间: 2002-5-29 17:50
唉,意犹未尽呐,
现在想学习一种cad软件的二次开发,不知是solidworks还是UG好。大虾们给提题建议
作者: hu1396135    时间: 2007-6-30 12:30
hao hao a
作者: hu1396135    时间: 2007-6-30 17:26
顶~~~~~~~~
还是不知道怎么开发啊
作者: pgyzyz    时间: 2008-1-5 15:40
为什么我看不到图呢?新手?
作者: zzrxt    时间: 2011-2-14 22:57
开源的软件二次开发论坛,欢迎交流!
https://uucax.uueasy.com
作者: aaaaa12345    时间: 2011-4-5 21:39
TKS
VERY VERY HAO
作者: pmfree    时间: 2011-4-5 22:06
这么老的帖子还能在首页....
作者: lxb19801025    时间: 2011-4-12 21:17
ddddddddddddddddddddddddddddddddddd
作者: hhb1987    时间: 2011-8-17 22:01
好东西怎么用
作者: hhb1987    时间: 2011-8-17 22:12
好深奥啊
作者: yanghu0116    时间: 2011-9-3 07:03
搞不懂,学习学习!!!




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3