Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Slots | Signals | Public Member Functions | Private Types | Private Member Functions | Private Attributes
omni::ui::AffineTransform Class Reference

A widget for editing an affine transformation. More...

#include <AffineTransform.h>

Inheritance diagram for omni::ui::AffineTransform:
Inheritance graph
[legend]
Collaboration diagram for omni::ui::AffineTransform:
Collaboration graph
[legend]

Public Slots

void setTranslationVisible (bool)
 Set visibility of translation sliders. More...
 
void setRotationVisible (bool)
 Set visibility of rotation widget. More...
 
void setScaleVisible (bool)
 Set visibility of scale sliders. More...
 
void setScaleRange (float)
 Set new value for scale range (5.0 by default) More...
 
void setOffsetUnit (QString const &_unit)
 Set unit suffix for offset. More...
 
void setOffsetRangeScale (float)
 Set scale of ranges for offsets. More...
 
void setRescaleOffsetValues (bool)
 Set value if offset values are rescaled. More...
 

Signals

void dataModelChanged ()
 

Public Member Functions

 AffineTransform (QWidget *=nullptr)
 
 ~AffineTransform ()
 
bool isTranslationVisible () const
 Return true if translation sliders are visible. More...
 
bool isRotationVisible () const
 Return true if rotation widget is visible. More...
 
bool isScaleVisible () const
 Return true if scale sliders are visible. More...
 
float scaleRange () const
 Return value of scale range (5.0 by default) More...
 
- Public Member Functions inherited from omni::ui::mixin::DataModel< DATAMODEL, SHARED >
 DataModel ()
 
void setDataModel (pointer_type _dataModel)
 Set new data model. More...
 
pointer_type dataModel ()
 Return pointer to data model. More...
 
const pointer_type dataModel () const
 Return pointer to data model (const version) More...
 
virtual void updateFrontend ()
 Push data to frontend widgets and all child widgets. More...
 
virtual void updateDataModel ()
 Update the data model interface. More...
 

Private Types

typedef mixin::Scale< RangedFloatmixin_scale_type
 
- Private Types inherited from omni::ui::mixin::Scale< RangedFloat >
typedef RangedFloat slider_type
 
typedef float scalar_type
 

Private Member Functions

void setup ()
 Setup widget. More...
 
void dataToFrontend ()
 Update sliders from current transform. More...
 
bool frontendToData ()
 Assign slider values to current transform. More...
 
- Private Member Functions inherited from omni::ui::mixin::Scale< RangedFloat >
 Scale ()
 
virtual void setScale (float _scale)
 Set scale and apply to sliders. More...
 
bool rescaleValues () const
 
void setRescaleValues (bool _rescaleValues)
 
float scale () const
 Return scale value. More...
 
QString suffix () const
 Common unit of sliders. More...
 
void setSuffix (QString const &_suffix)
 Set suffix (unit) of slider. More...
 
void registerScaledSlider (slider_type *_slider)
 Register slider to be scaled. More...
 
void unregisterScaledSlider (slider_type *_slider)
 Remove slider from list, keep scale. More...
 

Private Attributes

float scaleRange_ = 5.0
 
std::unique_ptr
< Ui::AffineTransform > 
ui_
 

Additional Inherited Members

- Public Types inherited from omni::ui::mixin::DataModel< DATAMODEL, SHARED >
typedef DATAMODEL data_model_type
 Data type. More...
 
typedef DataModel
< data_model_type, SHARED > 
type
 This type. More...
 
typedef detail::PointerType
< data_model_type, SHARED > 
pointer_type_handler
 Pointer type handler. More...
 
typedef pointer_type_handler::type pointer_type
 Derived pointer type. More...
 
- Protected Member Functions inherited from omni::ui::mixin::Locked
template<typename F >
void locked (F f)
 Lock widget and execute given functor. More...
 
bool isLocked () const
 Return true if widget is locked. More...
 
- Static Private Member Functions inherited from omni::ui::mixin::Scale< RangedFloat >
static int getPrecision (float _scale)
 Return precesion by scale. More...
 

Detailed Description

A widget for editing an affine transformation.

Member Typedef Documentation

Constructor & Destructor Documentation

omni::ui::AffineTransform::AffineTransform ( QWidget *  _parent = nullptr)
26  :
27  QWidget(_parent),
28  ui_(new Ui::AffineTransform)
29  {
30  setup();
31  }
void setup()
Setup widget.
Definition: AffineTransform.cpp:163
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
omni::ui::AffineTransform::~AffineTransform ( )
33 {}

Member Function Documentation

void omni::ui::AffineTransform::dataModelChanged ( )
signal
void omni::ui::AffineTransform::dataToFrontend ( )
privatevirtual

Update sliders from current transform.

