Skip to content
Snippets Groups Projects
Commit dbcfb487 authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

[i457] GUI: use different materials for particles and layers by default (Closes #457)

Merging branch 'i457'  into 'main'.

See merge request !1346
parents 077bc9b7 dee03b16
No related branches found
No related tags found
1 merge request!1346GUI: use different materials for particles and layers by default
Pipeline #89298 passed
......@@ -667,6 +667,9 @@ SampleItem* itemizeSample(const MultiLayer& sample, const QString& nodeName)
}
}
// append standard materials to the example-specific ones
result->addStandardMaterials();
return result;
}
......
......@@ -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({});
......
......@@ -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);
......
......@@ -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);
......
......@@ -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
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment