SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SLTransformNode Class Reference

Class that holds all visible gizmo node during mouse transforms. More...

#include <SLTransformNode.h>

Inheritance diagram for SLTransformNode:
[legend]

Public Member Functions

 SLTransformNode (SLSceneView *sv, SLNode *targetNode, SLstring shaderDir)
 Construct a new SLTransformNode::SLTransformNode object *. More...
 
 ~SLTransformNode () override
 
virtual SLbool onMouseDown (SLMouseButton button, SLint x, SLint y, SLKey mod) override
 onMouseDown event handler during editing interaction More...
 
virtual SLbool onMouseUp (SLMouseButton button, SLint x, SLint y, SLKey mod) override
 onMouseUp event handler during editing interaction More...
 
virtual SLbool onMouseMove (SLMouseButton button, SLint x, SLint y, SLKey mod) override
 onMouseMove event handler during editing interaction More...
 
virtual void editMode (SLNodeEditMode editMode)
 
SLNodetargetNode ()
 
SLNodeEditMode editMode ()
 
- Public Member Functions inherited from SLNode
 SLNode (const SLstring &name="Node")
 Construct a new SLNode::SLNode object. More...
 
 SLNode (SLMesh *mesh, const SLstring &name="Node")
 
 SLNode (SLMesh *mesh, const SLVec3f &translation, const SLstring &name)
 
 ~SLNode () override
 
virtual void cull3DRec (SLSceneView *sv)
 
virtual void cullChildren3D (SLSceneView *sv)
 Initializer function to call SLNode::cull3DRec recursively. More...
 
virtual void cull2DRec (SLSceneView *sv)
 
virtual bool hitRec (SLRay *ray)
 
virtual void statsRec (SLNodeStats &stats)
 
virtual SLNodecopyRec ()
 
virtual SLAABBoxupdateAABBRec (SLbool updateAlsoAABBinOS)
 
virtual void dumpRec ()
 
void setDrawBitsRec (SLuint bit, SLbool state)
 
void setPrimitiveTypeRec (SLGLPrimitiveType primitiveType)
 
virtual void addMesh (SLMesh *mesh)
 
virtual void drawMesh (SLSceneView *sv)
 Draws the single mesh. More...
 
bool removeMesh ()
 Returns true if a mesh was assigned and set it to nullptr. More...
 
bool removeMesh (SLMesh *mesh)
 Returns true if the passed mesh was assigned and sets it to nullptr. More...
 
SLint numChildren ()
 
void addChild (SLNode *child)
 
bool insertChild (SLNode *insertC, SLNode *afterC)
 
void deleteChildren ()
 
bool deleteChild ()
 
bool deleteChild (SLNode *child)
 
bool deleteChild (const SLstring &name)
 
bool removeChild (SLNode *child)
 remove child from vector of children. Removes false if not found, else true. More...
 
template<typename T >
T * find (const SLstring &name="", SLbool findRecursive=true)
 
template<typename T >
T * findChild (const SLstring &name="", SLbool findRecursive=true)
 
template<typename T >
deque< T * > findChildren (const SLstring &name="", SLbool findRecursive=true, SLbool canContain=false)
 
deque< SLNode * > findChildren (const SLMesh *mesh, SLbool findRecursive=true)
 
deque< SLNode * > findChildren (SLuint drawbit, SLbool findRecursive=true)
 
SLVec3f translationOS () const
 
SLVec3f forwardOS () const
 
SLVec3f rightOS () const
 
SLVec3f upOS () const
 
SLVec3f axisXOS () const
 
SLVec3f axisYOS () const
 
SLVec3f axisZOS () const
 
SLVec3f translationWS () const
 
SLVec3f forwardWS () const
 
SLVec3f rightWS () const
 
SLVec3f upWS () const
 
SLVec3f axisXWS () const
 
SLVec3f axisYWS () const
 
SLVec3f axisZWS () const
 
void translation (const SLVec3f &pos, SLTransformSpace relativeTo=TS_parent)
 
void translation (SLfloat x, SLfloat y, SLfloat z, SLTransformSpace relativeTo=TS_parent)
 
void rotation (const SLQuat4f &rot, SLTransformSpace relativeTo=TS_parent)
 
void rotation (SLfloat angleDeg, const SLVec3f &axis, SLTransformSpace relativeTo=TS_parent)
 
void scaling (SLfloat s)
 
void scaling (SLfloat x, SLfloat y, SLfloat z)
 
void scaling (const SLVec3f &scaling)
 
void lookAt (SLfloat targetX, SLfloat targetY, SLfloat targetZ, SLfloat upX=0, SLfloat upY=1, SLfloat upZ=0, SLTransformSpace relativeTo=TS_world)
 
void lookAt (const SLVec3f &target, const SLVec3f &up=SLVec3f::AXISY, SLTransformSpace relativeTo=TS_world)
 
void translate (const SLVec3f &vec, SLTransformSpace relativeTo=TS_object)
 
void translate (SLfloat x, SLfloat y, SLfloat z, SLTransformSpace relativeTo=TS_object)
 
void rotate (const SLQuat4f &rot, SLTransformSpace relativeTo=TS_object)
 
void rotate (SLfloat angleDeg, const SLVec3f &axis, SLTransformSpace relativeTo=TS_object)
 
void rotate (SLfloat angleDeg, SLfloat x, SLfloat y, SLfloat z, SLTransformSpace relativeTo=TS_object)
 
void rotateAround (const SLVec3f &point, SLVec3f &axis, SLfloat angleDeg, SLTransformSpace relativeTo=TS_world)
 
void scale (SLfloat s)
 
void scale (SLfloat x, SLfloat y, SLfloat z)
 
void scale (const SLVec3f &scale)
 
void scaleToCenter (SLfloat maxDim)
 
void setInitialState ()
 
void resetToInitialState ()
 
void parent (SLNode *p)
 
void entityID (SLint entityID)
 
void om (const SLMat4f &mat)
 
void animation (SLAnimation *a)
 
void castsShadows (SLbool castsShadows)
 
virtual void needUpdate ()
 
void needWMUpdate ()
 
void needAABBUpdate ()
 
void isSelected (bool isSelected)
 
void minLodCoverage (SLfloat minLodCoverage)
 
void levelForSM (SLubyte lfsm)
 
void onUpdateCB (function< void()> callbackFunc)
 
SLNodeparent ()
 
SLint depth () const
 
SLint entityID () const
 
const SLMat4fom ()
 
const SLMat4finitialOM ()
 
const SLMat4fupdateAndGetWM () const
 
const SLMat4fupdateAndGetWMI () const
 
SLDrawBitsdrawBits ()
 
SLbool drawBit (SLuint bit)
 
SLAABBoxaabb ()
 
SLAnimationanimation ()
 
