Skip to content
Snippets Groups Projects
Commit 1c5326f2 authored by t.knopff's avatar t.knopff
Browse files

Make TransformationItem::P_ROT private

parent e7eee295
No related branches found
No related tags found
1 merge request!172Refactor model: TransformationItem
Pipeline #40899 passed
......@@ -503,8 +503,7 @@ void GUIDomainSampleVisitor::visit(const RotationX* sample)
ASSERT(parent);
TransformationItem* transformation_item = parent->createTransformationItem();
XRotationItem* rotationItem =
transformation_item->setGroupPropertyType<XRotationItem>(TransformationItem::P_ROT);
XRotationItem* rotationItem = transformation_item->setRotationType<XRotationItem>();
rotationItem->setAngleValue(Units::rad2deg(sample->getAngle()));
m_levelToParentItem[depth()] = transformation_item;
}
......@@ -515,8 +514,7 @@ void GUIDomainSampleVisitor::visit(const RotationY* sample)
ASSERT(parent);
TransformationItem* transformation_item = parent->createTransformationItem();
YRotationItem* rotationItem =
transformation_item->setGroupPropertyType<YRotationItem>(TransformationItem::P_ROT);
YRotationItem* rotationItem = transformation_item->setRotationType<YRotationItem>();
rotationItem->setAngleValue(Units::rad2deg(sample->getAngle()));
m_levelToParentItem[depth()] = transformation_item;
}
......@@ -527,8 +525,7 @@ void GUIDomainSampleVisitor::visit(const RotationZ* sample)
ASSERT(parent);
TransformationItem* transformation_item = parent->createTransformationItem();
ZRotationItem* rotationItem =
transformation_item->setGroupPropertyType<ZRotationItem>(TransformationItem::P_ROT);
ZRotationItem* rotationItem = transformation_item->setRotationType<ZRotationItem>();
rotationItem->setAngleValue(Units::rad2deg(sample->getAngle()));
m_levelToParentItem[depth()] = transformation_item;
}
......@@ -539,8 +536,7 @@ void GUIDomainSampleVisitor::visit(const RotationEuler* sample)
ASSERT(parent);
TransformationItem* transformation_item = parent->createTransformationItem();
EulerRotationItem* rotationItem =
transformation_item->setGroupPropertyType<EulerRotationItem>(TransformationItem::P_ROT);
EulerRotationItem* rotationItem = transformation_item->setRotationType<EulerRotationItem>();
rotationItem->setAlphaValue(Units::rad2deg(sample->getAlpha()));
rotationItem->setBetaValue(Units::rad2deg(sample->getBeta()));
rotationItem->setGammaValue(Units::rad2deg(sample->getGamma()));
......
......@@ -53,6 +53,11 @@ VectorItem* ItemWithParticles::positionItem() const
return item<VectorItem>(P_POSITION);
}
TransformationItem* ItemWithParticles::transformation() const
{
return dynamic_cast<TransformationItem*>(getItem(T_TRANSFORMATION));
}
TransformationItem* ItemWithParticles::createTransformationItem()
{
return model()->insertItem<TransformationItem>(this, -1, T_TRANSFORMATION);
......
......@@ -38,6 +38,7 @@ public:
void setPosition(const kvector_t& position);
VectorItem* positionItem() const;
TransformationItem* transformation() const;
TransformationItem* createTransformationItem();
void setTransformation(RotationItem* transformation);
static bool isTransformationTagName(const QString& name);
......
......@@ -196,17 +196,14 @@ void GUI::Transform::ToDomain::setPositionInfo(IParticle* result, const ItemWith
result->setPosition(pos.x(), pos.y(), pos.z());
}
void GUI::Transform::ToDomain::setRotationInfo(IParticle* result, const SessionItem& item)
void GUI::Transform::ToDomain::setRotationInfo(IParticle* result, const ItemWithParticles& item)
{
QVector<SessionItem*> children = item.children();
for (int i = 0; i < children.size(); ++i) {
if (children[i]->hasModelType<TransformationItem>()) {
auto& rot_item = children[i]->groupItem<RotationItem>(TransformationItem::P_ROT);
auto rotation = rot_item.createRotation();
if (rotation)
result->setRotation(*rotation);
break;
}
TransformationItem* trans_item = item.transformation();
if (trans_item) {
RotationItem* rot_item = trans_item->rotation();
auto rotation = rot_item->createRotation();
if (rotation)
result->setRotation(*rotation);
}
}
......
......@@ -58,7 +58,7 @@ void setBeamDistribution(ParameterDistribution::WhichParameter which,
void setSimulationOptions(ISimulation* simulation, const SessionItem& item);
void setTransformationInfo(IParticle* result, const ItemWithParticles& item);
void setPositionInfo(IParticle* result, const ItemWithParticles& item);
void setRotationInfo(IParticle* result, const SessionItem& item);
void setRotationInfo(IParticle* result, const ItemWithParticles& item);
} // namespace GUI::Transform::ToDomain
......
......@@ -13,6 +13,7 @@
// ************************************************************************************************
#include "GUI/Models/TransformationItem.h"
#include "GUI/Models/RotationItems.h"
const QString TransformationItem::P_ROT = "Rotation type";
......@@ -23,3 +24,8 @@ TransformationItem::TransformationItem() : SessionGraphicsItem(M_TYPE)
setToolTip("Rotation applied to particles");
addGroupProperty(P_ROT, "Rotation group");
}
RotationItem* TransformationItem::rotation() const
{
return dynamic_cast<RotationItem*>(getGroupItem(P_ROT));
}
......@@ -17,13 +17,28 @@
#include "GUI/Models/SessionGraphicsItem.h"
class RotationItem;
class BA_CORE_API_ TransformationItem : public SessionGraphicsItem {
public:
private:
static const QString P_ROT;
public:
static const QString M_TYPE;
TransformationItem();
RotationItem* rotation() const;
template <typename T> T* setRotationType();
};
template <typename T> T* TransformationItem::setRotationType()
{
static_assert(std::is_base_of<RotationItem, T>::value,
"Class must be derived from RotationItem");
return setGroupPropertyType<T>(P_ROT);
}
#endif // BORNAGAIN_GUI_MODELS_TRANSFORMATIONITEM_H
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