#include "OperatorsProbe.h" #include "GUIDialog/ProbeDialog.h" #include "GUIDialog/GUIDialogManager.h" #include "GUIFrame/MainWindow.h" #include "GUIFrame/MainTreeWidget.h" #include "GUIWidget/TreeWidget.h" #include "GUIWidget/GUIPickInfo.h" #include "GUIWidget/PickedData.h" #include "GUIWidget/PickedDataProvider.h" #include "OperatorsInterface/GraphEventOperator.h" #include "OperatorsInterface/ParaWidgetInterfaceOperator.h" #include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h" #include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h" #include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPost3DManager.h" #include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostData.h" #include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostIsosurface.h" #include #include namespace OperModel { bool OperatorsProbe::execGUI() { GUI::MainWindow* mainWin = dynamic_cast(FITKAPP->getGlobalData()->getMainWindow()); if (mainWin == nullptr)return false; GUI::TreeWidget* treeWidget = mainWin->getTreeWidget()->getTreeWidget(); if (treeWidget == nullptr)return false; //获取树节点当前数据对象id if (_senderName == "actionProbeCreate") { GUI::ProbeDialog* dialog = new GUI::ProbeDialog(treeWidget->getCurrentDataID(), this, true); dialog->show(); } else if (_senderName == "actionProbeEdit") { int objID = -1; argValue(objID_String, objID); if (objID <= 0)return false; GUI::ProbeDialog* dialog = new GUI::ProbeDialog(objID, this, false); dialog->show(); } return false; } bool OperatorsProbe::execProfession() { Interface::FITKCFDPost3DManager* manager = FITKAPP->getGlobalData()->getPostData()->getPostDataManager(); if (manager == nullptr)return false; EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT("OperGraphPreprocess"); if (graphOper == nullptr)return false; EventOper::ParaWidgetInterfaceOperator* treeOper = FITKOPERREPO->getOperatorT("ModelTreeEvent"); if (treeOper == nullptr)return false; int objID = -1; argValue(objID_String, objID); Interface::FITKAbstractCFDPostData* data = manager->getDataByID(objID); if (data) { graphOper->updateSingle(objID); } treeOper->updateTree(); return false; } void OperatorsProbe::eventProcess(int index, QHash value) { //点选择事件 if (index == 0) { //拾取信息设置 GUI::GUIPickInfoStru pinfo; pinfo._pickObjType = GUI::GUIPickInfo::PickObjType::POBJVert; pinfo._pickMethod = GUI::GUIPickInfo::PickMethod::PMSingle; //保存参数 GUI::GUIPickInfo::SetPickInfo(pinfo); //拾取对象获取事件绑定 GraphData::PickedDataProvider* pickD = GraphData::PickedDataProvider::getInstance(); if (pickD == nullptr) return; connect(pickD, SIGNAL(sigPickDataOver()), this, SLOT(slotPickPointDataOver())); } //单元选取事件 else if (index == 1) { //拾取信息设置 GUI::GUIPickInfoStru pinfo; pinfo._pickObjType = GUI::GUIPickInfo::PickObjType::POBJEdge; pinfo._pickMethod = GUI::GUIPickInfo::PickMethod::PMSingle; //保存参数 GUI::GUIPickInfo::SetPickInfo(pinfo); //拾取对象获取事件绑定 GraphData::PickedDataProvider* pickD = GraphData::PickedDataProvider::getInstance(); if (pickD == nullptr) return; connect(pickD, SIGNAL(sigPickDataOver()), this, SLOT(slotPickCellDataOver())); } } void OperatorsProbe::slotPickPointDataOver() { //拾取对象获取事件绑定 GraphData::PickedDataProvider* pickD = GraphData::PickedDataProvider::getInstance(); if (pickD == nullptr) return; disconnect(pickD, SIGNAL(sigPickDataOver()), this, SLOT(slotPickPointDataOver())); //拾取信息设置 GUI::GUIPickInfoStru pinfo; pinfo._pickObjType = GUI::GUIPickInfo::PickObjType::POBJNone; pinfo._pickMethod = GUI::GUIPickInfo::PickMethod::PMNone; //保存参数 GUI::GUIPickInfo::SetPickInfo(pinfo); GraphData::PickedData* pickData = pickD->getPickDatas();; if (pickData == nullptr)return; vtkUnstructuredGrid* grid = pickData->getGrid(); if (grid == nullptr)return; //获取极值界面 GUI::GUIDialogManager* dialogManager = GUI::GUIDialogManager::getInstance(); QList probeDialogs = dialogManager->getDialog(); for (GUI::ProbeDialog* pD : probeDialogs) { if (pD == nullptr)continue; for(int i = 0;igetPointIDs().size();i++){ if (grid->GetPoints() == nullptr)return; double* point = grid->GetPoints()->GetPoint(i); pD->insertPoint(point, pickData->getPointIDs()[i]); } } pickD->clearAll(); EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT("OperGraphPreprocess"); if (graphOper == nullptr)return; graphOper->reRender(); } void OperatorsProbe::slotPickCellDataOver() { //拾取对象获取事件绑定 GraphData::PickedDataProvider* pickD = GraphData::PickedDataProvider::getInstance(); if (pickD == nullptr) return; disconnect(pickD, SIGNAL(sigPickDataOver()), this, SLOT(slotPickCellDataOver())); //拾取信息设置 GUI::GUIPickInfoStru pinfo; pinfo._pickObjType = GUI::GUIPickInfo::PickObjType::POBJNone; pinfo._pickMethod = GUI::GUIPickInfo::PickMethod::PMNone; //保存参数 GUI::GUIPickInfo::SetPickInfo(pinfo); GraphData::PickedData* pickData = pickD->getPickDatas(); if (pickData == nullptr)return; //获取极值界面 GUI::GUIDialogManager* dialogManager = GUI::GUIDialogManager::getInstance(); QList probeDialogs = dialogManager->getDialog(); for (GUI::ProbeDialog* pD : probeDialogs) { if (pD == nullptr)continue; QList cellIds = pickData->getCellIDs(); for (int cellID : cellIds) { pD->insertCell(cellID); } } pickD->clearAll(); EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT("OperGraphPreprocess"); if (graphOper == nullptr)return; graphOper->reRender(); } }