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.

114 lines
4.7 KiB
C++

#include "ExtremumDialog.h"
#include "ui_ExtremumDialog.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKAbstractCFDPostData.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPost3DManager.h"
Q_DECLARE_METATYPE(Interface::FITKPostFieldType)
namespace GUI
{
ExtremumDialog::ExtremumDialog(int dataID, EventOper::ParaWidgetInterfaceOperator * oper) :
GUIDialogBase(oper,"ExtremumDialog", FITKAPP->getGlobalData()->getMainWindow()),
_currentDataID(dataID)
{
_ui = new Ui::ExtremumDialog();
_ui->setupUi(this);
init();
setWindowTitle(tr("Extremum Dialog"));
}
ExtremumDialog::~ExtremumDialog()
{
if (_ui) {
delete _ui;
_ui = nullptr;
}
}
void ExtremumDialog::init()
{
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
_ui->tableWidget->setColumnCount(1);
QStringList header;
header << tr("");
_ui->tableWidget->setHorizontalHeaderLabels(header);
_ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//设置tableWidget的item不可编辑
_ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
//充满表格
_ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
//隐藏列表头
_ui->tableWidget->horizontalHeader()->setVisible(false);
//设置名称
QString name = currentData->getDataObjectName();
_ui->lineEdit_Name->setText(name);
_ui->lineEdit_Name->setEnabled(false);
//设置场量
QStringList pointData = currentData->getPointDataArray();
for (auto array : pointData) {
Interface::FITKPostVariableType variableType = currentData->getVariableType(Interface::FITKPostFieldType::Post_Point, array);
if (variableType != Interface::FITKPostVariableType::Post_Scalar)continue;
_ui->comboBox_Field->addItem(QIcon("://icons/nodeValue.png"), array, QVariant::fromValue(Interface::FITKPostFieldType::Post_Point));
}
QStringList cellData = currentData->getCellDataArray();
for (auto array : cellData) {
Interface::FITKPostVariableType variableType = currentData->getVariableType(Interface::FITKPostFieldType::Post_Cell, array);
if (variableType != Interface::FITKPostVariableType::Post_Scalar)continue;
_ui->comboBox_Field->addItem(QIcon("://icons/cellValue.png"), array, QVariant::fromValue(Interface::FITKPostFieldType::Post_Cell));
}
if (!pointData[0].isEmpty()) {
updateWidget(pointData[0], Interface::FITKPostFieldType::Post_Point);
}
else if (!cellData[0].isEmpty()) {
updateWidget(cellData[0], Interface::FITKPostFieldType::Post_Cell);
}
}
void ExtremumDialog::updateWidget(QString fieldName, Interface::FITKPostFieldType fieldType)
{
_ui->tableWidget->clear();
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
_ui->tableWidget->setRowCount(4);
QStringList header;
header << tr("Max Value") << tr("Min Value") << tr("Max Point") << tr("Min Point");
_ui->tableWidget->setVerticalHeaderLabels(header);
double range[2] = { 0,0 }, point[6] = { 0,0,0,0,0,0 };
currentData->getExtremum(range, point, fieldType, fieldName);
QString maxValue = QString::number(range[1]);
QTableWidgetItem* item = new QTableWidgetItem(maxValue);
_ui->tableWidget->setItem(0, 0, item);
QString minValue = QString::number(range[0]);
item = new QTableWidgetItem(minValue);
_ui->tableWidget->setItem(1, 0, item);
QString maxPoint = QString("(%1 , %2 , %3)").arg(point[1]).arg(point[3]).arg(point[5]);
item = new QTableWidgetItem(maxPoint);
_ui->tableWidget->setItem(2, 0, item);
QString minPoint = QString("(%1 , %2 , %3)").arg(point[0]).arg(point[2]).arg(point[4]);
item = new QTableWidgetItem(minPoint);
_ui->tableWidget->setItem(3, 0, item);
}
void ExtremumDialog::on_comboBox_Field_currentIndexChanged(int index)
{
Q_UNUSED(index);
QString fieldName = _ui->comboBox_Field->currentText();
Interface::FITKPostFieldType fieldType = _ui->comboBox_Field->currentData().value<Interface::FITKPostFieldType>();
updateWidget(fieldName, fieldType);
}
}