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.
231 lines
8.7 KiB
C++
231 lines
8.7 KiB
C++
#include "ThresholdDialog.h"
|
|
#include "ui_ThresholdDialog.h"
|
|
|
|
#include "GUIFrame/MainWindow.h"
|
|
#include "GUIFrame/RenderWidget.h"
|
|
#include "OperatorsInterface/ParaWidgetInterfaceOperator.h"
|
|
#include "PostGraphAdaptor/PostGraphWidgetLine.h"
|
|
#include "OperatorsInterface/GraphEventOperator.h"
|
|
|
|
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
|
|
#include "FITK_Kernel/FITKCore/FITKVec3D.h"
|
|
#include "FITK_Kernel/FITKCore/FITKVec3DAlg.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
|
|
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPost3DManager.h"
|
|
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostThreshold.h"
|
|
|
|
#include <QMessageBox>
|
|
|
|
Q_DECLARE_METATYPE(Interface::FITKPostFieldType)
|
|
|
|
namespace GUI
|
|
{
|
|
ThresholdDialog::ThresholdDialog(int dataID, EventOper::ParaWidgetInterfaceOperator * oper, bool isCreate):
|
|
GUIDialogBase(oper,"ThresholdDialog", FITKAPP->getGlobalData()->getMainWindow()), _isCreate(isCreate)
|
|
{
|
|
_ui = new Ui::ThresholdDialog();
|
|
_ui->setupUi(this);
|
|
if (isCreate) {
|
|
_parentDataID = dataID;
|
|
}
|
|
else {
|
|
_currentDataID = dataID;
|
|
if (_postDataManager->getDataByID(_currentDataID)) {
|
|
_parentDataID = _postDataManager->getDataByID(_currentDataID)->getCFDPostParentID();
|
|
}
|
|
}
|
|
init();
|
|
}
|
|
|
|
ThresholdDialog::~ThresholdDialog()
|
|
{
|
|
if (_ui) {
|
|
delete _ui;
|
|
_ui = nullptr;
|
|
}
|
|
}
|
|
|
|
void ThresholdDialog::init()
|
|
{
|
|
Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(_parentDataID);
|
|
if (parentData == nullptr)return;
|
|
|
|
//设置场量
|
|
QStringList pointData = parentData->getPointDataArray();
|
|
for (auto array : pointData) {
|
|
Interface::FITKPostVariableType variableType = parentData->getVariableType(Interface::FITKPostFieldType::Post_Point, array);
|
|
if (variableType != Interface::FITKPostVariableType::Post_Scalar)continue;
|
|
_ui->comboBox_Type->addItem(QIcon("://icons/nodeValue.png"), array, QVariant::fromValue(Interface::FITKPostFieldType::Post_Point));
|
|
}
|
|
|
|
QStringList cellData = parentData->getCellDataArray();
|
|
for (auto array : cellData) {
|
|
Interface::FITKPostVariableType variableType = parentData->getVariableType(Interface::FITKPostFieldType::Post_Cell, array);
|
|
if (variableType != Interface::FITKPostVariableType::Post_Scalar)continue;
|
|
_ui->comboBox_Type->addItem(QIcon("://icons/cellValue.png"), array, QVariant::fromValue(Interface::FITKPostFieldType::Post_Cell));
|
|
}
|
|
|
|
if (_isCreate) {
|
|
InitCreate();
|
|
setWindowTitle(tr("Threshold Create"));
|
|
}
|
|
else {
|
|
InitEdit();
|
|
setWindowTitle(tr("Threshold Edit"));
|
|
}
|
|
}
|
|
|
|
void ThresholdDialog::on_pushButton_OK_clicked()
|
|
{
|
|
if (_isCreate) {
|
|
if (!OKCreate())return;
|
|
}
|
|
else {
|
|
if (!OKEdit())return;
|
|
}
|
|
|
|
if (_oper) {
|
|
_oper->setArgs(objID_String, _currentDataID);
|
|
_oper->execProfession();
|
|
}
|
|
|
|
this->close();
|
|
}
|
|
|
|
void ThresholdDialog::on_pushButton_Cancel_clicked()
|
|
{
|
|
this->close();
|
|
}
|
|
|
|
void ThresholdDialog::on_comboBox_Type_currentIndexChanged(int index)
|
|
{
|
|
Q_UNUSED(index);
|
|
Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(_parentDataID);
|
|
if (parentData == nullptr)return;
|
|
|
|
Interface::FITKPostFieldType fieldType = Interface::FITKPostFieldType::Post_None;
|
|
QString fieldName = "";
|
|
double range[2] = { 0,0 };
|
|
getCurrentField(fieldType, fieldName);
|
|
parentData->getRange(range, fieldType, fieldName);
|
|
_ui->label_ValueRange->setText(QString("[%1,%2]").arg(range[0]).arg(range[1]));
|
|
_ui->lineEdit_Lower->setValue(range[0]);
|
|
_ui->lineEdit_Upper->setValue(range[1]);
|
|
}
|
|
|
|
void ThresholdDialog::InitCreate()
|
|
{
|
|
QSignalBlocker blocker(_ui->comboBox_Type);
|
|
Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(_parentDataID);
|
|
if (parentData == nullptr)return;
|
|
|
|
QString name = _postDataManager->checkName("threshold-0");
|
|
_ui->lineEdit_Name->setText(name);
|
|
|
|
_ui->comboBox_Type->setCurrentIndex(0);
|
|
|
|
//设置阈值范围
|
|
double range[2] = { 0,0 };
|
|
Interface::FITKPostFieldType fieldType = Interface::FITKPostFieldType::Post_None;
|
|
QString fieldName = "";
|
|
getCurrentField(fieldType, fieldName);
|
|
parentData->getRange(range, fieldType, fieldName);
|
|
_ui->label_ValueRange->setText(QString("[%1,%2]").arg(range[0]).arg(range[1]));
|
|
|
|
//设置阈值
|
|
_ui->lineEdit_Lower->setText(QString::number(range[0]));
|
|
_ui->lineEdit_Upper->setText(QString::number(range[1]));
|
|
}
|
|
|
|
void ThresholdDialog::InitEdit()
|
|
{
|
|
QSignalBlocker blocker(_ui->comboBox_Type);
|
|
Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(_parentDataID);
|
|
if (parentData == nullptr)return;
|
|
Interface::FITKCFDPostThreshold* currentData = dynamic_cast<Interface::FITKCFDPostThreshold*>(_postDataManager->getDataByID(_currentDataID));
|
|
if (currentData == nullptr)return;
|
|
|
|
//设置名称
|
|
QString name = currentData->getDataObjectName();
|
|
_ui->lineEdit_Name->setText(name);
|
|
_ui->lineEdit_Name->setEnabled(false);
|
|
|
|
setDataToWidget(currentData);
|
|
}
|
|
|
|
bool ThresholdDialog::OKCreate()
|
|
{
|
|
QString name = _ui->lineEdit_Name->text();
|
|
if (_postDataManager->getDataByName(name)) {
|
|
QMessageBox box(QMessageBox::Warning, "", QString(tr("\"%1\" Name exists!")).arg(name), QMessageBox::Ok);
|
|
box.exec();
|
|
return false;
|
|
}
|
|
|
|
Interface::FITKCFDPostThreshold* streamLine = new Interface::FITKCFDPostThreshold(_parentDataID);
|
|
streamLine->setDataObjectName(name);
|
|
getDataFromWidget(streamLine);
|
|
_currentDataID = streamLine->getDataObjectID();
|
|
_postDataManager->appendDataObj(streamLine);
|
|
return true;
|
|
}
|
|
|
|
bool ThresholdDialog::OKEdit()
|
|
{
|
|
Interface::FITKCFDPostThreshold* streamLine = dynamic_cast<Interface::FITKCFDPostThreshold*>(_postDataManager->getDataByID(_currentDataID));
|
|
if (streamLine == nullptr)return false;
|
|
getDataFromWidget(streamLine);
|
|
return true;
|
|
}
|
|
|
|
void ThresholdDialog::getDataFromWidget(Interface::FITKCFDPostThreshold * data)
|
|
{
|
|
if (data == nullptr)return;
|
|
Interface::FITKPostFieldType fieldType = Interface::FITKPostFieldType::Post_None;
|
|
QString fieldName = "";
|
|
getCurrentField(fieldType, fieldName);
|
|
data->setValue(_ui->lineEdit_Lower->value(), _ui->lineEdit_Upper->value(), fieldType, fieldName);
|
|
}
|
|
|
|
void ThresholdDialog::setDataToWidget(Interface::FITKCFDPostThreshold* data)
|
|
{
|
|
if (data == nullptr)return;
|
|
Interface::FITKPostFieldType fieldType = Interface::FITKPostFieldType::Post_None;
|
|
QString fieldName = "";
|
|
double range[2] = { 0,0 };
|
|
data->getValue(range[0], range[1], fieldType, fieldName);
|
|
_ui->lineEdit_Lower->setText(QString::number(range[0]));
|
|
_ui->lineEdit_Upper->setText(QString::number(range[1]));
|
|
setCurrentField(fieldType, fieldName);
|
|
|
|
//设置阈值范围
|
|
Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(data->getCFDPostParentID());
|
|
if (parentData == nullptr)return;
|
|
parentData->getRange(range, fieldType, fieldName);
|
|
_ui->label_ValueRange->setText(QString("[%1,%2]").arg(range[0]).arg(range[1]));
|
|
}
|
|
|
|
void ThresholdDialog::getCurrentField(Interface::FITKPostFieldType & fieldType, QString & fieldName)
|
|
{
|
|
fieldType = _ui->comboBox_Type->currentData().value<Interface::FITKPostFieldType>();
|
|
fieldName = _ui->comboBox_Type->currentText();
|
|
}
|
|
|
|
void ThresholdDialog::setCurrentField(Interface::FITKPostFieldType fieldType, QString fieldName)
|
|
{
|
|
//设置场量
|
|
int vectorIndex = -1;
|
|
for (int i = 0; i < _ui->comboBox_Type->count(); i++) {
|
|
QString currentVector = _ui->comboBox_Type->itemText(i);
|
|
Interface::FITKPostFieldType currentType = _ui->comboBox_Type->itemData(i).value<Interface::FITKPostFieldType>();
|
|
if (currentVector == fieldName && currentType == fieldType) {
|
|
vectorIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
_ui->comboBox_Type->setCurrentIndex(vectorIndex);
|
|
}
|
|
}
|