#include "GlyphDialog.h" #include "ui_GlyphDialog.h" #include "OperatorsInterface/ParaWidgetInterfaceOperator.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" #include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostGlyph.h" #include Q_DECLARE_METATYPE(Interface::FITKPostFieldType); namespace GUI { GlyphDialog::GlyphDialog(int dataID, EventOper::ParaWidgetInterfaceOperator* oper, bool isCreate) : GUIDialogBase(oper,"GlyphDialog", FITKAPP->getGlobalData()->getMainWindow()), _isCreate(isCreate) { _ui = new Ui::GlyphDialog(); _ui->setupUi(this); if (isCreate) { _parentDataID = dataID; } else { _currentDataID = dataID; if (_postDataManager->getDataByID(_currentDataID)) { _parentDataID = _postDataManager->getDataByID(_currentDataID)->getCFDPostParentID(); } } init(); } GlyphDialog::~GlyphDialog() { if (_ui) { delete _ui; _ui = nullptr; } } void GlyphDialog::init() { Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(_parentDataID); if (parentData == nullptr)return; //添加矢量 int index = 0; QStringList pointDataArray = parentData->getPointDataArray(); for (QString point : pointDataArray) { Interface::FITKPostVariableType type = parentData->getVariableType(Interface::FITKPostFieldType::Post_Point, point); if (type == Interface::FITKPostVariableType::Post_Vector) { _ui->comboBox_Vector->addItem(QIcon("://icons/nodeValue.png"), point); _ui->comboBox_Vector->setItemData(index, QVariant::fromValue(Interface::FITKPostFieldType::Post_Point)); index++; } } QStringList cellDataArray = parentData->getCellDataArray(); for (QString cell : cellDataArray) { Interface::FITKPostVariableType type = parentData->getVariableType(Interface::FITKPostFieldType::Post_Cell, cell); if (type == Interface::FITKPostVariableType::Post_Vector) { _ui->comboBox_Vector->addItem(QIcon("://icons/cellValue.png"), cell); _ui->comboBox_Vector->setItemData(index, QVariant::fromValue(Interface::FITKPostFieldType::Post_Cell)); index++; } } if (_isCreate) { InitCreate(); setWindowTitle(tr("Create Glyph")); } else { InitEdit(); setWindowTitle(tr("Edit Glyph")); } } void GlyphDialog::showEvent(QShowEvent * event) { GUIDialogBase::showEvent(event); } void GlyphDialog::closeEvent(QCloseEvent * event) { GUIDialogBase::closeEvent(event); } void GlyphDialog::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 GlyphDialog::on_pushButton_Cancel_clicked() { this->close(); } void GlyphDialog::InitCreate() { Interface::FITKAbstractCFDPostData* parentData = _postDataManager->getDataByID(_parentDataID); if (parentData == nullptr)return; QString name = _postDataManager->checkName("Glyph-0"); _ui->lineEdit_Name->setText(name); int pointNum = parentData->getPointNumber(); _ui->spinBox_PointNum->setValue(pointNum); } void GlyphDialog::InitEdit() { if (_currentDataID <= 0)return; Interface::FITKAbstractCFDPostData* absCurData = _postDataManager->getDataByID(_currentDataID); Interface::FITKCFDPostGlyph* currentData = dynamic_cast(absCurData); if (currentData == nullptr)return; QString name = currentData->getDataObjectName(); _ui->lineEdit_Name->setText(name); setDataToWidget(currentData); _ui->lineEdit_Name->setEnabled(false); } bool GlyphDialog::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::FITKCFDPostGlyph* glyphData = new Interface::FITKCFDPostGlyph(_parentDataID); getDataFromWidget(glyphData); _currentDataID = glyphData->getDataObjectID(); glyphData->update(); _postDataManager->appendDataObj(glyphData); return true; } bool GlyphDialog::OKEdit() { Interface::FITKCFDPostGlyph* glyphData = dynamic_cast(_postDataManager->getDataByID(_currentDataID)); if (glyphData == nullptr)return false; getDataFromWidget(glyphData); glyphData->update(); return true; } void GlyphDialog::getDataFromWidget(Interface::FITKCFDPostGlyph * glyphData) { if (glyphData == nullptr)return; QString name = _ui->lineEdit_Name->text(); glyphData->setDataObjectName(name); QString vector = _ui->comboBox_Vector->currentText(); glyphData->setvectorName(vector); Interface::FITKPostFieldType vectorType = _ui->comboBox_Vector->currentData().value(); switch (vectorType){ case Interface::FITKPostFieldType::Post_Point:glyphData->setpointDataUsed(true); break; case Interface::FITKPostFieldType::Post_Cell:glyphData->setpointDataUsed(false); break; } //箭头精度 int tipResolution = _ui->spinBox_TipRes->value(); glyphData->settipResolution(tipResolution); //箭头半径 double tipRadius = _ui->lineEdit_TipRadius->text().toDouble(); glyphData->settipRadius(tipRadius); //箭头长度 double tipLength = _ui->lineEdit_TipLength->text().toDouble(); glyphData->settipLength(tipLength); //箭柄维度 int shaftResolution = _ui->spinBox_ShaftRes->value(); glyphData->setshaftResolution(shaftResolution); //箭柄半径 double shaftRadius = _ui->lineEdit_ShatfRadius->text().toDouble(); glyphData->setshaftRadius(shaftRadius); //缩放比例 double scaleFactor = _ui->lineEdit_ScaleFactor->text().toDouble(); glyphData->setscaleFactor(scaleFactor); //点的数量 int pointNum = _ui->spinBox_PointNum->value(); glyphData->setpointNum(pointNum); //最大采样点 int maxNumber = _ui->spinBox_MaxPoint->value(); glyphData->setmaxNumber(maxNumber); //比例模式 int scaleMode = _ui->comboBox_ScaleMode->currentIndex(); glyphData->setscaleMode(scaleMode); } void GlyphDialog::setDataToWidget(Interface::FITKCFDPostGlyph * glyphData) { if (glyphData == nullptr)return; QString name = glyphData->getDataObjectName(); _ui->lineEdit_Name->setText(name); //设置当前矢量 QString vector = glyphData->getvectorName(); Interface::FITKPostFieldType type; bool isPointDataUsed = glyphData->getpointDataUsed(); if (isPointDataUsed) type = Interface::FITKPostFieldType::Post_Point; else type = Interface::FITKPostFieldType::Post_Cell; int vectorIndex = -1; for (int i = 0; i < _ui->comboBox_Vector->count(); i++) { QString currentVector = _ui->comboBox_Vector->itemText(i); Interface::FITKPostFieldType currentType = _ui->comboBox_Vector->itemData(i).value(); if (currentVector == vector && currentType == type) { vectorIndex = i; break; } } _ui->comboBox_Vector->setCurrentIndex(vectorIndex); //箭头精度 int tipResolution = glyphData->gettipResolution(); _ui->spinBox_TipRes->setValue(tipResolution); //箭头半径 double tipRadius = glyphData->gettipRadius(); _ui->lineEdit_TipRadius->setValue(tipRadius); //箭头长度 double tipLength = glyphData->gettipLength(); _ui->lineEdit_TipLength->setValue(tipLength); //箭柄维度 int shaftResolution = glyphData->getshaftResolution(); _ui->spinBox_ShaftRes->setValue(shaftResolution); //箭柄半径 double shaftRadius = glyphData->getshaftRadius(); _ui->lineEdit_ShatfRadius->setValue(shaftRadius); //缩放比例 double scaleFactor = glyphData->getscaleFactor(); _ui->lineEdit_ScaleFactor->setValue(scaleFactor); //点的数量 int pointNum = glyphData->getpointNum(); _ui->spinBox_PointNum->setValue(pointNum); //最大采样点 int maxNumber = glyphData->getmaxNumber(); _ui->spinBox_MaxPoint->setValue(maxNumber); //比例模式 int scaleMode = glyphData->getscaleMode(); _ui->comboBox_ScaleMode->setCurrentIndex(scaleMode); } }