全国统一学习专线 8:30-21:00
来源: 夏坤数控 编辑:佚名
杭州ug培训学校
执行回调(菜单事件处理程序)回调**用于操作记录和程序的ACTIONS命令与菜单按钮相关联。 但是,Callbacks的执行有两个主要的区别。
1.菜单文件不直接引用回调名称(如程序或操作记录的名称),它引用必须注册到回调的字符串。 回调**AddMenuAction(C ,VB或C#),addMenuAction(JAVA)或UF_MB_add_actions(Open C)在自定义应用程序中**相关联的字符串进行注册。
2.回调使用返回值,可以终止为该按钮定义的操作列表。
回调的可用返回值包括:
Continue - 继续执行菜单项的操作
Cancel - 用户交互请求禁止菜单项的操作
Override Standard - 禁止进一步的操作,因为预处理取代了标准NX菜单项的标准操作
Warning - 禁止进一步的行动,因为警告条件提高
Error - 禁止进一步的操作,因为出现错误条件
即使Cancel ,Override Standard,Warning 和Error 返回值具有不同的定义,以编程方式它们都表现相同。 除Continue之外的任何返回值将阻止列表中的其余操作执行。 它们之间**真正的区别是syslog中的一个注释,说明使用哪个返回值。
例子:
以下示例显示单个菜单按钮的多个回调的注册。 从**个回调返回的状态控制其他动作是否执行。 要运行测试编译提供的cb_status_test程序,并将cb_status_test库与示例菜单文件一起放在启动文件夹中。 现在启动NX并转到文件选项卡→打开。 将打开一个对话框,提示您选择“返回状态”。 如果选择继续,其他操作将执行。 如果您选择任何其他返回值,文件打开对话框将不会打开,my_end_action将不会执行。
Menu file: cb_status_test.men
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
AFTER UG_FILE_NEW
BUTTON UG_FILE_OPEN
LABEL Open...
ACTIONS/REPLACE my_action_status_test STANDARD my_end_action
END_OF_AFTER
Header: cb_status_test.h
//------------------------------------------------------------------------------
//
// cb_status_test.h
//
// Description:
// Contains NX entry points for the customized menu callbacks.
//
//------------------------------------------------------------------------------
#include <iostream>
#include <uf_defs.h>
#include <uf.h>
#include <NXOpen/Session.hxx>
#include <NXOpen/MenuBar_MenuBarManager.hxx>
#include <NXOpen/MenuBar_MenuButton.hxx>
#include <NXOpen/UI.hxx>
#include <NXOpen/Callback.hxx>
#include <NXOpen/NXException.hxx>
using namespace std;
using namespace NXOpen;
class CbStatusTest;
extern CbStatusTest *theCbStatusTest;
class CbStatusTest
{
// class members
public:
static Session* theSession;
static UI* theUI;
static ListingWindow* lw;
static int registered;
CbStatusTest();
~CbStatusTest();
//------------------------- Callback Prototypes -----------------------
MenuBar::MenuBarManager::CallbackStatus ActionStatusTestCB(
MenuBar::MenuButtonEvent* buttonEvent );
MenuBar::MenuBarManager::CallbackStatus EndActionCB(
MenuBar::MenuButtonEvent* buttonEvent );
private:
void InitializeCallbacks();
};
Source: cb_status_test.cpp
//------------------------------------------------------------------------------
//
// cb_status_test.cpp
//
// Description:
// Contains NX entry points for the customized menu callbacks.
//
//------------------------------------------------------------------------------
#include "cb_status_test.h" #include
#include <NXOpen/ListingWindow.hxx>
#include <uf_ui_types.h>
#include <uf_ui.h>
//------------------------------------------------------------------------------
// Initialize static variables
//------------------------------------------------------------------------------
Session *(CbStatusTest::theSession) = NULL;
UI *(CbStatusTest::theUI) = NULL;
int CbStatusTest::registered = 0;
ListingWindow* CbStatusTest::lw = NULL;
CbStatusTest *theCbStatusTest;
//------------------------------------------------------------------------------
// Constructor for Callback Status Test
//------------------------------------------------------------------------------
CbStatusTest::CbStatusTest()
{
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 CbStatusTest::InitializeCallbacks()
{
try
{
if( registered == 0 )
{
theUI->MenuBarManager()->AddMenuAction
("my_action_status_test", make_callback(this, &CbStatusTest::ActionStatusTestCB) );
theUI->MenuBarManager()->AddMenuAction("my_end_action",
make_callback(this, &CbStatusTest::EndActionCB) );
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)
{
theCbStatusTest = new CbStatusTest();
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
// This is the first callback exectued when the File->Open button is activated.
// It will let you select the status you wish to return from this callback.
//------------------------------------------------------------------------------
MenuBar::MenuBarManager::CallbackStatus CbStatusTest::ActionStatusTestCB(
NXOpen::MenuBar::MenuButtonEvent* buttonEvent )
{
MenuBar::MenuBarManager::CallbackStatus cb_status =
MenuBar::MenuBarManager::CallbackStatusContinue;
if( !UF_initialize() )
{
char name[133] = "";
int response = 0;
int len = 0;
char items[5][38];
sprintf( items[0], "Continue" );
sprintf( items[1], "Cancel" );
sprintf( items[2], "Override Standard" );
sprintf( items[3], "Warning" );
sprintf( items[4], "Error" );
lw->Open();
lw->WriteLine(" ");
lw->WriteLine("Inside Action Status Test Callback:");
// set the default button name, to the name of the button which activated
this event
sprintf( name, "%s", buttonEvent->ActiveButton()->ButtonTypeName
().GetLocaleText() );
UF_UI_lock_ug_access( UF_UI_FROM_CUSTOM );
response = uc1603( "Select a return status", 0, items, 5 );
UF_UI_unlock_ug_access( UF_UI_FROM_CUSTOM );
if ( response == 1 || response == 5 )
{
// Back or Continue
cb_status = MenuBar::MenuBarManager::CallbackStatusContinue;
lw->WriteLine( " Returning CallbackStatusContinue" );
}
else if( response == 2 || response == 6 )
{
// cancel
cb_status = MenuBar::MenuBarManager::CallbackStatusCancel;
lw->WriteLine( " Returning CallbackStatusCancel" );
}
else if( response == 7 )
{
cb_status = MenuBar::MenuBarManager::CallbackStatusOverrideStandard;
lw->WriteLine( " Returning CallbackStatusOverrideStandard" );
}
else if( response == 8 )
{
cb_status = MenuBar::MenuBarManager::CallbackStatusWarning;
lw->WriteLine( " Returning CallbackStatusWarning" );
}
else if( response == 9 )
{
cb_status = MenuBar::MenuBarManager::CallbackStatusError;
lw->WriteLine( " Returning CallbackStatusError" );
}
}
UF_terminate();
return cb_status;
}
//------------------------------------------------------------------------------
// Callback Name: EndActionCB
// This is the last action associated with the File-Open button.
// This will only get executed if ActionStatusTestCB
// returns CallbackStatusContinue
//------------------------------------------------------------------------------
MenuBar::MenuBarManager::CallbackStatus CbStatusTest::EndActionCB(
NXOpen::MenuBar::MenuButtonEvent* buttonEvent )
{
lw->Open();
lw->WriteLine("Inside My End Action Callback");
return MenuBar::MenuBarManager::CallbackStatusContinue;
关于menuscript的其他信息可以在Open C Reference Guide的UF_MB章节的概述中找到。
工具栏按钮的应用(交互式)
本主题讨论了**交互式创建的工具栏按钮执行应用程序。 要了解如何从使用工具栏文件(.tbr扩展名)定义的按钮执行应用程序,请参阅工具栏文件
使用Interactive NX创建工具栏按钮
以下步骤用于使用NX定义工具栏按钮。
步骤1 - 创建新的空工具栏
在主菜单栏区域的鼠标光标中,单击MB3并选择自定义。
单击自定义菜单上的新建以显示工具栏属性对话框。
输入您的自定义工具栏的名称。
可选择选择NX应用程序。 工具栏仅在选定的NX应用程序处于活动状态时可用。
单击确定创建一个空工具栏。
对要添加到新工具栏的每个按钮执行步骤2和3。
步骤2 - 添加按钮到工具栏
从“自定义”对话框中,选择“命令”选项卡。
在类别列表中,选择新建按钮。
从“命令”列表中,选择“新建用户命令”,然后将其拖放到新工具栏以添加按钮名称“用户命令”。
右键单击新的“用户命令”按钮,然后输入所需的名称。
右键单击新按钮,然后选择所需的按钮类型(文本,图像或两者)。
右键单击新按钮,并选择要为该按钮显示的图像。
**右键单击按钮,可以更改除“编辑操作”之外的所有其他所需按钮属性,这在下一步中将会介绍。
步骤3 - 定义按钮动作
右键单击该按钮,然后选择编辑操作以显示按钮操作对话框。
选择操作类型,然后输入或浏览并选择该操作的相应对象(参见下表)。
输入按钮消息文本 - 文本显示在按钮工具提示中
单击“确定”完成按钮定义。
可用的按钮操作类型和操作所需的对象在下表中给出。
按钮动作类型
它能做什么
行动所需要的是什么
Journal File
运行操作记录
操作记录文件的完整路径 (.vb, .cs, pv).
User Function
运行NX Open应用程序 (也运行Open C / C 应用程序)
可执行文件的完整路径 (.exe. .dll, .sl)
System Commands
执行操作系统命令脚本
任何可以在系统shell上执行的命令,例如 "start notepad" (Windows) / "vi newtextfile" (非Windows)
User Tools
加载UTD文件
UTD文件的完整路径。 有关如何创建/用户UTD文件的更多信息,请参阅(Gateway→Customizing NX→UTD)
Macros
运行NX宏
NX宏(.macro)文件的完整路径(注:Macros不推荐用于自动化)
Grip
运行Grip程序
GRIP程序文件的完整路径(.grx)
【詹老师】:
了解更多杭州ug培训>>>>杭州ug培训
了解更多杭州培训网>>>>杭州培训网