SLbool castsShadows ()
 
SLMeshmesh ()
 
SLVNodechildren ()
 
const SLAnimSkeletonskeleton ()
 Returns the first skeleton found in the meshes. More...
 
void updateRec ()
 
virtual void doUpdate ()
 
bool updateMeshSkins (bool forceCPUSkinning, const std::function< void(SLMesh *)> &cbInformNodes)
 Update all skinned meshes recursively. More...
 
void updateMeshAccelStructs ()
 
void updateMeshMat (std::function< void(SLMaterial *m)> setMat, bool recursive)
 Updates the mesh material recursively with a material lambda. More...
 
void setMeshMat (SLMaterial *mat, bool recursive)
 Set the mesh material recursively. More...
 
bool isSelected ()
 
SLfloat minLodCoverage ()
 
SLubyte levelForSM ()
 
- Public Member Functions inherited from SLObject
 SLObject (const SLstring &Name="", const SLstring &url="")
 
virtual ~SLObject ()
 
void name (const SLstring &Name)
 
void url (const SLstring &url)
 
const SLstringname () const
 
const SLstringurl () const
 
- Public Member Functions inherited from SLEventHandler
 SLEventHandler ()
 
virtual ~SLEventHandler ()
 
virtual SLbool onDoubleClick (const SLMouseButton button, const SLint x, const SLint y, const SLKey mod)
 
virtual SLbool onMouseWheel (const SLint delta, const SLKey mod)
 
virtual SLbool onTouch2Down (const SLint x1, const SLint y1, const SLint x2, const SLint y2)
 
virtual SLbool onTouch2Move (const SLint x1, const SLint y1, const SLint x2, const SLint y2)
 
virtual SLbool onTouch2Up (const SLint x1, const SLint y1, const SLint x2, const SLint y2)
 
virtual SLbool onTouch3Down (const SLint x1, const SLint y1)
 
virtual SLbool onTouch3Move (const SLint x1, const SLint y1)
 
virtual SLbool onTouch3Up (const SLint x1, const SLint y1)
 
virtual SLbool onKeyPress (const SLKey key, const SLKey mod)
 
virtual SLbool onKeyRelease (const SLKey key, const SLKey mod)
 
virtual SLbool onRotationPYR (const SLfloat pitchRAD, const SLfloat yawRAD, const SLfloat rollRAD)
 
void mouseRotationFactor (SLfloat rf)
 
SLfloat mouseRotationFactor ()
 

Private Member Functions

bool getClosestPointsBetweenRays (const SLVec3f &ray1O, const SLVec3f &ray1Dir, const SLVec3f &ray2O, const SLVec3f &ray2Dir, SLVec3f &ray1P, float &t1, SLVec3f &ray2P, float &t2)
 
bool getClosestPointOnAxis (const SLVec3f &pickRayO, const SLVec3f &pickRayDir, const SLVec3f &axisRayO, const SLVec3f &axisRayDir, SLVec3f &axisPoint)
 
bool rayDiscIntersect (const SLVec3f &rayO, const SLVec3f &rayDir, const SLVec3f &discO, const SLVec3f &discN, const float &distR, float &t)
 
bool rayPlaneIntersect (const SLVec3f &rayO, const SLVec3f &rayDir, const SLVec3f &discO, const SLVec3f &discN, float &t)
 
bool isCCW (const SLVec2f &a, const SLVec2f &b, const SLVec2f &c)
 
void setDrawBitRecursive (SLuint bit, SLNode *node, bool value)
 
void lookAt (SLNode *node, SLCamera *camera)
 

Private Attributes

SLSceneView_sv = nullptr
 
SLNode_targetNode = nullptr
 
SLNodeEditMode _editMode
 
SLMaterial_matR = nullptr
 
SLMaterial_matG = nullptr
 
SLMaterial_matB = nullptr
 
SLMaterial_matY = nullptr
 
SLMaterial_matRT = nullptr
 
SLMaterial_matGT = nullptr
 
SLMaterial_matBT = nullptr
 
SLMaterial_matYT = nullptr
 
SLMesh_axisR = nullptr
 
SLMesh_axisG = nullptr
 
SLMesh_axisB = nullptr
 
SLMesh_lineR = nullptr
 
SLMesh_lineG = nullptr
 
SLMesh_lineB = nullptr
 
SLMesh_circR = nullptr
 
SLMesh_circG = nullptr
 
SLMesh_circB = nullptr
 
SLMesh_circY = nullptr
 
SLMesh_diskR = nullptr
 
SLMesh_diskG = nullptr
 
SLMesh_diskB = nullptr
 
SLMesh_diskY = nullptr
 
bool _mouseIsDown
 
float _gizmoScale
 
SLVec3f _hitCoordinate
 
SLNode_selectedGizmo = nullptr
 
SLNode_transGizmos = nullptr
 
SLNode_transLineX = nullptr
 
SLNode_transLineY = nullptr
 
SLNode_transLineZ = nullptr
 
SLNode_scaleGizmos = nullptr
 
SLNode_scaleDisk = nullptr
 
SLNode_scaleCirc = nullptr
 
SLNode_rotGizmos = nullptr
 
SLNode_rotCircX = nullptr
 
SLNode_rotDiskX = nullptr
 
SLNode_rotCircY = nullptr
 
SLNode_rotDiskY = nullptr
 
SLNode_rotCircZ = nullptr
 
SLNode_rotDiskZ = nullptr
 
SLNode_gizmosNode = nullptr
 

Additional Inherited Members

- Static Public Attributes inherited from SLNode
static SLuint numWMUpdates = 0
 NO. of calls to updateWMRec per frame. More...
 
static unsigned int instanceIndex = 0
 ??? More...
 
- Protected Attributes inherited from SLNode
SLNode_parent
 pointer to the parent node More...
 
SLVNode _children
 vector of children nodes More...
 
SLMesh_mesh
 pointer to a single mesh More...
 
SLint _depth
 depth of the node in a scene tree More...
 
SLint _entityID
 ID in the SLVEntity graph for Data Oriented Design. More...
 
SLMat4f _om
 object matrix for local transforms More...
 
SLMat4f _initialOM
 the initial om state More...
 
SLMat4f _wm
 world matrix for world transform More...
 
SLMat4f _wmI
 inverse world matrix More...
 
SLbool _isWMUpToDate
 is the WM of this node still valid More...
 
SLbool _isWMIUpToDate
 is the inverse WM of this node still valid More...
 
SLbool _isAABBUpToDate
 is the saved aabb still valid More...
 
bool _castsShadows
 flag if meshes of node should cast shadows More...
 
bool _isSelected
 flag if node and one or more of its meshes are selected More...
 
SLDrawBits _drawBits
 node level drawing flags More...
 
