aboutsummaryrefslogtreecommitdiff
path: root/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp
diff options
context:
space:
mode:
authorBryan Galdrikian <[email protected]>2017-02-21 12:07:59 -0800
committerBryan Galdrikian <[email protected]>2017-02-21 12:07:59 -0800
commit446ce137c6823ba9eff273bdafdaf266287c7c98 (patch)
treed20aab3e2ed08d7b3ca71c2f40db6a93ea00c459 /NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp
downloadblast-1.0.0-beta.tar.xz
blast-1.0.0-beta.zip
first commitv1.0.0-beta
Diffstat (limited to 'NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp')
-rw-r--r--NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp281
1 files changed, 281 insertions, 0 deletions
diff --git a/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp b/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp
new file mode 100644
index 0000000..88915f1
--- /dev/null
+++ b/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp
@@ -0,0 +1,281 @@
+#include "GeneralPanel.h"
+#include "ui_GeneralPanel.h"
+#include <QtWidgets/QInputDialog>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QMessageBox>
+
+GeneralPanel::GeneralPanel(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::GeneralPanel)
+{
+ ui->setupUi(this);
+}
+
+GeneralPanel::~GeneralPanel()
+{
+ delete ui;
+}
+
+void GeneralPanel::updateValues()
+{
+ std::vector<StressSolverUserPreset> presets = BlastProject::ins().getUserPresets();
+ ui->comboBoxUserPreset->clear();
+ int countUserPresets = (int)presets.size();
+ if (countUserPresets > 0)
+ {
+ QStringList userPresets;
+ for (int i = 0; i < countUserPresets; ++i)
+ {
+ userPresets.append(presets[i].name.c_str());
+ }
+ ui->comboBoxUserPreset->addItems(userPresets);
+ }
+
+ std::vector<BPPAsset*> selectedAssets = BlastProject::ins().getSelectedBlastAssets();
+ if (selectedAssets.size() > 0)
+ {
+ ui->comboBoxUserPreset->setCurrentText(selectedAssets[0]->activePreset.buf);
+
+ _updateStressSolverUIs();
+ }
+ else
+ {
+ ui->comboBoxUserPreset->setCurrentIndex(-1);
+
+ }
+}
+
+void GeneralPanel::on_comboBoxUserPreset_currentIndexChanged(int index)
+{
+ std::vector<BPPAsset*> assets = BlastProject::ins().getSelectedBlastAssets();
+ for (size_t i = 0; i < assets.size(); ++i)
+ {
+ QByteArray tem = ui->comboBoxUserPreset->currentText().toUtf8();
+ copy(assets[i]->activePreset, tem.data());
+
+ BPPStressSolver* preset = _getUserPreset(tem.data());
+ if (preset)
+ {
+ copy(assets[i]->stressSolver, *preset);
+ }
+ }
+ _updateStressSolverUIs();
+}
+
+void GeneralPanel::on_btnAddUserPreset_clicked()
+{
+ bool ok = false;
+ QString name = QInputDialog::getText(this,
+ tr("Blast Tool"),
+ tr("Please input name for new User preset:"),
+ QLineEdit::Normal,
+ "",
+ &ok);
+ bool nameExist = BlastProject::ins().isUserPresetNameExist(name.toUtf8().data());
+ if (ok && !name.isEmpty() && !nameExist)
+ {
+ BlastProject::ins().addUserPreset(name.toUtf8().data());
+ updateValues();
+ ui->comboBoxUserPreset->setCurrentIndex(ui->comboBoxUserPreset->count() - 1);
+ }
+ else if (ok && nameExist)
+ {
+ QMessageBox::warning(this, "Blast Tool", "The name you input is already exist!");
+ }
+ else if (ok && name.isEmpty())
+ {
+ QMessageBox::warning(this, "Blast Tool", "You need input a name for the new preset!");
+ }
+}
+
+void GeneralPanel::on_btnModifyUserPreset_clicked()
+{
+ if (ui->comboBoxUserPreset->currentIndex() == -1)
+ {
+ QMessageBox::warning(this, "Blast Tool", "You should select an user preset!");
+ return;
+ }
+
+ QByteArray tmp = ui->comboBoxUserPreset->currentText().toUtf8();
+ const char* oldName = tmp.data();
+
+ bool ok = false;
+ QString newName = QInputDialog::getText(this,
+ tr("Blast Tool"),
+ tr("Please input new name for the selected user preset:"),
+ QLineEdit::Normal,
+ oldName,
+ &ok);
+ bool nameExist = BlastProject::ins().isUserPresetNameExist(newName.toUtf8().data());
+ if (ok && !newName.isEmpty() && !nameExist)
+ {
+ int curIndex = ui->comboBoxUserPreset->currentIndex();
+
+ std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets();
+ presets[curIndex].name = newName.toUtf8().data();
+ updateValues();
+ ui->comboBoxUserPreset->setCurrentIndex(curIndex);
+ }
+ else if (ok && nameExist)
+ {
+ QMessageBox::warning(this, "Blast Tool", "The name you input is already exist!");
+ }
+ else if (ok && newName.isEmpty())
+ {
+ QMessageBox::warning(this, "Blast Tool", "You need input a name for the selected graphics material!");
+ }
+}
+
+void GeneralPanel::on_btnSaveUserPreset_clicked()
+{
+ int currentUserPreset = ui->comboBoxUserPreset->currentIndex();
+ if (-1 != currentUserPreset)
+ {
+ std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets();
+ BPPStressSolver& stressSolver = presets[currentUserPreset].stressSolver;
+ stressSolver.solverMode = ui->comboBoxSolverMode->currentIndex();
+ stressSolver.linearFactor = ui->spinBoxLinearFactor->value();
+ stressSolver.angularFactor = ui->spinBoxAngularFactor->value();
+ stressSolver.meanError = ui->spinBoxMeanError->value();
+ stressSolver.varianceError = ui->spinBoxVarianceError->value();
+ stressSolver.bondsPerFrame = ui->spinBoxBondsPerFrame->value();
+ stressSolver.bondsIterations = ui->spinBoxBondsIterations->value();
+ }
+
+ BlastProject::ins().saveUserPreset();
+}
+
+void GeneralPanel::on_comboBoxSolverMode_currentIndexChanged(int index)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->solverMode = index;
+ }
+}
+
+void GeneralPanel::on_spinBoxLinearFactor_valueChanged(double arg1)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->linearFactor = arg1;
+ }
+
+}
+
+void GeneralPanel::on_spinBoxAngularFactor_valueChanged(double arg1)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->angularFactor = arg1;
+ }
+}
+
+void GeneralPanel::on_spinBoxMeanError_valueChanged(double arg1)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->meanError = arg1;
+ }
+}
+
+void GeneralPanel::on_spinBoxVarianceError_valueChanged(double arg1)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->varianceError = arg1;
+ }
+}
+
+void GeneralPanel::on_spinBoxBondsPerFrame_valueChanged(int arg1)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->bondsPerFrame = arg1;
+ }
+}
+
+void GeneralPanel::on_spinBoxBondsIterations_valueChanged(int arg1)
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+
+ if (stressSolver)
+ {
+ stressSolver->bondsIterations = arg1;
+ }
+}
+
+BPPStressSolver* GeneralPanel::_getCurrentStressSolver()
+{
+ int currentUserPreset = ui->comboBoxUserPreset->currentIndex();
+
+ if (-1 != currentUserPreset)
+ {
+ std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets();
+ return &(presets[currentUserPreset].stressSolver);
+ }
+ else
+ {
+ std::vector<BPPAsset*> assets = BlastProject::ins().getSelectedBlastAssets();
+
+ if (assets.size() > 0)
+ {
+ return &(assets[0]->stressSolver);
+ }
+ }
+
+ return nullptr;
+}
+
+BPPStressSolver* GeneralPanel::_getUserPreset(const char* name)
+{
+ std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets();
+
+ for (size_t i = 0; i < presets.size(); ++i)
+ {
+ if (presets[i].name == name)
+ return &(presets[i].stressSolver);
+ }
+
+ return nullptr;
+}
+
+void GeneralPanel::_updateStressSolverUIs()
+{
+ BPPStressSolver* stressSolver = _getCurrentStressSolver();
+ if (stressSolver != nullptr)
+ {
+ ui->comboBoxSolverMode->setCurrentIndex(stressSolver->solverMode);
+ ui->spinBoxLinearFactor->setValue(stressSolver->linearFactor);
+ ui->spinBoxAngularFactor->setValue(stressSolver->angularFactor);
+ ui->spinBoxMeanError->setValue(stressSolver->meanError);
+ ui->spinBoxVarianceError->setValue(stressSolver->varianceError);
+ ui->spinBoxBondsPerFrame->setValue(stressSolver->bondsPerFrame);
+ ui->spinBoxBondsIterations->setValue(stressSolver->bondsIterations);
+ }
+ else
+ {
+ BPPStressSolver noStressSolver;
+ init(noStressSolver);
+
+ ui->comboBoxSolverMode->setCurrentIndex(noStressSolver.solverMode);
+ ui->spinBoxLinearFactor->setValue(noStressSolver.linearFactor);
+ ui->spinBoxAngularFactor->setValue(noStressSolver.angularFactor);
+ ui->spinBoxMeanError->setValue(noStressSolver.meanError);
+ ui->spinBoxVarianceError->setValue(noStressSolver.varianceError);
+ ui->spinBoxBondsPerFrame->setValue(noStressSolver.bondsPerFrame);
+ ui->spinBoxBondsIterations->setValue(noStressSolver.bondsIterations);
+ }
+
+}