Implements omni::ui::mixin::DataModel< DATAMODEL, SHARED >.

100  {
101 
102  ui_->btnRotate->setChecked(dataModel()->rotationEnabled());
103  ui_->btnScale->setChecked(dataModel()->scaleEnabled());
104  ui_->btnTranslate->setChecked(dataModel()->translationEnabled());
105 
106  ui_->rotation->setVisible(ui_->btnRotate->isChecked());
107 
108  bool _uniformScale = dataModel()->uniformScaleEnabled();
109  bool _scaleVisible = isScaleVisible() && ui_->btnScale->isChecked();
110 
111  ui_->chkUniformScale->setVisible(_scaleVisible);
112  ui_->chkUniformScale->setChecked(_uniformScale);
113  ui_->scale->setVisible(_scaleVisible && _uniformScale);
114  ui_->scaleX->setVisible(_scaleVisible && !_uniformScale);
115  ui_->scaleY->setVisible(_scaleVisible && !_uniformScale);
116  ui_->scaleZ->setVisible(_scaleVisible && !_uniformScale);
117 
118  bool _offsetVisible = isTranslationVisible() && ui_->btnTranslate->isChecked();
119  ui_->offsetX->setVisible(_offsetVisible);
120  ui_->offsetY->setVisible(_offsetVisible);
121  ui_->offsetZ->setVisible(_offsetVisible);
122 
123  ui_->rotation->setRotation(dataModel()->rotation());
124 
125  if (_uniformScale) {
126  ui_->scale->setValue(dataModel()->uniformScale());
127  } else {
128  ui_->scaleX->setValue(dataModel()->scale().x());
129  ui_->scaleY->setValue(dataModel()->scale().y());
130  ui_->scaleZ->setValue(dataModel()->scale().z());
131  }
132 
133  ui_->offsetX->setValue(dataModel()->translation().x());
134  ui_->offsetY->setValue(dataModel()->translation().y());
135  ui_->offsetZ->setValue(dataModel()->translation().z());
136  }
float scale() const
Return scale value.
Definition: Scale.h:70
bool isScaleVisible() const
Return true if scale sliders are visible.
Definition: AffineTransform.cpp:43
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
bool isTranslationVisible() const
Return true if translation sliders are visible.
Definition: AffineTransform.cpp:35
bool omni::ui::AffineTransform::frontendToData ( )
privatevirtual

Assign slider values to current transform.

Implements omni::ui::mixin::DataModel< DATAMODEL, SHARED >.

138  {
139  dataModel()->setRotationEnabled(ui_->btnRotate->isChecked());
140  dataModel()->setRotation(
141  EulerAngles(ui_->rotation->z(), ui_->rotation->y(),
142  ui_->rotation->x()));
143 
144  dataModel()->setScaleEnabled(ui_->btnScale->isChecked());
145  dataModel()->setUniformScaleEnabled(ui_->chkUniformScale->isChecked());
146 
147  if (dataModel()->uniformScaleEnabled()) {
148  dataModel()->setScale(ui_->scale->value());
149  } else {
150  dataModel()->setScale(QVector3D(
151  ui_->scaleX->value(), ui_->scaleY->value(),
152  ui_->scaleZ->value()));
153  }
154 
155  dataModel()->setTranslationEnabled(ui_->btnTranslate->isChecked());
156  dataModel()->setTranslation(QVector3D(
157  ui_->offsetX->value(),
158  ui_->offsetY->value(),
159  ui_->offsetZ->value()));
160  return true;
161  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
bool omni::ui::AffineTransform::isRotationVisible ( ) const

Return true if rotation widget is visible.

39  {
40  return ui_->btnRotate->isVisible();
41  }
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
bool omni::ui::AffineTransform::isScaleVisible ( ) const

Return true if scale sliders are visible.

43  {
44  return ui_->btnScale->isVisible();
45  }
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
bool omni::ui::AffineTransform::isTranslationVisible ( ) const

Return true if translation sliders are visible.

35  {
36  return ui_->btnTranslate->isVisible();
37  }
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
float omni::ui::AffineTransform::scaleRange ( ) const

Return value of scale range (5.0 by default)

47  {
48  return scaleRange_;
49  }
float scaleRange_
Definition: AffineTransform.h:96
void omni::ui::AffineTransform::setOffsetRangeScale ( float  _scale)
slot

Set scale of ranges for offsets.

89  {
92  emit dataModelChanged();
93  }
94  }
bool rescaleValues() const
Definition: Scale.h:61
virtual void setScale(float _scale)
Set scale and apply to sliders.
Definition: Scale.h:38
void omni::ui::AffineTransform::setOffsetUnit ( QString const &  _unit)
slot

Set unit suffix for offset.