SLAABBox _aabb
 axis aligned bounding box More...
 
SLAnimation_animation
 animation of the node More...
 
SLfloat _minLodCoverage
 Min. LOD coverage for visibility (0.0 < _minLodCoverage < 1.0) More...
 
SLubyte _levelForSM
 Level of LOD to use for shadow mapping (0 = the visible one will be drawn) More...
 
function< void()> _onUpdateCB
 Optional lambda callback once per update. More...
 
- Protected Attributes inherited from SLObject
SLstring _name
 name of an object More...
 
SLstring _url
 uniform resource locator More...
 
- Protected Attributes inherited from SLEventHandler
SLfloat _mouseRotationFactor
 Mouse rotation sensibility. More...
 
SLfloat _keyboardDeltaPos
 Delta dist. for keyboard translation. More...
 

Detailed Description

Class that holds all visible gizmo node during mouse transforms.

An SLTransformNode is added to the scenegraph during edit mode. Depending on the transform type (translation, rotation or scaling) arrows or disks and circles get shown or hidden. The transform node gets added and removed on the fly. So the assets have to be delete in the destructor.

Definition at line 32 of file SLTransformNode.h.

Constructor & Destructor Documentation

◆ SLTransformNode()

SLTransformNode::SLTransformNode ( SLSceneView sv,
SLNode targetNode,
SLstring  shaderDir 
)

Construct a new SLTransformNode::SLTransformNode object *.

It is important that during instantiation NO OpenGL functions (gl*) get called because this constructor will be most probably called in a parallel thread from within an SLScene::registerAssetsToLoad or SLScene::assemble function. All objects that get rendered have to do their OpenGL initialization when they are used the first time during rendering in the main thread.

Parameters
svPointer to the SLSceneView
targetNodePointer to the node that should be transformed.
shaderDirPath to the shader files

Definition at line 30 of file SLTransformNode.cpp.

