版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/CHAPTERﻩ 22CHAPTERUGNX5。0二次开发基础内容提要UG/OpenAPI基础概念和语法知识UG/OpenAPI常用对话框及其应用提示消息的发布与获取Open/API(用户函数)是一个程序集合,使得程序员能够访问和操作NX对象模型。除此之外,Open/API还提供了工具用来编辑和连接与UGNX5。0风格一致的程序。UG/Open二次开发模块是UGNX5.0软件的二次开发工具集,可用于各种二次开发工作.利用该模块可对UGNX5.0系统进行用户化剪裁和开发,满足用户的开发需求。使用UGNX5.0的二次开发时,用户需要具有一定的C语言基础。UG/Open包括以下几个部分.(1)UG/OpenAPI开发工具:提供UGNX5.0软件直接编程接口,支持C、C++、Fortran和Java等主要高级语言。(2)UG/OpenUIStyle开发工具:是一个可视化编辑器,用于创建类似于UGNX5.0的交互界面。利用该工具,用户可为UG/Open应用程序开发独立于硬件平台的交互界面。(3)UG/OpenMenuscript开发工具:对UGNX5。0软件操作界面进行用户化开发,使得用户无须编程即可对UGNX5。0标准菜单进行添加、重组、剪裁或在UGNX5。0中集成自己开发的软件功能。(4)UG/OpenGRIP开发工具:是一个类似于APT的UGNX5.0内部开发语言,用户可利用该工具生成NC自动化或自动建模等特殊应用。22。1UG/OpenAPI语法基础由于UG/OpenAPI是UGNX5.0中最常用的二次开发工具,因此国内外有大量的UGNX5.0用户投入了大量的精力对UG/OpenAPI的编程进行研究,而且已经掌握了大量的编程技巧,并开发了许多实际的应用。本书在编写过程中,参考了他们的许多经验.22.1.1概述作为UGNX5。0与外部应用程序之间的接口,UG/OpenAPI是一系列函数的集合.通过UG/OpenAPI的编程,用户几乎能够实现所有的UGNX5.0功能。开发者可以通过用C++语言编程来调用这些函数,从而实现用户的需求。(1)对UGpart文件及相应模型进行操作,包括建立UGNX5.0模型、查询模型对象、建立并遍历装配体及创建工程图等。(2)在UGNX5.0中创建交互式程序界面。(3)创建并管理用户定义对象等。应用函数时应注意,所有的UG/OpenAPI应用必须及时进行初始化和终止,以确保获取或释放UG/OpenAPI的执行许可权限.初始化函数是UF_initialize,开始调用UG/OpenAPI的函数时应先调用UF_initialize来获取执行许可权限。一般来说,变量声明完成后,第一个调用的UG/OpenAPI函数就是UF_initialize。终止函数是UF_terminate,不再需要调用UG/OpenAPI的函数时,必须先调用UF_terminate来释放执行许可.UG/OpenAPI程序能在两种不同的环境(依赖于程序的连接方式)下运行,即Internal环境(也叫“Internal开发模式”)和External模式.其中Internal环境下的程序只能在UGNX5。0的界面环境(session)下运行,在运行这些程序时它们被加载到UGNX5.0的运行空间中(UGNX5.0分配的内存)。External模式开发的程序能在各种操作系统(WindownsNT/2000/XP及UNIX)下运行,不在UGNX5.0环境中或作为UGNX5。0的子进程运行。尽管没有图形显示,但UG/OpenAPI提供了函数用于打印机或绘图仪输出,也可以输出成CGM文件或其他数据文件。下面在VisualC中创建一个基于UG/OpenAPIAppWizard的项目,来说明初始化函数和终止函数的应用。【例22-1】UG/OpenAPI中初始化函数和终止函数的应用.操作步骤如下。检查VisualC的安装目录MicrosoftVisualStudio\common\msdev98\Template下是否有文件ugopen.awx及ugopen。hlp,若有,进入步骤2;否则从UG安装目录$UG_BASE_DIR/ugopen下将这两个文件复制并粘贴到目录MicrosoftVisualStudio\common\msdev98\Template下。启动VisualC++,选择【File】|【New】命令,弹出【New】对话框,如图22—1所示。图22-1【New】对话框选择选项卡,在选项卡下面的列表框中选择【UG/OpenAPPWizardV18】,在文本框中输入项目名称“Example”,单击按钮。在弹出的对话框中按图22-2所示设置选项.图22-2设置选项1单击按钮,在弹出的对话框中设置选项,如图22-3所示。图22-3设置选项2单击按钮,系统弹出【NewProjectInformation】窗口,如图22-4所示。窗口中列出了用户选择的所有信息。确认无误后单击按钮,系统将在指定的目录下创建一个UGNX5.0二次开发框架。图22-4【NewProjectInformation】对话框按快捷键F7,编译Example工程,一般会出现编译成功的信息,如图22—5所示。图22-5编译成功的界面打开【】选项卡,单击【Examplefiles】前的+。然后单击【SourceFiles】前面的+,双击【Example.cpp】,文件的内容如图22-6所示。下面给出“Example。h”和“Example.cpp"两个文件的内容,在“Example.cpp"文件中可以找到函数:extern”C"DllExportvoidufusr(char*parm,int*returnCode,intrlen)其函数体中包含着UG/OpenAPI中的初始化函数UF_initialize和终止函数UF_terminate.在进行应用开发时,只需要把相应的代码(代码中的黑体部分)添加到相应的位置,即可完成应用开发。图22—6打开Example.cpp文件Example.h文体内容如下:/*********************************************************************************Example.h****Description:**Exampleheaderfile.*******************************************************************************/staticvoidPrintErrorMessage(interrorCode);Example.cpp文件内容如下://////////////////////////////////////////////////////////////////////////////////Example.cpp////Description://ContainsUnigraphicsentrypointsfortheapplication.//////////////////////////////////////////////////////////////////////////////////Includefiles#include〈uf.h>#include〈uf_exit.h>#include〈uf_ui.h〉#if!defined(__hp9000s800)&&!defined(__sgi)&&!defined(__sun)# include<strstream> usingstd::ostrstream;ﻩusingstd::endl;ﻩﻩusingstd::ends;#else#ﻩinclude<strstream。h>#endif#include<iostream.h〉#include”Example.h”//-——-——------—-—----—-——--————----—-——-—--—-—-——----—---————-——--—--——-//ActivationMethods//————-—---——--—---——-----—--—————--—----—----—--—-—--——-—--—--———-—--————-//ExplicitActivation//Thisentrypointisusedtoactivatetheapplicationexplicitly,asin//"File-〉ExecuteUG/Open->UserFunction。.."extern"C"DllExportvoidufusr(char*parm,int*returnCode,intrlen){/*InitializetheAPIenvironment*/interrorCode=UF_initialize();if(0==errorCode){/*TODO:Addyourapplicationcodehere*//*TerminatetheAPIenvironment*/errorCode=UF_terminate();}/*Printoutanyerrormessages*/PrintErrorMessage(errorCode);}//-—--——------———-—---————-—---------——--—-—-——---—---------——------——-—//Utilities//---—-——-——--—--—————---—-———----——————-—-——---—-——-—---—-——--——-———--—//UnloadHandler//ThisfunctionspecifieswhentounloadyourapplicationfromUnigraphics。//Ifyourapplicationregistersacallback(fromaMenuScriptitemora//UserDefinedObjectforexample),thisfunctionMUSTreturn//"UF_UNLOAD_UG_TERMINATE”.extern”C”intufusr_ask_unload(void){return(UF_UNLOAD_UG_TERMINATE);}/*PrintErrorMessage****PrintserrormessagestostandarderrorandtheUnigraphicsstatus**line。*/staticvoidPrintErrorMessage(interrorCode){if(0!=errorCode){/*Retrievetheassociatederrormessage*/charmessage[133];UF_get_fail_message(errorCode,message);/*Printoutthemessage*/UF_UI_set_status(message);//Constructabuffertoholdthetext.ostrstreamerror_message;//Initializethebufferwiththerequiredtext.error_message<<endl<〈”Error:"〈〈endl<<message<〈endl<〈endl<<ends; //Writethemessagetostandarderrorcerr<<error_message.str();}}在创建几何模型、遍历模型或执行其他一些基本操作时,必须首先创建或打开一个UnigraphicsPart文件.22.1。2UG/OpenAPI函数名称及数据类型作为Unigraphics二次开发的一个重要模块,UG/OpenAPI在函数名称和数据类型方面都有自己的一些独特风格,本章将分别予以介绍。UG/OpenAPI的函数名称一般采用标准名称约定,其格式为:UF_<area>_<name>名称中各部分的说明如下。(1)UF:表示UG/OpenAPI函数。(2)<area>:通常是模块功能和首字母的缩写,例如MODL和DISP是Modeling模块和Display功能的缩写。(3)<name〉:被下画线分开的动词和名词,例如UF_MODL_create_block1是UG/OpenAPIModeling模块中创建立方体的函数,UF_DISP_set_highlight是高亮显示对象的函数.在数据类型方面,除了标准的C语言数据类型外,UG/OpenAPI还提供了一些自定义的数据类型,如tag_t类型、结构类型、联合类型与指针类型等。下面介绍几种常用的类型。1.tag_t数据类型UG/OpenAPI使用最多的数据类型是tag_t,在UG/OpenAPI的uf_def。h中对该类型的定义如下:typedefunsignedinttag_t,*tag_p_t;该类型把UG/OpenAPI与对象模型联系起来.当UG的模型被加载到UG环境中后,tag_t相当于对象的唯一标识。大部分的UG/OpenAPI函数参变量列表中都有一个tag_t指针或tag_t类。它类似于C语言中的指针,例如当要查询一个点对象的坐标时,送入查询函数中的tag_t应是点类型的几何对象,而不是线或面等其他几何对象的tag_t。此外,tag_p_t是指向tag_t数据类型的指针。以部件对象为例,下面的代码首先获取部件的tag_t值,然后获取该句柄所引用部件对象的文件名。tag_ttPart;tPart=UF_ASSEM_ask_work_part();chars];UF_PART_ask_part_name(tPart,sFile);由于代码中加入了函数UF_ASSEM_ask_work_part(),因此调试程序时应加入头文件#include<uf_assem。h>。UG/OpenAPI拥有大量用于创建及修改Unigraphics对象的函数和过程。UG/OpenAPI的部分函数不提供错误信息,在创建对象时一般返回对象的标识(tag_t)。当返回的对象标识为NULL_TAG时,表示创建对象时出现了错误。2。结构类型(Structuretype)UG/OpenAPI采用C语言的语法定义了一些常用的结构类型,将相互联系的不同类型的数据封装在一起使用。这些结构类型用后缀“_s”表示,下面给出一个使用结构类型的例子。typedefstructUF_ASSEM_options_s{intreason;constchar*item_id;intsubitem_index;intcount;intitem_attr;intindicator;}UF_ASSEM_options_s,*UF_ASSEM_options_s_t;3.联合类型(Uniontype)有unionUF_ASSEM_options_u{ char*assemchar;ﻩintinteger;ﻩint*integers; doubleassem;ﻩdouble*assems;ﻩUF_UI_selection_p_tselection;};typedefunionUF_ASSEM_options_uUF_ASSEM_options_t;4.枚举类型(Enumtype)枚举类型将变量的值一一列举出来,变量的值只限于列举出来的值的范围。UG/OpenAPI采用C语言的语法定义了一些常用的枚举类型,使用后缀“_e"表示。下面给出一个使用枚举类型的例子。enumUF_ASSEM_options_e{ﻩUF_ASSEM_ok, UF_ASSEM_cancel,ﻩUF_ASSEM_not_loaded,ﻩUF_ASSEM_suppressed,};typedefenumUF_ASSEM_options_eUF_ASSEM_options_t;22.1.3UG/Open对象类型与操作所有的UGNX5.0对象类型都通过它们唯一的标识来引用,这些UGNX5。0对象分类如下。(1)部件对象(Partobject)。(2)UF对象(UFobjects),指uf_object_types。h中说明的对象。(3)表达式(Expressions).对于每一类对象,UG/OpenAPI中都有明确的函数对它们进行操作,下面分别介绍。1.部件对象部件对象是UGNX5.0最基本的操作对象之一,它包含了部件中大量的几何与非几何信息.每一个加载到UGNX5.0环境中的part文件,都有一个关联的部件对象(partobject)代表它,系统会为每一个部件对象分配一个标记符(tag)。UG/OpenAPI提供的访问和操作部件文件的函数包括部件文件的创建、打开、关闭、保存和信息的查询等,这些函数主要封装在头文件uf_part。h中,包括:UF_ATTR_ask_part_attrs()ﻩ ﻩ\\访问part的属性UF_OBJ_cycle_objs_in_part() \\在part中查询对象UF_PART_close()ﻩ ﻩ \\关闭partUF_PART_reopen() ﻩ ﻩ \\再打开partUF_PART_ask_part_name()ﻩﻩ \\获取part的文件名UF_PART_set_display_part() ﻩﻩ\\设置显示部件UF_PART_ask_part_history() ﻩ\\获取部件的历史UF_PART_ask_customer_area()ﻩ ﻩ\\查询用户定义的数据UF_PART_ask_description() ﻩ\\查询part的描述信息UF_PART_ask_status() \\查询part的状态信息UF_PART_set_customer_area()ﻩ ﻩ\\设置用户定义的数据UF_PART_set_description() ﻩ \\设置part的描述信息UF_PART_set_status()ﻩ ﻩ \\设置part的状态信息UF_PART_ask_compression_flags() ﻩ\\查询part的压缩标记UF_PART_set_compression_flags()ﻩﻩ \\设置part的压缩标记下面给出一个例子来讲述Part文件的创建、打开、关闭和存盘等操作。【例22-2】Part文件的创建、打开和关闭操作。操作步骤如下。在例22-1中加入下面的头文件:#include”uf_part。h"#include"uf_obj.h"把下面的代码添加到例22-1中黑体代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息.UF_PART_load_status_terror_status;charpart_name[133]="I:\\Example\\Debug\\test.prt”;intunits=1;//单位采用米制tag_tpart;UF_PART_new(part_name,units,&part);//创建test。prtif(part==NULL_TAG){ﻩuc1601(”创建Part错误",1); UF_PART_close_all();//退出之前关闭所有part errorCode=UF_terminate(); return;}else{ﻩuc1601("test创建成功”,1);ﻩuc1601("test被设为显示part并且被打开",1); UF_PART_set_display_part(part);//显示test。prtﻩUF_PART_open(part_name,&part,&error_status);} UF_free_string_array(error_status.n_parts,error_status.);UF_free(error_status。statuses); 启动UGNX5。0软件,选择【文件】|【打开】命令,弹出【执行用户函数】对话框如图22—7所示。图22—7【执行用户函数】对话框在下拉列表框中选择文件夹“\Example\Debug",选中文件“Example。dll”,然后单击按钮,弹出的消息对话框如图22—8所示,提示用户test创建成功。图22—8运行“Example.dll”文件后弹出的【消息】对话框单击按钮,弹出【消息】对话框如图22—9所示,提示用户test被设置为显示并且被打开。图22—9提示用户打开“test.part"文件的【消息】对话框继续单击按钮,Part文件“test。part"被打开,如图22-10所示。接下来可以创建模型,单击按钮后打开文件夹“I:\\Example\\Debug”,即可发现文件“test。part”。图22—10新建零件界面2。UF对象UGNX5.0中的大部分公共对象都是头文件uf_object_types。h和uf_obj。h中定义的对象。所有这些对象都有明确的函数与它们对应,只有特定的对象子类和可显示的UF对象有另外的函数与它们对应。UF对象的可用方法如下。(1)指定、查询及删除单个对象的名称,例如:UF_OBJ_set_name()\\指定对象名UF_OBJ_ask_name()\\查询对象名UF_OBJ_delete_name()\\删除对象名(2)查询遍历对象,例如:UF_OBJ_cycle_objs_in_part()\\在part中遍历对象UF_OBJ_cycle_all()\\在当前工作part中遍历对象UF_OBJ_cycle_by_name()\\通过对象名称查询对象因为UGNX5.0中对象存储方式的独特,所以函数UF_OBJ_cycle_objs_in_part()比函数UF_OBJ_cycle_all()、UF_OBJ_cycle_by_name()和UF_LAYER_cycle_by_layer()更为有效。因此建议使用UF_OBJ_cycle_objs_in_part()而不是UF_OBJ_cycle_all()、UF_OBJ_cycle_by_name()或UF_LAYER_cycle_by_layer()。3。表达式表达式提供UGNX5.0中的参数化建模的机制,它能控制特征,特征也随表达式的变化而改变.一个表达式可在多个特征中使用,这样它的变化将能改变多个特征。表达式的一般形式是:name=valuename为表达式名称,value为表达式的值。表达式可以是数字或条件等式。表达式名可以用于表达式值中,其首字符必须是字母,其他字符可以是数字、字母或下画线等。表达式名是大小写敏感的.一个part文件中的表达式名应唯一。下面是一些表达式值的例子:”Length=1.5+2*sin(angle)"”position=if(width<=2)(1.5*width)else(2)”一般说来表达式的使用函数都在头文件uf_modl。h中定义.如果表达式串中仅仅提供表达式值,UGNX5.0会自动为其命名。如表达式串定义为”diameter/2",UGNX5.0会赋给它一个类似于"f0"的名字.当然我们建议按下列形式赋值:radius=diameter/2。下面列出了头文件uf_modl_general。h中定义的常用表达式操作函数:UF_MODL_create_exp()ﻩ ﻩ\\创建表达式UF_MODL_create_exp_tag() \\得到创建的表达式的标签UF_MODL_dissect_exp_string()ﻩ\\分解名字和值返回名字、值和表达式的标签UF_MODL_ask_exp() ﻩﻩ \\返回表达式名和表达式值UF_MODL_eval_exp()ﻩ \\输入表达式的名,返回表达式值UF_MODL_edit_exp() ﻩ \\用新的值替换表达式中原有的值UF_MODL_update() ﻩ ﻩ\\用新的值替换表达式中原有的值,ﻩ ﻩ ﻩ使用后应用函数来更新模型UF_MODL_rename_exp() ﻩ \\给已有表达式赋新的名称UF_MODL_ask_exps_of_feature() \\返回制约某特征的所有表达式的标签UF_MODL_ask_exps_of_part()ﻩﻩ\\返回某部件(part)的所有表达式的标签UF_MODL_ask_exp_tag_string() \\输入表达式标签,返回该表达式串下面给出一个例子来说明常用表达式操作函数的使用方法。【例22—3】创建一个长方体并显示出表达式信息.操作步骤如下。在例22-1中加入下面的头文件:#include”uf_modl。h”把下面的代码添加到例22-1中黑体代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息。char*block_len[3]={”10”,”20","30"};doubleblock_orig[3]={0.0,0。0,0.0};tag_tblk_obj;intnumber_of_exps=0,i;UF_UI_open_listing_window();//创建长方体特征UF_MODL_create_block1(UF_NULLSIGN,block_orig,block_len,&blk_obj);tag_t*exps;//查询长方体特征所包含的表达式UF_MODL_ask_exps_of_feature(blk_obj,&number_of_exps,&exps);char*string;char*name[3];name[0]="l";name[1]="w”;name[2]=”h”;string="\0";UF_MODL_ask_exps_of_feature(blk_obj,&number_of_exps,&exps);for(i=0;i<number_of_exps;i++){ UF_MODL_ask_exp_tag_string(exps[i],&string);ﻩUF_UI_write_listing_window(string); UF_UI_write_listing_window("\n”); UF_free(string);}UF_free(exps);启动UGNX5.0软件,选择【文件】|【新建】命令创建新部件,弹出如图22—11所示对话框。图22-11【文件新建】对话框在【名称】文本框中输入“part。prt”,单击按钮,弹出如图22-12所示界面。图22-12新建零件界面选择【文件】|【执行】|【NX打开…】命令,弹出【执行用户函数】对话框,如图22-13所示.图22-13【执行用户函数】对话框选择生成的动态库文件“Example.dll”,单击按钮,弹出如图22-14所示的【信息】窗口。在图22—14中,可以看到生成了一个长方体部件,并且弹出了显示用户部件尺寸信息的【信息】对话框。图22-14执行“Example.dll”文件生成的【信息】对话框和部件22.2常用对话框及相关概念对话框界面包含用户界面与Unigraphics界面的接口协议集,通过用户界面与Unigraphics界面的接口协议集的应用,能够使内部UG/OpenAPI应用及Motif应用程序实现在Unigraphics用户界面框架下的无缝集成。下面首先介绍几个用户界面接口中专用的概念。(1)UG/OpenDialogs:通过UG/OpenAPI提供的函数生成的对话框。(2)UIStylerDialogs:开发者使用UIStyler工具创建的对话框.(3)CustomDialogs:开发者使用Motif创建的Xwindow环境下的对话框。(4)PresentationAPIs:上述三类对话框的通称。(5)Callback:当交互事件(如单击鼠标和按键盘的回车键等)发生时,Unigraphics的响应是自动执行由用户编写的C语言子过程,该子过程就是Callback。(6)Motif:Xwindow平台上能够创建用户化界面商业化工具包,要求有XToolKit支持。(7)StateChangeCallback:当Unigraphics用户界面的状态改变时系统会自动调用的回调函数,开发者可以在回调函数中插入自己的内容.(8)XToolKitCallback:当用户选择对话框的选项(按钮或单选按钮)时系统会自动调用的回调函数。(9)ConcurrentCooperativeAccesswithUnigraphics:应用与Unigraphics的集成模式,用户的应用与Unigraphics处于同步状态。当开发者开发的回调函数运行交互的UG/OpenAPI应用时,Unigraphics的功能被屏蔽.类似地,当Unigraphics显示二级对话区(DialogArea2缩写为DA2)时,用户应用的功能被屏蔽。这种同步行为使应用与Unigraphics无缝集成。UserFunction定义了许多标准对话框,可以与用户进行交互输入及选择等操作。这些UF函数的声明主要包含在头文件uf_ui。h中.大量使用标准对话框可以减少开发的工作量,也有利于保持一致的对话框风格。由于UF函数并没有提供所有常用对话框,在开发过程中可能需要使用到MFC标准对话框。选用标准对话框的原则是尽量采用UGNX5.0标准对话框,如果UF未提供则采用MFC标准对话框,如果UF与MFC都未提供则使用UIStyler工具创建用户自定义对话框。下面介绍一些常用的标准对话框函数.22。2。1消息对话框本节介绍函数uc1601。在操作过程中,开发者常常需要通过消息对话框来告知用户一些消息,必要情况下还需要与用户进行交互.一般比较常用的是模态消息对话框.模态消息对话框分为单按钮消息对话框和多按钮消息对话框两种形式。1.单按钮消息对话框单按钮消息对话框常用于输出错误信息或提醒用户注意事项.操作时,用户单击唯一的按钮即可退出对话框。对话框用函数uc1601创建,需要注意的是消息在信息窗口或状态行显示的信息串最多不得超过132个字符。【例22-4】创建单按钮消息对话框。操作步骤如下。把下面的代码添加到例22-1中黑体字代码所在的位置。charShowMessage[130+1]="显示消息";uc1601(ShowMessage,1);按快捷键F7,编译Example工程,出现编译成功的信息。启动UGNX5.0软件,选择【文件】|【执行】|【NX打开…】命令,弹出【执行用户函数】对话框,如图22-15所示。图22—15【执行用户函数】对话框选择生成的动态库文件“Example.dll”,单击按钮,弹出如图22-16所示的界面.图22-16执行“Example。dll”文件生成的单按钮消息对话框2.多按钮消息对话框多按钮消息对话框提供了多个按钮(最多三个)供用户选择,程序可以根据用户的不同选择实现不同的分支功能。该对话框由函数UF_message_dialog创建,开发者可以通过定义函数参数控制按钮的数量和对话框的类型.多按钮消息对话框提供了4种对话框类型,即错误型、警告型、消息型和询问型.同样,消息在信息窗口或状态行显示的信息串最多不得超过132个字符。【例22-5】创建多按钮消息对话框。操作步骤如下。把下面的代码添加到例22—1中黑体字代码所在的位置,按快捷键F7,编译Example工程,弹出编译成功的信息。 ﻩintres=0;ﻩ chartitle[]=”ShowMessage”;ﻩ charsMessages[132+1]="显示消息";ﻩ char*p=sMessages; ﻩU UF_UI_message_buttons_sbutton;ﻩ button.button1=true;ﻩﻩbutton.button2=true; button.button3=true;ﻩ button.label1=”YES”;ﻩﻩbutton.label2=”NO";ﻩ button。label3="CANCEL";ﻩ button.response1=1;ﻩ button.response2=2;ﻩﻩbutton。response3=3;ﻩﻩUF_UI_message_dialog(title,dialog_type,&p,1,0,&button,&res); ﻩswitch(res) ﻩ{ ﻩcase1:uc1601(button。label1,1); ﻩbreak; ﻩcase2:uc1601(button。label2,1); ﻩ break; ﻩcase3:uc1601(button.label3,1);ﻩ ﻩbreak; default:uc1601("未知按钮”,1); ﻩ break;ﻩ }启动UGNX5.0软件,选择【文件】|【执行】|【UX打开…】命令,弹出【执行用户函数】对话框,如图22-17所示.图22-17【执行用户函数】对话框选择生成的动态库文件“Example.dll”,单击按钮,弹出如图22-18所示的多按钮消息对话框。图22-18执行“Example.dll”文件生成的多按钮消息对话框22。2.2文件及文件夹操作对话框文件及文件夹操作对话框包含4种常用的标准对话框,分别介绍如下。1.创建新部件对话框通过调用UF_UI_create_part()显示创建新部件文件对话框,然后新建一个部件文件并设置为工作部件。它实现的功能与UGNX5。0的NewFile命令功能相同,属于模态对话框。2.打开已有部件对话框通过调用UF_UI_open_part()打开一个部件并设置为工作部件。它实现的功能与UGNX5。0的OpenFile命令功能相同,属于模态对话框.3.文件选择对话框通过调用UF_UI_create_(),其实现的功能与Windows风格的OpenFile功能相同。该对话框可以用于选择各种类型的文件,而前两种对话框只能针对部件文件(后缀名为.prt)进行操作。它属于模态对话框.4.文件夹选择对话框该对话框通过函数SHBrowseForFolder()调用,用于选择文件夹并返回该文件夹的全路径.它属于非模态对话框.【例22—6】创建文件夹选择对话框。操作步骤如下。把下面的代码添加到例22-1中黑体字代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息。chars[255+1]="";LPMALLOCpMalloc=NULL;LPITEMIDLISTpidl=NULL;BROWSEINFOob;ZeroMemory(&ob,sizeof(BROWSEINFO));ob。hwndOwner=NULL;ob.lpszTitle=_T(”请选择文件夹:");ob。ulFlags=BIF_RETURNONLYFSDIRS;pidl=SHBrowseForFolder(&ob);if(pidl!=NULL){ﻩSHGetPathFromIDList(pidl,s);ﻩif(SUCCEEDED(SHGetMalloc(&pMalloc))&&pMalloc)ﻩ pMalloc-〉Free(pidl);ﻩpMalloc—〉Release();}启动UGNX5。0软件,选择【文件】|【执行】|【NX打开…】命令,弹出如图22—17所示的对话框。选择生成的动态库文件“Example。dll”,单击按钮,弹出如图22-19所示的文件夹选择对话框。图22-19执行“Example.dll”文件生成的文件夹选择对话框在调试上面的程序时应加入下面的头文件:#include<TCHAR.H〉#include<shlobj。h>22.2.3选择菜单列表对话框UG/OpenAPI的选择菜单对话框有两种,即单选菜单列表对话框和多选菜单列表对话框,分别通过子过程uc1603和uc1605实现,下面将具体介绍。uc1603用于显示一个选择菜单对话框,该菜单可以包含14个菜单选项,并可以通过变量参数设定默认的选择项。若变量参数为0,则不设定默认选项,同时【确定】按钮变灰。菜单选项的返回值介于5和18之间,即使用者选择菜单项1,那么返回值是5,使用者选择菜单项14,那么返回值是18。下面是返回值的说明。(1)1:回退.(2)2:取消.(3)5~18:选中了的菜单项。(4)19:不允许状态,不能启动对话框.uc1605解决多项选择菜单的问题,与uc1603不同,该子过程没有默认的选择项,数组变量的每一个元数的初值是0.下面介绍返回值及参数.(1)1:回退。(2)2:取消。(3)3:接收.(4)4:有多个选项被选择.(5)8:不允许状态,不能启动对话框。【例22-7】创建单选菜单列表对话框和多选菜单列表对话框.操作步骤如下。把下面的代码添加到例22-1中黑体字代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息。charSingleMenuStr[]=”单选菜单列表对话框”;intOkDefault=1;charMenuOptions[][38]={"选项1”intNumOfOption=3;uc1603(SingleMenuStr,OkDefault,MenuOptions,NumOfOption);启动UGNX5。0,选择【文件】|【执行】|【NX打开…】命令,弹出如图22-17所示对话框.选择生成的动态库文件“Example.dll",单击按钮,出现如图22-20所示的单选菜单列表对话框。图22-20执行“Example.dll"文件生成的单选菜单列表对话框把下面的代码添加到例22-1中黑体字代码所在的位置,执行与上面相同的操作,即可得到如图22-21所示的多选菜单列表对话框。charSingleMenuStr[]=”多选菜单列表对话框";int*ItemMenu;charMenuOptions[][38]={"选项1”intNumOfOption=3;uc1605(SingleMenuStr,0,MenuOptions,NumOfOption,ItemMenu);图22-21执行“Example。dll"文件生成的多选菜单列表对话框22。2.4对象选择对话框UG/OpenAPI提供了专门的接口“UF_UI”模块,让开发人员开发的应用能够从Unigraphics图形界面选取几何对象。常用的对象选择对话框有两种:单对象选择对话框与按类选择对话框。UF_UI模块中的函数主要实现两种功能:一种是通过有过滤功能的函数,把开发者定义的可选对象选出来;一种是弹出对话框,让用户在可选对象中选择一个或多个对象。这些函数都在头文件uf_ui。h中定义.下面介绍这两个常用的对话框。注意,调用这两种对话框之前UG环境中必须有工作部件存在。1.按类选择对话框按类选择对话框通过函数UF_UI_select_with_class_dialog创建,并且能够一次选择同类的多个对象。如果返回值是UF_UI_OK,则被选择的对象保持高亮状态,当然也有可能没有选中任何对象。若返回值是UF_UI_BACK或UF_UI_CANCEL,所有被选的对象都不会高亮显示.默认的可选对象是所有的可选标准类型,开发人员还可以通过函数UF_UI_set_sel_procs来指定特殊的过滤过程及选择回调.函数UF_UI_add_to_sel_list用于事先指定已选对象。【例22-8】创建按类选择对话框。操作步骤如下.把下面的代码添加到例22-1的extern”C"DllExportvoidufusr(char*parm,int*returnCode,intrlen)函数中://定义初始化进程函数#defineUF_CALL(X)(Report(__FILE__,__LINE__,#X,(X)))intReport(char*file,intline,char*call,intirc){ﻩreturn(irc);}staticintinit_proc(UF_UI_selection_p_tselect,void*user_data){ intnum_type=2;ﻩﻩif((UF_CALL(UF_UI_set_sel_mask(select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_type,mask_triples)))==0)ﻩ{ﻩ return(UF_UI_SEL_SUCCESS); }ﻩelse {ﻩﻩreturn(UF_UI_SEL_FAILURE);ﻩ}}把下面的代码添加到例22-1中黑体字代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息.//按类选择对话框charTypeDialogBox[]="按类选择对话框";charDialogBoxTitle[]="按类选择对话框";intScope=UF_UI_SEL_SCOPE_NO_CHANGE;intResponse;intCount;tag_t*atObject;UF_CALL(UF_UI_select_with_class_dialog(TypeDialogBox,DialogBoxTitle,Scope,init_proc,NULL,&Response,&Count,&atObject));启动UGNX5.0,选择【文件】|【新建】命令,创建新部件,弹出如图22—11所示对话框,在文本框中输入“part”,单击按钮,出现如图22—12所示的界面。选择【文件】|【执行】|【NX打开…】命令,弹出如图22-17所示对话框。选择生成的动态库文件“Example。dll”,单击按钮,弹出按钮.单击出现如图22—22所示的按类选择对话框。在上面的函数中首先定义了一个初始化进程函数init_proc,在该函数体中使用函数UF_UI_set_sel_mask设置被选对象的类型(可以是多种类型),然后将初始化进程函数名作为对象选择对话框函数的第4个参数。2.单对象选择对话框单对象选择对话框通过函数UF_UI_select_with_single_dialog创建,并可通过鼠标选择或用键盘输入对象名来选择对象,被选中的对象高亮显示.下面给出单个对象选择对话框的实例代码,在此之前,需要将上例的程序初始化进程函数init_proc加入进来,编译成功后的显示结果如图22-5所示.图22-22执行“Example.dll”文件生成的按类选择对话框【例22-9】创建单个对象选择对话框。操作步骤如下。把下面的代码添加到例22-1中黑体字代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息。charTypeDialogBox[]="单个对象选择对话框”;charDialogBoxTitle[]=”单个对象选择对话框";intScope=UF_UI_SEL_SCOPE_NO_CHANGE;intResponse;tag_ttObject;tag_ttView;doubletCursor[3];启动UGNX5.0,选择【文件】|【新建】命令,创建新部件,弹出如图22-11所示的对话框.在【名称】文本框中输入“part”,单击【确定】按钮,出现如图22—12所示的界面.选择【文件】|【执行】|【NX打开…】命令,弹出如图22—17所示对话框。选择生成的动态库文件“Example.dll”,单击按钮,生成如图22—23所示的单个对象选择对话框。22.3消息的发布与获取在UGNX5。0的操作进程中常常需要向用户发布一些信息,如错误警告、数据结果、提示信息和状态报告等,或者获取一些信息,如字符串和数字等。开发人员可以通过消息对话框、UGNX5。0信息窗口、提示行和状态行等发布消息,通过用户输入获取消息并等候应答。图22-23执行“Example。dll”文件生成的单个对象选择对话框22.3。1信息窗口UGNX5.0信息窗口支持在UGNX5.0环境中显示一个文本框的操作,用户可以在文本框中输入文本,也可以将文本保存到文本文件中.UGNX5.0信息窗口主要用于向用户提供一些具体的操作或查询信息,如显示分析结果,报告工作进程和提供警告信息等,有关UGNX5。0信息窗口的函数在头文件uf_ui。h中定义。UGNX5.0信息窗口对应的UF函数和操作功能如下:UF_UI_open_listing_window()ﻩ//打开信息窗口UF_UI_is_listing_window_open()//检查信息窗口是否打开UF_UI_write_listing_window()//往信息窗口中输入文本UF_UI_save_listing_window()ﻩ //把信息窗口的信息存入文件中UF_UI_close_listing_window()//关闭信息窗口UF_UI_exit_listing_window() //退出信息窗口【例22—10】创建UGNX5。0信息窗口操作.操作步骤如下.把下面的代码添加到例22—1中黑体字代码所在的位置,按快捷键F7,编译Example工程,出现编译成功的信息。UF_UI_open_listing_window();UF_UI_write_listing_window("information2\n");uc1601("Pause1",1);UF_UI_close_listing_window();uc1601("Pause2”,1);logicalOpenWin;UF_UI_is_listing_window_open(&OpenWin);if(!OpenWin){ UF_UI_open_listing_window();}uc1601("Pause3",1);UF_UI_write_listing_window("information3\n");uc1601(”Pause4",1);UF_UI_save_listing_window("c:\\information。txt\n");UF_UI_exit_listing_window();uc1601(”Pause5",1);UF_UI_open_listing_window();启动UGNX5.0,选择【文件】|【执行】|【NX打开…】命令,弹出如图22—17所示。图22—24执行“Example。dll”文件生成的信息窗口22.3。2提示行与状态行打开UGNX5.0界面时,会发现在界面的最下方存在两个特殊的显示区域,即提示行与状态行。提示行位于左下方,用于引导用户下一步的操作进程,具有一定的操作导航能力;状态行位于右下方,反映当前的操作结果或反馈状态。提示行与状态行的使用在一定程度上降低了操作的难度,使得用户界面更加友好。提示行通过函数UF_UI_s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏安全员c证机考试试题及答案
- 2026三年级数学上册 加减法的能力提升
- 公司婚假制度
- 2026三年级数学下册 小数项目学习
- 推拿手法试题及答案
- 2026九年级上语文句子理解方法指导
- 企业推行安全隐患提报激励制度
- 产前会议制度
- 初三数学小组奖惩制度
- 单位食堂如何奖惩制度
- 2026年小学奥数脑力测试题及答案
- 2026年世界肾脏日主题“人人享有肾脏健康:关爱生命守护地球”宣传全文
- 西昌市2026年面向全国公开考调在编在职教师(30人)考试参考题库及答案解析
- 2025年度中国邮政集团有限公司安徽省分公司春季招聘笔试参考题库附带答案详解
- 2025年通辽职业学院单招综合素质考试试题及答案解析
- 干砌石护坡施工方案
- 2026北京东城区初三(上)期末数学试题含答案
- 监理单位三级安全安全教育内容
- GB∕T 36419-2018 家用和类似用途皮肤美容器
- 综采工作面上窜下滑防治措施(正式)
- 静压管桩施工旁站监理记录
评论
0/150
提交评论