41 std::unique_ptr<IInterferenceFunction> GetInterferenceFunction(
const SessionItem& layoutItem);
62 else if (item.
modelType() ==
"ParticleLayout")
68 else if (item.
modelType() ==
"ParticleComposition")
71 else if (item.
modelType() ==
"ParticleCoreShell")
74 else if (item.
modelType() ==
"ParticleDistribution")
77 else if (item.
modelType() ==
"MesoCrystal")
84 double total_height(0.0);
88 bool isTopLayer = index == 0;
90 QVector3D(0, 0,
static_cast<float>(-total_height)), isTopLayer);
101 const bool isTopLayer)
104 if (layer && !isTopLayer)
120 double layer_size = sceneGeometry.
layer_size();
123 auto particle3DContainer_vector =
126 auto interference = GetInterferenceFunction(layoutItem);
129 interference->accept(&pos_builder);
130 std::vector<std::vector<double>> lattice_positions =
133 lattice_positions, particle3DContainer_vector, model, sceneGeometry,
this);
140 if (particleItem.
modelType() ==
"Particle") {
141 auto pItem =
dynamic_cast<const ParticleItem*
>(&particleItem);
144 }
else if (particleItem.
modelType() ==
"ParticleCoreShell") {
151 particle3DContainer =
153 }
else if (particleItem.
modelType() ==
"ParticleComposition") {
159 particle3DContainer =
161 }
else if (particleItem.
modelType() ==
"ParticleDistribution") {
162 auto particleDistributionItem =
168 }
else if (particleItem.
modelType() ==
"MesoCrystal") {
169 auto mesoCrystalItem =
dynamic_cast<const MesoCrystalItem*
>(&particleItem);
181 const QVector3D& lattice_position)
const
184 for (
size_t i = 0; i < particle3DContainer.
containerSize(); ++i) {
186 particle3D->addTranslation(lattice_position);
189 model->
add(particle3D.release());
191 model->
addBlend(particle3D.release());
198 std::unique_ptr<IInterferenceFunction> GetInterferenceFunction(
const SessionItem& layoutItem)
201 if (interferenceLattice) {
205 return std::unique_ptr<IInterferenceFunction>(P_interference.release());
207 return std::make_unique<InterferenceFunctionNone>();
#define ASSERT(condition)
Defines class ExternalProperty.
Defines InterferenceFunctionItems's classes.
Includes all interference function definitions.
Defines classes Lattice2DItems.
Defines class MesoCrystalItem.
Defines class MultiLayerItem.
Implements namespace TransformTo3D.
Defines class ParticleCompositionItem.
Defines class ParticleCoreShellItem.
Defines ParticleCoreShell.
Defines class ParticleDistributionItem.
Defines class ParticleItem.
Defines class ParticleLayoutItem.
Defines RealSpaceBuilderUtils namespace.
Defines class RealSpaceBuilder.
Defines class RealSpaceCanvas.
Defines RealSpaceModel namespace.
Defines class RealSpacePositionBuilder.
Defines some unit conversion factors and other constants in namespace Units.
Defines class VectorItem.
virtual std::unique_ptr< IInterferenceFunction > createInterferenceFunction() const =0
static const QString T_LAYOUTS
static const QString T_BASIS_PARTICLE
static const QString T_LAYERS
std::unique_ptr< RealSpace::Particles::Particle > createParticle(const size_t &index) const
size_t containerSize() const
bool particle3DBlend(const size_t &index) const
static const QString T_PARTICLES
std::unique_ptr< ParticleComposition > createParticleComposition() const
static const QString T_CORE
static const QString T_SHELL
std::unique_ptr< ParticleCoreShell > createParticleCoreShell() const
static const QString T_PARTICLES
std::unique_ptr< Particle > createParticle() const
static const QString T_PARTICLES
static const QString T_INTERFERENCE
static const QString P_TOTAL_DENSITY
void populateParticleFromParticleItem(RealSpaceModel *model, const SessionItem &particleItem) const
void populate(RealSpaceModel *model, const SessionItem &item, const SceneGeometry &sceneGeometry, const RealSpace::Camera::Position &cameraPosition=RealSpace::Camera::Position(RealSpace::Vector3D(0, -200, 120), RealSpace::Vector3D(0, 0, 0), RealSpace::Vector3D::_z))
RealSpaceBuilder(QWidget *parent=nullptr)
void populateLayer(RealSpaceModel *model, const SessionItem &layerItem, const SceneGeometry &sceneGeometry, const QVector3D &origin={}, const bool isTopLayer=false)
void populateLayout(RealSpaceModel *model, const SessionItem &layoutItem, const SceneGeometry &sceneGeometry, const QVector3D &origin={})
void populateMultiLayer(RealSpaceModel *model, const SessionItem &item, const SceneGeometry &sceneGeometry, const QVector3D &origin={})
void populateParticleFromParticle3DContainer(RealSpaceModel *model, const Particle3DContainer &particle3DContainer, const QVector3D &lattice_position={}) const
std::vector< std::vector< double > > generatePositions(double layer_size, double density=0.0) const
Camera::Position defCamPos
double layer_size() const
QVector< SessionItem * > getItems(const QString &tag="") const
Returns vector of all items of given tag.
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
QString modelType() const
Get model type.
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
Particle3DContainer particleCoreShell3DContainer(const ParticleCoreShell &particleCoreShell, double total_abundance=1.0, const QVector3D &origin={})
Particle3DContainer particleComposition3DContainer(const ParticleComposition &particleComposition3DContainer, double total_abundance=1.0, const QVector3D &origin={})
void populateParticlesAtLatticePositions(const std::vector< std::vector< double >> &lattice_positions, const std::vector< Particle3DContainer > &particle3DContainer_vector, RealSpaceModel *model, const SceneGeometry &sceneGeometry, const RealSpaceBuilder *builder3D)
std::vector< Particle3DContainer > particle3DContainerVector(const SessionItem &layoutItem, const QVector3D &origin={})
Particle3DContainer mesoCrystal3DContainer(const MesoCrystalItem &mesoCrystalItem, double total_abundance=1.0, const QVector3D &origin={})
Particle3DContainer singleParticle3DContainer(const Particle &particle, double total_abundance=1.0, const QVector3D &origin={})