18 #ifndef IGNITION_RENDERING_BASE_BASEGIZMOVISUAL_HH_ 19 #define IGNITION_RENDERING_BASE_BASEGIZMOVISUAL_HH_ 36 inline namespace IGNITION_RENDERING_VERSION_NAMESPACE {
54 public:
virtual void Init()
override;
57 public:
virtual void PreRender()
override;
60 public:
virtual void SetTransformMode(
TransformMode _mode)
override;
66 public:
virtual void SetActiveAxis(
const math::Vector3d &_axis)
override;
72 public:
virtual TransformAxis AxisById(
unsigned int _id)
const override;
75 public:
virtual VisualPtr ChildByAxis(
unsigned int _axis)
const override;
78 public:
virtual void Reset();
81 protected:
void CreateMaterials();
84 protected:
void CreateTranslationVisual();
87 protected:
void CreateRotationVisual();
91 protected:
void CreateScaleVisual();
107 protected:
bool modeDirty =
false;
155 this->CreateMaterials();
156 this->CreateTranslationVisual();
157 this->CreateRotationVisual();
158 this->CreateScaleVisual();
160 for (
auto v : this->visuals)
161 v.second->SetVisible(
false);
169 this->materials[AM_X],
false);
171 this->materials[AM_Y],
false);
173 this->materials[AM_Z],
false);
175 this->materials[AM_X],
false);
177 this->materials[AM_Y],
false);
179 this->materials[AM_Z],
false);
181 this->materials[AM_X],
false);
183 this->materials[AM_Y],
false);
185 this->materials[AM_Z],
false);
188 this->materials[AM_HANDLE],
false);
190 this->materials[AM_HANDLE],
false);
192 this->materials[AM_HANDLE],
false);
195 this->materials[AM_HANDLE],
false);
197 this->materials[AM_HANDLE],
false);
199 this->materials[AM_HANDLE],
false);
202 this->materials[AM_HANDLE],
false);
204 this->materials[AM_HANDLE],
false);
206 this->materials[AM_HANDLE],
false);
208 for (
auto v : this->visuals)
209 v.second->SetVisible(
false);
216 if (!this->modeDirty)
223 this->modeDirty =
false;
233 if (this->axis.X() > 0)
236 this->materials[AM_ACTIVE],
false);
238 this->materials[AM_HANDLE],
false);
240 if (this->axis.Y() > 0)
243 this->materials[AM_ACTIVE],
false);
245 this->materials[AM_HANDLE],
false);
247 if (this->axis.Z() > 0)
250 this->materials[AM_ACTIVE],
false);
252 this->materials[AM_HANDLE],
false);
261 if (this->axis.X() > 0)
264 this->materials[AM_ACTIVE],
false);
266 this->materials[AM_HANDLE],
false);
268 if (this->axis.Y() > 0)
271 this->materials[AM_ACTIVE],
false);
273 this->materials[AM_HANDLE],
false);
275 if (this->axis.Z() > 0)
278 this->materials[AM_ACTIVE],
false);
280 this->materials[AM_HANDLE],
false);
288 if (this->axis.X() > 0)
291 this->materials[AM_ACTIVE],
false);
293 this->materials[AM_HANDLE],
false);
295 if (this->axis.Y() > 0)
298 this->materials[AM_ACTIVE],
false);
300 this->materials[AM_HANDLE],
false);
302 if (this->axis.Z() > 0)
305 this->materials[AM_ACTIVE],
false);
307 this->materials[AM_HANDLE],
false);
311 this->modeDirty =
false;
318 if (this->mode == _mode)
324 this->modeDirty =
true;
338 if (this->axis == _axis)
342 this->modeDirty =
true;
356 for (
auto v : this->visuals)
360 if (v.second->Id() == _id || v.second->ChildById(_id))
361 return static_cast<TransformAxis>(v.first);
378 xMat->SetDepthWriteEnabled(
false);
379 xMat->SetDepthCheckEnabled(
false);
380 yMat->SetDepthWriteEnabled(
false);
381 yMat->SetDepthCheckEnabled(
false);
382 zMat->SetDepthWriteEnabled(
false);
383 zMat->SetDepthCheckEnabled(
false);
384 activeMat->SetDepthWriteEnabled(
false);
385 activeMat->SetDepthCheckEnabled(
false);
391 oMat->SetAmbient(0.5, 0.5, 0.5);
392 oMat->SetDiffuse(0.5, 0.5, 0.5);
393 oMat->SetEmissive(0.5, 0.5, 0.5);
394 oMat->SetTransparency(0.5);
395 oMat->SetCastShadows(
false);
396 oMat->SetReceiveShadows(
false);
397 oMat->SetLightingEnabled(
false);
398 oMat->SetDepthWriteEnabled(
false);
399 oMat->SetDepthCheckEnabled(
false);
406 handleMat->SetAmbient(0.0, 0.0, 0.0);
407 handleMat->SetDiffuse(0.0, 0.0, 0.0);
408 handleMat->SetEmissive(0.0, 0.0, 0.0);
409 handleMat->SetTransparency(1.0);
410 handleMat->SetCastShadows(
false);
411 handleMat->SetReceiveShadows(
false);
412 handleMat->SetLightingEnabled(
false);
413 handleMat->SetDepthWriteEnabled(
false);
414 handleMat->SetDepthCheckEnabled(
false);
417 this->materials[AM_X] = xMat;
418 this->materials[AM_Y] = yMat;
419 this->materials[AM_Z] = zMat;
420 this->materials[AM_ACTIVE] = activeMat;
421 this->materials[AM_O] = oMat;
422 this->materials[AM_HANDLE] = handleMat;
433 transShaftXVis->AddGeometry(this->
Scene()->CreateCylinder());
434 transShaftXVis->SetOrigin(0, 0, 0.5);
435 transShaftXVis->SetLocalPosition(0, 0, 0.5);
436 transShaftXVis->SetLocalScale(0.02, 0.02, 0.45);
437 transXVis->AddChild(transShaftXVis);
440 transHeadXVis->AddGeometry(this->
Scene()->CreateCone());
441 transHeadXVis->SetOrigin(0, 0, -0.5);
442 transHeadXVis->SetLocalPosition(0, 0, 0.5);
443 transHeadXVis->SetLocalScale(0.07, 0.07, 0.2);
444 transXVis->AddChild(transHeadXVis);
446 transXVis->SetMaterial(this->materials[AM_X],
false);
447 transXVis->SetLocalRotation(0,
IGN_PI * 0.5, 0);
448 transVis->AddChild(transXVis);
453 transShaftYVis->AddGeometry(this->
Scene()->CreateCylinder());
454 transShaftYVis->SetOrigin(0, 0, 0.5);
455 transShaftYVis->SetLocalPosition(0, 0, 0.5);
456 transShaftYVis->SetLocalScale(0.02, 0.02, 0.45);
457 transYVis->AddChild(transShaftYVis);
460 transHeadYVis->AddGeometry(this->
Scene()->CreateCone());
461 transHeadYVis->SetOrigin(0, 0, -0.5);
462 transHeadYVis->SetLocalPosition(0, 0, 0.5);
463 transHeadYVis->SetLocalScale(0.07, 0.07, 0.2);
464 transYVis->AddChild(transHeadYVis);
466 transYVis->SetMaterial(this->materials[AM_Y],
false);
467 transYVis->SetLocalRotation(-
IGN_PI * 0.5, 0, 0);
468 transVis->AddChild(transYVis);
473 transShaftZVis->AddGeometry(this->
Scene()->CreateCylinder());
474 transShaftZVis->SetOrigin(0, 0, 0.5);
475 transShaftZVis->SetLocalPosition(0, 0, 0.5);
476 transShaftZVis->SetLocalScale(0.02, 0.02, 0.45);
477 transZVis->AddChild(transShaftZVis);
480 transHeadZVis->AddGeometry(this->
Scene()->CreateCone());
481 transHeadZVis->SetOrigin(0, 0, -0.5);
482 transHeadZVis->SetLocalPosition(0, 0, 0.5);
483 transHeadZVis->SetLocalScale(0.07, 0.07, 0.2);
484 transZVis->AddChild(transHeadZVis);
486 transZVis->SetMaterial(this->materials[AM_Z],
false);
487 transVis->AddChild(transZVis);
491 transOrigin->AddGeometry(this->
Scene()->CreateSphere());
492 transOrigin->SetLocalScale(0.05, 0.05, 0.05);
493 transOrigin->SetMaterial(this->materials[AM_O],
false);
494 transVis->AddChild(transOrigin);
503 transHandleXVis->AddGeometry(this->
Scene()->CreateCylinder());
504 transHandleXVis->SetLocalPosition(0, 0, 0.35);
505 transHandleXVis->SetLocalScale(0.11, 0.11, 0.7);
506 transHandleXVis->SetMaterial(this->materials[AM_HANDLE],
false);
507 transXVis->AddChild(transHandleXVis);
510 transHandleYVis->AddGeometry(this->
Scene()->CreateCylinder());
511 transHandleYVis->SetLocalPosition(0, 0, 0.35);
512 transHandleYVis->SetLocalScale(0.11, 0.11, 0.7);
513 transHandleYVis->SetMaterial(this->materials[AM_HANDLE],
false);
514 transYVis->AddChild(transHandleYVis);
517 transHandleZVis->AddGeometry(this->
Scene()->CreateCylinder());
518 transHandleZVis->SetLocalPosition(0, 0, 0.35);
519 transHandleZVis->SetLocalScale(0.11, 0.11, 0.7);
520 transHandleZVis->SetMaterial(this->materials[AM_HANDLE],
false);
521 transZVis->AddChild(transHandleZVis);
527 this->AddChild(transVis);
536 if (!meshMgr->
HasMesh(rotMeshName))
540 if (!meshMgr->
HasMesh(rotFullMeshName))
542 meshMgr->
CreateTube(rotFullMeshName, 1.0f, 1.02f, 0.02f, 1, 64,
546 std::string rotHandleMeshName =
"gizmo_rotate_handle";
547 if (!meshMgr->
HasMesh(rotHandleMeshName))
549 meshMgr->
CreateTube(rotHandleMeshName, 0.95f, 1.07f, 0.1f, 1, 64,
557 rotXVis->AddGeometry(this->
Scene()->CreateMesh(rotMeshName));
558 rotXVis->SetLocalRotation(0,
IGN_PI * 0.5, 0);
559 rotXVis->SetLocalScale(0.5, 0.5, 0.5);
560 rotXVis->SetMaterial(this->materials[AM_X],
false);
561 rotVis->AddChild(rotXVis);
565 rotYVis->AddGeometry(this->
Scene()->CreateMesh(rotMeshName));
566 rotYVis->SetLocalRotation(
IGN_PI * 0.5, 0, 0);
567 rotYVis->SetLocalScale(0.5, 0.5, 0.5);
568 rotYVis->SetMaterial(this->materials[AM_Y],
false);
569 rotVis->AddChild(rotYVis);
573 rotZVis->AddGeometry(this->
Scene()->CreateMesh(rotMeshName));
574 rotZVis->SetLocalScale(0.5, 0.5, 0.5);
575 rotZVis->SetMaterial(this->materials[AM_Z],
false);
576 rotVis->AddChild(rotZVis);
580 rotFullVis->AddGeometry(this->
Scene()->CreateMesh(rotFullMeshName));
581 rotFullVis->SetLocalScale(0.5, 0.5, 0.5);
582 rotFullVis->SetMaterial(this->materials[AM_O],
false);
583 rotVis->AddChild(rotFullVis);
592 rotHandleXVis->AddGeometry(this->
Scene()->CreateMesh(rotHandleMeshName));
593 rotHandleXVis->SetMaterial(this->materials[AM_HANDLE],
false);
594 rotXVis->AddChild(rotHandleXVis);
597 rotHandleYVis->AddGeometry(this->
Scene()->CreateMesh(rotHandleMeshName));
598 rotHandleYVis->SetMaterial(this->materials[AM_HANDLE],
false);
599 rotYVis->AddChild(rotHandleYVis);
602 rotHandleZVis->AddGeometry(this->
Scene()->CreateMesh(rotHandleMeshName));
603 rotHandleZVis->SetMaterial(this->materials[AM_HANDLE],
false);
604 rotZVis->AddChild(rotHandleZVis);
610 this->AddChild(rotVis);
622 scaleShaftXVis->AddGeometry(this->
Scene()->CreateCylinder());
623 scaleShaftXVis->SetOrigin(0, 0, 0.5);
624 scaleShaftXVis->SetLocalPosition(0, 0, 0.5);
625 scaleShaftXVis->SetLocalScale(0.02, 0.02, 0.5);
626 scaleXVis->AddChild(scaleShaftXVis);
629 scaleHeadXVis->AddGeometry(this->
Scene()->CreateBox());
630 scaleHeadXVis->SetOrigin(0, 0, -0.5);
631 scaleHeadXVis->SetLocalPosition(0, 0, 0.5);
632 scaleHeadXVis->SetLocalScale(0.07, 0.07, 0.07);
633 scaleXVis->AddChild(scaleHeadXVis);
635 scaleXVis->SetMaterial(this->materials[AM_X],
false);
636 scaleXVis->SetLocalRotation(0,
IGN_PI * 0.5, 0);
637 scaleVis->AddChild(scaleXVis);
642 scaleShaftYVis->AddGeometry(this->
Scene()->CreateCylinder());
643 scaleShaftYVis->SetOrigin(0, 0, 0.5);
644 scaleShaftYVis->SetLocalPosition(0, 0, 0.5);
645 scaleShaftYVis->SetLocalScale(0.02, 0.02, 0.5);
646 scaleYVis->AddChild(scaleShaftYVis);
649 scaleHeadYVis->AddGeometry(this->
Scene()->CreateBox());
650 scaleHeadYVis->SetOrigin(0, 0, -0.5);
651 scaleHeadYVis->SetLocalPosition(0, 0, 0.5);
652 scaleHeadYVis->SetLocalScale(0.07, 0.07, 0.07);
653 scaleYVis->AddChild(scaleHeadYVis);
655 scaleYVis->SetMaterial(this->materials[AM_Y],
false);
656 scaleYVis->SetLocalRotation(-
IGN_PI * 0.5, 0, 0);
657 scaleVis->AddChild(scaleYVis);
662 scaleShaftZVis->AddGeometry(this->
Scene()->CreateCylinder());
663 scaleShaftZVis->SetOrigin(0, 0, 0.5);
664 scaleShaftZVis->SetLocalPosition(0, 0, 0.5);
665 scaleShaftZVis->SetLocalScale(0.02, 0.02, 0.5);
666 scaleZVis->AddChild(scaleShaftZVis);
669 scaleHeadZVis->AddGeometry(this->
Scene()->CreateBox());
670 scaleHeadZVis->SetOrigin(0, 0, -0.5);
671 scaleHeadZVis->SetLocalPosition(0, 0, 0.5);
672 scaleHeadZVis->SetLocalScale(0.07, 0.07, 0.07);
673 scaleZVis->AddChild(scaleHeadZVis);
675 scaleZVis->SetMaterial(this->materials[AM_Z],
false);
676 scaleVis->AddChild(scaleZVis);
684 scaleHandleXVis->AddGeometry(this->
Scene()->CreateCylinder());
685 scaleHandleXVis->SetLocalPosition(0, 0, 0.285);
686 scaleHandleXVis->SetLocalScale(0.11, 0.11, 0.57);
687 scaleHandleXVis->SetMaterial(this->materials[AM_HANDLE],
false);
688 scaleXVis->AddChild(scaleHandleXVis);
691 scaleHandleYVis->AddGeometry(this->
Scene()->CreateCylinder());
692 scaleHandleYVis->SetLocalPosition(0, 0, 0.285);
693 scaleHandleYVis->SetLocalScale(0.11, 0.11, 0.57);
694 scaleHandleYVis->SetMaterial(this->materials[AM_HANDLE],
false);
695 scaleYVis->AddChild(scaleHandleYVis);
698 scaleHandleZVis->AddGeometry(this->
Scene()->CreateCylinder());
699 scaleHandleZVis->SetLocalPosition(0, 0, 0.285);
700 scaleHandleZVis->SetLocalScale(0.11, 0.11, 0.57);
701 scaleHandleZVis->SetMaterial(this->materials[AM_HANDLE],
false);
702 scaleZVis->AddChild(scaleHandleZVis);
708 this->AddChild(scaleVis);
715 auto it = this->visuals.find(_axis);
716 if (it != this->visuals.end())
std::map< unsigned int, MaterialPtr > materials
A map of axis enums to materials.
Definition: BaseGizmoVisual.hh:113
TransformAxis
Definition: TransformType.hh:34
Rotation in x.
Definition: TransformType.hh:45
virtual void Init() override
Definition: BaseGizmoVisual.hh:151
Translation mode.
Definition: TransformType.hh:65
virtual TransformMode Mode() const override
Get the current transform mode.
Definition: BaseGizmoVisual.hh:329
Rotation in y.
Definition: TransformType.hh:47
Scale in x.
Definition: TransformType.hh:51
void CreateRotationVisual()
Create gizmo visual for rotation.
Definition: BaseGizmoVisual.hh:532
Scale in y.
Definition: TransformType.hh:53
Origin.
Definition: BaseGizmoVisual.hh:128
Rotation mode.
Definition: TransformType.hh:67
Translation in x.
Definition: TransformType.hh:39
Rotation in z.
Definition: TransformType.hh:49
std::map< unsigned int, VisualPtr > visuals
A map of gizmo axis and their visuals.
Definition: BaseGizmoVisual.hh:98
Translation in z.
Definition: TransformType.hh:43
Z axis.
Definition: BaseGizmoVisual.hh:124
virtual TransformAxis AxisById(unsigned int _id) const override
Get the Transform axis associated with the given id.
Definition: BaseGizmoVisual.hh:354
#define IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING
virtual ~BaseGizmoVisual()
Destructor.
Definition: BaseGizmoVisual.hh:145
bool HasMesh(const std::string &_name) const
Translation in y.
Definition: TransformType.hh:41
virtual VisualPtr ChildByAxis(unsigned int _axis) const override
Get the child visual by axis.
Definition: BaseGizmoVisual.hh:713
X axis.
Definition: BaseGizmoVisual.hh:120
Scale mode.
Definition: TransformType.hh:69
void CreateMaterials()
Create materials used by the gizmo visual.
Definition: BaseGizmoVisual.hh:369
virtual void PreRender() override
Prepare this object and any of its children for rendering. This should be called for each object in a...
Definition: BaseGizmoVisual.hh:214
Manages a single scene-graph. This class updates scene-wide properties and holds the root scene node...
Definition: Scene.hh:49
virtual void SetActiveAxis(const math::Vector3d &_axis) override
Set the active axis in the gizmo visual.
Definition: BaseGizmoVisual.hh:336
static MeshManager * Instance()
Active axis.
Definition: BaseGizmoVisual.hh:126
Definition: BaseScene.hh:37
BaseGizmoVisual()
Constructor.
Definition: BaseGizmoVisual.hh:139
TransformMode
Definition: TransformType.hh:60
virtual MaterialPtr CreateMaterial(const std::string &_name="")=0
Create new material with the given name. Created material will have default properties.
Y axis.
Definition: BaseGizmoVisual.hh:122
AxisMaterial
Material used by axes.
Definition: BaseGizmoVisual.hh:117
void CreateTube(const std::string &_name, const float _innerRadius, const float _outterRadius, const float _height, const int _rings, const int _segments, const double _arc=2.0 *IGN_PI)
std::map< unsigned int, VisualPtr > handles
A map of gizmo axis and their handle visuals.
Definition: BaseGizmoVisual.hh:101
virtual void Reset()
Reset the gizmo visual state.
Definition: BaseGizmoVisual.hh:166
Inactive state.
Definition: TransformType.hh:63
virtual void SetTransformMode(TransformMode _mode) override
Set the transform mode of the gizmo. This controls the visual appearance of the gizmo. Only the visuals in the specified mode will be visible, e.g. if set to TM_TRANSLATION mode, then only the translation axis visuals will be visible.
Definition: BaseGizmoVisual.hh:316
void CreateTranslationVisual()
Create gizmo visual for translation.
Definition: BaseGizmoVisual.hh:426
No axis.
Definition: TransformType.hh:37
void CreateScaleVisual()
Create gizmo visual for scale.
Definition: BaseGizmoVisual.hh:615
A base implementation of the GizmoVisual class.
Definition: BaseGizmoVisual.hh:43
VisualPtr activeVis
Currently active visual.
Definition: BaseGizmoVisual.hh:104
virtual math::Vector3d ActiveAxis() const override
Get the current active axis.
Definition: BaseGizmoVisual.hh:347
static const Vector3 Zero
virtual VisualPtr CreateVisual()=0
Create new visual. A unique ID and name will automatically be assigned to the visual.
A gizmo that contains rotate, translate, and scale visuals.
Definition: GizmoVisual.hh:34
Scale in z.
Definition: TransformType.hh:55
#define IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING
virtual MaterialPtr Material(const std::string &_name) const =0
Get material registered under the given name. If no material is registered under the given name...