You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
6.8 KiB
C++

#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 <vtkPolyData.h>
#include <vtkUnstructuredGrid.h>
namespace OperModel
{
bool OperatorsProbe::execGUI()
{
GUI::MainWindow* mainWin = dynamic_cast<GUI::MainWindow*>(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<Interface::FITKCFDPostData>()->getPostDataManager();
if (manager == nullptr)return false;
EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT<EventOper::GraphEventOperator>("OperGraphPreprocess");
if (graphOper == nullptr)return false;
EventOper::ParaWidgetInterfaceOperator* treeOper = FITKOPERREPO->getOperatorT<EventOper::ParaWidgetInterfaceOperator>("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<int, QVariant> 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<GUI::ProbeDialog*> probeDialogs = dialogManager->getDialog<GUI::ProbeDialog>();
for (GUI::ProbeDialog* pD : probeDialogs) {
if (pD == nullptr)continue;
for(int i = 0;i<pickData->getPointIDs().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<EventOper::GraphEventOperator>("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<GUI::ProbeDialog*> probeDialogs = dialogManager->getDialog<GUI::ProbeDialog>();
for (GUI::ProbeDialog* pD : probeDialogs) {
if (pD == nullptr)continue;
QList<int> cellIds = pickData->getCellIDs();
for (int cellID : cellIds) {
pD->insertCell(cellID);
}
}
pickD->clearAll();
EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT<EventOper::GraphEventOperator>("OperGraphPreprocess");
if (graphOper == nullptr)return;
graphOper->reRender();
}
}