UG/NX二次开发Siemens官方NXOPEN实例解析—1.5 BlockStyler/MatrixOperations

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

列文章目录

UG/NX二次开发Siemens官方NXOPEN实例解析—1.1 BlockStyler/ColoredBlock
UG/NX二次开发Siemens官方NXOPEN实例解析—1.2 BlockStyler/EditExpression
UG/NX二次开发Siemens官方NXOPEN实例解析—1.3 BlockStyler/ExtrudewithPreview
UG/NX二次开发Siemens官方NXOPEN实例解析—1.4 BlockStyler/HoleCoordinates
UG/NX二次开发Siemens官方NXOPEN实例解析—1.5 BlockStyler/MatrixOperations
UG/NX二次开发Siemens官方NXOPEN实例解析—1.6 BlockStyler/SelectionExample
UG/NX二次开发Siemens官方NXOPEN实例解析—1.7 BlockStyler/TreeListDemo
UG/NX二次开发Siemens官方NXOPEN实例解析—1.8 BlockStyler/UDB_CreateCylinder
UG/NX二次开发Siemens官方NXOPEN实例解析—1.9 BlockStyler/UpdateExample

文章目录

目录

列文章目录

文章目录

前言

一、UI样式文件分析

1. 样式文件目录

2. 样式文件导入预览 

 3. 样式文件解析

二、源码文件解析

1. 主程序分析

2. 处理模块分析

3. 运行结果截图

总结


前言

        随着工业智能化的不断发展,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()-
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarcoPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值