#include "CFDTreeWidget.h" #include "GUIFrame/MainWindow.h" #include "GUIFrame/PropertyWidget.h" #include "GUIFrame/MainTreeWidget.h" #include "OperatorsInterface/GraphEventOperator.h" #include "OperatorsInterface/TreeEventOperator.h" #include "CFDOperatorsModel/CFDOperatorsTimeModeManager.h" #include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h" #include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h" #include "FITK_Kernel/FITKCore/FITKOperatorRepo.h" #include "FITK_Kernel/FITKCore/FITKActionOperator.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFGeometryData.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFEnum.hpp" #include "FITK_Interface/FITKInterfaceFlowOF/FITKAbstractOFSolver.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFPhysicsData.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFBoundary.h" #include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h" #include "FITK_Interface/FITKInterfaceModel/FITKAbstractGeoModel.h" #include "FITK_Interface/FITKInterfaceMeshGen/FITKMeshGenInterface.h" #include "FITK_Interface/FITKInterfaceMeshGen/FITKAbstractGeometryMeshSizeGenerator.h" #include "FITK_Interface/FITKInterfaceMeshGen/FITKGeometryMeshSize.h" #include "FITK_Interface/FITKInterfaceMesh/FITKUnstructuredFluidMeshVTK.h" #include #include #include #include #include #include namespace GUI { CFDTreeWidget::CFDTreeWidget(QWidget* parent, PropertyWidget* m_PropertyWidget): TreeWidget(parent) { this->m_PropertyWidget = m_PropertyWidget; //右键 不可少否则右键无反应 setContextMenuPolicy(Qt::CustomContextMenu); disconnect(this, SIGNAL(itemClicked(QTreeWidgetItem*, int)), nullptr, nullptr); connect(this, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(onItemClicked(QTreeWidgetItem*, int))); connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onModelCustomContextMenu(QPoint))); } void CFDTreeWidget::updateTree(QString s) { this->clear(); if (s == "SolutionAnalysis") { addTreeSolutionAnalysis(); } else if (s == "Postprocessing") { addTreePostprocessing(); } else if (s == "Preprocessing") { addTreePreprocessing(); } setItemsExpandable(true); expandAll(); } void CFDTreeWidget::addTreePreprocessing() { QTreeWidgetItem* GeometryAndMeshingItem = new QTreeWidgetItem(); GeometryAndMeshingItem->setText(0, tr("Preprocessing")); GeometryAndMeshingItem->setData(1, 0, -1); // GeometryAndMeshingItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_GeometryandMeshing)); this->addTopLevelItem(GeometryAndMeshingItem); } void CFDTreeWidget::addTreeSolutionAnalysis() { QTreeWidgetItem* GeometryAndMeshingItem = new QTreeWidgetItem(); GeometryAndMeshingItem->setText(0, tr("Geometry and Meshing")); GeometryAndMeshingItem->setData(1, 0, -1); GeometryAndMeshingItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_GeometryandMeshing)); this->addTopLevelItem(GeometryAndMeshingItem); QTreeWidgetItem* mesh = new QTreeWidgetItem(); mesh->setText(0, tr("Mesh001")); mesh->setData(1, 0, -1); // mesh->setdata(2,0,QVariant::fromValue(SolutionAnalysisTreeEnum::)) GeometryAndMeshingItem->addChild(mesh); QTreeWidgetItem* ComputationalSetupItem = new QTreeWidgetItem(); ComputationalSetupItem->setText(0, tr("Computational Setup")); ComputationalSetupItem->setData(1, 0, -1); ComputationalSetupItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetup)); this->addTopLevelItem(ComputationalSetupItem); QTreeWidgetItem* TimeModeItem = new QTreeWidgetItem(); TimeModeItem->setText(0, tr("Time Mode")); TimeModeItem->setData(1, 0, -1); TimeModeItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupTimeMode)); ComputationalSetupItem->addChild(TimeModeItem); QTreeWidgetItem* ComputationalDomainItem = new QTreeWidgetItem(); ComputationalDomainItem->setText(0, tr("Computational Domain")); ComputationalDomainItem->setData(1, 0, -1); ComputationalDomainItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomain)); ComputationalSetupItem->addChild(ComputationalDomainItem); QTreeWidgetItem* SolverItem = new QTreeWidgetItem(); SolverItem->setText(0, tr("Solver")); SolverItem->setData(1, 0, -1); SolverItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolver)); ComputationalDomainItem->addChild(SolverItem); QTreeWidgetItem* BasicModelItem = new QTreeWidgetItem(); BasicModelItem->setText(0, tr("Basic Model")); BasicModelItem->setData(1, 0, -1); BasicModelItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverBasicModel)); SolverItem->addChild(BasicModelItem); QTreeWidgetItem* ViscosityModelItem = new QTreeWidgetItem(); ViscosityModelItem->setText(0, tr("Viscosity Model")); ViscosityModelItem->setData(1, 0, -1); ViscosityModelItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverViscosityModel)); SolverItem->addChild(ViscosityModelItem); QTreeWidgetItem* NumericalMethodsItem = new QTreeWidgetItem(); NumericalMethodsItem->setText(0, tr("Numerical Methods")); NumericalMethodsItem->setData(1, 0, -1); NumericalMethodsItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverNumericalMethods)); SolverItem->addChild(NumericalMethodsItem); QTreeWidgetItem* MotionPropertiesItem = new QTreeWidgetItem(); MotionPropertiesItem->setText(0, tr("Motion Properties")); MotionPropertiesItem->setData(1, 0, -1); MotionPropertiesItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMotionProperties)); ComputationalDomainItem->addChild(MotionPropertiesItem); QTreeWidgetItem* motion1Item = new QTreeWidgetItem(); motion1Item->setText(0, tr("motion-1")); motion1Item->setData(1, 0, -1); MotionPropertiesItem->addChild(motion1Item); QTreeWidgetItem* BoundaryConditionsItem = new QTreeWidgetItem(); BoundaryConditionsItem->setText(0, tr("Boundary Conditions")); BoundaryConditionsItem->setData(1, 0, -1); BoundaryConditionsItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverBoundaryConditions)); ComputationalDomainItem->addChild(BoundaryConditionsItem); QTreeWidgetItem* pressureinletItem = new QTreeWidgetItem(); pressureinletItem->setText(0, tr("Pressure-Inlet")); pressureinletItem->setData(1, 0, -1); pressureinletItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverBoundaryConditionsPressureInlet)); BoundaryConditionsItem->addChild(pressureinletItem); QTreeWidgetItem* InitializationItem = new QTreeWidgetItem(); InitializationItem->setText(0, tr("Initialization")); InitializationItem->setData(1, 0, -1); InitializationItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverInitialization)); ComputationalDomainItem->addChild(InitializationItem); QTreeWidgetItem* ComputationalControlItem = new QTreeWidgetItem(); ComputationalControlItem->setText(0, tr("Computational Control")); ComputationalControlItem->setData(1, 0, -1); ComputationalControlItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverComputationalControl)); ComputationalDomainItem->addChild(ComputationalControlItem); QTreeWidgetItem* ReferenceQuantityItem = new QTreeWidgetItem(); ReferenceQuantityItem->setText(0, tr("Reference Quantity")); ReferenceQuantityItem->setData(1, 0, -1); ReferenceQuantityItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverComputationalControlReferenceQuantity)); ComputationalControlItem->addChild(ReferenceQuantityItem); QTreeWidgetItem* MonitorsItem = new QTreeWidgetItem(); MonitorsItem->setText(0, tr("Monitors")); MonitorsItem->setData(1, 0, -1); MonitorsItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitors)); ComputationalDomainItem->addChild(MonitorsItem); QTreeWidgetItem* ResidualItem = new QTreeWidgetItem(); ResidualItem->setText(0, tr("Residual")); ResidualItem->setData(1, 0, -1); ResidualItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitorsResidual)); MonitorsItem->addChild(ResidualItem); QTreeWidgetItem* AerodynamicForceItem = new QTreeWidgetItem(); AerodynamicForceItem->setText(0, tr("Aerodynamic Force")); AerodynamicForceItem->setData(1, 0, -1); AerodynamicForceItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitorsAerodynamicForce)); MonitorsItem->addChild(AerodynamicForceItem); QTreeWidgetItem* TurbomachineryPerformanceItem = new QTreeWidgetItem(); TurbomachineryPerformanceItem->setText(0, tr("Turbomachinery Performance")); TurbomachineryPerformanceItem->setData(1, 0, -1); TurbomachineryPerformanceItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitorsTurbomachineryPerformance)); MonitorsItem->addChild(TurbomachineryPerformanceItem); } void CFDTreeWidget::addTreePostprocessing() { // _treePostprocessing = new TreeWidget(this); // tabWidget->addTab(_treePostprocessing,tr("Postprocessing")); // qDebug()<<"!!!"; QTreeWidgetItem* PostProcessingItem = new QTreeWidgetItem(); PostProcessingItem->setText(0, tr("Post-processing")); PostProcessingItem->setData(1, 0, -1); this->addTopLevelItem(PostProcessingItem); QTreeWidgetItem* MeshItem = new QTreeWidgetItem(); MeshItem->setText(0, tr("Mesh")); MeshItem->setData(1, 0, -1); PostProcessingItem->addChild(MeshItem); QTreeWidgetItem* Mesh1Item = new QTreeWidgetItem(); Mesh1Item->setText(0, tr("Mesh 1")); Mesh1Item->setData(1, 0, -1); MeshItem->addChild(Mesh1Item); QTreeWidgetItem* Interface1Item = new QTreeWidgetItem(); Interface1Item->setText(0, tr("Interface 1")); Interface1Item->setData(1, 0, -1); MeshItem->addChild(Interface1Item); QTreeWidgetItem* CuttingPlaneItem = new QTreeWidgetItem(); CuttingPlaneItem->setText(0, tr("Cutting Plane")); CuttingPlaneItem->setData(1, 0, -1); PostProcessingItem->addChild(CuttingPlaneItem); QTreeWidgetItem* IsosurfaceItem = new QTreeWidgetItem(); IsosurfaceItem->setText(0, tr("Isosurface")); IsosurfaceItem->setData(1, 0, -1); PostProcessingItem->addChild(IsosurfaceItem); QTreeWidgetItem* StreamlineItem = new QTreeWidgetItem(); StreamlineItem->setText(0, tr("Streamline")); StreamlineItem->setData(1, 0, -1); PostProcessingItem->addChild(StreamlineItem); QTreeWidgetItem* DataStatisticsItem = new QTreeWidgetItem(); DataStatisticsItem->setText(0, tr("Data Statistics")); DataStatisticsItem->setData(1, 0, -1); PostProcessingItem->addChild(DataStatisticsItem); QTreeWidgetItem* ForceAndMomentItem = new QTreeWidgetItem(); ForceAndMomentItem->setText(0, tr("Force and Moment")); ForceAndMomentItem->setData(1, 0, -1); DataStatisticsItem->addChild(ForceAndMomentItem); } void CFDTreeWidget::onItemClicked(QTreeWidgetItem *item, int column) { EventOper::TreeEventOperator* treeOper = Core::FITKOperatorRepo::getInstance()->getOperatorT("ModelTreeEvent"); if (treeOper == nullptr) { return; } EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT("GraphPreprocess"); if (graphOper == nullptr) { return; } graphOper->clearHighlight(); if (item == nullptr) { return; } int objID = item->data(1, 0).toInt(); SolutionAnalysisTreeEnum treeType = item->data(2, 0).value(); Interface::FITKGeoEnum::FITKGeometryComType geometryType = item->data(3, 0).value(); QString name = ""; switch (treeType) { case SolutionAnalysisTreeEnum::SATree_ComputationalSetupTimeMode: name = "actionTimeModeEdit"; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverBasicModel: name = "actionBasicModelEdit"; break; default: name = ""; } qDebug() << name; if (!name.isEmpty()) { QObject sender; sender.setObjectName(name); auto acOper = Core::FITKOperatorRepo::getInstance()->getOperatorT(name); if (acOper == nullptr) { qDebug("acOper is nullptr"); return; } acOper->setEmitter(&sender); acOper->setArgs("objID", objID); acOper->actionTriggered(); } else { treeOper->moveProcessToStep(0); } } }