84  {
86  }
void setSuffix(QString const &_suffix)
Set suffix (unit) of slider.
Definition: Scale.h:80
void omni::ui::AffineTransform::setRescaleOffsetValues ( bool  _rescaleValues)
slot

Set value if offset values are rescaled.

96  {
97  mixin_scale_type::setRescaleValues(_rescaleValues);
98  }
void setRescaleValues(bool _rescaleValues)
Definition: Scale.h:65
void omni::ui::AffineTransform::setRotationVisible ( bool  _visible)
slot

Set visibility of rotation widget.

58  {
59  ui_->btnRotate->setVisible(_visible);
60  ui_->rotation->setVisible(_visible);
61  }
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
void omni::ui::AffineTransform::setScaleRange ( float  _range)
slot

Set new value for scale range (5.0 by default)

70  {
71  if (_range <= 0.0) scaleRange_ = 1.0;
72 
73  scaleRange_ = _range;
74  this->locked([&] {
75  for (auto& _scale : { ui_->scaleX, ui_->scaleY, ui_->scaleZ, ui_->scale }) {
76  _scale->setRange(1.0 / scaleRange_, scaleRange_);
77  _scale->setSingleStep(0.05 / scaleRange_);
78  _scale->setPageStep(0.5 / scaleRange_);
79  }
80  });
81  }
void locked(F f)
Lock widget and execute given functor.
Definition: Locked.h:30
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
float scaleRange_
Definition: AffineTransform.h:96
void omni::ui::AffineTransform::setScaleVisible ( bool  _visible)
slot

Set visibility of scale sliders.

63  {
64  ui_->btnScale->setVisible(_visible);
65  ui_->scaleX->setVisible(_visible);
66  ui_->scaleY->setVisible(_visible);
67  ui_->scaleZ->setVisible(_visible);
68  }
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
void omni::ui::AffineTransform::setTranslationVisible ( bool  _visible)
slot

Set visibility of translation sliders.

51  {
52  ui_->btnTranslate->setVisible(_visible);
53  ui_->offsetX->setVisible(_visible);
54  ui_->offsetY->setVisible(_visible);
55  ui_->offsetZ->setVisible(_visible);
56  }
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
void omni::ui::AffineTransform::setup ( )
private

Setup widget.

163  {
164  ui_->setupUi(this);
165 
166  connect(this, &AffineTransform::dataModelChanged,
168 
169  connect(ui_->btnRotate, &QToolButton::clicked,
171 
172  connect(ui_->btnScale, &QToolButton::clicked,
174 
175  connect(ui_->btnTranslate, &QToolButton::clicked,
177 
178  connect(ui_->rotation, &Rotation::rotationChanged,
180 
181  connect(ui_->chkUniformScale, &QCheckBox::clicked,
183 
184  for (auto& _scale : { ui_->scaleX, ui_->scaleY, ui_->scaleZ, ui_->scale }) {
185  connect(_scale, &RangedFloat::valueChanged,
187  _scale->setPivot(1.0);
188  _scale->setDefaultValue(1.0);
189  _scale->setUseDefaultValue(true);
190  }
191  setScaleRange(5.0);
192 
193  ui_->scale->setLabel("XYZ");
194  ui_->scaleX->setLabel("X");
195  ui_->scaleY->setLabel("Y");
196  ui_->scaleZ->setLabel("Z");
197 
198  for (auto& _offset : { ui_->offsetX, ui_->offsetY, ui_->offsetZ }) {
199  _offset->setRange(-1.0, 1.0);
200  _offset->setPivot(0.0);
201  _offset->setSingleStep(0.001);
202  _offset->setPageStep(0.01);
203  _offset->setDefaultValue(0.0);
204  _offset->setUseDefaultValue(true);
205 
206  connect(_offset, &RangedFloat::valueChanged,
208  registerScaledSlider(_offset);
209  }
210 
211  ui_->offsetX->setLabel("X");
212  ui_->offsetY->setLabel("Y");
213  ui_->offsetZ->setLabel("Z");
214  }
void registerScaledSlider(slider_type *_slider)
Register slider to be scaled.
Definition: Scale.h:89
void setScaleRange(float)
Set new value for scale range (5.0 by default)
Definition: AffineTransform.cpp:70
std::unique_ptr< Ui::AffineTransform > ui_
Definition: AffineTransform.h:97
virtual void updateDataModel()
Update the data model interface.
Definition: DataModel.h:134
virtual void updateFrontend()
Push data to frontend widgets and all child widgets.
Definition: DataModel.h:128

Field Documentation

float omni::ui::AffineTransform::scaleRange_ = 5.0
private
std::unique_ptr<Ui::AffineTransform> omni::ui::AffineTransform::ui_
private

The documentation for this class was generated from the following files: