#include "CFDTreeWidget.h" #include "GUIFrame/MainWindow.h" #include "GUIFrame/PropertyWidget.h" #include "GUIFrame/MainTreeWidget.h" #include "OperatorsInterface/GraphEventOperator.h" #include "OperatorsInterface/TreeEventOperator.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 #include "CFDStructDataManager/CFDStructSigsCenter.h" 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 *ReferenceQuantityItem = new QTreeWidgetItem(); ReferenceQuantityItem->setText(0, tr("Dimensionless")); ReferenceQuantityItem->setData(1, 0, -1); ReferenceQuantityItem->setData(2, 0, QVariant::fromValue(SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverComputationalControlReferenceQuantity)); InitializationItem->addChild(ReferenceQuantityItem); 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 *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); QTreeWidgetItem *SaveItem = new QTreeWidgetItem(); SaveItem->setText(0,tr("Save")); SaveItem->setData(2,0,999); this->addTopLevelItem(SaveItem); } void CFDTreeWidget::addTreePostprocessing() { 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(); SolutionAnalysisModuleProperty sig = SolutionAnalysisModuleProperty::UNKNOW; switch (treeType) { case SolutionAnalysisTreeEnum::SATree_ComputationalSetupTimeMode: sig = SolutionAnalysisModuleProperty::Time_Mode; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverBasicModel: sig = SolutionAnalysisModuleProperty::Basic_Model; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverViscosityModel: sig = SolutionAnalysisModuleProperty::Viscosity_Model; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverNumericalMethods: sig = SolutionAnalysisModuleProperty::NUumerical_Methods; break; //--------------------------------------------------------------------------------------- // 运动属性 case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMotionProperties: sig = SolutionAnalysisModuleProperty::Motion_Properties; break; // Pressure-Inlet case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverBoundaryConditionsPressureInlet: sig = SolutionAnalysisModuleProperty::Boundary_Conditions; break; // 初始化 case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverInitialization: sig = SolutionAnalysisModuleProperty::Initialization; break; // 参考量 case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverComputationalControlReferenceQuantity: sig = SolutionAnalysisModuleProperty::Computational_Control_Reference_Quantity; break; // 计算控制 case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverComputationalControl: sig = SolutionAnalysisModuleProperty::Computational_Control; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitorsResidual: sig = SolutionAnalysisModuleProperty::Monitors_Residual; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitorsAerodynamicForce: sig = SolutionAnalysisModuleProperty::Monitors_AerodynamicForce; break; case SolutionAnalysisTreeEnum::SATree_ComputationalSetupComputationalDomainSolverMonitorsTurbomachineryPerformance: sig = SolutionAnalysisModuleProperty::Monitors_Tubomachinery_Performance; break; default: break; } qDebug() << (int)sig; if (sig != SolutionAnalysisModuleProperty::UNKNOW) { emit CFDStructSigsCenter::getInstance()->sig_solverModuleProperty(sig); return; } } }