aboutsummaryrefslogtreecommitdiff
path: root/tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp
diff options
context:
space:
mode:
authorAnton Novoselov <[email protected]>2017-08-01 12:53:38 +0300
committerAnton Novoselov <[email protected]>2017-08-01 12:53:38 +0300
commit236f03c0b9a4982328ed1201978f7f69d192d9b2 (patch)
treee486f2fa39dba203563895541e92c60ed3e25759 /tools/ArtistTools/source/BlastPlugin/Window/FractureVoronoiSettingsPanel.cpp
parentAdded screens to welcome page (diff)
downloadblast-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.cpp340
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);
}