文章目录

目录

列文章目录

文章目录

前言

一、UI样式文件分析

1. 样式文件目录

2. 样式文件导入预览 

 3. 样式文件解析

二、源码文件解析

1. 主程序分析

2. 处理模块分析

3. 运行结果截图

总结


前言

        随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。

        然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。


一、UI样式文件分析

1. 样式文件目录

目录位置:UGOPEN\SampleNXOpenApplications\C++\BlockStyler\UpdateExample\UpdateExample.dlx

2. 样式文件导入预览 

基于python二次开发hypermesh python nx二次开发_c++

3. 样式文件解析

本实例主要用到了一下几个控件:字符串、开关、整数

二、源码文件解析

1. 主程序分析

int UpdateExample::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
    try
    {
        if(block == string0)
        {
			updateOutputString();
        }
        else if(block == toggle0)
        {
			updateOutputString();
        }
        else if(block == integer0)
        {
			updateOutputString();
        }
        else if(block == string01)
        {
        }
        else if(block == toggle01)
        {
		BlockStyler::PropertyList *string0Props = string0->GetProperties();
		BlockStyler::PropertyList *toggle01Props =  toggle01->GetProperties();
		string0Props->SetLogical("Enable", !(toggle01Props->GetLogical("Value")));
		delete string0Props;
		delete toggle01Props;
        }
        else if(block == toggle02)
        {
		BlockStyler::PropertyList *integer0Props = integer0->GetProperties();
		BlockStyler::PropertyList *toggle02Props = toggle02->GetProperties();
		BlockStyler::PropertyList *toggle0Props = toggle0->GetProperties();

		integer0Props->SetLogical("Enable", !(toggle02Props->GetLogical("Value")));
		toggle0Props->SetLogical("Enable", !(toggle02Props->GetLogical("Value")));

		delete integer0Props;
		delete toggle02Props;
		delete toggle0Props;
		}
    }
    catch(exception& ex)
    {
        UpdateExample::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return 0;
}

int UpdateExample::updateOutputString()
{
    int errorCode = 0;
    try
    {
		BlockStyler::PropertyList *string0Props = string0->GetProperties();
		NXOpen::NXString inputText = string0Props->GetString("Value");
		delete string0Props;
		NXString numberText = "";
		PropertyList *toggle0Props = toggle0->GetProperties();
		if(toggle0Props->GetLogical("Value"))
		{
			BlockStyler::PropertyList *integer0Props = integer0->GetProperties();
			int numberValue = integer0Props->GetInteger("Value");

			std::stringstream stringBuffer;
			stringBuffer << numberValue;
			numberText = " - ";
			numberText += stringBuffer.str();
			delete integer0Props;
		}
		delete toggle0Props;
		BlockStyler::PropertyList *string01Props = string01->GetProperties();
		string01Props->SetString("Value", (inputText+=numberText));
		delete string01Props;	
    }
    catch(exception& ex)
    {
        errorCode = 1;
        UpdateExample::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return errorCode;
}

update_cb()方法主要控制各控件的update事件响应,这里主要完成了一次字符串的拼接显示方法updateOutputString()

3. 运行结果截图

基于python二次开发hypermesh python nx二次开发_c++_02

总结

官方实例UpdateExample

本节主要是对update_cb()方法的实践和验证,做了一次简单的字符串的拼接和显示。