全国统一学习专线 8:30-21:00
来源: 夏坤数控 编辑:佚名
杭州ug培训班
执行回调(菜单事件处理程序)
回调**用于操作记录和程序的ACTIONS命令与菜单按钮相关联。 但是,菜单文件不直接引用回调名称(例如程序或操作记录的名称),它引用必须注册到回调的字符串。
回调**AddMenuAction(C ,VB或C#),addMenuAction(JAVA)或UF_MB_add_actions(Open C)在自定义应用程序中**相关联的字符串进行注册。 有关注册回调的详细说明和示例,请参阅下面的语言具体细节。
警告:远程处理模式下的回调在.NET中不受支持。
例子
以下示例在NX菜单的不同位置注册相同的2个回调“my_app_hello”和“my_app_goodbye”。 要运行示例,将示例菜单文件放在“startup”目录中。 然后用NX**语言注册回调。
例子-1 将菜单项添加到工具菜单
例如,以下菜单文件将添加标记为“Hello”和“Goodbye”的菜单项到“工具”菜单的末尾。 NX使用的引用这些菜单项的文本字符串是“my_app_hello”和“my_app_goodbye”。 请参阅下面的语言具体示例,了解应用程序如何注册两个新菜单项的回调。
Menu file: adding_menu_items_to_tools_menu.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
MENU UG_TOOLBOX
BUTTON MY_ITEM1
LABEL Hello
ACTIONS my_app_hello
BUTTON MY_ITEM2
LABEL Goodbye
ACTIONS my_app_goodbye
END_OF_MENU
要查找NX使用的**文本字符串来识别现有菜单(如UG_TOOLBOX),可查找NX中按钮显示的文本。 对于UG_TOOLBOX,文本显示为“Tools”。请注意,T带下划线,这意味着在菜单文件中有一个&之前用于定义该菜单项的T。如果你去%UGII_ROOT_DIR%/menus,并搜索所有的.men文件的“LABEL&Tools”,你会发现该菜单项在ug_main.men中的定义。同样,如果您正在寻找 "Menu→Information→Part→Part History...",您应该在%UGII_ROOT_DIR%/menus 目录搜索ug_main文件 ,在ug_main中找到"LABEL Part &History..."。"Part History..." 的BUTTON名称是 UG_INFO_PART_HISTORY.
例子-2 添加新菜单下拉菜单
还可以添加一个新的下拉菜单。 例如,以下菜单文件首先定义了一个内部名为“MY_MENU”的新菜单。 新菜单包含与示例1所示相同的菜单项。该示例然后显示如何将新菜单作为下拉菜单添加到主NX菜单栏的末尾,标签为“My App”。
菜单事件处理程序将与实施例1完全相同。
Menu file: adding_new_pulldown_menu.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
MENU MY_MENU
BUTTON MY_ITEM1
LABEL Hello
ACTIONS my_app_hello
BUTTON MY_ITEM2
LABEL Goodbye
ACTIONS my_app_goodbye
END_OF_MENU
TOP_MENU
CASCADE_BUTTON MY_MENU
LABEL My App
END_OF_TOP_MENU
例子-3 向现有菜单添加新的下拉菜单
使用示例1和2中介绍的命令,还可以向现有菜单添加新的下拉菜单。 以下示例菜单文件将相同的下拉列表添加到“工Tools”菜单的末尾。 同样,菜单事件处理程序的实现方式与本节中的所有示例相同。
Menu file: adding_new_pulldown_to_existing_menu.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
MENU MY_MENU
BUTTON MY_ITEM1
LABEL Hello
ACTIONS my_app_hello
BUTTON MY_ITEM2
LABEL Goodbye
ACTIONS my_app_goodbye
END_OF_MENU
MENU UG_TOOLBOX
CASCADE_BUTTON MY_MENU
LABEL My App
END_OF_MENU
例子-4
上述示例将新菜单项和下拉列表放在现有菜单的末尾。 也可以使用BEFORE和AFTER命令来代替MENU命令在现有菜单中定位新的菜单项。 以下示例菜单文件显示如何在文件菜单之后添加相同的下拉菜单: File tab→Utilities.
Menu file: positioning_new_items_withing_existing_menu.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
MENU MY_MENU
BUTTON MY_ITEM1
LABEL Hello
ACTIONS my_app_hello
BUTTON MY_ITEM2
LABEL Goodbye
ACTIONS my_app_goodbye
END_OF_MENU
AFTER UG_FILE_UTILITIES_MENU
CASCADE_BUTTON MY_MENU
LABEL My App
END_OF_AFTER
NX Open for C 的回调注册
AddMenuAction方法(在MenuBarManager中找到)用于向NX注册回调。AddMenuAction中使用的输入名称必须与菜单文件中使用的字符串匹配。 在上面的例子中,用作动作的两个回调标题为“my_app_hello”和“my_app_goodbye”。 下面的示例(hello_goodbye.h和hello_goodbye.cpp)在InitializeCallbacks方法中注册了两个回调。 编译和链接此示例后,可执行文件(hello_goodbye.dll)应与上述示例菜单文件之一放置在startup文件夹中。
Header file: hello_goodbye.h
//------------------------------------------------------------------------------
//
// hello_goodbye.h
//
// Description:
// Contains NX entry points for the customized menu callbacks.
//
//------------------------------------------------------------------------------
#include <isotream>
#include <uf_def.h>
#include <uf.h>
#include <NXOpen/Session.hxx>
#include <NXOpen/MenuBar_MenuBarManager.hxx>
#include <NXOpen/MenuBar_MenuButton.hxx>
#include <NXOpen/MenuBar_MenuButtonEvent.hxx>
#include <NXOpen/UI.hxx>
#include <NXOpen/Callback.hxx>
#include <NXOpen/NXEception.hxx>
using namespace std;
using namespace NXOpen;
class HelloGoodbye;
extern HelloGoodbye *theHelloGoodbye;
class HelloGoodbye
{
// class members
public:
static Session* theSession;
static UI* theUI;
static ListingWindow* lw;
static int registered;
HelloGoodbye();
~HelloGoodbye();
//------------------------- Callback Prototypes -----------------------
MenuBar::MenuBarManager::CallbackStatus HelloCB( MenuBar::MenuButtonEvent*
buttonEvent );
MenuBar::MenuBarManager::CallbackStatus GoodbyeCB(
MenuBar::MenuButtonEvent* buttonEvent );
private:
void InitializeCallbacks();
};
Source file: hello_goodbye.cpp
//------------------------------------------------------------------------------
//
// hello_goodbye.cpp
//
// Description:
// Contains NX entry points for the customized menu callbacks.
//
//------------------------------------------------------------------------------
/* Include files */
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
# include <strstream>
# include <iostream>
using std::ostrstream;
using std::endl;
using std::ends;
using std::cerr;
#else
# include <strstream.h>
# include <iostream.h>
#endif
#include "hello_goodbye.h"
#include <NXOpen/ListingWindow.hxx>
#include <uf_ui_types.h>
#include <uf_ui.h>
//------------------------------------------------------------------------------
// Initialize static variables
//------------------------------------------------------------------------------
Session *(HelloGoodbye::theSession) = NULL;
UI *(HelloGoodbye::theUI) = NULL;
int HelloGoodbye::registered = 0;
ListingWindow* HelloGoodbye::lw = NULL;
HelloGoodbye *theHelloGoodbye;
//------------------------------------------------------------------------------
// Constructor for Callback Status Test
//------------------------------------------------------------------------------
HelloGoodbye::HelloGoodbye()
{
try
{
// Initialize the NX Open C API environment
theSession = Session::GetSession();
// Initialize the Open C API environment
int errorCode = UF_initialize();
if(0 != errorCode)
throw NXOpen::NXException::Create(errorCode);
theUI = UI::GetUI();
lw = theSession->ListingWindow();
InitializeCallbacks();
}
catch (const NXOpen::NXException& ex)
{ std::cerr << "Caught exception" << ex.Message() <<
std::endl;
}
return;
}
//------------------------------------------------------------------------------
// Register the callbacks with NX
//------------------------------------------------------------------------------
void HelloGoodbye::InitializeCallbacks()
{
try
{
if( registered == 0 )
{
theUI->MenuBarManager()->AddMenuAction("my_app_hello",
make_callback(this, &HelloGoodbye::HelloCB) );
theUI->MenuBarManager()->AddMenuAction("my_app_goodbye",
make_callback(this, &HelloGoodbye::GoodbyeCB) );
registered = 1;
}
}
catch (const NXOpen::NXException& ex)
{
std::cerr << "Caught exception" << ex.Message() << std::endl;
}
return;
}
//------------------------------------------------------------------------------
// Startup entrypoint for NX
//------------------------------------------------------------------------------
extern "C" DllExport void ufsta(char *param, int *retcod, int param_len) {
theHelloGoodbye = new HelloGoodbye();
return;
}
//------------------------------------------------------------------------------
// Public method GetUnloadOption
// This method specifies how a shared image is unloaded from memory
// within NX.
//------------------------------------------------------------------------------
extern "C" DllExport int ufusr_ask_unload()
{
return (int)Session::LibraryUnloadOptionAtTermination;
}
//------------------------------------------------------------------------------
// Method: UnloadLibrary()
// You have the option of coding the cleanup routine to perform any housekeeping
// chores that may need to be performed. If you code the cleanup routine, it is // automatically called by NX.
//------------------------------------------------------------------------------
extern "C" DllExport void ufusr_cleanup(void)
{
// do your cleanup here if necessary
return;
}
//------------------------- Callback Functions ---------------------------------
//------------------------------------------------------------------------------
// Callback Name: ActionStatusTestCB
// Displays a dialog that says "Hello"
//------------------------------------------------------------------------------
MenuBar::MenuBarManager::CallbackStatus HelloGoodbye::HelloCB(
NXOpen::MenuBar::MenuButtonEvent* buttonEvent )
{
if( !UF_initialize() )
{
uc1601("Hello", TRUE );
}
UF_terminate();
return MenuBar::MenuBarManager::CallbackStatusContinue;
}
//------------------------------------------------------------------------------
// Callback Name: GoodbyeCB
// Displays a dialog that says "Goodbye"
//------------------------------------------------------------------------------
MenuBar::MenuBarManager::CallbackStatus HelloGoodbye::GoodbyeCB(
NXOpen::MenuBar::MenuButtonEvent* buttonEvent )
{
if( !UF_initialize() )
{
uc1601("Goodbye", TRUE );
}
UF_terminate();
return MenuBar::MenuBarManager::CallbackStatusContinue;
}
NX Open for .NET的回调注册AddMenuAction方法(在MenuBarManager中找到)用于向NX注册回调。AddMenuAction中使用的输入名称必须与菜单文件中使用的字符串匹配。 在上面的例子中,用作动作的两个回调标题为“my_app_hello”和“my_app_goodbye”。 下面的示例(hello_goodbye.vb)在启动方法中注册了两个回调。 编译和链接此示例后,可执行文件(hello_goodbye.dll)应与上述示例菜单文件之一放置在startup文件夹中。
VB代码,此处略
来自现有菜单项的程序,操作记录或回调
本主题讨论了在执行正常NX功能之前或之后**执行程序,操作记录或回调(也称为菜单事件处理程序)来定制现有NX菜单项的行为的方法。 本主题建立在“新建菜单项”的“执行程序”,“操作记录”和“回调”中的讨论中,并假定读者熟悉菜单文件的基础知识。
菜单文件与操作示例以下菜单文件(.men扩展名)可用于向NX菜单项添加前置和后期操作:“文件”选项卡→“打开”。
Menu file: sample.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
AFTER UG_FILE_NEW
BUTTON UG_FILE_OPEN
LABEL Open...
ACTIONS/REPLACE my_app_hello STANDARD my_app_goodbye
END_OF_AFTER
在上面的示例中,my_app_hello可以是整个程序,日志文件的名称,也可以是**AddMenuAction(C ,VB或CSharp),addMenuAction(JAVA)或UF_MB_add_actions(Open C)注册的回调。 在任何情况下,使用上述菜单文件将在打开标准NX文件打开对话框之前执行my_app_hello,然后**后运行my_app_goodbye。 对于my_app_hello和my_app_goodbye的示例回调实现,请转到特定于语言的详细信息部分(以您的**语言):新菜单项目的程序,操作记录和回调
警告:请注意,AFTER命令用于在“文件”菜单中维护“打开”菜单项的位置。 如果使用MENU命令,菜单文件也会将打开菜单项重新定位到文件菜单的末尾。
执行Common API程序
以下示例菜单文件 (my_programs.men)将在启动标准打开文件对话框之前调用自定义C#程序,然后调用VB程序。 打开文件对话框后,将运行一个C 程序和Java程序。 所有这些程序都是**在NX中选择“文件”选项卡→打开...菜单栏来启动的。
Menu file: my_programs.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
AFTER UG_FILE_NEW
BUTTON UG_FILE_OPEN
LABEL Open...
ACTIONS/REPLACE c_sharp_program vb_program STANDARD cpp_program java_program
END_OF_AFTER
提示:c_sharp_program.dll,vb_program.dll,cpp_program.dll和java_program.class文件都应该放在“application”文件夹中,如下所示:
【詹老师】:
了解更多杭州ug培训>>>>杭州ug培训
了解更多杭州培训网>>>>杭州培训网