Core::Transform
#include "Core/Nodes/Transform.h"
Inherits from Core::Node, std::enable_shared_from_this< Node >
Inherited by Core::TransformImpl< T >, Core::TransformImpl< ETransformType::AxisAngle >, Core::TransformImpl< ETransformType::EulerX >, Core::TransformImpl< ETransformType::EulerY >, Core::TransformImpl< ETransformType::EulerZ >, Core::TransformImpl< ETransformType::Free >, Core::TransformImpl< ETransformType::Frustum >, Core::TransformImpl< ETransformType::LookAt >, Core::TransformImpl< ETransformType::Ortho >, Core::TransformImpl< ETransformType::Perspective >, Core::TransformImpl< ETransformType::Quat >, Core::TransformImpl< ETransformType::Scale >, Core::TransformImpl< ETransformType::Translation >, Core::TransformImpl< ETransformType::Viewport >
Public Functions
| Name | |
|---|---|
| Transform(const TransformOperation & transformType) | |
| void | createDefaults()<br>Prepare storage for second level parameters (std::map with values) |
| void | disableSynergies() |
| void | enableSynergies() |
| void | free() |
| int | getCurrentIndex() const |
| Ptr< Node > | getCurrentSequence() |
| TransformOperation::ValueMap | getDefaultTypes() const |
| const Data & | getDefaultValue(const std::string & name) const<br>Get the value which the transform can hold (current value stored in the transformation). |
| DefaultValues & | getDefaultValues() |
| EValueState | getValueState(glm::ivec2 coords) const |
| bool | hasMenuSynergies() const |
| bool | hasSavedValue() const |
| bool | hasSynergies() const |
| virtual void | initDefaults()<br>Init the (non-zero) second level parameters (from LOD::SetValues) via their initDefaults and update the internal transformation matrix). |
| bool | isInSequence() const |
| bool | isLocked() const |
| virtual bool | isValid() const =0<br>Checks the validity of the stored Transform matrix (used by GUI to show the corrupted flag). |
| void | lock() |
| void | notifySequence() |
| void | nullSequence() |
| TransformOperation * | properties() const |
| void | reloadValue()<br>Restore saved values if they exist. |
| virtual void | resetMatrixFromDefaults() =0<br>Reset the transform matrix visible in LOD::Full (internalValue) to match the defaultValues (from LOD::SetValues). |
| void | saveValue()<br>Save current values of the transformation for future reloading. |
| template <typename T > <br>SetValueResult | setDefaultValue(const std::string & name, T && val)<br>Setting of one second level parameter defining the transformation (in LOD::SetValues). |
| template <typename T > <br>void | setDefaultValueNoUpdate(const std::string & name, T && val) |
| void | setDefaultValues(const DefaultValues & values) |
| void | setSequence(Node * s, int index) |
| virtual SetValueResult | setValue(const glm::mat4 & mat) override<br>Lock non-editable values. |
| virtual SetValueResult | setValue(float val, glm::ivec2 coords) override |
| void | unlock() |
Protected Functions
| Name | |
|---|---|
| bool | canSetValue(const ValueMask & mask, glm::ivec2 coords, float value) |
| Data & | getDefaultValueMut(const std::string & name) |
| virtual void | setDefaultValueWithSynergies(const std::string & name, Core::Data && val)<br>Function for setting values in the Set Defaults LOD. |
Protected Attributes
| Name | |
|---|---|
| DefaultValues | m_defaultValues |
| bool | m_hasMenuSynergies <br>True for transformations, that support synergies, such as scale, eulerAngleXYZ, ortho, frustum, and quaternion ONLY. |
| bool | m_hasSynergies <br>applicable for: uniform scale, eulerAngleXYZ, ortho, frustum, and quat and quaternion. |
| bool | m_isLocked <br>Edit of the matrix is limited to editable values - defined in Operations.h g_transforms. |
Friends
| Name | |
|---|---|
| class | GraphManager |
| class | MatrixTracker |
| class | Sequence |
Additional inherited members
Public Functions inherited from Core::Node
| Name | |
|---|---|
| virtual void | addDeleteCallback(std::function< void(Node *)> callback)<br> The callback parameters: |
| virtual void | addPlugCallback(std::function< void(Node *, Node *, size_t, size_t)> callback)<br>Registers a callback that gets called when the node's output pins get plugged in. |
| virtual void | addUnplugCallback(std::function< void(Node *, Node *, size_t, size_t)> callback)<br>Registers a callback that gets called when the node's input pins get unplugged. |
| virtual void | addUpdateCallback(std::function< void(Node *)> callback)<br>Registers a callback that gets called on any updateValues() call. |
| void | appendChildNode(Ptr< Node > node) |
| bool | areAllInputsPlugged() |
| bool | areAllInputsUnplugged() const |
| bool | areInputsPlugged(int numInputs) |
| template <typename T > <br>Ptr< T > | as() |
| template <typename T > <br>T * | asRaw() |
| const Data & | data(size_t index =0) const<br>Get Node contents, read only. |
| Data & | dataMut(size_t index) |
| void | finalize()<br>Prepares node for its destruction, after that the destructor can be called. |
| ID | getId() const |
| Pin & | getInput(size_t i) |
| std::vector< Pin > & | getInputPins() |
| Data & | getInternalData(size_t index =0)<br>Get data storage for read and write purposes. |
| const char * | getLabel() const |
| const Operation & | getOperation() const |
| Pin & | getOutput(size_t i) |
| std::vector< Pin > & | getOutputPins() |
| Ptr< Node > | getOwner() const<br>Get direct owner of this node. |
| Ptr< Node > | getPtr()<br>Get reference to this node instance. |
| Ptr< Node > | getRootOwner()<br>Get the topmost owner of this node. |
| std::string | getSignature()<br>"{node type} #{node ID}" |
| EValueState | getState(size_t pinIndex =0) |
| TrackedNodeData * | getTrackingData() |
| void | init()<br>Initialize node id, inputs, and outputs according to the preset node type. |
| void | notifyOwner() |
| virtual void | onInit() |
| bool | operator!=(const Node & other) const |
| bool | operator==(const Node & other) const |
| ENodePlugResult | plug(const Ptr< Node > & childNode, unsigned fromIndex, unsigned toIndex)<br>Connect this (parent) node output to the childNode input. |
| void | pulse(size_t index) |
| virtual void | receiveSignal(int inputIndex)<br>Implements the operator reaction to the change of its inputIndex input. |
| void | spreadSignal()<br>Spread signal to all outputs. |
| void | spreadSignal(size_t outIndex)<br>Spread signal to the selected output outIndex only. |
| virtual void | updateValues(int inputIndex =0)<br>Computes new values of outputs based on inputs. |
Protected Functions inherited from Core::Node
| Name | |
|---|---|
| Node(const Operation & operation)<br>Node is never constructed directory. | |
| virtual | ~Node() |
| ENodePlugResult | isPlugCorrect(const Pin & input, const Pin & output) |
| virtual void | onPlug(Node * fromNode, Node * toNode, size_t fromIndex, size_t toIndex) |
| virtual void | onUnplug(Node * fromNode, Node * toNode, size_t fromIndex, size_t toIndex) |
| virtual void | onUpdate() |
| template <typename T > <br>void | setInternalValue(const T & value, size_t index =0)<br>Sets the node value without validation. |
| void | setInternalValue(float value, glm::ivec2 coordinates, size_t index =0) |
| bool | shouldPulse(size_t inputIndex, size_t updatedInputIndex)<br>Tests if the updatedInputIndex should be pulsed. |
| void | triggerDeleteCallback(Node * node) |
| void | triggerPlugCallback(Node * fromNode, Node * toNode, size_t fromIndex, size_t toIndex) |
| void | triggerUnplugCallback(Node * fromNode, Node * toNode, size_t fromIndex, size_t toIndex) |
| void | triggerUpdateCallback(Node * node) |
Public Attributes inherited from Core::Node
| Name | |
|---|---|
| std::vector< EValueState > | m_OperatorState |
Protected Attributes inherited from Core::Node
| Name | |
|---|---|
| bool | finalized |
| std::vector< Node * > | m_children <br>Nested nodes. |
| ID | m_id |
| std::vector< Pin > | m_inputs <br>Inputs of the box: Input tabs with glyphs. |
| std::vector< Data > | m_internalData <br>Results of operations. |
| Operation | m_operation <br>Operator node properties. |
| std::vector< Pin > | m_outputs <br>Outputs of the box: output tabs with glyphs. |
| Node * | m_owner <br>Owner of the node, used in complex type of nodes, such as sequence or camera. |
| TrackedNodeData * | m_trackingData <br>Reference to additional tracking data if applicable, nullptr indicates no active tracking operation. |
Friends inherited from Core::Node
| Name | |
|---|---|
| class | Pin |
Public Functions Documentation
function Transform
explicit Transform(
const TransformOperation & transformType
)function createDefaults
void createDefaults()Prepare storage for second level parameters (std::map with values)
function disableSynergies
inline void disableSynergies()function enableSynergies
inline void enableSynergies()function free
inline void free()function getCurrentIndex
inline int getCurrentIndex() constfunction getCurrentSequence
Ptr< Node > getCurrentSequence()function getDefaultTypes
TransformOperation::ValueMap getDefaultTypes() constReturn: A map of valueName and value pairs.
function getDefaultValue
const Data & getDefaultValue(
const std::string & name
) constGet the value which the transform can hold (current value stored in the transformation).
Todo: rename to getCurrentValue?
Precondition: Default value with name exists.
It is not the initial value!
function getDefaultValues
DefaultValues & getDefaultValues()function getValueState
EValueState getValueState(
glm::ivec2 coords
) constfunction hasMenuSynergies
inline bool hasMenuSynergies() constfunction hasSavedValue
bool hasSavedValue() constfunction hasSynergies
inline bool hasSynergies() constfunction initDefaults
inline virtual void initDefaults()Init the (non-zero) second level parameters (from LOD::SetValues) via their initDefaults and update the internal transformation matrix).
Reimplemented by: Core::TransformImpl< ETransformType::Scale >::initDefaults, Core::TransformImpl< ETransformType::EulerX >::initDefaults, Core::TransformImpl< ETransformType::EulerY >::initDefaults, Core::TransformImpl< ETransformType::EulerZ >::initDefaults, Core::TransformImpl< ETransformType::Translation >::initDefaults, Core::TransformImpl< ETransformType::AxisAngle >::initDefaults, Core::TransformImpl< ETransformType::Quat >::initDefaults, Core::TransformImpl< ETransformType::Ortho >::initDefaults, Core::TransformImpl< ETransformType::Perspective >::initDefaults, Core::TransformImpl< ETransformType::Frustum >::initDefaults, Core::TransformImpl< ETransformType::Viewport >::initDefaults, Core::TransformImpl< ETransformType::LookAt >::initDefaults
It is overriden in all transforms with their default values. This version is for nodes without the default value (now only the Free node)
- It resets the matrix to identity.
- this is done in free->resetMatrixFromDefaults()
function isInSequence
inline bool isInSequence() constfunction isLocked
bool isLocked() constfunction isValid
virtual bool isValid() const =0Checks the validity of the stored Transform matrix (used by GUI to show the corrupted flag).
Return: true if the stored matrix represents a correct transform
Todo: isValid checks matrix AND parameters from the SetValues LOD (Default values)
Reimplemented by: Core::TransformImpl< ETransformType::Free >::isValid, Core::TransformImpl< ETransformType::Scale >::isValid, Core::TransformImpl< ETransformType::EulerX >::isValid, Core::TransformImpl< ETransformType::EulerY >::isValid, Core::TransformImpl< ETransformType::EulerZ >::isValid, Core::TransformImpl< ETransformType::Translation >::isValid, Core::TransformImpl< ETransformType::AxisAngle >::isValid, Core::TransformImpl< ETransformType::Quat >::isValid, Core::TransformImpl< ETransformType::Ortho >::isValid, Core::TransformImpl< ETransformType::Perspective >::isValid, Core::TransformImpl< ETransformType::Frustum >::isValid, Core::TransformImpl< ETransformType::Viewport >::isValid, Core::TransformImpl< ETransformType::LookAt >::isValid
function lock
void lock()function notifySequence
void notifySequence()function nullSequence
inline void nullSequence()Todo: MH these should not be public.
function properties
TransformOperation * properties() constfunction reloadValue
void reloadValue()Restore saved values if they exist.
function resetMatrixFromDefaults
virtual void resetMatrixFromDefaults() =0Reset the transform matrix visible in LOD::Full (internalValue) to match the defaultValues (from LOD::SetValues).
Todo: For synergies, it has to be resolved. Most probably, it should leave the synergies unchanged.
- for Scale When setting X value in non-uniform scale -> this switch to uniform scale (due to enable synergies)
Reimplemented by: Core::TransformImpl< ETransformType::Free >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Scale >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::EulerX >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::EulerY >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::EulerZ >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Translation >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::AxisAngle >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Quat >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Ortho >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Perspective >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Frustum >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::Viewport >::resetMatrixFromDefaults, Core::TransformImpl< ETransformType::LookAt >::resetMatrixFromDefaults
Specialized functions are created for each Transform type. For transforms with no default values (now only Free), resets the matrix directly.
The opposite setup - from matrix to Defaults - is done in the setValue() functions. It should also lock the matrix.
function saveValue
void saveValue()Save current values of the transformation for future reloading.
function setDefaultValue
template <typename T >
inline SetValueResult setDefaultValue(
const std::string & name,
T && val
)Setting of one second level parameter defining the transformation (in LOD::SetValues).
Parameters:
- name Name of the parameter (such as Center)
- val New value
Template Parameters:
- T Type of the stored value val
You can find transform names, types, and their default values, in the file Core/Nodes/Operation.h. The initial values are hard-wired in initDefaults() of TransformImpl<ETransformType...> in TransformImpl.h
function setDefaultValueNoUpdate
template <typename T >
inline void setDefaultValueNoUpdate(
const std::string & name,
T && val
)function setDefaultValues
inline void setDefaultValues(
const DefaultValues & values
)function setSequence
inline void setSequence(
Node * s,
int index
)function setValue
virtual SetValueResult setValue(
const glm::mat4 & mat
) overrideLock non-editable values.
Reimplements: Core::Node::setValue
Reimplemented by: Core::TransformImpl< ETransformType::AxisAngle >::setValue, Core::TransformImpl< ETransformType::Quat >::setValue
And enable synergies, if exist, i.e., hasSynergies() == true
function setValue
virtual SetValueResult setValue(
float val,
glm::ivec2 coords
) overrideParameters:
- val new value
- coords in the column major order: coords.x is the column index and coords.y is the row index.
Return:
Reimplements: Core::Node::setValue
Reimplemented by: Core::TransformImpl< ETransformType::Free >::setValue, Core::TransformImpl< ETransformType::Scale >::setValue, Core::TransformImpl< ETransformType::EulerX >::setValue, Core::TransformImpl< ETransformType::EulerY >::setValue, Core::TransformImpl< ETransformType::EulerZ >::setValue, Core::TransformImpl< ETransformType::Translation >::setValue, Core::TransformImpl< ETransformType::Ortho >::setValue, Core::TransformImpl< ETransformType::Perspective >::setValue, Core::TransformImpl< ETransformType::Frustum >::setValue, Core::TransformImpl< ETransformType::Viewport >::setValue
function unlock
void unlock()Protected Functions Documentation
function canSetValue
bool canSetValue(
const ValueMask & mask,
glm::ivec2 coords,
float value
)function getDefaultValueMut
Data & getDefaultValueMut(
const std::string & name
)Precondition: Default value with name exists.
function setDefaultValueWithSynergies
virtual void setDefaultValueWithSynergies(
const std::string & name,
Core::Data && val
)Function for setting values in the Set Defaults LOD.
Parameters:
- name changed data field
- val newValue as Core::Data(newValue)!!! (as we cannot have virtual template functions)
Reimplemented by: Core::TransformImpl< ETransformType::Quat >::setDefaultValueWithSynergies, Core::TransformImpl< ETransformType::Ortho >::setDefaultValueWithSynergies, Core::TransformImpl< ETransformType::Frustum >::setDefaultValueWithSynergies
Performs default data correction based on synergies Do not use - use setDefaultValue() instead!!!
Protected Attributes Documentation
variable m_defaultValues
DefaultValues m_defaultValues;variable m_hasMenuSynergies
bool m_hasMenuSynergies = false;True for transformations, that support synergies, such as scale, eulerAngleXYZ, ortho, frustum, and quaternion ONLY.
Synergies variants | Transformation | hasMenuSynergies | show in Full LOD | show in SetValues | synergies force | | ------------—|---------------—|---------------—|----------------—|--------------—| | Free | no | no | no | | | Translate | no | no | no | | | AxisAngle rot | no | no | no | | | LookAt | no | no | no | | | Perspective | no | no | no | | | Ortho | yes | no | yes | | | Frustum | yes | no | yes | | | Quat | yes | no | yes | unitQuaternion | | Scale | yes | yes | yes | uniform scale | | EulerX,Y,Z | yes | yes | no | cos and sins |
variable m_hasSynergies
bool m_hasSynergies = false;applicable for: uniform scale, eulerAngleXYZ, ortho, frustum, and quat and quaternion.
All other undefined (false)
variable m_isLocked
bool m_isLocked = true;Edit of the matrix is limited to editable values - defined in Operations.h g_transforms.
Friends
friend GraphManager
friend class GraphManager(
GraphManager
);friend MatrixTracker
friend class MatrixTracker(
MatrixTracker
);friend Sequence
friend class Sequence(
Sequence
);Updated on 2026-09-11 at 21:24:26 +0000