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.

276 lines
9.4 KiB
C++

#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 <QMessageBox>
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<Interface::FITKCFDPostGlyph*>(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<Interface::FITKCFDPostGlyph*>(_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<Interface::FITKPostFieldType>();
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<Interface::FITKPostFieldType>();
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);
}
}