列文章目录
文章目录
目录
前言
随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。
然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。
一、UI样式文件分析
1. 样式文件目录
目录位置:UGOPEN\SampleNXOpenApplications\C++\BlockStyler\MatrixOperations\MatrixOperations.dlx
2. 样式文件导入预览

3. 样式文件解析
本实例主要用到的控件如下:枚举、切换开关、指定矢量、双精度表、双精度数字
二、源码文件解析
1. 主程序分析
extern "C" DllExport void ufusr(char *param, int *retcod, int param_len)
{
try
{
theMatrixOperations = new MatrixOperations();
// The following method shows the dialog immediately
theMatrixOperations->Show();
}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
MatrixOperations::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}
if(theMatrixOperations != NULL)
{
delete theMatrixOperations;
}
}
MatrixOperations::MatrixOperations()
{
try
{
// Initialize the NX Open C++ API environment
MatrixOperations::theSession = NXOpen::Session::GetSession();
MatrixOperations::theUI = UI::GetUI();
theDialogName = "MatrixOperations.dlx";
theDialog = MatrixOperations::theUI->CreateDialog(theDialogName.c_str());
// Registration of callback functions
theDialog->AddApplyHandler(make_callback(this, &MatrixOperations::apply_cb));
theDialog->AddOkHandler(make_callback(this, &MatrixOperations::ok_cb));
theDialog->AddUpdateHandler(make_callback(this, &MatrixOperations::update_cb));
theDialog->AddInitializeHandler(make_callback(this, &MatrixOperations::initialize_cb));
theDialog->AddFocusNotifyHandler(make_callback(this, &MatrixOperations::focusNotify_cb));
theDialog->AddKeyboardFocusNotifyHandler(make_callback(this, &MatrixOperations::keyboardFocusNotify_cb));
theDialog->AddDialogShownHandler(make_callback(this, &MatrixOperations::dialogShown_cb));
}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
MatrixOperations::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
throw;
}
}
构造函数里,我们需要关注dlx文件加载,回调方法里面主要关注:提交方法apply_cb、更新方法update_cb、初始化方法initialize_cb。
2. 处理模块分析
2.1 初始化方法
void MatrixOperations::initialize_cb()
{
try
{
SelectOperationsGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("SelectOperationsGroup"));
SelectOperation = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("SelectOperation"));
Input = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("Input"));
Matrix1Group = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("Matrix1Group"));
Matrix1 = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("Matrix1"));
Matrix2Group = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("Matrix2Group"));
Matrix2 = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("Matrix2"));
VectorGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("VectorGroup"));
AllowSelection = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("AllowSelection"));
SelectVector = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("SelectVector"));
Vector1 = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("Vector1"));
EnterAngle = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()-

本文介绍UG/NX二次开发中Siemens官方NXOPEN实例MatrixOperations,详细解析UI样式文件及源码文件,演示如何利用UG API进行矩阵运算。
最低0.47元/天 解锁文章
642

被折叠的 条评论
为什么被折叠?



