diff --git a/Core/Export/PyGenVisitor.cpp b/Core/Export/PyGenVisitor.cpp index 20566addc98d384b36d050a0b3b002bfc5c52e8f..ea4c3290e4eea8db9e189860c188d1a154b4f98d 100644 --- a/Core/Export/PyGenVisitor.cpp +++ b/Core/Export/PyGenVisitor.cpp @@ -38,6 +38,8 @@ PyGenVisitor::PyGenVisitor(const MultiLayer& multilayer) : m_label(new SampleLabelHandler()) { + for( auto mat: multilayer.containedMaterials() ) + m_label->insertMaterial(mat); VisitSampleTreePostorder(multilayer, *this); } @@ -204,7 +206,6 @@ void PyGenVisitor::visit(const InterferenceFunction2DParaCrystal* sample) void PyGenVisitor::visit(const Layer* sample) { - m_label->insertMaterial(sample->getMaterial()); m_label->setLabel(sample); } @@ -235,7 +236,6 @@ void PyGenVisitor::visit(const MesoCrystal*) void PyGenVisitor::visit(const Particle* sample) { - m_label->insertMaterial(sample->getMaterial()); m_label->setLabel(sample); } @@ -342,34 +342,34 @@ std::string PyGenVisitor::defineMaterials() const result << indent() << "# Defining Materials\n"; std::set<std::string> visitedMaterials; for (auto it=themap->begin(); it!=themap->end(); ++it) { - if (visitedMaterials.find(it->second) == visitedMaterials.end()) { - visitedMaterials.insert(it->second); - const IMaterial* p_material = it->first; - complex_t ri = p_material->getRefractiveIndex(); - double delta = 1.0 - std::real(ri); - double beta = std::imag(ri); - if (p_material->isScalarMaterial()) { - result << indent() << m_label->getLabel(p_material) << - " = ba.HomogeneousMaterial(\"" << p_material->getName() << - "\", " << PyGenTools::printDouble(delta) << ", " << - PyGenTools::printDouble(beta) << ")\n"; - } else { - const HomogeneousMagneticMaterial* p_mag_material - = dynamic_cast<const HomogeneousMagneticMaterial*>(p_material); - if (p_mag_material == 0) - throw Exceptions::RuntimeErrorException( - "PyGenVisitor::defineMaterials: " - "Non scalar material should be of type HomogeneousMagneticMaterial"); - kvector_t magnetic_field = p_mag_material->getMagneticField(); - result << indent() << "magnetic_field = kvector_t(" << magnetic_field.x() << ", " - << magnetic_field.y() << ", " << magnetic_field.z() << ", " - << ")\n"; - result << indent() << m_label->getLabel(p_material) - << " = ba.HomogeneousMagneticMaterial(\"" << p_material->getName(); - result << "\", " << PyGenTools::printDouble(delta) << ", " - << PyGenTools::printDouble(beta) << ", " - << "magnetic_field)\n"; - } + if (visitedMaterials.find(it->second) != visitedMaterials.end()) + continue; + visitedMaterials.insert(it->second); + const IMaterial* p_material = it->first; + complex_t ri = p_material->getRefractiveIndex(); + double delta = 1.0 - std::real(ri); + double beta = std::imag(ri); + if (p_material->isScalarMaterial()) { + result << indent() << m_label->getLabel(p_material) << + " = ba.HomogeneousMaterial(\"" << p_material->getName() << + "\", " << PyGenTools::printDouble(delta) << ", " << + PyGenTools::printDouble(beta) << ")\n"; + } else { + const HomogeneousMagneticMaterial* p_mag_material + = dynamic_cast<const HomogeneousMagneticMaterial*>(p_material); + if (p_mag_material == 0) + throw Exceptions::RuntimeErrorException( + "PyGenVisitor::defineMaterials: " + "Non scalar material should be of type HomogeneousMagneticMaterial"); + kvector_t magnetic_field = p_mag_material->getMagneticField(); + result << indent() << "magnetic_field = kvector_t(" << magnetic_field.x() << ", " + << magnetic_field.y() << ", " << magnetic_field.z() << ", " + << ")\n"; + result << indent() << m_label->getLabel(p_material) + << " = ba.HomogeneousMagneticMaterial(\"" << p_material->getName(); + result << "\", " << PyGenTools::printDouble(delta) << ", " + << PyGenTools::printDouble(beta) << ", " + << "magnetic_field)\n"; } } return result.str(); diff --git a/Core/Export/SampleLabelHandler.cpp b/Core/Export/SampleLabelHandler.cpp index 9c64fea95943fa13fbb1246b458275ad7867cd8d..ecb3913a9969529a93d61bb7dfd3e4a45e6746f4 100644 --- a/Core/Export/SampleLabelHandler.cpp +++ b/Core/Export/SampleLabelHandler.cpp @@ -157,14 +157,11 @@ SampleLabelHandler::rotations_t* SampleLabelHandler::getRotationsMap() void SampleLabelHandler::insertMaterial(const IMaterial* sample) { - materials_t::iterator it = m_MaterialLabel.begin(); - materials_t::const_iterator iEnd = m_MaterialLabel.end(); - while (it != iEnd) { + for (auto it=m_MaterialLabel.begin(); it!=m_MaterialLabel.end(); ++it) { if(definesSameMaterial(it->first, sample) ) { m_MaterialLabel.insert(sample, it->second); return; } - it++; } // material not found, do insert std::ostringstream label_stream; diff --git a/Core/Sample/ISample.cpp b/Core/Sample/ISample.cpp index 6dd705313d2559434260579ae2d99d1dcbebbd4a..91dd411e9a552cb788a79b389bf8ae2660add691 100644 --- a/Core/Sample/ISample.cpp +++ b/Core/Sample/ISample.cpp @@ -41,7 +41,7 @@ void insert_material(std::vector<const IMaterial*>& collection, const IMaterial* { for( auto it: collection ) if( pEqual(it, material) ) - return; + ; // TEMPreturn; collection.push_back( material ); }