33  : SLNode("Edit Gizmos"),
34  _sv(sv),
37  _mouseIsDown(false),
38  _gizmoScale(1.0f)
39 {
41 
42  _matR = new SLMaterial(nullptr, "Red Opaque", SLCol4f::RED, SLVec4f::WHITE, 100.0f, 0.0f, 0.0f, 0.0f, prog);
43  _matRT = new SLMaterial(nullptr, "Red Transp", SLCol4f::RED, SLVec4f::WHITE, 100.0f, 0.0f, 0.5f, 0.0f, prog);
44  _matG = new SLMaterial(nullptr, "Green Opaque", SLCol4f::GREEN, SLVec4f::WHITE, 100.0f, 0.0f, 0.0f, 0.0f, prog);
45  _matGT = new SLMaterial(nullptr, "Green Transp", SLCol4f::GREEN, SLVec4f::WHITE, 100.0f, 0.0f, 0.5f, 0.0f, prog);
46  _matB = new SLMaterial(nullptr, "Blue Opaque", SLCol4f::BLUE, SLVec4f::WHITE, 100.0f, 0.0f, 0.0f, 0.0f, prog);
47  _matBT = new SLMaterial(nullptr, "Blue Transp", SLCol4f::BLUE, SLVec4f::WHITE, 100.0f, 0.0f, 0.5f, 0.0f, prog);
48  _matY = new SLMaterial(nullptr, "Yellow Opaque", SLCol4f::YELLOW, SLVec4f::WHITE, 100.0f, 0.0f, 0.0f, 0.0f, prog);
49  _matYT = new SLMaterial(nullptr, "Yellow Transp", SLCol4f::YELLOW, SLVec4f::WHITE, 100.0f, 0.0f, 0.5f, 0.0f, prog);
50 
51  _axisR = new SLCoordAxisArrow(nullptr, _matRT);
52  _axisG = new SLCoordAxisArrow(nullptr, _matGT);
53  _axisB = new SLCoordAxisArrow(nullptr, _matBT);
54  SLNode* transAxisX = new SLNode(_axisR, "x-axis node");
55  SLNode* transAxisY = new SLNode(_axisG, "y-axis node");
56  SLNode* transAxisZ = new SLNode(_axisB, "z-axis node");
57  transAxisX->rotate(-90.0f, SLVec3f(0.0f, 0.0f, 1.0f));
58  transAxisZ->rotate(90.0f, SLVec3f(1.0f, 0.0f, 0.0f));
59  transAxisX->castsShadows(false);
60  transAxisY->castsShadows(false);
61  transAxisZ->castsShadows(false);
62 
63  SLVec3f startPoint = SLVec3f(0.0f, 0.0f, -1.0f);
64  SLVec3f endPoint = SLVec3f(0.0f, 0.0f, 1.0f);
65  SLVVec3f points;
66  points.push_back(startPoint);
67  points.push_back(endPoint);
68 
69  _lineR = new SLPolyline(nullptr, points, false, "Translation Line Mesh X", _matR);
70  _transLineX = new SLNode(_lineR);
71  _transLineX->rotate(90.0f, SLVec3f(0.0f, 1.0f, 0.0f));
72  _transLineX->scale(1000.0f);
73  _transLineX->castsShadows(false);
74 
75  _lineG = new SLPolyline(nullptr, points, false, "Translation Line Mesh Y", _matG);
76  _transLineY = new SLNode(_lineG);
77  _transLineY->rotate(-90.0f, SLVec3f(1.0f, 0.0f, 0.0f));
78  _transLineY->scale(1000.0f);
79  _transLineY->castsShadows(false);
80 
81  _lineB = new SLPolyline(nullptr, points, false, "Translation Line Mesh Z", _matB);
82  _transLineZ = new SLNode(_lineB);
83  _transLineZ->scale(1000.0f);
84  _transLineZ->castsShadows(false);
85 
86  _circY = new SLCircle(nullptr, "Scale Circle Mesh", _matY);
87  _scaleCirc = new SLNode(_circY, "Scale Circle");
88  _scaleCirc->castsShadows(false);
89  _diskY = new SLDisk(nullptr, 1.0f, SLVec3f::AXISZ, 36U, true, "Scale Disk", _matYT);
90  _scaleDisk = new SLNode(_diskY, "Scale Disk");
91  _scaleDisk->castsShadows(false);
92 
93  _circR = new SLCircle(nullptr, "Rotation Circle Mesh X", _matR);
94  _rotCircX = new SLNode(_circR, "Rotation Circle X");
95  _rotCircX->castsShadows(false);
96  _diskR = new SLDisk(nullptr, 1.0f, SLVec3f::AXISZ, 36U, true, "Rotation Disk X", _matRT);
97  _rotDiskX = new SLNode(_diskR, "Rotation Disk X");
98  _rotDiskX->castsShadows(false);
99  _circG = new SLCircle(nullptr, "Rotation Circle Mesh Y", _matG);
100  _rotCircY = new SLNode(_circG, "Rotation Circle Y");
101  _rotCircY->castsShadows(false);
102  _diskG = new SLDisk(nullptr, 1.0f, SLVec3f::AXISZ, 36U, true, "Rotation Disk Y", _matGT);
103  _rotDiskY = new SLNode(_diskG, "Rotation Disk Y");
104  _rotDiskY->castsShadows(false);
105  _circB = new SLCircle(nullptr, "Rotation Circle Mesh Z", _matB);
106  _rotCircZ = new SLNode(_circB, "Rotation Circle Z");
107  _rotCircZ->castsShadows(false);
108  _diskB = new SLDisk(nullptr, 1.0f, SLVec3f::AXISZ, 36U, true, "Rotation Disk Z", _matBT);
109  _rotDiskZ = new SLNode(_diskB, "Rotation Disk Z");
110  _rotDiskZ->castsShadows(false);
111 
112  SLNode* rotationGizmosX = new SLNode("Rotation Gizmos X");
113  rotationGizmosX->addChild(_rotCircX);
114  rotationGizmosX->addChild(_rotDiskX);
115 
116  SLNode* rotationGizmosY = new SLNode("Rotation Gizmos Y");
117  rotationGizmosY->addChild(_rotCircY);
118  rotationGizmosY->addChild(_rotDiskY);
119 
120  SLNode* rotationGizmosZ = new SLNode("Rotation Gizmos Z");
121  rotationGizmosZ->addChild(_rotCircZ);
122  rotationGizmosZ->addChild(_rotDiskZ);
123 
124  _selectedGizmo = nullptr;
125 
126  rotationGizmosX->rotate(90.0f, SLVec3f(0.0f, 1.0f, 0.0f));
127  rotationGizmosY->rotate(-90.0f, SLVec3f(1.0f, 0.0f, 0.0f));
128 
129  _transGizmos = new SLNode("Translation Gizmos");
130  _transGizmos->addChild(transAxisX);
132  _transGizmos->addChild(transAxisY);
134  _transGizmos->addChild(transAxisZ);
136 
137  _scaleGizmos = new SLNode("Scale Gizmos");
140 
141  _rotGizmos = new SLNode("Rotation Gizmos");
142  _rotGizmos->addChild(rotationGizmosX);
143  _rotGizmos->addChild(rotationGizmosY);
144  _rotGizmos->addChild(rotationGizmosZ);
145 
146  _gizmosNode = new SLNode("Gizmos");
150  this->addChild(_gizmosNode);
151 
152  this->updateAABBRec(true);
153 
155 
156  _sv->s()->eventHandlers().push_back(this);
157 }
#define SL_DB_OVERDRAW
Draw node over all other nodes.
Definition: SLDrawBits.h:29
@ SP_colorUniformPoint
@ NodeEditMode_None
vector< SLVec3f > SLVVec3f
Definition: SLVec3.h:325
SLVec3< SLfloat > SLVec3f
Definition: SLVec3.h:318
Circle line mesh derived from SLPolyline.
Definition: SLCircle.h:27
Single arrow for coordinate axis.
SLDisk creates a disk mesh based on SLRevolver.
Definition: SLDisk.h:27
Encapsulation of an OpenGL shader program object.
Definition: SLGLProgram.h:56
static SLGLProgramGeneric * get(SLStdShaderProg id)
Get program reference for given id.
Defines a standard CG material with textures and a shader program.
Definition: SLMaterial.h:56
SLNode represents a node in a hierarchical scene graph.
Definition: SLNode.h:147
void addChild(SLNode *child)
Definition: SLNode.cpp:207
void rotate(const SLQuat4f &rot, SLTransformSpace relativeTo=TS_object)
Definition: SLNode.cpp:945
void scale(SLfloat s)
Definition: SLNode.h:640
void castsShadows(SLbool castsShadows)
Definition: SLNode.h:282
SLNode(const SLstring &name="Node")
Construct a new SLNode::SLNode object.
Definition: SLNode.cpp:40
virtual SLAABBox & updateAABBRec(SLbool updateAlsoAABBinOS)
Definition: SLNode.cpp:731
SLPolyline creates a polyline object.
Definition: SLPolyline.h:23
SLVEventHandler & eventHandlers()
Definition: SLScene.h:105
SceneView class represents a dynamic real time 3D view onto the scene.
Definition: SLSceneView.h:69
SLScene * s()
Definition: SLSceneView.h:167
SLSceneView * _sv
SLNode * _transLineZ
SLNode * targetNode()
SLNodeEditMode _editMode
SLNode * _targetNode
SLNode * _transLineY
SLMaterial * _matB
SLMaterial * _matBT
SLNode * _transLineX
SLMaterial * _matRT
void setDrawBitRecursive(SLuint bit, SLNode *node, bool value)
SLNode * _transGizmos
SLMaterial * _matYT
SLMaterial * _matY
SLNode * _selectedGizmo
SLMaterial * _matGT
SLNode * _scaleGizmos
SLMaterial * _matR
SLMaterial * _matG
static SLVec3 AXISZ
Definition: SLVec3.h:299
static SLVec4 GREEN
Definition: SLVec4.h:217
static SLVec4 WHITE
Definition: SLVec4.h:215
static SLVec4 YELLOW
Definition: SLVec4.h:219
static SLVec4 RED
Definition: SLVec4.h:216
static SLVec4 BLUE
Definition: SLVec4.h:218

◆ ~SLTransformNode()

SLTransformNode::~SLTransformNode ( )
override

Destructor for a transform node. Because a transform node will be added and removed on the fly to the scenegraph it is the owner of its meshes (SLMesh), materials (SLMaterial) and shader programs (SLGLProgram). It has to delete them in here.

Definition at line 165 of file SLTransformNode.cpp.

166 {
167  // delete gizmos
169  this->deleteChild(_gizmosNode);
170  this->deleteChildren();
171 
172  // delete all materials and meshes
173  delete _matR;
174  delete _matG;
175  delete _matB;
176  delete _matY;
177  delete _matRT;
178  delete _matGT;
179  delete _matBT;
180  delete _matYT;
181  delete _axisR;
182  delete _axisG;
183  delete _axisB;
184  delete _lineR;
185  delete _lineG;
186  delete _lineB;
187  delete _circR;
188  delete _circG;
189  delete _circB;
190  delete _circY;
191  delete _diskR;
192  delete _diskG;
193  delete _diskB;
194  delete _diskY;
195 }
void deleteChildren()
Definition: SLNode.cpp:248
bool deleteChild()
Definition: SLNode.cpp:267

Member Function Documentation

◆ editMode() [1/2]

SLNodeEditMode SLTransformNode::editMode ( )
inline

