????????最近在研究,裝配體下自動導出BOM表格中需要用到BlockUI 彈出另一個BlockUI對話框。通過對網上資料進行整理總結,具體如下:
1、明確主對話框、子對話框1和子對話框2
使用BlockUI創建.cpp和.hpp文件,dlx文件內容如下所示
主對話框(NXopen_OutputBom)
子對話框1(NXOpen_BOMSetObj)
子對話框2(NXOpen_EditLibraryFile)
2、將兩個子對話框中的.cpp和.hpp加載到主界面的文件中
3、將兩個子對話框的.cpp中以下內容進行注釋
4、在主界面的.hpp中加入子對話框的頭文件
?5、在主界面的update_cb函數中調用以下代碼,button01對應彈出子對話框1,button04彈出子對話框2。
int NXopen_OutputBom::update_cb(NXOpen::BlockStyler::UIBlock* block)
{try{if(block == button0){//---------Enter your code here-----------}else if(block == button01){//---------Enter your code here-----------//用戶代碼NXOpen_BOMSetObj *dialogintNXOpen_BOMSetObj = new NXOpen_BOMSetObj();//初始化dialogintNXOpen_BOMSetObj->Show();//第二個對話框顯示 }else if(block == button02){//---------Enter your code here-----------}else if(block == button03){//---------Enter your code here-----------}else if(block == button04){//---------Enter your code here-----------//用戶代碼//初始化對話框NXOpen_EditLibraryFile *dialogintNXOpen_EditLibraryFile = new NXOpen_EditLibraryFile();dialogintNXOpen_EditLibraryFile->Show();//第二個對話框顯示}else if(block == button05){//---------Enter your code here-----------}else if(block == nativeFolderBrowser0){//---------Enter your code here--------}}catch(exception& ex){//---- Enter your exception handling code here -----NXopen_OutputBom::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return 0;
}
6、對話框1的.hpp和.cpp添加代碼
.hpp中添加一個全局變量
std::vector<NXOpen::TaggedObject *>selCompTags;
?.cpp中添加如下代碼,initialize_cb()中添加的為選擇對象過濾器,只能選擇組件,apply_cb()中添加代碼主要是收集選擇的對象
void NXOpen_BOMSetObj::initialize_cb()
{try{group0 = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("group0"));selection0 = dynamic_cast<NXOpen::BlockStyler::SelectObject*>(theDialog->TopBlock()->FindBlock("selection0"));//選擇對象過濾器Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;vector<Selection::MaskTriple> maskArray(1);maskArray[0] = Selection::MaskTriple(UF_component_type, 0, 0);//組件//maskArray[1] = Selection::MaskTriple(UF_solid_type, 0, 0);//實體selection0->GetProperties()->SetSelectionFilter("SelectionFilter", action, maskArray);}catch(exception& ex){//---- Enter your exception handling code here -----NXOpen_BOMSetObj::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}
}int NXOpen_BOMSetObj::apply_cb()
{int errorCode = 0;try{//---- Enter your callback code here -----//定義選擇控件的容器selCompTags = selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");}catch(exception& ex){//---- Enter your exception handling code here -----errorCode = 1;NXOpen_BOMSetObj::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return errorCode;
}
?7、對話框2的.hpp和.cpp添加代碼
.hpp中添加一個自己封裝的函數
void OpenTxt(LPCSTR filePath, int type);
?.cpp中添加如下代碼,update_cb()中添加的代碼主要是進行TXT或者EXCEL打開文件
int NXOpen_EditLibraryFile::update_cb(NXOpen::BlockStyler::UIBlock* block)
{try{if(block == button0){//---------Enter your code here-----------LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_PartName.txt"; // 工件名稱OpenTxt(filePath,0);}else if(block == button01){//---------Enter your code here-----------LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_Material.txt"; // 材料OpenTxt(filePath,0);}else if(block == button02){//---------Enter your code here-----------LPCSTR filePath = "E:\\\\NX1980\\\\LWCTOOLS\\\\Template\\\\cnc1.xlsx"; // BOM模板OpenTxt(filePath,1);}else if(block == button03){//---------Enter your code here-----------LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_Hardness.txt"; // 硬度OpenTxt(filePath,0);}else if(block == button04){//---------Enter your code here-----------LPCSTR filePath = "E:\\NX1980\\LWCTOOLS\\TXT\\bom_MaterialStatus.txt"; // 物料狀態OpenTxt(filePath,0);}}catch(exception& ex){//---- Enter your exception handling code here -----NXOpen_EditLibraryFile::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return 0;
}
8、在主界面的.cpp中的update_cb調用按鈕button01處加入以下代碼?
添加vector<NXOpen::TaggedObject *> selectionAssembliesobj = dialogintNXOpen_BOMSetObj->selCompTags;用于收集子對話框1選擇對象控件返回的對象。子界面2不需要進行回調,因此不做修改。
int NXopen_OutputBom::update_cb(NXOpen::BlockStyler::UIBlock* block)
{try{if(block == button0){//---------Enter your code here-----------}else if(block == button01){//---------Enter your code here-----------//用戶代碼NXOpen_BOMSetObj *dialogintNXOpen_BOMSetObj = new NXOpen_BOMSetObj();//初始化dialogintNXOpen_BOMSetObj->Show();//第二個對話框顯示 vector<NXOpen::TaggedObject *> selectionAssembliesobj = dialogintNXOpen_BOMSetObj->selCompTags; }else if(block == button02){//---------Enter your code here-----------}else if(block == button03){//---------Enter your code here-----------}else if(block == button04){//---------Enter your code here-----------//用戶代碼//初始化對話框NXOpen_EditLibraryFile *dialogintNXOpen_EditLibraryFile = new NXOpen_EditLibraryFile();dialogintNXOpen_EditLibraryFile->Show();//第二個對話框顯示}else if(block == button05){//---------Enter your code here-----------}else if(block == nativeFolderBrowser0){//---------Enter your code here--------}}catch(exception& ex){//---- Enter your exception handling code here -----NXopen_OutputBom::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return 0;
}