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.
301 lines
13 KiB
C++
301 lines
13 KiB
C++
#include "BoundaryWidget.h"
|
|
#include "ui_BoundaryWidget.h"
|
|
#include "CompSelectComBoxWidget.h"
|
|
|
|
#include "OperatorsInterface/GraphEventOperator.h"
|
|
#include "OperatorsInterface/ParaWidgetInterfaceOperator.h"
|
|
|
|
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKComponents.h"
|
|
#include "FITK_Kernel/FITKEasyParam/FITKWidgetComLine.h"
|
|
#include "FITK_Kernel/FITKEasyParam/FITKEasyParamWidgetFactory.h"
|
|
#include "FITK_Kernel/FITKEasyParam/FITKParameter.h"
|
|
#include "FITK_Interface/FITKInterfaceMesh/FITKUnstructuredFluidMeshVTK.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKFlowPhysicsHandlerFactory.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFBoundary.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFBoundaryType.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFBoundaryTypeManager.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFPhysicsManager.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFPhysicsData.h"
|
|
#include "FITK_Interface/FITKInterfaceFlowOF/FITKAbstractOFSolver.h"
|
|
|
|
#include <QTabBar>
|
|
#include <QToolBox>
|
|
|
|
namespace GUI
|
|
{
|
|
/**
|
|
* @brief FLow子数据回调函数
|
|
* @param[i] type 类型
|
|
* @param[i] widget 对应的界面
|
|
* @return Core::FITKParameter* 子数据对象
|
|
* @author BaGuijun (baguijun@163.com)
|
|
* @date 2024-08-27
|
|
*/
|
|
Core::FITKParameter* getBoundaryFlowSubData(const QString& type, CompSelectComBoxWidget* widget)
|
|
{
|
|
if (widget == nullptr)return nullptr;
|
|
auto phyFactory = FITKAPP->getComponents()->getComponentTByName<Interface::FITKFlowPhysicsHandlerFactory>("FITKFlowPhysicsHandlerFactory");
|
|
if (phyFactory == nullptr)return nullptr;
|
|
auto phyData = FITKAPP->getGlobalData()->getPhysicsData<Interface::FITKOFPhysicsData>();
|
|
if (phyData == nullptr)return nullptr;
|
|
|
|
int objID = widget->getData("objID").toInt();
|
|
QString objName = widget->getData("objName").toString();
|
|
int index = widget->getData("index").toInt();
|
|
int boundaryID = widget->getData("boundaryID").toInt();
|
|
auto boundary = phyData->getBoundaryManager()->getDataByID(boundaryID);
|
|
if (boundary == nullptr)return nullptr;
|
|
|
|
phyFactory->setVariableBoundaryType(boundaryID, objName, type);
|
|
|
|
return boundary->getFlowVBType(index)->getBoundaryTypePara();
|
|
}
|
|
/**
|
|
* @brief Turbulence子数据回调函数
|
|
* @param[i] type 类型
|
|
* @param[i] widget 对应的界面
|
|
* @return Core::FITKParameter* 子数据对象
|
|
* @author BaGuijun (baguijun@163.com)
|
|
* @date 2024-08-27
|
|
*/
|
|
Core::FITKParameter* getBoundaryTurbulenceSubData(const QString& type, CompSelectComBoxWidget* widget)
|
|
{
|
|
if (widget == nullptr)return nullptr;
|
|
auto phyFactory = FITKAPP->getComponents()->getComponentTByName<Interface::FITKFlowPhysicsHandlerFactory>("FITKFlowPhysicsHandlerFactory");
|
|
if (phyFactory == nullptr)return nullptr;
|
|
auto phyData = FITKAPP->getGlobalData()->getPhysicsData<Interface::FITKOFPhysicsData>();
|
|
if (phyData == nullptr)return nullptr;
|
|
|
|
int objID = widget->getData("objID").toInt();
|
|
QString objName = widget->getData("objName").toString();
|
|
int index = widget->getData("index").toInt();
|
|
int boundaryID = widget->getData("boundaryID").toInt();
|
|
auto boundary = phyData->getBoundaryManager()->getDataByID(boundaryID);
|
|
if (boundary == nullptr)return nullptr;
|
|
|
|
phyFactory->setVariableBoundaryType(boundaryID, objName, type);
|
|
return boundary->getTurbulenceVBType(index)->getBoundaryTypePara();
|
|
}
|
|
/**
|
|
* @brief Phases子数据回调函数
|
|
* @param[i] type 类型
|
|
* @param[i] widget 对应的界面
|
|
* @return Core::FITKParameter* 子数据对象
|
|
* @author BaGuijun (baguijun@163.com)
|
|
* @date 2024-08-27
|
|
*/
|
|
Core::FITKParameter* getBoundaryPhasesSubData(const QString& type, CompSelectComBoxWidget* widget)
|
|
{
|
|
if (widget == nullptr)return nullptr;
|
|
auto phyFactory = FITKAPP->getComponents()->getComponentTByName<Interface::FITKFlowPhysicsHandlerFactory>("FITKFlowPhysicsHandlerFactory");
|
|
if (phyFactory == nullptr)return nullptr;
|
|
auto phyData = FITKAPP->getGlobalData()->getPhysicsData<Interface::FITKOFPhysicsData>();
|
|
if (phyData == nullptr)return nullptr;
|
|
|
|
int objID = widget->getData("objID").toInt();
|
|
QString objName = widget->getData("objName").toString();
|
|
int index = widget->getData("index").toInt();
|
|
int boundaryID = widget->getData("boundaryID").toInt();
|
|
auto boundary = phyData->getBoundaryManager()->getDataByID(boundaryID);
|
|
if (boundary == nullptr)return nullptr;
|
|
|
|
phyFactory->setVariableBoundaryType(boundaryID, objName, type);
|
|
return boundary->getPhasesVBType(index)->getBoundaryTypePara();
|
|
}
|
|
|
|
BoundaryWidget::BoundaryWidget(Interface::FITKOFBoundary* boundaryObj, EventOper::ParaWidgetInterfaceOperator * oper, QWidget * parent) :
|
|
GUICalculateWidgetBase(oper, parent), _boundaryObj(boundaryObj)
|
|
{
|
|
_ui = new Ui::BoundaryWidget();
|
|
_ui->setupUi(this);
|
|
init();
|
|
}
|
|
|
|
BoundaryWidget::~BoundaryWidget()
|
|
{
|
|
if (_ui) delete _ui;
|
|
}
|
|
|
|
void BoundaryWidget::init()
|
|
{
|
|
if (_boundaryObj == nullptr)return;
|
|
auto globalData = FITKAPP->getGlobalData();
|
|
if (globalData == nullptr)return;
|
|
Interface::FITKUnstructuredFluidMeshVTK* meshData = globalData->getMeshData< Interface::FITKUnstructuredFluidMeshVTK>();
|
|
if (meshData == nullptr)return;
|
|
Interface::FITKBoundaryMeshVTKManager* boundMeshManager = meshData->getBoundaryMeshManager();
|
|
if (boundMeshManager == nullptr)return;
|
|
|
|
//名称设置
|
|
QString name = _boundaryObj->getDataObjectName();
|
|
_ui->lineEdit_Name->setText(name);
|
|
_ui->lineEdit_Name->setEnabled(false);
|
|
|
|
//网格边界名称设置
|
|
auto meshBoundary = boundMeshManager->getDataByID(_boundaryObj->getMeshBoundaryID());
|
|
_ui->lineEdit_Boundary->setEnabled(false);
|
|
if (meshBoundary)_ui->lineEdit_Boundary->setText(meshBoundary->getDataObjectName());
|
|
|
|
//边界类型名称设置
|
|
_currentType = _boundaryObj->getBoundaryType();
|
|
QString typeName = "";
|
|
switch (_currentType) {
|
|
case Interface::FITKOFSolverTypeEnum::BWall:typeName = tr("Wall"); break;
|
|
case Interface::FITKOFSolverTypeEnum::BPressureInlet:typeName = tr("Pressure Inlet"); break;
|
|
case Interface::FITKOFSolverTypeEnum::BVelocityInlet:typeName = tr("Velocity Inlet"); break;
|
|
case Interface::FITKOFSolverTypeEnum::BPressureOutlet:typeName = tr("Pressure Outlet"); break;
|
|
case Interface::FITKOFSolverTypeEnum::BOutflow:typeName = tr("Outflow"); break;
|
|
case Interface::FITKOFSolverTypeEnum::BSymmetry:typeName = tr("Symmetry"); break;
|
|
case Interface::FITKOFSolverTypeEnum::BWedge:typeName = tr("Wedge"); break;
|
|
}
|
|
_ui->lineEdit_Type->setText(typeName);
|
|
_ui->lineEdit_Type->setEnabled(false);
|
|
|
|
update();
|
|
}
|
|
|
|
void BoundaryWidget::update()
|
|
{
|
|
if (_boundaryObj == nullptr)return;
|
|
|
|
updateFlow();
|
|
updateTurbulence();
|
|
updatePhases();
|
|
}
|
|
|
|
Interface::FITKOFBoundary * BoundaryWidget::getCurrentObj()
|
|
{
|
|
return _boundaryObj;
|
|
}
|
|
|
|
void BoundaryWidget::showEvent(QShowEvent * event)
|
|
{
|
|
GUICalculateWidgetBase::showEvent(event);
|
|
if (_boundaryObj == nullptr)return;
|
|
|
|
EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT<EventOper::GraphEventOperator>("GraphPreprocess");
|
|
if (graphOper == nullptr)return;
|
|
graphOper->clearHighlight();
|
|
graphOper->highlight(_boundaryObj->getMeshBoundaryID());
|
|
}
|
|
|
|
void BoundaryWidget::hideEvent(QHideEvent * event)
|
|
{
|
|
GUICalculateWidgetBase::hideEvent(event);
|
|
EventOper::GraphEventOperator* graphOper = FITKOPERREPO->getOperatorT<EventOper::GraphEventOperator>("GraphPreprocess");
|
|
if (graphOper == nullptr)return;
|
|
graphOper->clearHighlight();
|
|
}
|
|
|
|
void BoundaryWidget::updateFlow()
|
|
{
|
|
if (_boundaryObj == nullptr)return;
|
|
if (_physicsManager == nullptr)return;
|
|
auto boundartTypeMan = _physicsManager->getBoundaryTypeManager();
|
|
if (boundartTypeMan == nullptr)return;
|
|
int num = _boundaryObj->getFlowCount();
|
|
if (num == 0) {
|
|
_ui->tabWidget->removeTab(0);
|
|
return;
|
|
}
|
|
|
|
QWidget* widget = new QWidget(this);
|
|
QVBoxLayout* layout = new QVBoxLayout();
|
|
QToolBox* toolBox = Core::FITKWidgetComLine::CreateToolBox(widget);
|
|
for (int i = 0; i < num; i++) {
|
|
Interface::FITKOFAbsBoundaryType* data = _boundaryObj->getFlowVBType(i);
|
|
if (data == nullptr)continue;
|
|
QStringList options = boundartTypeMan->filterBoundariesType(_physicsData->getSolver()->getSolverType(),
|
|
_currentType, _boundaryObj->getFlowVariableName(i));
|
|
CompSelectComBoxWidget* w = new CompSelectComBoxWidget(_boundaryObj->getFlowVariableName(i), this);
|
|
w->setData("boundaryID", _boundaryObj->getDataObjectID());
|
|
w->setData("objID", data->getDataObjectID());
|
|
w->setData("objName", _boundaryObj->getFlowVariableName(i));
|
|
w->setData("index", i);
|
|
w->setSubWidgetData(data->getBoundaryTypePara());
|
|
w->setOptions(options);
|
|
w->setCurrentText(data->getDataObjectName());
|
|
w->setFunction(&getBoundaryFlowSubData);
|
|
toolBox->addItem(w, _boundaryObj->getFlowVariableName(i));
|
|
}
|
|
layout->addWidget(toolBox);
|
|
widget->setLayout(layout);
|
|
_ui->tabWidget->addTab(widget, tr("Flow"));
|
|
}
|
|
|
|
void BoundaryWidget::updateTurbulence()
|
|
{
|
|
if (_boundaryObj == nullptr)return;
|
|
if (_physicsManager == nullptr)return;
|
|
auto boundartTypeMan = _physicsManager->getBoundaryTypeManager();
|
|
if (boundartTypeMan == nullptr)return;
|
|
int num = _boundaryObj->getTurbulenceCount();
|
|
if (num == 0) {
|
|
return;
|
|
}
|
|
|
|
QWidget* widget = new QWidget(this);
|
|
QVBoxLayout* layout = new QVBoxLayout();
|
|
QToolBox* toolBox = Core::FITKWidgetComLine::CreateToolBox(widget);
|
|
for (int i = 0; i < num; i++) {
|
|
Interface::FITKOFAbsBoundaryType* data = _boundaryObj->getTurbulenceVBType(i);
|
|
if (data == nullptr)continue;
|
|
QStringList options = boundartTypeMan->filterBoundariesType(_physicsData->getSolver()->getSolverType(),
|
|
_currentType, _boundaryObj->getTurbulenceVariableName(i));
|
|
CompSelectComBoxWidget* w = new CompSelectComBoxWidget(_boundaryObj->getTurbulenceVariableName(i), this);
|
|
w->setData("boundaryID", _boundaryObj->getDataObjectID());
|
|
w->setData("objID", data->getDataObjectID());
|
|
w->setData("objName", _boundaryObj->getTurbulenceVariableName(i));
|
|
w->setData("index", i);
|
|
w->setSubWidgetData(data->getBoundaryTypePara());
|
|
w->setOptions(options);
|
|
w->setCurrentText(data->getDataObjectName());
|
|
w->setFunction(&getBoundaryTurbulenceSubData);
|
|
toolBox->addItem(w, _boundaryObj->getTurbulenceVariableName(i));
|
|
}
|
|
layout->addWidget(toolBox);
|
|
widget->setLayout(layout);
|
|
_ui->tabWidget->addTab(widget, tr("Turbulence"));
|
|
}
|
|
|
|
void BoundaryWidget::updatePhases()
|
|
{
|
|
if (_boundaryObj == nullptr)return;
|
|
if (_physicsManager == nullptr)return;
|
|
auto boundartTypeMan = _physicsManager->getBoundaryTypeManager();
|
|
if (boundartTypeMan == nullptr)return;
|
|
int num = _boundaryObj->getPhasesCount();
|
|
if (num == 0) {
|
|
_ui->tabWidget->removeTab(2);
|
|
return;
|
|
}
|
|
|
|
QWidget* widget = new QWidget(this);
|
|
QVBoxLayout* layout = new QVBoxLayout();
|
|
QToolBox* toolBox = Core::FITKWidgetComLine::CreateToolBox(widget);
|
|
for (int i = 0; i < num; i++) {
|
|
Interface::FITKOFAbsBoundaryType* data = _boundaryObj->getPhasesVBType(i);
|
|
if (data == nullptr)continue;
|
|
QStringList options = boundartTypeMan->filterBoundariesType(_physicsData->getSolver()->getSolverType(),
|
|
_currentType, _boundaryObj->getPhasesVariableName(i));
|
|
CompSelectComBoxWidget* w = new CompSelectComBoxWidget(_boundaryObj->getPhasesVariableName(i), this);
|
|
w->setData("boundaryID", _boundaryObj->getDataObjectID());
|
|
w->setData("objID", data->getDataObjectID());
|
|
w->setData("objName", _boundaryObj->getPhasesVariableName(i));
|
|
w->setData("index", i);
|
|
w->setSubWidgetData(data->getBoundaryTypePara());
|
|
w->setOptions(options);
|
|
w->setCurrentText(data->getDataObjectName());
|
|
w->setFunction(&getBoundaryPhasesSubData);
|
|
toolBox->addItem(w, _boundaryObj->getPhasesVariableName(i));
|
|
}
|
|
layout->addWidget(toolBox);
|
|
widget->setLayout(layout);
|
|
_ui->tabWidget->addTab(widget, tr("Phases"));
|
|
}
|
|
}
|
|
|