Skip to content
Snippets Groups Projects

Reduce SessionItem signaling

Merged m.puchner requested to merge ReduceSessionItemSignalingAndMore into develop
7 files
+ 94
158
Compare changes
  • Side-by-side
  • Inline
Files
7
+ 0
78
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/Model/To/DomainObjectBuilder.cpp
//! @brief Implements DomainObjectBuilder namespace
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#include "GUI/Model/To/DomainObjectBuilder.h"
#include "GUI/Model/Instrument/InstrumentItems.h"
#include "GUI/Model/Sample/InterferenceItems.h"
#include "GUI/Model/Sample/LayerItem.h"
#include "GUI/Model/Sample/MultiLayerItem.h"
#include "GUI/Model/Sample/ParticleLayoutItem.h"
#include "GUI/Model/To/ToDomain.h"
#include "GUI/Util/Error.h"
std::unique_ptr<MultiLayer>
GUI::Model::DomainObjectBuilder::buildMultiLayer(const MultiLayerItem& multiLayerItem)
{
auto P_multilayer = GUI::Transform::ToDomain::createMultiLayer(multiLayerItem);
for (auto* layerItem : multiLayerItem.layers()) {
const bool isFirstLayer = layerItem == multiLayerItem.layers().first();
const bool isLastLayer = layerItem == multiLayerItem.layers().last();
auto P_layer = buildLayer(*layerItem, isFirstLayer || isLastLayer);
if (P_layer) {
const auto roughness = layerItem->roughness().currentItem();
auto P_roughness = GUI::Transform::ToDomain::createLayerRoughness(roughness);
if (P_roughness && !isLastLayer)
P_multilayer->addLayerWithTopRoughness(*P_layer, *P_roughness);
else
P_multilayer->addLayer(*P_layer);
}
}
return P_multilayer;
}
std::unique_ptr<Layer> GUI::Model::DomainObjectBuilder::buildLayer(const LayerItem& item,
bool isFirstOrLastLayer)
{
auto P_layer = GUI::Transform::ToDomain::createLayer(item, isFirstOrLastLayer);
for (ParticleLayoutItem* layout : item.layouts()) {
auto P_layout = buildParticleLayout(*layout);
if (P_layout)
P_layer->addLayout(*P_layout);
}
return P_layer;
}
std::unique_ptr<ParticleLayout>
GUI::Model::DomainObjectBuilder::buildParticleLayout(const ParticleLayoutItem& item)
{
auto P_layout = GUI::Transform::ToDomain::createParticleLayout(item);
QVector<SessionItem*> children = item.getItems();
for (int i = 0; i < children.size(); ++i) {
auto P_particle = GUI::Transform::ToDomain::createIParticle(*children[i]);
if (P_particle) {
P_layout->addParticle(*P_particle);
continue;
}
throw Error("GUI::Model::DomainObjectBuilder::buildParticleLayout()"
" -> Error! Not implemented");
}
InterferenceItem* interference = item.interference().currentItem();
if (interference) {
auto P_interference = interference->createInterference();
if (P_interference)
P_layout->setInterference(*P_interference);
}
return P_layout;
}
Loading