文章目录
目录
列文章目录
文章目录
前言
一、UI样式文件分析
1. 样式文件目录
2. 样式文件导入预览
3. 样式文件解析
二、源码文件解析
1. 主程序分析
2. 处理模块分析
3. 运行结果截图
总结
前言
随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。
然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。
一、UI样式文件分析
1. 样式文件目录
目录位置:UGOPEN\SampleNXOpenApplications\C++\BlockStyler\UpdateExample\UpdateExample.dlx
2. 样式文件导入预览
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. 运行结果截图
总结
官方实例UpdateExample
本节主要是对update_cb()方法的实践和验证,做了一次简单的字符串的拼接和显示。