diff options
| author | Anton Novoselov <[email protected]> | 2017-08-01 12:53:38 +0300 |
|---|---|---|
| committer | Anton Novoselov <[email protected]> | 2017-08-01 12:53:38 +0300 |
| commit | 236f03c0b9a4982328ed1201978f7f69d192d9b2 (patch) | |
| tree | e486f2fa39dba203563895541e92c60ed3e25759 /tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp | |
| parent | Added screens to welcome page (diff) | |
| download | blast-236f03c0b9a4982328ed1201978f7f69d192d9b2.tar.xz blast-236f03c0b9a4982328ed1201978f7f69d192d9b2.zip | |
Blast 1.1 release (windows / linux)
see docs/release_notes.txt for details
Diffstat (limited to 'tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp')
| -rw-r--r-- | tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp | 252 |
1 files changed, 143 insertions, 109 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp b/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp index 88915f1..aa6af69 100644 --- a/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp +++ b/tools/ArtistTools/source/BlastPlugin/Window/GeneralPanel.cpp @@ -3,10 +3,12 @@ #include <QtWidgets/QInputDialog> #include <QtWidgets/QLineEdit> #include <QtWidgets/QMessageBox> +#include "SampleManager.h" GeneralPanel::GeneralPanel(QWidget *parent) : QWidget(parent), - ui(new Ui::GeneralPanel) + ui(new Ui::GeneralPanel), + _updateData(true) { ui->setupUi(this); } @@ -18,48 +20,71 @@ GeneralPanel::~GeneralPanel() void GeneralPanel::updateValues() { - std::vector<StressSolverUserPreset> presets = BlastProject::ins().getUserPresets(); + _updateData = false; ui->comboBoxUserPreset->clear(); + QStringList userPresets; + userPresets.append("Default"); + std::vector<StressSolverUserPreset> presets = BlastProject::ins().getUserPresets(); 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); } + ui->comboBoxUserPreset->addItems(userPresets); - std::vector<BPPAsset*> selectedAssets = BlastProject::ins().getSelectedBlastAssets(); - if (selectedAssets.size() > 0) + if (_selectedAssets.size() > 0) { - ui->comboBoxUserPreset->setCurrentText(selectedAssets[0]->activePreset.buf); + if (nullptr == _selectedAssets[0]->activeUserPreset.buf + || 0 == strlen(_selectedAssets[0]->activeUserPreset.buf) + || !BlastProject::ins().isUserPresetNameExist(_selectedAssets[0]->activeUserPreset.buf)) + { + ui->comboBoxUserPreset->setCurrentIndex(0); + } + else + { + ui->comboBoxUserPreset->setCurrentText(_selectedAssets[0]->activeUserPreset.buf); + } _updateStressSolverUIs(); } else { - ui->comboBoxUserPreset->setCurrentIndex(-1); + ui->comboBoxUserPreset->setCurrentIndex(0); + } + _updateData = true; +} + +void GeneralPanel::dataSelected(std::vector<BlastNode*> selections) +{ + _selectedAssets.clear(); + for (BlastNode* node : selections) + { + if (eAsset == node->getType()) + { + BPPAsset* asset = static_cast<BPPAsset*>(node->getData()); + _selectedAssets.push_back(asset); + } } + + updateValues(); } void GeneralPanel::on_comboBoxUserPreset_currentIndexChanged(int index) { - std::vector<BPPAsset*> assets = BlastProject::ins().getSelectedBlastAssets(); - for (size_t i = 0; i < assets.size(); ++i) + if (!_updateData) + return; + + for (size_t i = 0; i < _selectedAssets.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); - } + copy(_selectedAssets[i]->activeUserPreset, tem.data()); } _updateStressSolverUIs(); + _updateStressSolverToBlast(); } void GeneralPanel::on_btnAddUserPreset_clicked() @@ -90,7 +115,7 @@ void GeneralPanel::on_btnAddUserPreset_clicked() void GeneralPanel::on_btnModifyUserPreset_clicked() { - if (ui->comboBoxUserPreset->currentIndex() == -1) + if (ui->comboBoxUserPreset->currentIndex() < 1) { QMessageBox::warning(this, "Blast Tool", "You should select an user preset!"); return; @@ -109,12 +134,14 @@ void GeneralPanel::on_btnModifyUserPreset_clicked() 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); + int curIndex = ui->comboBoxUserPreset->currentIndex() - 1; + if (curIndex >= 0) + { + std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets(); + presets[curIndex].name = newName.toUtf8().data(); + updateValues(); + ui->comboBoxUserPreset->setCurrentIndex(curIndex + 1); + } } else if (ok && nameExist) { @@ -122,130 +149,133 @@ void GeneralPanel::on_btnModifyUserPreset_clicked() } else if (ok && newName.isEmpty()) { - QMessageBox::warning(this, "Blast Tool", "You need input a name for the selected graphics material!"); + QMessageBox::warning(this, "Blast Tool", "You need input a name for the selected preset!"); } } 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) +void GeneralPanel::on_spinBoxMaterialHardness_valueChanged(double arg1) { - BPPStressSolver* stressSolver = _getCurrentStressSolver(); + if (!_updateData) + return; + + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); if (stressSolver) { - stressSolver->solverMode = index; + stressSolver->hardness = arg1; + } + else + { + for (BPPAsset* asset : _selectedAssets) + { + asset->stressSolver.hardness = arg1; + } } + + _updateStressSolverToBlast(); } void GeneralPanel::on_spinBoxLinearFactor_valueChanged(double arg1) { - BPPStressSolver* stressSolver = _getCurrentStressSolver(); + if (!_updateData) + return; + + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); if (stressSolver) { stressSolver->linearFactor = arg1; } - + else + { + for (BPPAsset* asset : _selectedAssets) + { + asset->stressSolver.linearFactor = arg1; + } + } + + _updateStressSolverToBlast(); } void GeneralPanel::on_spinBoxAngularFactor_valueChanged(double arg1) { - BPPStressSolver* stressSolver = _getCurrentStressSolver(); + if (!_updateData) + return; + + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); if (stressSolver) { stressSolver->angularFactor = arg1; } -} - -void GeneralPanel::on_spinBoxMeanError_valueChanged(double arg1) -{ - BPPStressSolver* stressSolver = _getCurrentStressSolver(); - - if (stressSolver) + else { - stressSolver->meanError = arg1; + for (BPPAsset* asset : _selectedAssets) + { + asset->stressSolver.angularFactor = arg1; + } } -} -void GeneralPanel::on_spinBoxVarianceError_valueChanged(double arg1) -{ - BPPStressSolver* stressSolver = _getCurrentStressSolver(); - - if (stressSolver) - { - stressSolver->varianceError = arg1; - } + _updateStressSolverToBlast(); } -void GeneralPanel::on_spinBoxBondsPerFrame_valueChanged(int arg1) +void GeneralPanel::on_spinBoxBondIterations_valueChanged(int arg1) { - BPPStressSolver* stressSolver = _getCurrentStressSolver(); + if (!_updateData) + return; + + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); if (stressSolver) { - stressSolver->bondsPerFrame = arg1; + stressSolver->bondIterationsPerFrame = arg1; } -} - -void GeneralPanel::on_spinBoxBondsIterations_valueChanged(int arg1) -{ - BPPStressSolver* stressSolver = _getCurrentStressSolver(); - - if (stressSolver) + else { - stressSolver->bondsIterations = arg1; + for (BPPAsset* asset : _selectedAssets) + { + asset->stressSolver.bondIterationsPerFrame = arg1; + } } + + _updateStressSolverToBlast(); } -BPPStressSolver* GeneralPanel::_getCurrentStressSolver() +void GeneralPanel::on_spinBoxGraphReductionLevel_valueChanged(int arg1) { - int currentUserPreset = ui->comboBoxUserPreset->currentIndex(); + if (!_updateData) + return; - if (-1 != currentUserPreset) + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); + + if (stressSolver) { - std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets(); - return &(presets[currentUserPreset].stressSolver); + stressSolver->graphReductionLevel = arg1; } else { - std::vector<BPPAsset*> assets = BlastProject::ins().getSelectedBlastAssets(); - - if (assets.size() > 0) + for (BPPAsset* asset : _selectedAssets) { - return &(assets[0]->stressSolver); + asset->stressSolver.graphReductionLevel = arg1; } } - return nullptr; + _updateStressSolverToBlast(); } -BPPStressSolver* GeneralPanel::_getUserPreset(const char* name) +BPPStressSolver* GeneralPanel::_getCurrentUserPresetStressSolver() { - std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets(); + int currentUserPreset = ui->comboBoxUserPreset->currentIndex(); - for (size_t i = 0; i < presets.size(); ++i) + if (0 < currentUserPreset) { - if (presets[i].name == name) - return &(presets[i].stressSolver); + std::vector<StressSolverUserPreset>& presets = BlastProject::ins().getUserPresets(); + return &(presets[currentUserPreset - 1].stressSolver); } return nullptr; @@ -253,29 +283,33 @@ BPPStressSolver* GeneralPanel::_getUserPreset(const char* name) void GeneralPanel::_updateStressSolverUIs() { - BPPStressSolver* stressSolver = _getCurrentStressSolver(); - if (stressSolver != nullptr) + BPPStressSolver noStressSolver; + init(noStressSolver); + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); + 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); + if (0 < _selectedAssets.size()) + { + copy(noStressSolver, _selectedAssets[0]->stressSolver); + } + stressSolver = &noStressSolver; } - else + + _updateData = false; + ui->spinBoxMaterialHardness->setValue(stressSolver->hardness); + ui->spinBoxLinearFactor->setValue(stressSolver->linearFactor); + ui->spinBoxAngularFactor->setValue(stressSolver->angularFactor); + ui->spinBoxBondIterations->setValue(stressSolver->bondIterationsPerFrame); + ui->spinBoxGraphReductionLevel->setValue(stressSolver->graphReductionLevel); + _updateData = true; +} + +void GeneralPanel::_updateStressSolverToBlast() +{ + BPPStressSolver* stressSolver = _getCurrentUserPresetStressSolver(); + + for (BPPAsset* asset : _selectedAssets) { - 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); + SampleManager::ins()->updateAssetFamilyStressSolver(asset, nullptr != stressSolver? *stressSolver : asset->stressSolver); } - } |