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/FractureVoronoiSettingsPanel.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/FractureVoronoiSettingsPanel.cpp')
| -rw-r--r-- | tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp | 340 |
1 files changed, 88 insertions, 252 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp b/tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp index 2142f80..7f18b8d 100644 --- a/tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp +++ b/tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp @@ -6,14 +6,16 @@ #include <QtWidgets/QMessageBox> #include <QtCore/QFileInfo> #include "AppMainWindow.h" -#include "ProjectParams.h" #include "SimpleScene.h" #include "SampleManager.h" +#include "FractureGeneralPanel.h" +#include "BlastFamily.h" FractureVoronoiSettingsPanel::FractureVoronoiSettingsPanel(QWidget *parent) : QWidget(parent), ui(new Ui::FractureVoronoiSettingsPanel), - _updateData(true) + _updateData(true), + _generalPanel(nullptr) { ui->setupUi(this); @@ -28,24 +30,16 @@ FractureVoronoiSettingsPanel::~FractureVoronoiSettingsPanel() void FractureVoronoiSettingsPanel::updateValues() { _updateData = false; - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - - ui->spinBoxNumberOfSites->setValue(voronoi.numSites); - ui->comboBoxSiteGeneration->setCurrentIndex(voronoi.siteGeneration); - ui->spinBoxGridSize->setValue(voronoi.gridSize); - ui->spinBoxGridScale->setValue(voronoi.gridScale); - ui->spinBoxAmplitude->setValue(voronoi.amplitude); - ui->spinBoxFrequency->setValue(voronoi.frequency); + BPPVoronoi* voronoi = _getBPPVoronoi(); - _updatePaintMaskComboBox(); + ui->comboBoxSiteGeneration->setCurrentIndex(voronoi->siteGeneration); + _showCurrentSiteGenerationUI(); + ui->spinBoxNumberOfSites->setValue(voronoi->numSites); - _updateMeshCutterComboBox(); - ui->checkBoxFractureInsideCutter->setChecked(voronoi.fractureInsideCutter); - ui->checkBoxFractureOutsideCutter->setChecked(voronoi.fractureOutsideCutter); + ui->spinBoxNumberOfClusters->setValue(voronoi->numberOfClusters); + ui->spinBoxSitesPerCluster->setValue(voronoi->sitesPerCluster); + ui->spinBoxClusterRadius->setValue(voronoi->clusterRadius); - ui->spinBoxTextureSites->setValue(voronoi.numTextureSites); - - _updateTextureListWidget(); _updateData = true; } @@ -64,291 +58,133 @@ void FractureVoronoiSettingsPanel::on_checkBoxCutterMesh_stateChanged(int arg1) } -void FractureVoronoiSettingsPanel::on_spinBoxNumberOfSites_valueChanged(int arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.numSites = arg1; -} - void FractureVoronoiSettingsPanel::on_comboBoxSiteGeneration_currentIndexChanged(int index) { if (!_updateData) return; - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.siteGeneration = index; -} - -void FractureVoronoiSettingsPanel::on_spinBoxGridSize_valueChanged(int arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.gridSize = arg1; -} - -void FractureVoronoiSettingsPanel::on_spinBoxGridScale_valueChanged(double arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.gridScale = arg1; -} - -void FractureVoronoiSettingsPanel::on_spinBoxAmplitude_valueChanged(double arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.amplitude = arg1; + BPPVoronoi* voronoi = _getBPPVoronoi(); + voronoi->siteGeneration = index; + _showCurrentSiteGenerationUI(); } -void FractureVoronoiSettingsPanel::on_spinBoxFrequency_valueChanged(int arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.frequency = arg1; -} - -void FractureVoronoiSettingsPanel::on_comboBoxPaintMasks_currentIndexChanged(int index) +void FractureVoronoiSettingsPanel::on_spinBoxNumberOfSites_valueChanged(int arg1) { if (!_updateData) return; - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.activePaintMask = index; -} - -void FractureVoronoiSettingsPanel::on_btnAddPaintMasks_clicked() -{ - bool ok = false; - QString name = QInputDialog::getText(this, - tr("Blast Tool"), - tr("Please input name for new paint mask:"), - QLineEdit::Normal, - "", - &ok); - bool nameExist = BlastProject::ins().isPaintMaskNameExist(name.toUtf8().data()); - if (ok && !name.isEmpty() && !nameExist) - { - BlastProject::ins().addPaintMasks(name.toUtf8().data()); - _updatePaintMaskComboBox(); - ui->comboBoxPaintMasks->setCurrentIndex(ui->comboBoxPaintMasks->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 paint mask!"); - } -} - -void FractureVoronoiSettingsPanel::on_btnRemovePaintMasks_clicked() -{ - if (ui->comboBoxPaintMasks->currentIndex() > -1) - { - BlastProject::ins().removePaintMasks(ui->comboBoxPaintMasks->currentText().toUtf8().data()); - _updatePaintMaskComboBox(); - } + BPPVoronoi* voronoi = _getBPPVoronoi(); + voronoi->numSites = arg1; } -void FractureVoronoiSettingsPanel::on_comboBoxMeshCutter_currentIndexChanged(int index) +void FractureVoronoiSettingsPanel::on_spinBoxNumberOfClusters_valueChanged(int arg1) { if (!_updateData) return; - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.activeMeshCutter = index; -} - -void FractureVoronoiSettingsPanel::on_btnAddMeshCutter_clicked() -{ - bool ok = false; - QString name = QInputDialog::getText(this, - tr("Blast Tool"), - tr("Please input name for new mesh cutter:"), - QLineEdit::Normal, - "", - &ok); - bool nameExist = BlastProject::ins().isMeshCutterNameExist(name.toUtf8().data()); - if (ok && !name.isEmpty() && !nameExist) - { - BlastProject::ins().addMeshCutter(name.toUtf8().data()); - _updateMeshCutterComboBox(); - ui->comboBoxMeshCutter->setCurrentIndex(ui->comboBoxMeshCutter->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 cutter mesh!"); - } -} - -void FractureVoronoiSettingsPanel::on_btnRemoveMeshCutter_clicked() -{ - if (ui->comboBoxMeshCutter->currentIndex() > -1) - { - BlastProject::ins().removeMeshCutter(ui->comboBoxMeshCutter->currentText().toUtf8().data()); - _updateMeshCutterComboBox(); - } -} - -void FractureVoronoiSettingsPanel::on_checkBoxFractureInsideCutter_stateChanged(int arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.fractureInsideCutter = (arg1 != 0 ? true : false); + BPPVoronoi* voronoi = _getBPPVoronoi(); + voronoi->numberOfClusters = arg1; } -void FractureVoronoiSettingsPanel::on_checkBoxFractureOutsideCutter_stateChanged(int arg1) +void FractureVoronoiSettingsPanel::on_spinBoxSitesPerCluster_valueChanged(int arg1) { - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.fractureOutsideCutter = (arg1 != 0 ? true : false); -} - -void FractureVoronoiSettingsPanel::on_btnAddTexture_clicked() -{ - QString texName = AppMainWindow::Inst().OpenTextureFile(); - - if (texName.isEmpty()) + if (!_updateData) return; - QFileInfo fileInfo(texName); - QByteArray ba = fileInfo.absoluteFilePath().toLocal8Bit(); - const char* filePath = (const char*)(ba); - - if (!BlastProject::ins().isVoronoiTextureNameExist(texName.toUtf8().data())) - { - BlastProject::ins().addVoronoiTexture(filePath); - _updateTextureListWidget(); - ui->listWidgetTexture->setCurrentRow(ui->listWidgetTexture->count() - 1); - } - else - { - QMessageBox::warning(this, "Blast Tool", "The texture you selected is already exist!"); - } -} - -void FractureVoronoiSettingsPanel::on_btnReloadTexture_clicked() -{ - -} - -void FractureVoronoiSettingsPanel::on_btnRemoveTexture_clicked() -{ - if (ui->listWidgetTexture->currentRow() != -1) - { - QListWidgetItem *item = ui->listWidgetTexture->currentItem(); - QString texture = _getTexturePathByName(item->text()); - QByteArray ba = texture.toLocal8Bit(); - BlastProject::ins().removeVoronoiTexture(ba.data()); - _updateTextureListWidget(); - } -} - -void FractureVoronoiSettingsPanel::on_spinBoxTextureSites_valueChanged(int arg1) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - voronoi.numTextureSites = arg1; -} - -void FractureVoronoiSettingsPanel::on_listWidgetTexture_itemSelectionChanged() -{ - + BPPVoronoi* voronoi = _getBPPVoronoi(); + voronoi->sitesPerCluster = arg1; } -void FractureVoronoiSettingsPanel::on_btnTextureMap_clicked() +void FractureVoronoiSettingsPanel::on_spinBoxClusterRadius_valueChanged(double arg1) { + if (!_updateData) + return; + BPPVoronoi* voronoi = _getBPPVoronoi(); + voronoi->clusterRadius = arg1; } void FractureVoronoiSettingsPanel::on_btnApplyFracture_clicked() { - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; + BPPVoronoi* voronoi = _getBPPVoronoi(); VoronoiFractureExecutor executor; - executor.setCellsCount(voronoi.numSites); + executor.setBPPVoronoi(voronoi); - bool multiplyChunksSelected = false; - std::map<BlastAsset*, std::vector<uint32_t>> selectedChunks = SampleManager::ins()->getSelectedChunks(); - std::map<BlastAsset*, std::vector<uint32_t>>::iterator itrAssetSelectedChunks = selectedChunks.begin(); - - if (selectedChunks.size() > 1) - { - multiplyChunksSelected = true; - } - else if (selectedChunks.size() == 1 && itrAssetSelectedChunks->second.size() > 1) + SampleManager* pSampleManager = SampleManager::ins(); + std::map<BlastAsset*, std::vector<BlastFamily*>>& AssetFamiliesMap = pSampleManager->getAssetFamiliesMap(); + std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap(); + BPParams& projectParams = BlastProject::ins().getParams(); + BPPGraphicsMaterialArray& theArray = projectParams.graphicsMaterials; + BPPFractureGeneral& fractureGeneral = projectParams.fracture.general; + int32_t nMaterialIndex = fractureGeneral.applyMaterial; + std::string materialName = ""; + RenderMaterial* pRenderMaterial = nullptr; + if (nMaterialIndex > 0) { - multiplyChunksSelected = true; - } - else if ((selectedChunks.size() == 1 && itrAssetSelectedChunks->second.size() == 0) || (selectedChunks.size() == 0)) - { - return; + BPPGraphicsMaterial& item = theArray.buf[nMaterialIndex - 1]; + materialName = item.name.buf; + pRenderMaterial = pSampleManager->getRenderMaterial(materialName); } - if (multiplyChunksSelected) + std::map<BlastAsset*, std::vector<uint32_t>> selectedChunks = SampleManager::ins()->getSelectedChunks(); + std::map<BlastAsset*, std::vector<uint32_t>>::iterator itrAssetSelectedChunks = selectedChunks.begin(); + for (; itrAssetSelectedChunks != selectedChunks.end(); itrAssetSelectedChunks++) { - QMessageBox::warning(NULL, "Blast Tool", "Now, this tool can only fracture one chunk!"); - return; - } + if (itrAssetSelectedChunks->second.size() == 0) + { + continue; + } - executor.setSourceAsset(itrAssetSelectedChunks->first); - executor.setTargetChunk(itrAssetSelectedChunks->second.at(0)); - executor.execute(); -} + if (pRenderMaterial != nullptr) + { + BlastAsset* pBlastAsset = itrAssetSelectedChunks->first; + std::vector<BlastFamily*> families = AssetFamiliesMap[pBlastAsset]; + int familySize = families.size(); + for (int fs = 0; fs < familySize; fs++) + { + BlastFamily* pBlastFamily = families[fs]; + pBlastFamily->setMaterial(pRenderMaterial, false); -QString FractureVoronoiSettingsPanel::_getTexturePathByName(const QString& name) -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - BPPStringArray& textureArray = voronoi.textureSites; + AssetList::ModelAsset modelAsset = AssetDescMap[pBlastAsset]; + int assetID = BlastProject::ins().getAssetIDByName(modelAsset.name.c_str()); + BPPAssetInstance* instance = BlastProject::ins().getAssetInstance(assetID, fs); + copy(instance->inMaterial, materialName.c_str()); + } + } - int count = textureArray.arraySizes[0]; - for (int i = 0; i < count; ++i) - { - QFileInfo fileInfo(textureArray.buf[i].buf); - if (fileInfo.baseName() == name) - return textureArray.buf[i].buf; + executor.setSourceAsset(itrAssetSelectedChunks->first); + executor.setTargetChunks(itrAssetSelectedChunks->second); + executor.execute(); } - - return ""; } -void FractureVoronoiSettingsPanel::_updatePaintMaskComboBox() +BPPVoronoi* FractureVoronoiSettingsPanel::_getBPPVoronoi() { - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - - ui->comboBoxPaintMasks->clear(); - QStringList items; - for (int i = 0; i < voronoi.paintMasks.arraySizes[0]; ++i) + BPPVoronoi* voronoi = nullptr; + FracturePreset* preset = _generalPanel->getCurrentFracturePreset(); + if (nullptr != preset) { - items.append(voronoi.paintMasks.buf[i].buf); + voronoi = &(preset->fracture.voronoi); } - ui->comboBoxPaintMasks->addItems(items); - ui->comboBoxPaintMasks->setCurrentIndex(voronoi.activePaintMask); -} - -void FractureVoronoiSettingsPanel::_updateMeshCutterComboBox() -{ - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - - ui->comboBoxMeshCutter->clear(); - QStringList items; - for (int i = 0; i < voronoi.meshCutters.arraySizes[0]; ++i) + else { - items.append(voronoi.meshCutters.buf[i].buf); + voronoi = &(BlastProject::ins().getParams().fracture.voronoi); } - ui->comboBoxMeshCutter->addItems(items); - ui->comboBoxMeshCutter->setCurrentIndex(voronoi.activeMeshCutter); + return voronoi; } -void FractureVoronoiSettingsPanel::_updateTextureListWidget() +void FractureVoronoiSettingsPanel::_showCurrentSiteGenerationUI() { - BPPVoronoi& voronoi = BlastProject::ins().getParams().fracture.voronoi; - - ui->listWidgetTexture->clear(); - QStringList items; - for (int i = 0; i < voronoi.textureSites.arraySizes[0]; ++i) + ui->widgetUniform->hide(); + ui->widgetClusters->hide(); + BPPVoronoi* voronoi = _getBPPVoronoi(); + switch(voronoi->siteGeneration) { - QFileInfo fileInfo(voronoi.textureSites.buf[i].buf); - QByteArray ba = fileInfo.baseName().toLocal8Bit(); - const char* texture = (const char*)(ba); - items.append(texture); + case 0: + ui->widgetUniform->show(); + break; + case 1: + ui->widgetClusters->show(); + break; } - ui->listWidgetTexture->addItems(items); } |