From c46d4318a2913973e96be7ff59d4fa4c2ce94467 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Wed, 23 Jul 2014 10:50:16 +0200 Subject: [PATCH] Transform of GUI to domain is restored. --- GUI/coregui/Models/GUIObjectBuilder.cpp | 29 +++++------ GUI/coregui/Models/MaterialItem.cpp | 12 +++++ GUI/coregui/Models/MaterialItem.h | 4 ++ GUI/coregui/Models/MaterialModel.cpp | 29 +++++------ GUI/coregui/Models/MaterialModel.h | 2 + GUI/coregui/Models/RefractiveIndexItem.cpp | 13 ++++- GUI/coregui/Models/RefractiveIndexItem.h | 2 + GUI/coregui/Models/TransformToDomain.cpp | 16 +++--- .../MaterialEditor/MaterialEditor.cpp | 18 ++++--- .../MaterialEditor/MaterialProperty.h | 2 +- .../MaterialEditor/MaterialUtils.cpp | 51 ++++++++++++++++--- .../Components/MaterialEditor/MaterialUtils.h | 6 ++- .../SampleDesigner/PropertyVariantFactory.cpp | 4 ++ GUI/coregui/utils/GUIFunctionalTest.cpp | 1 + 14 files changed, 133 insertions(+), 56 deletions(-) diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp index c14457e9d80..9afe15334b9 100644 --- a/GUI/coregui/Models/GUIObjectBuilder.cpp +++ b/GUI/coregui/Models/GUIObjectBuilder.cpp @@ -509,23 +509,22 @@ void GUIObjectBuilder::visit(const LayerRoughness *) MaterialProperty GUIObjectBuilder::createMaterialFromDomain( const IMaterial *material) { - Q_ASSERT(0); -// QString materialName = m_topSampleName + QString("_") -// + QString(material->getName().c_str()); + QString materialName = m_topSampleName + QString("_") + + QString(material->getName().c_str()); -// MaterialProperty materialProperty = -// MaterialEditor::getMaterialProperty(materialName); -// if(materialProperty.isDefined()) return materialProperty; + MaterialProperty materialProperty = + MaterialEditor::getMaterialProperty(materialName); + if(materialProperty.isDefined()) return materialProperty; -// MaterialModel *model = MaterialEditor::getMaterialModel(); + MaterialModel *model = MaterialEditor::getMaterialModel(); -// if(material->isScalarMaterial()) { -// MaterialItem *materialItem = model->addMaterial(materialName, -// MaterialItem::HomogeneousMaterial); -// complex_t rindex = material->getRefractiveIndex(); -// materialItem->setRefractiveIndex(1-rindex.real(),rindex.imag()); -// return MaterialUtils::getMaterialProperty(materialItem); -// } + if(material->isScalarMaterial()) { + complex_t rindex = material->getRefractiveIndex(); + MaterialItem *materialItem = model->addMaterial(materialName, 1-rindex.real(),rindex.imag()); + return MaterialProperty(materialItem->getIdentifier()); + } else { + throw GUIHelpers::Error("GUIObjectBuilder::createMaterialFromDomain() -> Not implemented."); + } -// return MaterialProperty(); + return MaterialProperty(); } diff --git a/GUI/coregui/Models/MaterialItem.cpp b/GUI/coregui/Models/MaterialItem.cpp index fc5c78d1e75..c556f131c85 100644 --- a/GUI/coregui/Models/MaterialItem.cpp +++ b/GUI/coregui/Models/MaterialItem.cpp @@ -64,6 +64,18 @@ QColor MaterialItem::getColor() const return color_property.getColor(); } +bool MaterialItem::isHomogeneousMaterial() const +{ + ComboProperty combo_property = getRegisteredProperty(MaterialItem::P_MATERIAL_TYPE).value<ComboProperty>(); + return (combo_property.getValue() == Constants::HomogeneousMaterialType); +} + +bool MaterialItem::isHomogeneousMagneticMaterial() const +{ + ComboProperty combo_property = getRegisteredProperty(MaterialItem::P_MATERIAL_TYPE).value<ComboProperty>(); + return (combo_property.getValue() == Constants::HomogeneousMagneticMaterialType); +} + //bool MaterialItem::setMaterialProperty(QString name, const QVariant &value) //{ diff --git a/GUI/coregui/Models/MaterialItem.h b/GUI/coregui/Models/MaterialItem.h index 41d62820cff..057695a7ebf 100644 --- a/GUI/coregui/Models/MaterialItem.h +++ b/GUI/coregui/Models/MaterialItem.h @@ -19,6 +19,10 @@ public: QString getIdentifier() const; QColor getColor() const; + + bool isHomogeneousMaterial() const; + + bool isHomogeneousMagneticMaterial() const; }; diff --git a/GUI/coregui/Models/MaterialModel.cpp b/GUI/coregui/Models/MaterialModel.cpp index 33fc94c0319..a1daf370aaf 100644 --- a/GUI/coregui/Models/MaterialModel.cpp +++ b/GUI/coregui/Models/MaterialModel.cpp @@ -30,21 +30,6 @@ void MaterialModel::removeMaterial(MaterialItem *item) { QModelIndex materialIndex = indexOfItem(item); removeRows(materialIndex.row(), 1, materialIndex.parent()); - - //bool MaterialModel::removeMaterial(MaterialItem *material) - //{ - // if(m_materials.contains(material)) { - // int row = m_materials.indexOf(material); - // beginRemoveRows(QModelIndex(), row, row); - // m_materials.removeOne(material); - // delete material; - // endRemoveRows(); - // return true; - // } - // Q_ASSERT(0); - // return false; - //} - } MaterialItem *MaterialModel::getMaterial(const MaterialProperty &property) @@ -61,6 +46,20 @@ MaterialItem *MaterialModel::getMaterial(const MaterialProperty &property) return 0; } +MaterialItem *MaterialModel::getMaterial(const QString &material_name) +{ + qDebug() << "MaterialModel::getMaterial()"; + QModelIndex parentIndex; + for( int i_row = 0; i_row < rowCount( parentIndex ); ++i_row) { + QModelIndex itemIndex = index( i_row, 0, parentIndex ); + + if (MaterialItem *material = dynamic_cast<MaterialItem *>(itemForIndex(itemIndex))){ + if(material->itemName() == material_name) return material; + } + } + return 0; +} + diff --git a/GUI/coregui/Models/MaterialModel.h b/GUI/coregui/Models/MaterialModel.h index 31678be2eca..b3ce200cddf 100644 --- a/GUI/coregui/Models/MaterialModel.h +++ b/GUI/coregui/Models/MaterialModel.h @@ -16,6 +16,8 @@ public: void removeMaterial(MaterialItem *); MaterialItem *getMaterial(const MaterialProperty &property); + MaterialItem *getMaterial(const QString &material_name); + }; diff --git a/GUI/coregui/Models/RefractiveIndexItem.cpp b/GUI/coregui/Models/RefractiveIndexItem.cpp index d6a04330d1c..61ff6a41026 100644 --- a/GUI/coregui/Models/RefractiveIndexItem.cpp +++ b/GUI/coregui/Models/RefractiveIndexItem.cpp @@ -16,5 +16,16 @@ RefractiveIndexItem::RefractiveIndexItem(ParameterizedItem *parent) QString RefractiveIndexItem::getItemLabel() const { return QString("(1 - %1, %2)").arg(getRegisteredProperty(P_DELTA).toDouble()) - .arg(getRegisteredProperty(P_BETA).toDouble()); + .arg(getRegisteredProperty(P_BETA).toDouble()); +} + +double RefractiveIndexItem::getDelta() const +{ + return getRegisteredProperty(P_DELTA).toDouble(); + +} + +double RefractiveIndexItem::getBeta() const +{ + return getRegisteredProperty(P_BETA).toDouble(); } diff --git a/GUI/coregui/Models/RefractiveIndexItem.h b/GUI/coregui/Models/RefractiveIndexItem.h index c64b4dd3318..afb802f4765 100644 --- a/GUI/coregui/Models/RefractiveIndexItem.h +++ b/GUI/coregui/Models/RefractiveIndexItem.h @@ -12,6 +12,8 @@ public: explicit RefractiveIndexItem(ParameterizedItem *parent=0); ~RefractiveIndexItem(){} QString getItemLabel() const; + double getDelta() const; + double getBeta() const; }; diff --git a/GUI/coregui/Models/TransformToDomain.cpp b/GUI/coregui/Models/TransformToDomain.cpp index e2af0d06383..07527ac3f04 100644 --- a/GUI/coregui/Models/TransformToDomain.cpp +++ b/GUI/coregui/Models/TransformToDomain.cpp @@ -40,13 +40,17 @@ IMaterial *TransformToDomain::createDomainMaterial(const ParameterizedItem &item) { - QVariant v = item.property("Material"); - if( !v.isValid() ) - throw GUIHelpers::Error("TransformToDomain::createDomainMaterial() -> " - "No material property"); + MaterialProperty material_property; + if(item.modelType() == Constants::ParticleType) { + material_property = item.getRegisteredProperty(ParticleItem::P_MATERIAL).value<MaterialProperty>(); + } + else if(item.modelType() == Constants::LayerType) { + material_property = item.getRegisteredProperty(LayerItem::P_MATERIAL).value<MaterialProperty>(); + } + if(!material_property.isDefined()) + throw GUIHelpers::Error("TransformToDomain::createDomainMaterial() -> Error. Unknown item to create material"); - MaterialProperty materialProperty = v.value<MaterialProperty>(); - return MaterialUtils::createDomainMaterial(materialProperty.getName()); + return MaterialUtils::createDomainMaterial(material_property); } MultiLayer *TransformToDomain::createMultiLayer(const ParameterizedItem &item) diff --git a/GUI/coregui/Views/Components/MaterialEditor/MaterialEditor.cpp b/GUI/coregui/Views/Components/MaterialEditor/MaterialEditor.cpp index a331a8fd6dc..66bd68d5817 100644 --- a/GUI/coregui/Views/Components/MaterialEditor/MaterialEditor.cpp +++ b/GUI/coregui/Views/Components/MaterialEditor/MaterialEditor.cpp @@ -55,10 +55,9 @@ MaterialProperty MaterialEditor::getMaterialProperty(const QString &name) MaterialProperty MaterialEditor::this_getMaterialProperty(const QString &name) { - Q_ASSERT(0); -// MaterialItem *material = m_materialModel->getMaterial(name); -// if(material) -// return MaterialUtils::getMaterialProperty(material); + MaterialItem *material = m_materialModel->getMaterial(name); + if(material) + return MaterialProperty(material->getIdentifier()); return MaterialProperty(); } @@ -75,10 +74,13 @@ MaterialProperty MaterialEditor::getDefaultMaterialProperty() MaterialProperty MaterialEditor::this_getDefaultMaterialProperty() { Q_ASSERT(m_materialModel); - Q_ASSERT(m_materialModel->rowCount( QModelIndex() )); - QModelIndex firstIndex = m_materialModel->index(0, 0, QModelIndex()); - MaterialItem *material = dynamic_cast<MaterialItem *>(m_materialModel->itemForIndex(firstIndex)); - return MaterialProperty(material->getIdentifier()); + if((m_materialModel->rowCount( QModelIndex() ) ) ) { + QModelIndex firstIndex = m_materialModel->index(0, 0, QModelIndex()); + MaterialItem *material = dynamic_cast<MaterialItem *>(m_materialModel->itemForIndex(firstIndex)); + return MaterialProperty(material->getIdentifier()); + } else { + return MaterialProperty(); + } } diff --git a/GUI/coregui/Views/Components/MaterialEditor/MaterialProperty.h b/GUI/coregui/Views/Components/MaterialEditor/MaterialProperty.h index 03db4bc31a8..580bd310bef 100644 --- a/GUI/coregui/Views/Components/MaterialEditor/MaterialProperty.h +++ b/GUI/coregui/Views/Components/MaterialEditor/MaterialProperty.h @@ -13,7 +13,7 @@ class MaterialProperty { public: - MaterialProperty(const QString &identifier=QString()) + explicit MaterialProperty(const QString &identifier=QString()) : m_identifier(identifier){} QString getIdentifier() const { diff --git a/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp b/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp index 9dcba419ce5..da4070fe399 100644 --- a/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp +++ b/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp @@ -5,6 +5,9 @@ #include "HomogeneousMagneticMaterial.h" #include "MaterialEditor.h" #include "MaterialModel.h" +#include "RefractiveIndexItem.h" +#include "MagneticFieldItem.h" +#include "ComboProperty.h" #include <QDebug> @@ -73,9 +76,9 @@ ColorProperty MaterialUtils::suggestMaterialColorProperty(const QString &name) //} -IMaterial *MaterialUtils::createDomainMaterial(const MaterialItem *item) -{ - Q_ASSERT(0); +//IMaterial *MaterialUtils::createDomainMaterial(const MaterialItem *item) +//{ +// Q_ASSERT(0); // if(item->getType() == MaterialItem::SubItem) // throw GUIHelpers::Error("MaterialUtils::createDomainMaterial() -> Error. Unapropriate material type"); @@ -98,19 +101,51 @@ IMaterial *MaterialUtils::createDomainMaterial(const MaterialItem *item) // } // return result; -} +//} -IMaterial *MaterialUtils::createDomainMaterial(const QString &name) -{ - Q_ASSERT(0); +//IMaterial *MaterialUtils::createDomainMaterial(const QString &name) +//{ +// Q_ASSERT(0); // MaterialModel *model = MaterialEditor::getMaterialModel(); // MaterialItem *materialItem = model->getMaterial(name); // Q_ASSERT(materialItem); // return createDomainMaterial(materialItem); -} +//} + + +IMaterial *MaterialUtils::createDomainMaterial(const MaterialProperty &material_property) +{ + MaterialModel *model = MaterialEditor::getMaterialModel(); + Q_ASSERT(model); + + const MaterialItem *materialItem = model->getMaterial(material_property); + Q_ASSERT(materialItem); + + const RefractiveIndexItem *refractiveIndexItem = dynamic_cast<const RefractiveIndexItem *>(materialItem->getSubItems()[MaterialItem::P_REFRACTIVE_INDEX]); + double delta = refractiveIndexItem->getDelta(); + double beta = refractiveIndexItem->getBeta(); + + IMaterial *result(0); + if(materialItem->isHomogeneousMaterial()) { + result = new HomogeneousMaterial(materialItem->itemName().toStdString(), delta, beta); + } + else if(materialItem->isHomogeneousMagneticMaterial()) { + const MagneticFieldItem *magneticField = dynamic_cast<const MagneticFieldItem *>(materialItem->getSubItems()[MaterialItem::P_MAGNETIC_FIELD]); + Q_ASSERT(magneticField); + double Bx = magneticField->getRegisteredProperty(MagneticFieldItem::P_BX).toDouble(); + double By = magneticField->getRegisteredProperty(MagneticFieldItem::P_BY).toDouble(); + double Bz = magneticField->getRegisteredProperty(MagneticFieldItem::P_BZ).toDouble(); + result = new HomogeneousMagneticMaterial(materialItem->itemName().toStdString(), delta, beta, kvector_t(Bx, By, Bz)); + } + else { + throw GUIHelpers::Error("MaterialUtils::createDomainMaterial() -> Error. Unknown material type."); + } + + return result; +} diff --git a/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.h b/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.h index c06df5b1d84..77fb434db76 100644 --- a/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.h +++ b/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.h @@ -20,8 +20,10 @@ ColorProperty suggestMaterialColorProperty(const QString &name); //QString getMaterialName(const MaterialProperty &material_property); //QColor getMaterialColor(const MaterialProperty &material_property); -IMaterial *createDomainMaterial(const MaterialItem *material); -IMaterial *createDomainMaterial(const QString &name); +IMaterial *createDomainMaterial(const MaterialProperty &material_property); + +//IMaterial *createDomainMaterial(const MaterialItem *material); +//IMaterial *createDomainMaterial(const QString &name); } diff --git a/GUI/coregui/Views/Components/SampleDesigner/PropertyVariantFactory.cpp b/GUI/coregui/Views/Components/SampleDesigner/PropertyVariantFactory.cpp index 72bd9f8e0be..f958a7880a9 100644 --- a/GUI/coregui/Views/Components/SampleDesigner/PropertyVariantFactory.cpp +++ b/GUI/coregui/Views/Components/SampleDesigner/PropertyVariantFactory.cpp @@ -227,6 +227,8 @@ void PropertyVariantFactory::slotSetValue(const MaterialProperty &value) QVariant var; var.setValue(value); manager->setValue(property, var); + // FIXME g.p. Is it the right place to delete? + object->deleteLater(); return; } itEditor++; @@ -265,6 +267,8 @@ void PropertyVariantFactory::slotSetValue(const ColorProperty &value) QVariant var; var.setValue(value); manager->setValue(property, var); + // FIXME g.p. Is it the right place to delete? + object->deleteLater(); return; } itEditor++; diff --git a/GUI/coregui/utils/GUIFunctionalTest.cpp b/GUI/coregui/utils/GUIFunctionalTest.cpp index 2b5d89865be..5f67ed040d1 100644 --- a/GUI/coregui/utils/GUIFunctionalTest.cpp +++ b/GUI/coregui/utils/GUIFunctionalTest.cpp @@ -9,6 +9,7 @@ #include "ParameterizedItem.h" #include "OutputDataFunctions.h" #include <boost/scoped_ptr.hpp> +#include <QDebug> GUIFunctionalTest::GUIFunctionalTest(const std::string &name) -- GitLab