版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 二次开发应用框架2.1二次开发工程项目的创建二次开发工程的创建常用有3种:UG/Open AppWizard、Win32应用程序向导和MFC应用程序向导。UG应用开发程序采用了动态链接库(DLL,Dynamic Link Library)技术,使用上述任何一种应用向导开发程序,最终生成的结果都是DLL文件,提供UG进程加载。UG内部应用程序开发规定以动态链接库方式对其进行功能扩展和应用开发。动态链接库被映射到其他应用程序空间中执行,与链接它的应用程序可以看成是一体的。在Visual S中将应用程序编译链接生成动态链接库文件(后缀名为.dll),UG启动时会自动加载动态
2、链接库文件供用户调用,从而实现了应用开发程序与UG平台的无缝集成。1、利用UG/Open AppWizard向导1.4节已经详细介绍了使用UG/Open APPwizard 创建一个简单的First Project程序。该向导是UG软件本身提供的应用向导,随着UG版本和开发环境的升级而升级。该向导操作简便,运行稳定,可以快速构建开发体系,但通常不支持MFC类库,因此常常应用于辅助工具的开发。2、利用Win32应用程序向导(DLL)应用开发程序框架还可以采用Win32 DLL向导创建。Win32 DLL向导创建Windows常规DLL,它只能导出C样式函数,不能导出C+类、成员函数和重载函数,同
3、UG/Open AppWizard向导创建工程项目一样不支持 MFC。利用Win32应用程序向导创建工程项目,包括两个步骤:新建项目和设置项目属性。步骤一:新建项目打开Visual Studio.NET,选择新建项目菜单项,将显示如图2-5所示的新建项目对话框。在项目类型框中选择Visual C+项目下的Win32选项,在模板框中选择Win32 项目选项,在名称框中输入项目名称,在位置框中设置合适的路径,单击确定按钮接受输入。图2-5 新建项目对话框这时将显示如图2-6所示的Win32应用程序向导UFSolution对话框,选择应用程序设置属性页,在其中选择Dll,直接单击完成按钮建立新项目。
4、图2-6 Win32应用程序向导UFSolution对话框新建的项目中将会有一些向导默认添加的文件,如图2-7所示。图中列出了新建项目中已有的文件。图2-7解决方案资源管理器图步骤二:设置项目属性选择项目菜单下的属性项,将显示如图2-8所示的UFSolution属性页。图2-8项目属性页常规在图2-8中要确认项目默认值框中配置类型为动态库(.dll),然后,选择调试选项,将显示图2-9。在图2-9中,将操作框中的命令项设置为系统中的UG执行文件,即ugraf.exe,设置这一项的目的是为了便于程序的调试。图2-9 项目属性页调试接下来,选择C/C+项中的常规选项,将附加包含目录设置为$UGII
5、_BASE_DIRUGOPENPP; $UGII_BASE_DIRUGOPEN,如图2-10所示。设置这一项的目的是为了包含UF的一些头文件。图2-10 项目属性页C/C+常规选择C/C+项中的代码生成选项,将运行库设置为多线程调试 DLL (/MDd),如图2-11所示。图2-11 项目属性页C/C+代码生成选择链接器项中的常规选项,设置输出文件,将附加库目录设置为$UGII_BASE_DIRUGOPEN; $UGII_BASE_DIRUGOPENPP,如图2-12所示。图2-12 项目属性页链接器常规选择链接器项中的输入选项,设置附加依赖项为libufun.lib libugopenint
6、.lib。这两个文件是在进行UG二次开发时必需的库载入文件,如图2-13所示。图2-13 项目属性页链接器输入设置好以上选项后,按应用按钮,将所设置的属性应用于项目。(3)利用MFC应用程序向导(DLL)UG应用程序项目也可以利用MFC应用程序向导(DLL)创建。UG应用程序开发可以方便地调用MFC类库中的资源,丰富应用程序界面。项目创建过程与Win32应用程序向导(DLL)项目创建过程基本相同。同流行的windows应用程序开发工具相比,UG/Open提供的工具及对话框所包含的控件较少,功能有限,因此界面开发在一定程度上受到限制,有的功能甚至难以实现。为了避免这个缺陷,可以采用 MFC应用向
7、导( MFC Appwizard )建立系统框架,在该框架下可以方便地调用MFC类库中的资源。MFC( Microsoft Foundation Class )类库是 Windows下C+编程使用最广泛的类库。MFC封装了WIN32 API函数,并设计了一套方便的消息映射机制。Visual C+及其MFC的界面灵活性和表达能力均优于UIstyler 的功能。有效灵活的MFC框架结构大大方便了开发者的编程工作,达到事半功倍的效果。在UG开发中使用MFC库,一般调用的是 MFC42.DLL 库( MFC 核心类库)。由于不能保证用户机器都安装了MFC类库,所以在编译时应静态链接到MFC库,此时DL
8、L文件包含所有需要的MFC代码的一份拷贝,即成为自包含的库。与动态链接到MFC方式相比,静态方式创建的DLL文件占用了更多空间,但确保了DLL在不同目标机器上的正确运行。当UG执行用户的开发程序时会把MFC42.DLL 作为进程的一部分装入。 MFC42.DLL 把数据存放在一些可靠的全局变量内。由于在正规的MFC DLL中调用MFC42.DLL时,全局变量可能会不同步而导致编译出错,所以应在 User Exit 函数的开头插入宏语句:AFX_MANAGE_STATE ( AfxGetstaticModuleState() );2.2应用程序框架2.2.1 程序的组成UG/Open API 应
9、用程序一般包括菜单、对话框、应用程序(DLL)和UG/Open API库函数四部分,其中菜单和对话框是程序与用户交互的工具,从菜单可以启动应用程序、对话框等,在对话框激活控件时,将调用相应的回调函数,应用程序(回调函数)用基本的C/C+语言和的库函数编码。菜单:UG/Open提供了菜单开发工具MenuScript,它提供用户创建并编辑UG的下拉菜单及工具条。菜单文件扩展名为.men,工具条文件扩展名为.tbr,这两类文件放在应用程序目录的startup子目录中。对话框:UG/Open UIStyler模块提供了强大的制作UG风格窗口的功能。对话框文件扩展名为.dlg,这类文件放在程序目录的ap
10、plication子目录中。应用程序(回调函数):C/C+语言程序,在C/C+集成开发环境中创建、编译连接并运行,生成.dll文件,放在程序目录的startup或udo子目录中。UG/Open API库函数:默认存放在“$UGII_BASE_DIRugopen”目录中。在创建应用程序时需要配置。应用程序开发流程如图2-14所示。图2-14 UG/Open API应用程序开发流程2.2.2 工程目录结构在用户设定的工程路径下需要建立 UG 系统规定的工程目录结构。 UG 启动时会在规定目录中寻找并加载相应的程序和资源。UG规定的目录有 startup、application 和Udo。UG对它们
11、存放的文件做了如下的规定: ( 1 ) Startup 目录存放UG启动时需加载的动态链接库文件(*.dll)、菜单脚本文件( *.men)和用户工具栏脚本文件(*.tbr)。 ( 2 ) Apphcation 目录存放具体的功能扩展程序文件,如UIstyler 对话框文件(*.dlg)、工具图标文件(*.bmp )和位图调色板文件(*.ubm )。( 3 ) Udo目录存放用户定义的数据和链接等。考虑到项目开发的需要和文档的完整性,除了UG系统规定的目录外,还需要建立一些自定义目录(仅供参考)。这些目录有 Code、Configure 和Document。这些目录中存放的文件类型有如下规定:
12、 ( 1 ) Code目录存放具体的程序代码,该目录在新建工程时创建。( 2 ) Configure目录存放开发中所必需的配置文件,如文本文件(*.txt)、自定义配置文件(*.cfg)和电子表格 Excel文件(*.xls )等。Configure目录的名称可以根据具体的编程需要由开发者选定,例如 Excel、Temp等。( 3 ) Document 目录存放用户的文档文件,如视频演示文件(*.avi)、安装使用说明书(*.doc)和软件开发说明书(*.doc)等。图 2-25 所示给出了一个应用开发程序的目录结构,开发者可以根据实际情况做适当调整。图2-14 工程目录结构2.3工程路径设置
13、工程路径是指安装在目标硬盘的用户工程的路径,工程路径设置的目的是让UG软件在启动运行时能找到应用程序的物理位置,自动加载应用程序。例如,1.4节实例的工程路径是E:ucocs。工程路径下至少存在UG规定的资源文件夹Startup和Application,用户可以将相关的资源文件放入这些文件夹中。注册工程路径有两种方法:配置文件法和环境变量法。2.4.1 配置文件法在默认情况下,UG规定了配置文件custom_dirs.dat用于指明用户的工程路径,该文件位于路径“$UGII_BASE_DIRugiimenus”。当UG启动时,系统检查该文件中注册的工程路径并自动加载该路径下的所有资源,包括用户
14、菜单、对话框和动态链接库等。配置文件custom_dirs . dat 的基本语法如下:( 1 ) 文件中允许使用注释,注释是以注释符“#”开头的一行文字。( 2 ) 每一行只能写一条工程路径,要确保路径的正确。( 3 ) custom_dirs.dat允许添加多个文件路径,UG在启动时将按照先后顺序依次载入。1.4节的实例采用修改配置文件法注册工程路径,该方法操作简便,并且可以同时载入多个工程,因此得到广泛使用。值得注意的是,在多工程载入的情况下,应避免工程间DLL文件重名的情况发生。如果发生重名,系统会认为是重复注册现象,并且只载入注册靠前的工程而忽略其他的工程。例如,custom_dir
15、s.dat按照先后顺序注册了两个工程路径Path1和 Path2,但它们的 DLL 文件名称相同。此时无论激发哪个工程,都将执行路径 Path1下的工程应用。2.4.2 修改环境变量法UG 环境配置文件ugii_env.dat 中存在3个用于注册工程路径的环境变量,如表2-1所示。去掉环境变量前的注释符“#,在等号后写入具体的工程路径,则在 UG 启动的同时会将这些环境变量所指定的工程路径中的资源按照优先级的顺序加载。注册工程路径的环境变量环境变量名工程路径优先级UG_VENDOR_DIR存放 UG 指定开发商应用开发产品的工程路径最高UG_SITE_DIR存放其余开发商应用开发产品的工程路径
16、其次UG_USER_DIR存放用户自己应用开发产品的工程路径最低下面在1. 4节的实例中使用修改环境变量法来注册工程路径。 ( 1 )取消原有注册。打开文件custom_dirs.dat,删除或注释掉工程路径E:ucocs(在路径前加上“# )并保存文件。此时打开UG将找不到工程的菜单命令。 ( 2 )修改ugii_env.dat中UG_SITE_DIR 的值为“UG_SITE_DIR= E:ucocs”并保存文件。注意,语句前不能有注释符“#”。此时打开UG,将恢复 FileNew 工程的使用。2.4 UG/Open API运行模式利用UG/Open API编写的程序源代码并不能被UG直接执
17、行,它和C/C+ 程序一样必须通过编译形成动态链接库或可执行文件后才能发挥作用。UG/Open API程序可以在两种不同的环境下(内部和外部两种模式)运行,这取决于程序的连接方式。2.4.1 内部模式内部模式(Internal开发模式)的程序只能在UG的界面环境下运行。在运行内部程序时,它们以 .dll (动态链接库)的方式被调到UG的进程空间中。内部程序有下列特点:执行代码小,连接快;内部程序一旦被加载到内存中,只能通过UG/Open API的卸载功能才能从UG运行功能中卸载它;运行结果在UG的界面图形环境中可见;入口函数是ufusr或ufsta;最大的优点是能处理UG的UI的对象接口,实现
18、和UG界面的无缝集成并能扩充UG的特定功能,而且它执行时每个步骤都能从UG的客户窗口得到动态反映,因此能方便的通过UI界面对象来实现与用户的交互、屏幕选取等复杂操作。内部程序是以动态链接库的形式创建并编译的。它必须启动UG/gateway才能运行。内部模式的应用程序,可以通过下列几种方式执行:l 直接激活方式该方式不用设置环境变量,程序编译连接后即可执行。在UG环境中选择菜单:File- Execute-NX Open,将出现一个文件打开对话框,选取相应应用程序(.dll)即可。l 用户菜单调用方式使用该方式必须设置环境变量UG_USER_DIR,将环境变量UG_USER_DIR指向应用程序主
19、目录,将应用程序(.dll)放置到主目录的$UGII_USER_DIRapplication或$UGII_USER_DIRstartup子目录下。l UIStyler 回调函数方式由UIStyler创建的对话框回调函数中激活应用程序(.dll)l 通过用户出口根据用户出口不同,设置相应的环境变量,激活对应入口函数应用程序.dll。内部程序的一般格式如下:#include /* Prototypes exist in this file.*/void ufusr( )/*申明变量*/UF_initiialize();/*用户代码*/UF_terminate();2.4.2 外部模式外部模式下的程
20、序可以在操作系统下运行,不必在UG环境中作为UG 的子程序运行。外部程序是可执行程序,运行时只要有UG License 的支持,就可以由操作系统直接执行,不需要启动UG/Gateway。它的优点是不必启动UG,属于后台执行,这样可以节约运行时间,其缺点在于它不能和UG/Gateway发生联系,因而不能利用UG的显示窗口动态反馈操作结果,同时也不能实现一些用户的交互操作和管理或控制出图,所以它一般用于part 零件文件大量创建,而不适用于用户交互性的几何建模和修改、存取外部程序在操作系统平台的命令行直接执行即可。外部程序的一般格式如下:#include /*头文件*/int main(int a
21、rgc, char* argv)/*申明变量*/UF_initiialize();/*用户代码*/UF_terminate();2.5 程序的初始化及终止所有UG/Open API程序的使用,必须及时进行初始化和终止,以确保获取或释放UG/open API的执行许可权限。在调用UG/Open API的函数前,应先调用 UF_initialize()来获得执行许可权限。一般来说,第一个调用的UG/open API函数就是UF_initialize()。当不再调用API函数的时候,必须调用UF_terminate()来释放执行许可权限。UF_initialize()函数的调用应该紧跟程序中的变量声
22、明部分,而int UF_terminate()则应在程序最后才被调用,对于外部UF和内部UF都是如此,这说明外部UF的运行虽然脱离UG Gateway,但仍离不开API执行许可权限的支持。实例int DQXSJ_ok_cb ( int dialog_id,void * client_data,UF_STYLER_item_value_type_p_t callback_data)char step_id=11;char step_status=1;char dsn_name=dqxsj;char table_name=exp_know,table_name1 =condition_data;i
23、nt flag;if ( UF_initialize() != 0)return ( UF_UI_CB_CONTINUE_DIALOG );UG_OPEN_dqxsj_accept_data( dialog_id,&flag);if(flag=1) UG_OPEN_dqxsj_explain_data( dialog_id);UG_OPEN_delet_instance(step_id);UG_OPEN_add_part_to_product(dsn_name,step_id);UG_OPEN_edit_expression(dsn_name,table_name,table_name1);U
24、G_OPEN_set_order_knowledge(step_id,step_status) ;UF_terminate ();return (UF_UI_CB_EXIT_DIALOG);2.6 用户入口2.6.1 User Exit概述User Exit是UG/Open API中的一个重要概念。UG在运行过程中某些特定的地点存在着规定的入口,当进程执行到这些入口时,UG会自动检查用户是否在此处已定义了指向内部UF程序位置的环境。若没有定义则以UG默认的方式继续运行下去;若已定义则从该处自动运行用户开发程序,这个过程被称为User Exit。利用不同的User Exit能让用户程序在UG运行
25、到特定点时被自动执行。不同的入口具有不同的User Exit名称,用户程序以不同的User Exit作为入口点,就能决定该程序在UG进程的哪个阶段被自动激活并运行。每个User Exit都有唯一的入口名称,以便用户在子程序中调用,当UG执行到某个入口时,便会在用户程序中寻找对应的User Exit函数名称,若存在则调用该函数并执行函数体,若不存在则继续UG默认进程。不同的User Exit使用不同的入口函数,最常用的User Exit是ufsta()与ufusr(), ufsta()是UG启动时的User Exit, ufusr()是直接激活的User Exit。通常情况下,User Exit
26、函数的参数和返回值都相同。User Exit函数的定义如下:void entry_point ( char * param, int * retcode, int rlen );其中 param和 retcode 是输出参数,rlen 指参数 param 的长度,由 UG 系统处理。2.6.2 ufusr()1.4节的First Project程序采用了直接激活( Explicit Activation )的 user Exit,其入口函数为 ufusr()。直接激活的操作方式如下:选择菜单命令 FileExeeute UG/OPENUser Function(或按快捷键 Ctrl + U )
27、,在弹出的 Execute User Function 对话框中选择 DLL 文件,即可执行应用开发程序中的ufusr()函数。这种 User Exit 只是一个面向过程的程序处理任务,它有唯一的运行起止点,程序码在起止点间顺序进行。ufusr()的函数体如下所示:extern “C” DllExport void ufusr(char *param, int *retcod, int parm_len)/*Initialize the API environment*/int errorCode = UF_initialize();if ( 0 = errorCode ) /* TODO:
28、Add your application code here */ /* Terminate the API environment */ errorCode = UF_terminate(); /* Print out any error messages */PrintErrorMessage ( errorCode );2.6.3 ufsta()ufsta()是最常用的入口函数,当UG启动时激活该User Exit并执行函数中的内容,如1.4节的实例就采用了UG启动(UG startup)的User Exit。为了实现用户菜单的调用功能,通常的做法是在UG启动时注册用户菜单的信息,当UG
29、启动后选择菜单命令时即可调用指定的应用程序。注册方法有两种:UF_MB_add_style_actions()和UF_MB_add_actions(),将在3.5节详细介绍。也可以直接在该入口函数中写入一个应用,当UG启动时执行。ufsta()的函数体如下所示:extern C DllExport void ufsta ( char *param, int* returnCode, int rlen )/* Initialize the API environment */if(UF_initialize()!=O) return; /初始化/* TODO:Add your applicati
30、on code here */* Terrninate the API environment */UF_terminate();return;下面的例子很好地说明了ufsta()函数的功用。在1.4节实例的ufsta()函数体中添加一行代码,实现弹出一个消息对话框的功能。编译完成后,打开UG,会发现UG启动过程被一个消息对话框中断,即当UG启动时执行了ufsta()函数中的内容。extern C DllExport void ufsta ( char *param, int* returnCode, int rlen )if(UF_initialize()!=0) return; /初始化A
31、fxMessageBox(“ufsta”); /添加的一行代码UF_terminate(); /终止return;2.6.4 其它User Exit每个User Exit都有唯一的环境变量相对应。这些环境变量在UG环境配置文件ugii_env.dat(位于UG根目录下的UGII文件夹中)中定义。表2-4所示列出了UG软件提供的38个User Exit,具体说明可参考Open C Reference Manual或头文件UGOPENuf_exit.h。表2-4 其它User ExitUser Exit环境变量名入口函数Open PartUSER_RETRIEVEufgetNew PartUSER
32、_CREATEufcreSave PartUSER_FILEufputSave Part AsUSER_SAVEASufsvasImport PartUSER_MERGEufmrgExecute GRIP ProgramUSER_GRIPufgrpAdd Existing PartUSER_RCOMPufrcpExport PartUSER_FCOMPuffcpComponent Where-usedUSER_WHERE_USEDufusdPlot FileUSER_PLOTufplt2D Analysis Using CurvesUSER_AREAPROPCRVuf2daUser Defin
33、ed SymbolsUSER_UDSYMBOLufudsOpen CLSFUSER_CLS_OPENufclsoSave CLSFUSER_CLS_SAVEufclssRename CLSFUSER_CLS_RENAMEufclsrGenerate CLFUSER_CL_GENufclgPostprocess CLSFUSER_POSTufpostCreate ComponentUSER_CCOMPufccpChange Displayed PartUSER_CDISPufcdpChange Work PartUSER_CWORKufcwpRemove ComponentUSER_DCOMPu
34、fdcpReposition ComponentUSER_MCOMPufmcpSubstitute Component OutUSER_SCOMP1ufscpoSubstitute Component InUSER_SCOMP2ufscpiReplace Reference SetUSER_RRSETufrrsRename ComponentUSER_NCOMPufncpNX StartupUSER_STARTUPufstaAccess Genius Library Management SystemUSER_GENIUSufgenExecute Debug GRIPUSER_GRIPDEBUGufgrpdExecute Open C APIUSER_UFUNufuf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政雨水管道维护与保养方案
- 老旧小区公共广播更新项目可行性研究报告
- 牙槽嵴修整术规范化操作培训
- 桥梁工程施工安全管理规程
- 洁净实验室安全操作培训课件
- 老厂区屋顶运动场项目可行性研究报告
- 老旧管网非开挖修复项目可行性研究报告
- 烟气余热回收工程项目立项申请报告
- 企业办公区与厂区网络融合设计方案
- 外墙真石漆施工方案
- 铁路防断培训课件
- 2025年gsp药品批发企业质量风险管理试题及答案
- 药物制剂技术专业教学标准(高等职业教育专科)2025修订
- 泡沫厂生产管理制度
- 《经济法基础》 (第2章) 第一章 总论
- 《海康威视使用说明》课件
- 创新方法大赛理论知识考核试题题库及答案
- 松下-GF2-相机说明书
- 机电样板段配合方案及计划
- 中国子宫内膜增生管理指南(2022)解读
- 布比卡因脂质体注射液-临床用药解读
评论
0/150
提交评论