34#include <NDEVR/Resource.h>
35#include <NDEVR/Matrix.h>
36#include <NDEVR/Pointer.h>
37#include <NDEVR/Unit.h>
41 class OrientationEditorUI;
209 void updatePositionFromUI();
213 void updateOrientationFromDials();
217 void updateOrientationFromUI();
221 void updateScaleFromUI();
225 void updateScaleFieldsX();
229 void updateScaleFieldsY();
233 void updateScaleFieldsZ();
259 Ui::OrientationEditorUI*
ui;
Templated logic for doing matrix multiplication.
Resource< Vector< 3, Angle< fltp08 > > > orientation
The current 3D rotation angles (roll, pitch, yaw).
void updateScale()
Refreshes the scale UI fields from the scale resource.
void setOffsetLabels(const TranslatedString &x, const TranslatedString &y, const TranslatedString &z)
Sets the axis labels for the position/offset fields.
void updated()
Emitted when any resource is updated programmatically.
Ui::OrientationEditorUI * ui
The auto-generated UI form.
void updateLabels()
Updates the axis labels to reflect the current unit settings.
Matrix< fltp08 > getMatrix()
Computes a 4x4 transformation matrix from the current position, rotation, and scale.
void setAutoHideDials(bool auto_hide_dials)
Sets whether dials are automatically hidden when the widget is too small.
Resource< Vector< 3, bool > > show_orientation
Controls visibility of each orientation axis field.
Resource< Vector< 3, bool > > show_position
Controls visibility of each position axis field.
void positionEdited()
Emitted when the user edits position values in the UI.
Resource< Vector< 3, bool > > show_scale
Controls visibility of each scale axis field.
void setOffsetTitle(const TranslatedString &title)
Sets the title label for the position/offset section.
void orientationUpdated()
Emitted when the orientation resource is updated programmatically.
Resource< Vector< 3, fltp08 > > min_position
The minimum allowed position values.
void updateLayoutSize()
Recalculates the layout based on the current size mode.
Resource< Vector< 3, fltp08 > > position
The current 3D position values.
void scaleEdited()
Emitted when the user edits scale values in the UI.
Resource< Vector< 3, fltp08 > > scale
The current 3D scale values.
Resource< Vector< 3, fltp08 > > max_position
The maximum allowed position values.
virtual QSize sizeHint() const override
Returns the preferred size hint for the widget.
Vector< 3, fltp08 > getUILocation() const
Returns the current position values from the UI fields.
Vector< 3, fltp08 > getUIScale() const
Returns the current scale values from the UI fields.
QBoxLayout * offsetLayout()
Returns the layout containing the position/offset fields.
Resource< ConstPointer< Unit > > position_unit
The unit used for displaying position values.
Resource< ConstPointer< Unit > > angle_unit
The unit used for displaying angle values.
QCustomLineEdit * getUILineEdit(uint01 orientation)
Returns the line edit widget for a given rotation axis.
void setScaleTitle(const TranslatedString &title)
Sets the title label for the scale section.
void setMatrix(const Matrix< fltp08 > &matrix)
Decomposes a transformation matrix and populates the UI fields accordingly.
QCustomDial * getUIDial(uint01 orientation)
Returns the dial widget for a given rotation axis.
Vector< 3, Angle< fltp08 > > getUIDialRotation() const
Returns the current rotation values from the UI dial widgets.
virtual QSize minimumSizeHint() const override
Returns the minimum size hint for the widget.
OrientationEditor(QWidget *parent=nullptr)
Constructs an OrientationEditor widget.
Resource< ConstPointer< Unit > > size_unit
The unit used for displaying scale/size values.
SizeMode m_size_mode
The current layout size mode.
void positionUpdated()
Emitted when the position resource is updated programmatically.
bool m_auto_hide_dials
Whether to automatically hide dials when space is limited.
void orientationEdited()
Emitted when the user edits orientation values in the UI.
bool m_auto_set_layout
Whether to automatically adjust layout on resize.
void updatePosition()
Refreshes the position UI fields from the position resource.
SizeMode
Enumerates layout size modes for the orientation editor.
@ e_normal
Full-size layout with all elements visible.
@ e_tiny_vertical
Minimal vertical layout.
@ e_tiny_horizontal
Minimal horizontal layout.
@ e_small_vertical
Compact vertical layout.
@ e_small_horizontal
Compact horizontal layout.
void scaleUpdated()
Emitted when the scale resource is updated programmatically.
void setSizeMode(SizeMode mode)
Sets the layout size mode of the orientation editor.
void lockAspectRatio()
Locks the aspect ratio so that scale changes on one axis propagate proportionally.
Resource< Vector< 3, Angle< fltp08 > > > min_orientation
The minimum allowed rotation angles.
Resource< Vector< 3, fltp08 > > min_scale
The minimum allowed scale values.
Resource< Vector< 3, Angle< fltp08 > > > max_orientation
The maximum allowed rotation angles.
void resizeEvent(QResizeEvent *event) override
Handles resize events by adjusting the layout mode if auto-layout is enabled.
Resource< Vector< 3, fltp08 > > max_scale
The maximum allowed scale values.
Vector< 3, Angle< fltp08 > > getUIRotation() const
Returns the current rotation values from the UI text fields.
Vector< 3, fltp08 > m_aspect_ratio
The locked aspect ratio between scale axes.
QTResourceListener * m_units_listener
Listener that triggers label updates when units change.
void setRotationTitle(const TranslatedString &roll, const TranslatedString &pitch, const TranslatedString &yaw)
Sets the title labels for the rotation section axes.
void updateOrientation()
Refreshes the orientation UI fields and dials from the orientation resource.
void edited()
Emitted when the user edits any value in the UI.
Provides a rounded range control (like a speedometer or potentiometer).
A line edit allows users to enter and edit a single line of plain text with useful editing functions,...
A ResourceListener which will always be executed on the main UI thread and can be tied to a Qt Object...
A core part of the engine, stores variables that can be listened to with ResourceListener which will ...
The core String class for the NDEVR API.
Any text displayed to the user should be defined as a TranslatedString which allows the program to lo...
A fixed-size array with N dimensions used as the basis for geometric and mathematical types.
The primary namespace for the NDEVR SDK.
uint8_t uint01
-Defines an alias representing a 1 byte, unsigned integer -Can represent exact integer values 0 throu...