Skip to content
Snippets Groups Projects
Commit 546c6d7a authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

copyParticle out of class

parent d199e83e
No related branches found
No related tags found
1 merge request!916streamline conversion between GUI and domain
......@@ -68,55 +68,9 @@ void copyParticleItem(ParticleItem* particleItem, MaterialItems& matItems, const
GUI::Transform::FromDomain::setFormFactor(particleItem, particle->formfactor_at_bottom());
}
} // namespace
namespace GUI::Transform::FromDomain {
MultiLayerItem* GUISampleBuilder::createMultiLayerItem(const MultiLayer& sample,
const QString& nodeName)
{
m_sampleItem = new MultiLayerItem();
m_sampleItem->setSampleName(nodeName.isEmpty() ? QString::fromStdString(sample.sampleName())
: nodeName);
m_sampleItem->crossCorrLength().set(sample.crossCorrLength());
m_sampleItem->setExternalField(sample.externalField());
MaterialItems& matItems = m_sampleItem->materialItems();
// iterate over layers
for (size_t layerIndex = 0; layerIndex < sample.numberOfLayers(); layerIndex++) {
const auto* layer = sample.layer(layerIndex);
const LayerInterface* top_interface =
layerIndex == 0 ? nullptr : sample.layerInterface(layerIndex - 1);
auto* layerItem = m_sampleItem->addLayer();
layerItem->setMaterial(findMaterialItem(matItems, layer));
layerItem->setIsTopLayer(layerIndex == 0);
layerItem->setIsBottomLayer(layerIndex == sample.numberOfLayers() - 1);
FromDomain::setLayerItem(layerItem, layer, top_interface);
// iterate over particle layouts
for (const auto* layout : layer->layouts()) {
auto* layoutItem = layerItem->addLayout();
layoutItem->ownDensity().set(layout->totalParticleSurfaceDensity());
layoutItem->weight().set(layout->weight());
FromDomain::setInterference(layoutItem, layout->interferenceFunction());
// create particles/particle compositions
for (const IParticle* particle : layout->particles())
copyParticle(particle, [=](ItemWithParticles* p) { layoutItem->addParticle(p); });
}
}
return m_sampleItem;
}
void GUISampleBuilder::copyParticle(const IParticle* iparticle,
void copyParticle(const IParticle* iparticle, MaterialItems& matItems,
std::function<void(ItemWithParticles*)> addToParent)
{
MaterialItems& matItems = m_sampleItem->materialItems();
if (const auto* particle = dynamic_cast<const Particle*>(iparticle)) {
auto* particle_item = new ParticleItem(&matItems);
copyParticleItem(particle_item, matItems, particle);
......@@ -130,7 +84,7 @@ void GUISampleBuilder::copyParticle(const IParticle* iparticle,
auto* coreShellItem = new ParticleCoreShellItem(&matItems);
coreShellItem->setAbundance(coreshell->abundance());
coreShellItem->setPosition(coreshell->particlePosition());
FromDomain::setRotation(coreShellItem, coreshell->rotation());
GUI::Transform::FromDomain::setRotation(coreShellItem, coreshell->rotation());
if (const Particle* p = coreshell->coreParticle()) {
coreShellItem->createCore(&matItems);
......@@ -149,8 +103,8 @@ void GUISampleBuilder::copyParticle(const IParticle* iparticle,
auto* mesoItem = new MesoCrystalItem(&matItems);
mesoItem->setAbundance(meso->abundance());
mesoItem->setPosition(meso->particlePosition());
FromDomain::setFormFactor(mesoItem, meso->outerShape());
FromDomain::setRotation(mesoItem, meso->rotation());
GUI::Transform::FromDomain::setFormFactor(mesoItem, meso->outerShape());
GUI::Transform::FromDomain::setRotation(mesoItem, meso->rotation());
const Lattice3D* lattice = meso->particleStructure().lattice();
mesoItem->setVectorA(lattice->basisVectorA());
......@@ -158,7 +112,7 @@ void GUISampleBuilder::copyParticle(const IParticle* iparticle,
mesoItem->setVectorC(lattice->basisVectorC());
addToParent(mesoItem);
copyParticle(meso->particleStructure().basis(),
copyParticle(meso->particleStructure().basis(), matItems,
[=](ItemWithParticles* p) { mesoItem->setBasis(p); });
} else if (const auto* particleComposition =
......@@ -167,12 +121,60 @@ void GUISampleBuilder::copyParticle(const IParticle* iparticle,
particleCompositionItem->setAbundance(particleComposition->abundance());
particleCompositionItem->setPosition(particleComposition->particlePosition());
FromDomain::setRotation(particleCompositionItem, particleComposition->rotation());
GUI::Transform::FromDomain::setRotation(
particleCompositionItem, particleComposition->rotation());
addToParent(particleCompositionItem);
for (const auto* p : particleComposition->particles())
copyParticle(p, [=](ItemWithParticles* p) { particleCompositionItem->addParticle(p); });
copyParticle(p, matItems,
[=](ItemWithParticles* p) { particleCompositionItem->addParticle(p); });
}
}
} // namespace
namespace GUI::Transform::FromDomain {
MultiLayerItem* GUISampleBuilder::createMultiLayerItem(const MultiLayer& sample,
const QString& nodeName)
{
m_sampleItem = new MultiLayerItem();
m_sampleItem->setSampleName(nodeName.isEmpty() ? QString::fromStdString(sample.sampleName())
: nodeName);
m_sampleItem->crossCorrLength().set(sample.crossCorrLength());
m_sampleItem->setExternalField(sample.externalField());
MaterialItems& matItems = m_sampleItem->materialItems();
// iterate over layers
for (size_t layerIndex = 0; layerIndex < sample.numberOfLayers(); layerIndex++) {
const auto* layer = sample.layer(layerIndex);
const LayerInterface* top_interface =
layerIndex == 0 ? nullptr : sample.layerInterface(layerIndex - 1);
auto* layerItem = m_sampleItem->addLayer();
layerItem->setMaterial(findMaterialItem(matItems, layer));
layerItem->setIsTopLayer(layerIndex == 0);
layerItem->setIsBottomLayer(layerIndex == sample.numberOfLayers() - 1);
FromDomain::setLayerItem(layerItem, layer, top_interface);
// iterate over particle layouts
for (const auto* layout : layer->layouts()) {
auto* layoutItem = layerItem->addLayout();
layoutItem->ownDensity().set(layout->totalParticleSurfaceDensity());
layoutItem->weight().set(layout->weight());
FromDomain::setInterference(layoutItem, layout->interferenceFunction());
// create particles/particle compositions
for (const IParticle* particle : layout->particles())
copyParticle(particle, matItems,
[=](ItemWithParticles* p) { layoutItem->addParticle(p); });
}
}
return m_sampleItem;
}
} // namespace GUI::Transform::FromDomain
......@@ -37,9 +37,6 @@ public:
MultiLayerItem* createMultiLayerItem(const MultiLayer& sample, const QString& nodeName = "");
private:
void copyParticle(const IParticle* particle,
std::function<void(ItemWithParticles*)> addToParent);
MultiLayerItem* m_sampleItem;
};
......
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