Definition at line 56 of file SLTransformNode.h.

56 { return _editMode; }

◆ editMode() [2/2]

void SLTransformNode::editMode ( SLNodeEditMode  editMode)
virtual

Setter function for the edit mode. It shows or hides the appropriate gizmo meshes for the mouse interaction.

Parameters
editModeNew edit mode to switch to.

Definition at line 202 of file SLTransformNode.cpp.

203 {
205 
206  if (_editMode)
207  {
208  if (_targetNode)
209  {
211 
212  SLVec2f p1 = _sv->camera()->projectWorldToNDC(SLVec4f(_gizmosNode->translationWS()));
213  SLVec2f p2 = _sv->camera()->projectWorldToNDC(SLVec4f(_gizmosNode->translationWS() +
214  _sv->camera()->upWS().normalize()));
215 
216  float actualHeight = (p1 - p2).length();
217  float targetHeight = 0.2f; // % of screen that gizmos should occupy
218  float scaleFactor = targetHeight / actualHeight;
219 
220  _gizmosNode->scale(scaleFactor / _gizmoScale);
221  _gizmoScale = scaleFactor;
222 
224  _gizmosNode->drawBits()->set(SL_DB_HIDDEN, false);
225 
226  switch (_editMode)
227  {
229  {
231  }
232  break;
233 
234  case NodeEditMode_Scale:
235  {
236  if (_sv->camera())
237  {
238  // TODO(dgj1): this behaviour is that of a billboard... introduce in SLProject?
240  }
241 
243  }
244  break;
245 
246  case NodeEditMode_Rotate:
247  {
249  }
250  break;
251 
252  case NodeEditMode_None:
253  default:
254  {
255  }
256  break;
257  }
258  }
259  }
260  else
261  {
264  }
265 }
#define SL_DB_HIDDEN
Flags an object as hidden.
Definition: SLDrawBits.h:20
@ NodeEditMode_Translate
@ NodeEditMode_Scale
@ NodeEditMode_Rotate
SLVec4< SLfloat > SLVec4f
Definition: SLVec4.h:235
void set(SLuint bit, SLbool state)
Sets the specified bit to the passed state.
Definition: SLDrawBits.h:57
SLVec3< T > translation() const
Definition: SLMat4.h:184
void translation(const SLVec3f &pos, SLTransformSpace relativeTo=TS_parent)
Definition: SLNode.cpp:828
const SLMat4f & updateAndGetWM() const
Definition: SLNode.cpp:703
SLVec3f translationWS() const
Definition: SLNode.h:531
SLDrawBits * drawBits()
Definition: SLNode.h:299
void camera(SLCamera *camera)
Definition: SLSceneView.h:145
SLNodeEditMode editMode()
void lookAt(SLNode *node, SLCamera *camera)

◆ getClosestPointOnAxis()

bool SLTransformNode::getClosestPointOnAxis ( const SLVec3f pickRayO,
const SLVec3f pickRayDir,
const SLVec3f axisRayO,
const SLVec3f axisRayDir,
SLVec3f axisPoint 
)
private

Definition at line 648 of file SLTransformNode.cpp.

653 {
654  bool result = false;
655 
656  // Check if lines are parallel
657  SLVec3f cross;
658  cross.cross(pickRayDir, axisRayDir);
659  float den = cross.lengthSqr();
660 
661  if (den > FLT_EPSILON)
662  {
663  SLVec3f diffO = axisRayO - pickRayO;
664 
665  // clang-format off
666  SLMat3f m = SLMat3f(diffO.x, pickRayDir.x, cross.x,
667  diffO.y, pickRayDir.y, cross.y,
668  diffO.z, pickRayDir.z, cross.z);
669  // clang-format on
670 
671  float det = m.det();
672  float t = det / den;
673 
674  axisPoint = axisRayO + (axisRayDir * t);
675 
676  result = true;
677  }
678 
679  return result;
680 }
SLMat3< SLfloat > SLMat3f
Definition: SLMat3.h:746
T det() const
det returns the determinant
Definition: SLMat3.h:493
T y
Definition: SLVec3.h:43
void cross(const SLVec3 &a, const SLVec3 &b)
Definition: SLVec3.h:118
T x
Definition: SLVec3.h:43
T z
Definition: SLVec3.h:43
T lengthSqr() const
Definition: SLVec3.h:123

◆ getClosestPointsBetweenRays()

bool SLTransformNode::getClosestPointsBetweenRays ( const SLVec3f ray1O,
const SLVec3f ray1Dir,
const SLVec3f ray2O,
const SLVec3f ray2Dir,
SLVec3f ray1P,
float &  t1,
SLVec3f ray2P,
float &  t2 
)
private

Definition at line 604 of file SLTransformNode.cpp.

612 {
613  bool result = false;
614 
615  // Check if lines are parallel
616  SLVec3f cross;
617  cross.cross(ray1Dir, ray2Dir);
618  float den = cross.lengthSqr();
619 
620  // printf("den: %f, sqrt(den): %f\n", den, cross.length());
621 
622  if (den > FLT_EPSILON)
623  {
624  SLVec3f diffO = ray2O - ray1O;
625 
626  // clang-format off
627  SLMat3f m1 = SLMat3f(diffO.x, ray2Dir.x, cross.x,
628  diffO.y, ray2Dir.y, cross.y,
629  diffO.z, ray2Dir.z, cross.z);
630  float det1 = m1.det();
631  t1 = det1 / den;
632  ray1P = ray1O + (ray1Dir * t1);
633 
634  SLMat3f m2 = SLMat3f(diffO.x, ray1Dir.x, cross.x,
635  diffO.y, ray1Dir.y, cross.y,
636  diffO.z, ray1Dir.z, cross.z);
637  float det2 = m2.det();
638  t2 = det2 / den;
639  ray2P = ray2O + (ray2Dir * t2);
640  // clang-format on
641 
642  result = true;
643  }
644 
645  return result;
646 }

◆ isCCW()

bool SLTransformNode::isCCW ( const SLVec2f a,
const SLVec2f b,
const SLVec2f c 
)
private

Definition at line 725 of file SLTransformNode.cpp.

728 {
729  SLVec2f ac = a - c;
730  SLVec2f bc = b - c;
731 
732  float signedArea = 0.5f * (bc.x * ac.y - ac.x * bc.y);
733  bool result = (signedArea > 0.0f);
734 
735  return result;
736 }
T y
Definition: SLVec2.h:30
T x
Definition: SLVec2.h:30

◆ lookAt()

void SLTransformNode::lookAt ( SLNode node,
SLCamera camera 
)
private

Definition at line 748 of file SLTransformNode.cpp.

