智勇图表详解ug nx二次开发第3章api编程框架_第1页
智勇图表详解ug nx二次开发第3章api编程框架_第2页
智勇图表详解ug nx二次开发第3章api编程框架_第3页
智勇图表详解ug nx二次开发第3章api编程框架_第4页
智勇图表详解ug nx二次开发第3章api编程框架_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章UG/OpenAPI它是UG/Open二次开发软件包的一个重要组成部分。UG/Open主要包括:GRIPAPI其中API的包含了约2000个C函数,分别用来实现大部分的UG操作,通过调CUG的各种实体对象(part文件、点、线、面、实体、特征、坐标系、表达式等UG行为等。CAD软件系统中,UG的开放性能是比较好的,绝大多数用户通过交互方式在UG系统中实现的功能,都可以通过UG/OpenAPI来编程实现。NX二次开发的读者或者是已经具有开发经验的读者,NX/OpenAPI的帮助都是有用的助手。API的帮助可以通过如下几种方式打开。在浏览器中直接打开:在浏览器地址栏中输入“C:\ProgramFiles\UGS\NX3.0\UGDOC\hm_fesanbrar.h是NX3的安装路径)注:由于帮助库是以网页的形式展现,其中包括了一个显示帮助资料的控件,此控件有可能会被浏览器,请读者手动允许运行此控件。否则看不到结构,也就无法使NX3的帮助库(NX3HelpLibrary,NXOpen是其中的一个重要组成部分。在NXOpen中,有两个部分与本书读者有关。OpenCProgrammer'sGuideNXOpen编程时需要掌握的OpenCReferenceGuideAPI的详细使用说明。包括数据结构NXOpenAPI编程时必3-1NXOpenAPI助界NXOpenAPI帮助系统的左边,按照类型对函数进行了分类。用户在查找函数介绍uf_csys:度量单位和坐标系的uf_defsuf_disp:与显示有关的的uf_view:与视图和视图操作相关的uf_wave:与WAVE相关的API;可以管理的特征和延迟的更新说明中涉及到的各种数据类型,包括枚举、结构体等;functions中包括了函数的名字、说UGUGOpenAPI函数,有两搜索工具,如图3-1所示。早期UF采用标C开发语言,其APIC的接口形式提供调用。在NX的后期UFAPI被封装到了类中,以类的方法的形式体现,编程调用时也要采用C++的语法来书写。内部和外部UFUFUGC程序一样必须通过编辑形成动态链内部UF两种形式。(*.EXE作系统直接执行,不需要启动UGGateway(主界面。它具体应用在VisualC++或C++Builder的*.EXEUFUG功能。它的优点是不必启动UG,属于运行,这样可以节约运行时间,其缺点在于它不能和UGGateway发生所以一般多用于Part文件大量创建、存取和管理或控制出图,而不适用于用户交互性的几内部UF是以动态库(*.DLL)的形式创建并编译的。和外部UF不同,它必须启UGGateway才能被运行。UGUFUG后,点击菜fusr另一种则是从用户创建的菜单中(Script)调出用户定制的界面(UIStyler)来运行(程序点:ufsta。内部UF的优点是能处理UG的UI对象接口,实现和UG界面的UGUG的客户窗口中得到动所有的UF函数都可用于内部UF方式,但不一定能用于外部UF方式,在帮助文件中UFUFInternal(内部)External(外部)的说明。UserExitUserExit是UF中的一个重要概念。UG运行中的某些特定的地点存在着特定的,能让用户自己编写的内部UF程序在UG运行到特定点时被自动执行,不同的有不同UGUserExit是ufsta(,手动执行用户程序【文件】→【执行】→【NX打开】)UserExitufusr(),在用户新Part时的ufer(ufusr由【文件】→【执行】→【NX打开】调用动态库(*.DLL)执行,它没有UIStyler在起止点间顺序运行。UGufusr(),若找到,则从此函数ufusr为VisualC++6.0,点击菜单【File】→【New...】,创建一个新的工程。因为我们要建立一个内部UF程序,所以选择“Win32Dynamic-LinkLibrary”。为工程起一个名字CPP文件和头文件。然后点击【Finish】按钮,完成工程的创选选择保存位选择动态库类型的工输入工程3-2建工3-3择简单首先添加库,这些库是调用UF函数的代码在时必须的。在VC6中点【Project】→【Settings】→【Link】,在Outputfilename文本框中填入最终编译成的需要添加的库包括:libufun.lib、libugopenint.liblibvmathpp.lib,如图3-4所示。设定编译和时头文件和库文件的查找。在VC6中点击【Tools】→【Options在Options框中分别为包含文件(IncludeFile)和库文件(LibraryFile)设置查找,是UGNX的安装路径。如图3-5所示。3-5置查在VC6开发环境中,进入文件视图,双击编辑文件CreateBlock.cpp。此文件中有一个已voidufusr(char*param,int*retcode,int{if(!UF_CALL(UF_initialize()))//{UF_CALL(UF_terminate());//释放二次开发}{}}

二次开发的功能也需要才能执行,而且也是浮动,即控制同时的用户数。如果没有获取二次开发执行,则UF不能正常工作。如果获取成功则0,若不成功则返回错误号。int{ }当当DLL文件时,UG无须关闭重启动就可调用此新的*.DLL文件。到打开此动态库的UG会话结束时才卸除。UF_UNLOADSE_DALOG:通过一个卸载选择框来进行卸载操作。UGf_ugoenn.hstaticvoid{/*用户在此编写自己的UF程序*/UF_FEATURE_SIGNsignUF_NULLSIGN;doubleblock_orig[3]={0.0,0.0,0.0};char*block_len[3]={"1","2","3"};tag_tblk_obj;UF_CALL(UF_MODL_create_block1(sign,block_orig,block_len,}此函数是实际上进行造型操作的工作函数,注意到此函数是在UFufusr()中被布尔操作类型,在UF中已经预定义好,是一个枚举类型。常用的可选值包括:UF_NULLSIGNUF_POSITIVEUF_NEGATIVEUF_UNSIGNEDblock_orig定义了一个浮点型一维数组,了长方体的原点坐标。block_len定义了#defineUF_CALL(X) FILE LINE,#X,staticintreport(char*file,intline,char*call,int{if{ printf("%s,line%d:%s\n",file,line,call);(UF_get_fail_message(irc,msg))?printf("returneda%d\n",irc):printf("returnederror%d:%s\n",irc,msg);}}#include"ufh"#include"uf_uih" 在VC中,编译和此工程,若没有错误,则系统会提示生成了动态库文件 打开UG,新建一个part文件【文输入文件名。进入建模模块【应用→【建。然后选择执行UF程序【文件】→【执行】→【NX打开】,或者Ctrl+U),在弹中的函数,在UG建模工作区中生成一个长方体。如图3-6所示。3-6序生成的长方ufsta与ufusr不同,ufusta没有明显的执行过程,它用UG中UIStyler模块所定制的界面来实现面向对象、交互式的操作过程,整个程序除回调函数的过程外,都是纯创建应用程序部署结构首先创建一个工作,本程序所开发的菜单文件、框文件、动态库文件等都会被部署到此或其子中。例如创建工作为“d:\CreateBlock”,在其中分别创建两个子,“d:\CreateBlock\startup”和“dCreateBlock\application”。其中“startup”目录中用来存放菜单文件(*.men)和动态库文件(*.dll),“application”中存放框文件在上一步创建的“startup”下创建一个菜单文件(CreateBlock.men,名字可以自己定义,扩展名必须是men。使用纯文本编辑软件(例如NotePadUltraEdit等)打开此文件,输入菜单定义,如代码示例3-6所示。VERSION BUTTONBUTTON_CreateBlock 创建一个BlockACTIONSCreateBlock.dlg在帮助菜单后面添加了一个用户自定义顶级菜单,其标识符为“_CreateBlock”,显示名字为“CreateBlock”。Windows环境下,假定用户的工作为“d:\CreateBlock”,在控制面板下的系统中的环境框中,设置用户变量“UGII_USER_DIR”(若没有则添加一个)为“d:\CreateBlock”,确定即可。见图3-7。3-7置系统环境变UGUG下ugii_env.dat文件中找到两行文本如下所示:UGIISITEDIR=${UGALLIANCEDIR}\site置二次开件的。在UG初始安装时,它们不起作用,当删掉“#”号后,UG/Open才能从这些下得到二次开发的功能扩充。这两个的功能和结构是完全相同的,都有startupapplication这两个。UG设的这两个sitevendor,是为了供给不同等级的开发者使用,vendorUGsite下则存放其余开发者的产品,因此vendor下同类内容的文件要比site下的优先载入。此行数据用来设置存放用户自己二次开发内容的,同样将其前面的“#”号删除,并且在其后面添上用户的,例如“UGII_USER_DIRd:\CreateBlock”,在此下也startupapplicationsitevendorstartupapplication一样,设置完环境变量之后,启动UGNX3,则会看到系统的帮助菜单已经了,增加了3-8单定制效Styler(,此模块可以支持二次开发用户以“所见即所得”的图形化操作方式来制作图3-9初始图中的界面中包含了3个框,最左边的是用户设计的框,右上方是对界面元单击选中界面元素的列表框(右上方框)中第一个对象(对象识别号:CHANGE,户设计的框中增加一个按钮。在界面元素的列表框(右上方框)中选中此按钮(对象识别号:CHANGE_ACTION_0然后在界面元素的属性框(右下方框)后的框如图3-10所示。图3-10定制后的 和2个静态变量定义到“CreateBlock.cpp”文件中,如代码示例3-8所示。#defineCHANGE_CB_COUNT(2+1)/*Add1fortheterminatorstaticUF_STYLER_callback_info_tCHANGE_cbs[CHANGE_CB_COUNT]{{UF_STYLER_DIALOG_INDEX,UF_STYLER_APPLY_CB,0,{CHANGE_ACTION_0,UF_STYLER_ACTIVATE_CB,0,{"CreateBlock.dlg", {NULL,NULL,NULL,0}/*ThisisaNULLterminatedlist的调用语句。如代码示例3-9所示:externvoidufsta(char*param,int*retcode,int{intif((UF_initialize())!=0)if((error_code=UF_MB_add_styler_actions(actions))!=0{charfail_message[133];printf("%s\n",fail_message);}}intCHANGE_apply_cb(intvoid*_data,{/*MakesureUserFunctionisavailable.*/if(UF_initialize()!=0)/*----Enteryourcallbackcode /*Callbackacknowledged,donotterminate /*AreturnvalueofUF_UI_CB_EXIT_DIALOGwillnotbe /*forthiscallbacktype.Youmustrespondtoyourapplybutton.*/return(UF_UI_CB_CONTINUE_DIALOG);}intCHANGE_action_0_act_cb(intvoid* {/*MakesureUserFunctionisavailable.*/if(UF_initialize()!=0)/*----Enteryourcallbackcode UF_terminate/*Callbackacknowledged,donotterminatedialog*/return(UF_UI_CB_CONTINUE_DIALOG);/*orCallbackacknowledged,terminate }将“CreateBlock_temte.c”中的头文件到“CreateBlock.cpp”文件中。如代码3-10所示。#include<stdioh>#include<ufh>#include<uf_defsh>#include<uf_exith>#include<uf_uih>#include<uf_mbh>#include<CreateBlock贝到“startup”下。图3-6所示。UGAPI的帮助中,每一个函数都有一个说明是否适合内部模式或者外部模式,大部分UF函数都可以运行在外部模式。下面以一个例子来说明如何编写UF外部程序。此例子在磁盘上新创建一prt文件,prtprt文件。在上述这些操作进行规程中,不需要任何人工交互,用户也看不到UG程序界面。VC中创建一个win32控制台应用程序(win32consoleapplication,名字为“CreateBlockExt”,保存位置为“d:\”,选择类型为“asimpleapplication”。3.2.2节中的第(2)UG的动态运行,即“C:\ProgramFiles\UGS\NX3.0\UGII3-11所示。3-11置输出位staticvoid{intscope0;//只关闭当前文件,不涉及子装配intmode=1;// doublecorner_pt0.0,0.0,0.0};//立方体原点坐标tag_tblock_tag;tag_t/*创建一个新的prt文件*//*在prt文件中创建一个立方体*//*保存此prt文件*//*关闭此prt文件*/}intmain(intargc,char*{

if{}return}了一个各边长为1,原点位于(0,0,0)的立方体。part;生成一个新的part文件,并把它作为工作文件。point;件中加以,如“#include<uf_part.h>”,“#include<uf_curve.h>”等。UGUF中会逐渐放弃UG的函数时尽量避免使用它们,以保证开发的程序有UFCC的结构、枚举、指针和预定义常数UF中拥有大量的特定数据结构,一般从后缀上已经对它们的类型进行了明确的 最常用的UF数据类型包括:Expression等。它的定义如代码示例3-13所示。typedefunsignedinttag_t,中有一个特殊的Tag(“NULL_TAG”)是用来表示暂时不标识任何对象的Tag,相当于初值为零typedefstructuf_list_sstruct{ eid /*ObjectIDstruct /*PointertothenextOIDinthelist00则表示函数执行失败,此非零的返回值就是错误号。读者在使用UF进行编程时应注意检查每一个UF调用的返回值,若非零则Object、BodyFeature使用UF中的函数时需要用到这些类型,因此有必要分清它们的概念及范围。UG实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论