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.
281 lines
10 KiB
C++
281 lines
10 KiB
C++
#include "MeshGeoSubWidget.h"
|
|
#include "ui_MeshGeoSubWidget.h"
|
|
|
|
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKMeshGenInterface.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSize.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSizeGeom.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionGeometryRefine.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKAbstractMeshSizeInfoGenerator.h"
|
|
|
|
namespace GUI
|
|
{
|
|
MeshGeoSubWidget::MeshGeoSubWidget(Interface::FITKAbsGeoCommand* geoObj, EventOper::ParaWidgetInterfaceOperator * oper, QWidget * parent) :
|
|
GUIWidgetBase(parent), _geoObj(geoObj), _oper(oper)
|
|
{
|
|
_ui = new Ui::MeshGeoSubWidget();
|
|
_ui->setupUi(this);
|
|
|
|
init();
|
|
}
|
|
|
|
|
|
MeshGeoSubWidget::~MeshGeoSubWidget()
|
|
{
|
|
if (_ui) {
|
|
delete _ui;
|
|
_ui = nullptr;
|
|
}
|
|
}
|
|
|
|
int MeshGeoSubWidget::getObjID()
|
|
{
|
|
if (_geoObj == nullptr)return -1;
|
|
return _geoObj->getDataObjectID();
|
|
}
|
|
|
|
void MeshGeoSubWidget::init()
|
|
{
|
|
//管理器获取
|
|
_meshSizeManager = Interface::FITKMeshGenInterface::getInstance()->getRegionMeshSizeMgr();
|
|
_geoRefineManager = Interface::FITKMeshGenInterface::getInstance()->getRegionGeometryRefineManager();
|
|
|
|
//阻断信号
|
|
QSignalBlocker blocker(_ui->comboBox_RefineModel);
|
|
QSignalBlocker blocker1(_ui->comboBox_Gap);
|
|
_ui->comboBox_RefineModel->addItem(tr("Distance"),Interface::FITKRegionGeometryRefine::RefineModelType::RefineDistance);
|
|
_ui->comboBox_RefineModel->addItem(tr("Inside"),Interface::FITKRegionGeometryRefine::RefineModelType::RefineInside);
|
|
_ui->comboBox_RefineModel->addItem(tr("Outside"),Interface::FITKRegionGeometryRefine::RefineModelType::RefineOutside);
|
|
_ui->comboBox_Gap->addItem(tr("none"), Interface::FITKRegionGeometryRefine::GapModelType::GapNone);
|
|
_ui->comboBox_Gap->addItem(tr("Mixed"), Interface::FITKRegionGeometryRefine::GapModelType::GapMixed);
|
|
_ui->comboBox_Gap->addItem(tr("Inside"), Interface::FITKRegionGeometryRefine::GapModelType::GapInside);
|
|
_ui->comboBox_Gap->addItem(tr("Outside"), Interface::FITKRegionGeometryRefine::GapModelType::GapOutside);
|
|
_ui->comboBox_RefineModel->setCurrentIndex(0);
|
|
_ui->comboBox_Gap->setCurrentIndex(0);
|
|
|
|
setDataToWidget();
|
|
updateWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::updateWidget()
|
|
{
|
|
if (_geoMeshSize) {
|
|
_ui->checkBox_Mesh->setChecked(true);
|
|
_ui->groupBox_Mesh->show();
|
|
}
|
|
else {
|
|
_ui->checkBox_Mesh->setChecked(false);
|
|
_ui->groupBox_Mesh->hide();
|
|
}
|
|
|
|
if (_geoRefine) {
|
|
_ui->checkBox_Refine->setChecked(true);
|
|
_ui->groupBox_Refine->show();
|
|
|
|
switch (_ui->comboBox_RefineModel->currentData().value<Interface::FITKRegionGeometryRefine::RefineModelType>()){
|
|
case Interface::FITKRegionGeometryRefine::RefineDistance: {
|
|
_ui->label_Distance->show();
|
|
_ui->doubleSpinBox_Distance->show();
|
|
break;
|
|
}
|
|
case Interface::FITKRegionGeometryRefine::RefineInside:
|
|
case Interface::FITKRegionGeometryRefine::RefineOutside:{
|
|
_ui->label_Distance->hide();
|
|
_ui->doubleSpinBox_Distance->hide();
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (_ui->comboBox_Gap->currentData().value<Interface::FITKRegionGeometryRefine::GapModelType>()) {
|
|
case Interface::FITKRegionGeometryRefine::GapNone: {
|
|
_ui->label_NoCell->hide();
|
|
_ui->spinBox_NoCell->hide();
|
|
_ui->label_MaxGap->hide();
|
|
_ui->spinBox_MaxGap->hide();
|
|
break;
|
|
}
|
|
case Interface::FITKRegionGeometryRefine::GapMixed:
|
|
case Interface::FITKRegionGeometryRefine::GapInside:
|
|
case Interface::FITKRegionGeometryRefine::GapOutside: {
|
|
_ui->label_NoCell->show();
|
|
_ui->spinBox_NoCell->show();
|
|
_ui->label_MaxGap->show();
|
|
_ui->spinBox_MaxGap->show();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
_ui->checkBox_Refine->setChecked(false);
|
|
_ui->groupBox_Refine->hide();
|
|
}
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_spinBox_Min_valueChanged(int arg1)
|
|
{
|
|
Q_UNUSED(arg1);
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_spinBox_Max_valueChanged(int arg1)
|
|
{
|
|
Q_UNUSED(arg1);
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_checkBox_Mesh_clicked()
|
|
{
|
|
if (_geoObj == nullptr)return;
|
|
if (_meshSizeManager == nullptr)return;
|
|
if (_ui->checkBox_Mesh->isChecked()) {
|
|
auto meshSizeGen = Interface::FITKMeshGenInterface::getInstance()->getMeshSizeGenerator();
|
|
if (meshSizeGen) {
|
|
_geoMeshSize = dynamic_cast<Interface::FITKRegionMeshSizeGeom*>
|
|
(meshSizeGen->createRegionMeshSize(Interface::FITKAbstractRegionMeshSize::RegionType::RigonGeom));
|
|
if (_geoMeshSize) {
|
|
_geoMeshSize->setGeomID(_geoObj->getDataObjectID());
|
|
_meshSizeManager->appendDataObj(_geoMeshSize);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (_geoMeshSize) {
|
|
_meshSizeManager->removeDataByID(_geoMeshSize->getDataObjectID());
|
|
_geoMeshSize = nullptr;
|
|
}
|
|
}
|
|
updateWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_checkBox_Refine_clicked()
|
|
{
|
|
if (_geoObj == nullptr)return;
|
|
if (_geoRefineManager == nullptr)return;
|
|
if (_ui->checkBox_Refine->isChecked()) {
|
|
_geoRefine = new Interface::FITKRegionGeometryRefine();
|
|
_geoRefine->setGeometryId(_geoObj->getDataObjectID());
|
|
_geoRefineManager->appendDataObj(_geoRefine);
|
|
}
|
|
else {
|
|
if (_geoRefine) {
|
|
_geoRefineManager->removeDataByID(_geoRefine->getDataObjectID());
|
|
_geoRefine = nullptr;
|
|
}
|
|
}
|
|
updateWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_checkBox_Limit_clicked()
|
|
{
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void GUI::MeshGeoSubWidget::on_comboBox_RefineModel_currentIndexChanged(int index)
|
|
{
|
|
Q_UNUSED(index);
|
|
getDataFromWidget();
|
|
updateWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_doubleSpinBox_Distance_valueChanged(double arg1)
|
|
{
|
|
Q_UNUSED(arg1);
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_spinBox_Level_valueChanged(int arg1)
|
|
{
|
|
Q_UNUSED(arg1);
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_comboBox_Gap_currentIndexChanged(int index)
|
|
{
|
|
Q_UNUSED(index);
|
|
getDataFromWidget();
|
|
updateWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_spinBox_NoCell_valueChanged(int arg1)
|
|
{
|
|
Q_UNUSED(arg1);
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::on_spinBox_MaxGap_valueChanged(int arg1)
|
|
{
|
|
Q_UNUSED(arg1);
|
|
getDataFromWidget();
|
|
}
|
|
|
|
void MeshGeoSubWidget::setDataToWidget()
|
|
{
|
|
if (_geoObj == nullptr)return;
|
|
if (_meshSizeManager ==nullptr)return;
|
|
if (_geoRefineManager == nullptr)return;
|
|
|
|
//网格划分区域尺寸对象获取
|
|
auto geoMeshSizeList = _meshSizeManager->getRigonByType(Interface::FITKAbstractRegionMeshSize::RegionType::RigonGeom);
|
|
for (int i = 0; i < geoMeshSizeList.size(); i++) {
|
|
Interface::FITKRegionMeshSizeGeom* geoMeshSize = dynamic_cast<Interface::FITKRegionMeshSizeGeom*>(geoMeshSizeList[i]);
|
|
if (geoMeshSize == nullptr)continue;
|
|
if (geoMeshSize->getGeomID() == _geoObj->getDataObjectID()) {
|
|
_geoMeshSize = geoMeshSize;
|
|
break;
|
|
}
|
|
}
|
|
//网格划分优化对象获取
|
|
for (int i = 0; i < _geoRefineManager->getDataCount(); i++) {
|
|
auto geoRefineObj = _geoRefineManager->getDataByIndex(i);
|
|
if (geoRefineObj == nullptr)continue;
|
|
if (geoRefineObj->getGeometryId() == _geoObj->getDataObjectID())_geoRefine = geoRefineObj;
|
|
}
|
|
|
|
//阻断信号
|
|
QSignalBlocker blocker(_ui->spinBox_Max);
|
|
QSignalBlocker blocker1(_ui->spinBox_Min);
|
|
QSignalBlocker blocker2(_ui->checkBox_Limit);
|
|
QSignalBlocker blocker3(_ui->comboBox_RefineModel);
|
|
QSignalBlocker blocker4(_ui->doubleSpinBox_Distance);
|
|
QSignalBlocker blocker5(_ui->spinBox_Level);
|
|
QSignalBlocker blocker6(_ui->comboBox_Gap);
|
|
QSignalBlocker blocker7(_ui->spinBox_NoCell);
|
|
QSignalBlocker blocker8(_ui->spinBox_MaxGap);
|
|
|
|
//网格划分尺寸数据填充
|
|
if (_geoMeshSize) {
|
|
_ui->spinBox_Max->setValue(_geoMeshSize->getMaxSize());
|
|
_ui->spinBox_Min->setValue(_geoMeshSize->getMinSize());
|
|
}
|
|
//网格划分优化数据填充
|
|
if (_geoRefine) {
|
|
_ui->checkBox_Limit->setChecked(_geoRefine->getLimitRefineMent());
|
|
_ui->comboBox_RefineModel->setCurrentIndex(_ui->comboBox_RefineModel->findData(_geoRefine->getRefineModel()));
|
|
_ui->doubleSpinBox_Distance->setValue(_geoRefine->getDistance());
|
|
_ui->spinBox_Level->setValue(_geoRefine->getLevel());
|
|
_ui->comboBox_Gap->setCurrentIndex(_ui->comboBox_Gap->findData(_geoRefine->getGapRefineModel()));
|
|
_ui->spinBox_NoCell->setValue(_geoRefine->getCellsInGapNum());
|
|
_ui->spinBox_MaxGap->setValue(_geoRefine->getMaxGapLevel());
|
|
}
|
|
}
|
|
|
|
void MeshGeoSubWidget::getDataFromWidget()
|
|
{
|
|
if (_geoMeshSize) {
|
|
_geoMeshSize->setMaxSize(_ui->spinBox_Max->value());
|
|
_geoMeshSize->setMinSize(_ui->spinBox_Min->value());
|
|
}
|
|
|
|
if (_geoRefine) {
|
|
_geoRefine->setLimitRefinement(_ui->checkBox_Limit->isChecked());
|
|
_geoRefine->setRefineModel(_ui->comboBox_RefineModel->currentData().value<Interface::FITKRegionGeometryRefine::RefineModelType>());
|
|
_geoRefine->setDistance(_ui->doubleSpinBox_Distance->value());
|
|
_geoRefine->setLevel(_ui->spinBox_Level->value());
|
|
_geoRefine->setGapRefineModel(_ui->comboBox_Gap->currentData().value<Interface::FITKRegionGeometryRefine::GapModelType>());
|
|
_geoRefine->setCellsInGapNum(_ui->spinBox_NoCell->value());
|
|
_geoRefine->setMaxGapLevel(_ui->spinBox_MaxGap->value());
|
|
}
|
|
}
|
|
}
|
|
|