749 {
750  // TODO(dgj1): this is a lookat function, because the one in SLNode doesn't work
751  // or maybe I don't understand how to use it
752  // TODO(dgj1): this is only correct for the case that the node doesn't have a scale
753  SLVec3f nodePos = node->translationWS();
754  SLVec3f nodeTarget = camera->translationWS();
755  SLVec3f nodeDir = (nodePos - nodeTarget).normalize();
756  SLVec3f up = SLVec3f(0.0f, 1.0f, 0.0f);
757  SLVec3f nodeRight = (up ^ nodeDir).normalize();
758  SLVec3f nodeUp = (nodeDir ^ nodeRight).normalize();
759 
760  SLVec3f nodeTranslation = node->om().translation();
761 
762  // clang-format off
763  SLMat4f updatedOm = SLMat4f(nodeRight.x, nodeUp.x, nodeDir.x, nodeTranslation.x,
764  nodeRight.y, nodeUp.y, nodeDir.y, nodeTranslation.y,
765  nodeRight.z, nodeUp.z, nodeDir.z, nodeTranslation.z,
766  0.0f, 0.0f, 0.0f, 1.0f);
767  // clang-format on
768 
769  node->om(updatedOm);
770 }
SLMat4< SLfloat > SLMat4f
Definition: SLMat4.h:1581
void om(const SLMat4f &mat)
Definition: SLNode.h:276

◆ onMouseDown()

SLbool SLTransformNode::onMouseDown ( SLMouseButton  button,
SLint  x,
SLint  y,
SLKey  mod 
)
overridevirtual

onMouseDown event handler during editing interaction

Reimplemented from SLEventHandler.

Definition at line 268 of file SLTransformNode.cpp.

272 {
273  bool result = false;
274 
275  if (_editMode && _selectedGizmo)
276  {
277  result = true;
278  _mouseIsDown = true;
279  }
280 
281  return result;
282 }

◆ onMouseMove()

SLbool SLTransformNode::onMouseMove ( SLMouseButton  button,
SLint  x,
SLint  y,
SLKey  mod 
)
overridevirtual

onMouseMove event handler during editing interaction

Reimplemented from SLEventHandler.

Definition at line 309 of file SLTransformNode.cpp.

