diff --git a/GUI/Model/FromCore/ItemizeSample.cpp b/GUI/Model/FromCore/ItemizeSample.cpp index c9cb63d14e56da2087cad39a38f44d61cf9280c8..201658ff1734a26968e95f79c5783297e790a09c 100644 --- a/GUI/Model/FromCore/ItemizeSample.cpp +++ b/GUI/Model/FromCore/ItemizeSample.cpp @@ -667,6 +667,9 @@ SampleItem* itemizeSample(const MultiLayer& sample, const QString& nodeName) } } + // append standard materials to the example-specific ones + result->addStandardMaterials(); + return result; } diff --git a/GUI/Model/Sample/CoreAndShellItem.cpp b/GUI/Model/Sample/CoreAndShellItem.cpp index dbd512cd702d509f979f435d080e566ce139315e..74053181a0ef89432e9b7731e2ffff3bcb090ceb 100644 --- a/GUI/Model/Sample/CoreAndShellItem.cpp +++ b/GUI/Model/Sample/CoreAndShellItem.cpp @@ -157,7 +157,7 @@ ParticleItem* CoreAndShellItem::coreItem() const ParticleItem* CoreAndShellItem::createCoreItem(const MaterialModel* materials) { m_core.reset(new ParticleItem(materials)); - m_core->setMaterial(materials->defaultMaterialItem()); + m_core->setMaterial(materials->defaultCoreMaterialItem()); return m_core.get(); } @@ -169,7 +169,7 @@ ParticleItem* CoreAndShellItem::shellItem() const ParticleItem* CoreAndShellItem::createShellItem(const MaterialModel* materials) { m_shell.reset(new ParticleItem(materials)); - m_shell->setMaterial(materials->defaultMaterialItem()); + m_shell->setMaterial(materials->defaultParticleMaterialItem()); // position is not used for shell item m_shell->setPosition({}); diff --git a/GUI/Model/Sample/MaterialModel.cpp b/GUI/Model/Sample/MaterialModel.cpp index 5a9b12330a2db00d120692ceeaf5d311e0603813..8fae8c67196f5a69b738caddfca6729f51584e32 100644 --- a/GUI/Model/Sample/MaterialModel.cpp +++ b/GUI/Model/Sample/MaterialModel.cpp @@ -29,13 +29,15 @@ const QString Material("Material"); QColor suggestMaterialColor(const QString& name) { - if (name.contains("Vacuum")) + if (name.contains(materialMap.key(DefaultMaterials::Vacuum))) return QColor(179, 242, 255); - if (name.contains("Substrate")) + if (name.contains(materialMap.key(DefaultMaterials::Substrate))) return QColor(205, 102, 0); - if (name.contains("Default")) + if (name.contains(materialMap.key(DefaultMaterials::Default))) return QColor(Qt::green); - if (name.contains("Particle")) + if (name.contains(materialMap.key(DefaultMaterials::Core))) + return QColor(220, 140, 220); + if (name.contains(materialMap.key(DefaultMaterials::Particle))) return QColor(146, 198, 255); // return a random color @@ -48,6 +50,11 @@ QColor suggestMaterialColor(const QString& name) } // namespace +QMap<QString, DefaultMaterials> materialMap = {{"Default", DefaultMaterials::Default}, + {"Vacuum", DefaultMaterials::Vacuum}, + {"Particle", DefaultMaterials::Particle}, + {"Core", DefaultMaterials::Core}, + {"Substrate", DefaultMaterials::Substrate}}; MaterialModel::MaterialModel() {} @@ -147,6 +154,24 @@ MaterialItem* MaterialModel::defaultMaterialItem() const return materialItems().front(); } +MaterialItem* MaterialModel::defaultCoreMaterialItem() const +{ + for (auto* material : materialItems()) + if (material->matItemName() == materialMap.key(DefaultMaterials::Core)) + return material; + + return defaultMaterialItem(); +} + +MaterialItem* MaterialModel::defaultParticleMaterialItem() const +{ + for (auto* material : materialItems()) + if (material->matItemName() == materialMap.key(DefaultMaterials::Particle)) + return material; + + return defaultMaterialItem(); +} + void MaterialModel::removeMaterialItem(MaterialItem* materialItem) { m_materials.removeAll(materialItem); diff --git a/GUI/Model/Sample/MaterialModel.h b/GUI/Model/Sample/MaterialModel.h index 638d1424f166820aff7f47c59c0a327911751c9b..5119a3c6a024808e7149f1bac4bc65a38e582afe 100644 --- a/GUI/Model/Sample/MaterialModel.h +++ b/GUI/Model/Sample/MaterialModel.h @@ -19,6 +19,11 @@ #include <QVector> #include <QXmlStreamReader> +//! Materials created by default +enum class DefaultMaterials { Default, Vacuum, Particle, Core, Substrate }; + +extern QMap<QString, DefaultMaterials> materialMap; + class MaterialItem; class MaterialModel : public QObject { @@ -47,6 +52,8 @@ public: const QVector<MaterialItem*>& materialItems() const; MaterialItem* defaultMaterialItem() const; + MaterialItem* defaultCoreMaterialItem() const; + MaterialItem* defaultParticleMaterialItem() const; void removeMaterialItem(MaterialItem* materialItem); diff --git a/GUI/Model/Sample/SampleItem.cpp b/GUI/Model/Sample/SampleItem.cpp index 3f0430e51cc6992b01b911e8c66f76bd5186e757..98331bab1d4de98dc7a5ab6fcefa3d27d32d698e 100644 --- a/GUI/Model/Sample/SampleItem.cpp +++ b/GUI/Model/Sample/SampleItem.cpp @@ -58,10 +58,26 @@ QVector<ItemWithMaterial*> SampleItem::itemsWithMaterial() const void SampleItem::addStandardMaterials() { - m_materials.addRefractiveMaterialItem("Default", 1e-3, 1e-5); - m_materials.addRefractiveMaterialItem("Vacuum", 0.0, 0.0); - m_materials.addRefractiveMaterialItem("Particle", 6e-4, 2e-8); - m_materials.addRefractiveMaterialItem("Substrate", 6e-6, 2e-8); + // add only non-existing materials + QString name = materialMap.key(DefaultMaterials::Default); + if (!m_materials.materialItemFromName(name)) + m_materials.addRefractiveMaterialItem(name, 1e-3, 1e-5); + + name = materialMap.key(DefaultMaterials::Vacuum); + if (!m_materials.materialItemFromName(name)) + m_materials.addRefractiveMaterialItem(name, 0.0, 0.0); + + name = materialMap.key(DefaultMaterials::Particle); + if (!m_materials.materialItemFromName(name)) + m_materials.addRefractiveMaterialItem(name, 6e-4, 2e-8); + + name = materialMap.key(DefaultMaterials::Core); + if (!m_materials.materialItemFromName(name)) + m_materials.addRefractiveMaterialItem(name, 2e-4, 1e-8); + + name = materialMap.key(DefaultMaterials::Substrate); + if (!m_materials.materialItemFromName(name)) + m_materials.addRefractiveMaterialItem(name, 6e-6, 2e-8); } QVector<LayerItem*> SampleItem::layerItems() const diff --git a/GUI/View/SampleDesigner/SampleEditorController.cpp b/GUI/View/SampleDesigner/SampleEditorController.cpp index 39dd711fb37e72ba9b9746e94414e69445388e3e..13f32e84c857c4b646dfcd7123347acb2cb54dac 100644 --- a/GUI/View/SampleDesigner/SampleEditorController.cpp +++ b/GUI/View/SampleDesigner/SampleEditorController.cpp @@ -228,7 +228,7 @@ SampleEditorController::createAndInitItem(FormFactorItemCatalog::Type formFactor { auto* newParticle = new ParticleItem(materialModel()); newParticle->setFormFactor(FormFactorItemCatalog::create(formFactorType)); - newParticle->setMaterial(materialModel()->defaultMaterialItem()); + newParticle->setMaterial(materialModel()->defaultParticleMaterialItem()); return newParticle; }