313 {
314  bool result = false;
315 
316  if (_editMode)
317  {
318  if (_sv->camera())
319  {
320  switch (_editMode)
321  {
323  {
324  if (_targetNode)
325  {
326  SLRay pickRay(_sv);
327  _sv->camera()->eyeToPixelRay((SLfloat)x, (SLfloat)y, &pickRay);
328 
329  SLVec3f pickRayPoint;
330  SLVec3f axisPoint;
331  if (_mouseIsDown)
332  {
333  float t1, t2;
334  if (getClosestPointsBetweenRays(pickRay.origin,
335  pickRay.dir,
338  pickRayPoint,
339  t1,
340  axisPoint,
341  t2))
342  {
343  SLVec3f translationDiff = axisPoint - _hitCoordinate;
344  _targetNode->translate(translationDiff, TS_world);
346  _hitCoordinate = axisPoint;
347  }
348 
349  result = true;
350  }
351  else
352  {
353  _selectedGizmo = nullptr;
354 
358 
359  float nodeToCameraDist = (pickRay.origin - _transLineX->translationWS()).length();
360 
361  float dist = FLT_MAX;
362  SLVec3f axisPointCand;
363  float t1, t2;
364  float minDistToOrigin = std::min(nodeToCameraDist * 0.1f, 1.0f);
365  if (getClosestPointsBetweenRays(pickRay.origin,
366  pickRay.dir,
369  pickRayPoint,
370  t1,
371  axisPointCand,
372  t2))
373  {
374  float distCand = (axisPointCand - pickRayPoint).length();
375 
376  if (distCand < dist && distCand < (_gizmoScale * 0.1f) && t1 > minDistToOrigin)
377  {
378  dist = distCand;
380  axisPoint = axisPointCand;
381  }
382  }
383 
384  if (getClosestPointsBetweenRays(pickRay.origin,
385  pickRay.dir,
388  pickRayPoint,
389  t1,
390  axisPointCand,
391  t2))
392  {
393  float distCand = (axisPointCand - pickRayPoint).length();
394 
395  if (distCand < dist && distCand < (_gizmoScale * 0.1f) && t1 > minDistToOrigin)
396  {
397  dist = distCand;
399  axisPoint = axisPointCand;
400  }
401  }
402 
403  if (getClosestPointsBetweenRays(pickRay.origin,
404  pickRay.dir,
407  pickRayPoint,
408  t1,
409  axisPointCand,
410  t2))
411  {
412  float distCand = (axisPointCand - pickRayPoint).length();
413 
414  if (distCand < dist && distCand < (_gizmoScale * 0.1f) && t1 > minDistToOrigin)
415  {
416  dist = distCand;
418  axisPoint = axisPointCand;
419  }
420  }
421 
422  if (_selectedGizmo)
423  {
424  // printf("Selected gizmo %s with dist %f\n", _selectedGizmo->name().c_str(), dist);
426  _hitCoordinate = axisPoint;
427  }
428  }
429  }
430  }
431  break;
432 
433  case NodeEditMode_Scale:
434  {
435  // TODO(dgj1): this behaviour is that of a billboard... introduce in SLProject?
437 
438  SLRay pickRay(_sv);
439  _sv->camera()->eyeToPixelRay((SLfloat)x, (SLfloat)y, &pickRay);
440 
441  if (_targetNode)
442  {
443  if (_mouseIsDown)
444  {
445  float t = FLT_MAX;
446  if (rayPlaneIntersect(pickRay.origin,
447  pickRay.dir,
450  t))
451  {
452  SLVec3f intersectionPointWS = pickRay.origin + pickRay.dir * t;
453  SLVec3f intersectionPoint = _selectedGizmo->updateAndGetWMI() * intersectionPointWS;
454 
455  float newRadius = (intersectionPoint - _selectedGizmo->translationOS()).length();
456  float oldRadius = (_hitCoordinate - _selectedGizmo->translationOS()).length();
457  float scaleFactor = newRadius / oldRadius;
458 
459  _targetNode->scale(scaleFactor);
460  _gizmoScale *= scaleFactor;
461  _gizmosNode->scale(scaleFactor);
462  }
463 
464  result = true;
465  }
466  else
467  {
468  _selectedGizmo = nullptr;
469 
470  float t = FLT_MAX;
471  if (rayDiscIntersect(pickRay.origin,
472  pickRay.dir,
475  _gizmoScale,
476  t))
477  {
479 
480  SLVec3f intersectionPointWS = pickRay.origin + pickRay.dir * t;
481  _hitCoordinate = _scaleCirc->updateAndGetWMI() * intersectionPointWS;
482 
483  _scaleDisk->drawBits()->set(SL_DB_HIDDEN, false);
484  }
485  else
486  {
487  _scaleDisk->drawBits()->set(SL_DB_HIDDEN, true);
488  }
489  }
490  }
491  }
492  break;
493 
494  case NodeEditMode_Rotate:
495  {
496  if (_targetNode)
497  {
498  SLRay pickRay(_sv);
499  _sv->camera()->eyeToPixelRay((SLfloat)x, (SLfloat)y, &pickRay);
500 
501  if (_mouseIsDown)
502  {
503  float t = FLT_MAX;
504  if (rayPlaneIntersect(pickRay.origin, pickRay.dir, _selectedGizmo->translationWS(), _selectedGizmo->forwardWS(), t))
505  {
506  SLVec3f intersectionPointWS = pickRay.origin + pickRay.dir * t;
507  SLVec3f intersectionPoint = _selectedGizmo->updateAndGetWMI() * intersectionPointWS;
508  SLVec3f rotationStartVec = (_hitCoordinate - _selectedGizmo->translationOS()).normalize();
509  SLVec3f rotationVec = (intersectionPoint - _selectedGizmo->translationOS()).normalize();
510 
511  float angle = RAD2DEG * acos(rotationVec * rotationStartVec);
512 
513  if (angle > FLT_EPSILON || angle < -FLT_EPSILON)
514  {
515  // determine if we have to rotate ccw or cw
518  SLVec2f(intersectionPoint.x, intersectionPoint.y)))
519  {
520  angle = -angle;
521  }
522 
524 
525  _hitCoordinate = intersectionPoint;
526  }
527  }
528 
529  result = true;
530  }
531  else
532  {
533  _rotDiskX->drawBits()->set(SL_DB_HIDDEN, true);
534  _rotDiskY->drawBits()->set(SL_DB_HIDDEN, true);
535  _rotDiskZ->drawBits()->set(SL_DB_HIDDEN, true);
536 
537  _selectedGizmo = nullptr;
538 
539  float t = FLT_MAX;
540  float tCand = FLT_MAX;
541  if (rayDiscIntersect(pickRay.origin,
542  pickRay.dir,
544  _rotDiskX->forwardWS(),
545  _gizmoScale,
546  tCand))
547  {
549  t = tCand;
550  }
551 
552  if (rayDiscIntersect(pickRay.origin,
553  pickRay.dir,
555  _rotDiskY->forwardWS(),
556  _gizmoScale,
557  tCand))
558  {
559  if (tCand < t)
560  {
562  t = tCand;
563  }
564  }
565 
566  if (rayDiscIntersect(pickRay.origin,
567  pickRay.dir,
569  _rotDiskZ->forwardWS(),
570  _gizmoScale,
571  tCand))
572  {
573  if (tCand < t)
574  {
576  t = tCand;
577  }
578  }
579 
580  if (_selectedGizmo)
581  {
582  SLVec3f intersectionPointWS = pickRay.origin + pickRay.dir * t;
583  _hitCoordinate = _selectedGizmo->updateAndGetWMI() * intersectionPointWS;
584 
586  }
587  }
588  }
589  }
590  break;
591 
592  case NodeEditMode_None:
593  default:
594  {
595  }
596  break;
597  }
598  }
599  }
600 
601  return result;
602 }
float SLfloat
Definition: SL.h:173
@ TS_world
Definition: SLEnums.h:208
SLVec2< SLfloat > SLVec2f
Definition: SLVec2.h:141
SLVec3f translationOS() const
Definition: SLNode.h:468
const SLMat4f & updateAndGetWMI() const
Definition: SLNode.cpp:714
SLVec3f forwardWS() const
Definition: SLNode.h:541
void translate(const SLVec3f &vec, SLTransformSpace relativeTo=TS_object)
Definition: SLNode.cpp:906
Ray class with ray and intersection properties.
Definition: SLRay.h:40
bool getClosestPointsBetweenRays(const SLVec3f &ray1O, const SLVec3f &ray1Dir, const SLVec3f &ray2O, const SLVec3f &ray2Dir, SLVec3f &ray1P, float &t1, SLVec3f &ray2P, float &t2)
bool rayPlaneIntersect(const SLVec3f &rayO, const SLVec3f &rayDir, const SLVec3f &discO, const SLVec3f &discN, float &t)
bool rayDiscIntersect(const SLVec3f &rayO, const SLVec3f &rayDir, const SLVec3f &discO, const SLVec3f &discN, const float &distR, float &t)
bool isCCW(const SLVec2f &a, const SLVec2f &b, const SLVec2f &c)
SLVec3f _hitCoordinate
SLVec3 & normalize()
Definition: SLVec3.h:124
static const float RAD2DEG
Definition: Utils.h:238

◆ onMouseUp()

SLbool SLTransformNode::onMouseUp ( SLMouseButton  button,
SLint  x,
SLint  y,
SLKey  mod 
)
overridevirtual

onMouseUp event handler during editing interaction

Reimplemented from SLEventHandler.

Definition at line 285 of file SLTransformNode.cpp.

289 {
290  bool result = false;
291 
292  if (_editMode && _mouseIsDown)
293  {
294  result = true;
295 
296  if (_targetNode)
297  {
299  }
300 
301  _selectedGizmo = nullptr;
302  _mouseIsDown = false;
303  }
304 
305  return result;
306 }

◆ rayDiscIntersect()

bool SLTransformNode::rayDiscIntersect ( const SLVec3f rayO,
const SLVec3f rayDir,
const SLVec3f discO,
const SLVec3f discN,
const float &  distR,
float &  t 
)
private

Definition at line 682 of file SLTransformNode.cpp.

688 {
689  bool result = false;
690 
691  if (rayPlaneIntersect(rayO, rayDir, discO, discN, t))
692  {
693  SLVec3f intersectPoint = rayO + rayDir * t;
694  SLVec3f discPointDist = intersectPoint - discO;
695 
696  result = (discPointDist.length() <= discR);
697  }
698 
699  return result;
700 }
T length() const
Definition: SLVec3.h:122

◆ rayPlaneIntersect()

bool SLTransformNode::rayPlaneIntersect ( const SLVec3f rayO,
const SLVec3f rayDir,
const SLVec3f discO,
const SLVec3f discN,
float &  t 
)
private

Definition at line 702 of file SLTransformNode.cpp.

707 {
708  bool result = false;
709 
710  float den = planeN * rayDir;
711  if (den > FLT_EPSILON || den < -FLT_EPSILON)
712  {
713  SLVec3f oDiff = planeO - rayO;
714  t = (oDiff * planeN) / den;
715 
716  result = (t >= 0);
717  }
718 
719  return result;
720 }

◆ setDrawBitRecursive()

void SLTransformNode::setDrawBitRecursive ( SLuint  bit,
SLNode node,
bool  value 
)
private

Definition at line 738 of file SLTransformNode.cpp.

739 {
740  node->drawBits()->set(bit, value);
741 
742  for (SLNode* child : node->children())
743  {
744  setDrawBitRecursive(bit, child, value);
745  }
746 }
SLVNode & children()
Definition: SLNode.h:305

◆ targetNode()

SLNode* SLTransformNode::targetNode ( )
inline

Definition at line 55 of file SLTransformNode.h.

55 { return _targetNode; }

Member Data Documentation

◆ _axisB

SLMesh* SLTransformNode::_axisB = nullptr
private

Definition at line 74 of file SLTransformNode.h.

◆ _axisG

SLMesh* SLTransformNode::_axisG = nullptr
private

Definition at line 73 of file SLTransformNode.h.

◆ _axisR

SLMesh* SLTransformNode::_axisR = nullptr
private

Definition at line 72 of file SLTransformNode.h.

◆ _circB

SLMesh* SLTransformNode::_circB = nullptr
private

Definition at line 80 of file SLTransformNode.h.

◆ _circG

SLMesh* SLTransformNode::_circG = nullptr
private

Definition at line 79 of file SLTransformNode.h.

◆ _circR

SLMesh* SLTransformNode::_circR = nullptr
private

Definition at line 78 of file SLTransformNode.h.

◆ _circY

SLMesh* SLTransformNode::_circY = nullptr
private

Definition at line 81 of file SLTransformNode.h.

◆ _diskB

SLMesh* SLTransformNode::_diskB = nullptr
private

Definition at line 84 of file SLTransformNode.h.

◆ _diskG

SLMesh* SLTransformNode::_diskG = nullptr
private

Definition at line 83 of file SLTransformNode.h.

◆ _diskR

SLMesh* SLTransformNode::_diskR = nullptr
private

Definition at line 82 of file SLTransformNode.h.

◆ _diskY

SLMesh* SLTransformNode::_diskY = nullptr
private

Definition at line 85 of file SLTransformNode.h.

◆ _editMode

SLNodeEditMode SLTransformNode::_editMode
private

Definition at line 62 of file SLTransformNode.h.

◆ _gizmoScale

float SLTransformNode::_gizmoScale
private

Definition at line 88 of file SLTransformNode.h.

◆ _gizmosNode

SLNode* SLTransformNode::_gizmosNode = nullptr
private

Definition at line 113 of file SLTransformNode.h.

◆ _hitCoordinate

SLVec3f SLTransformNode::_hitCoordinate
private

Definition at line 89 of file SLTransformNode.h.

◆ _lineB

SLMesh* SLTransformNode::_lineB = nullptr
private

Definition at line 77 of file SLTransformNode.h.

◆ _lineG

SLMesh* SLTransformNode::_lineG = nullptr
private

Definition at line 76 of file SLTransformNode.h.

◆ _lineR

SLMesh* SLTransformNode::_lineR = nullptr
private

Definition at line 75 of file SLTransformNode.h.

◆ _matB

SLMaterial* SLTransformNode::_matB = nullptr
private

Definition at line 66 of file SLTransformNode.h.

◆ _matBT

SLMaterial* SLTransformNode::_matBT = nullptr
private

Definition at line 70 of file SLTransformNode.h.

◆ _matG

SLMaterial* SLTransformNode::_matG = nullptr
private

Definition at line 65 of file SLTransformNode.h.

◆ _matGT

SLMaterial* SLTransformNode::_matGT = nullptr
private

Definition at line 69 of file SLTransformNode.h.

◆ _matR

SLMaterial* SLTransformNode::_matR = nullptr
private

Definition at line 64 of file SLTransformNode.h.

◆ _matRT

SLMaterial* SLTransformNode::_matRT = nullptr
private

Definition at line 68 of file SLTransformNode.h.

◆ _matY

SLMaterial* SLTransformNode::_matY = nullptr
private

Definition at line 67 of file SLTransformNode.h.

◆ _matYT

SLMaterial* SLTransformNode::_matYT = nullptr
private

Definition at line 71 of file SLTransformNode.h.

◆ _mouseIsDown

bool SLTransformNode::_mouseIsDown
private

Definition at line 87 of file SLTransformNode.h.

◆ _rotCircX

SLNode* SLTransformNode::_rotCircX = nullptr
private

Definition at line 105 of file SLTransformNode.h.

◆ _rotCircY

SLNode* SLTransformNode::_rotCircY = nullptr
private

Definition at line 107 of file SLTransformNode.h.

◆ _rotCircZ

SLNode* SLTransformNode::_rotCircZ = nullptr
private

Definition at line 109 of file SLTransformNode.h.

◆ _rotDiskX

SLNode* SLTransformNode::_rotDiskX = nullptr
private

Definition at line 106 of file SLTransformNode.h.

◆ _rotDiskY

SLNode* SLTransformNode::_rotDiskY = nullptr
private

Definition at line 108 of file SLTransformNode.h.

◆ _rotDiskZ

SLNode* SLTransformNode::_rotDiskZ = nullptr
private

Definition at line 110 of file SLTransformNode.h.

◆ _rotGizmos

SLNode* SLTransformNode::_rotGizmos = nullptr
private

Definition at line 104 of file SLTransformNode.h.

◆ _scaleCirc

SLNode* SLTransformNode::_scaleCirc = nullptr
private

Definition at line 101 of file SLTransformNode.h.

◆ _scaleDisk

SLNode* SLTransformNode::_scaleDisk = nullptr
private

Definition at line 100 of file SLTransformNode.h.

◆ _scaleGizmos

SLNode* SLTransformNode::_scaleGizmos = nullptr
private

Definition at line 99 of file SLTransformNode.h.

◆ _selectedGizmo

SLNode* SLTransformNode::_selectedGizmo = nullptr
private

Definition at line 90 of file SLTransformNode.h.

◆ _sv

SLSceneView* SLTransformNode::_sv = nullptr
private

Definition at line 59 of file SLTransformNode.h.

◆ _targetNode

SLNode* SLTransformNode::_targetNode = nullptr
private

Definition at line 60 of file SLTransformNode.h.

◆ _transGizmos

SLNode* SLTransformNode::_transGizmos = nullptr
private

Definition at line 93 of file SLTransformNode.h.

◆ _transLineX

SLNode* SLTransformNode::_transLineX = nullptr
private

Definition at line 94 of file SLTransformNode.h.

◆ _transLineY

SLNode* SLTransformNode::_transLineY = nullptr
private

Definition at line 95 of file SLTransformNode.h.

◆ _transLineZ

SLNode* SLTransformNode::_transLineZ = nullptr
private

Definition at line 96 of file SLTransformNode.h.


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