18 #ifndef IGNITION_RENDERING_BASE_BASEGIZMOVISUAL_HH_ 19 #define IGNITION_RENDERING_BASE_BASEGIZMOVISUAL_HH_ 35 inline namespace IGNITION_RENDERING_VERSION_NAMESPACE {
53 public:
virtual void Init()
override;
56 public:
virtual void PreRender()
override;
59 public:
virtual void SetTransformMode(
TransformMode _mode)
override;
65 public:
virtual void SetActiveAxis(
const math::Vector3d &_axis)
override;
71 public:
virtual TransformAxis AxisById(
unsigned int _id)
const override;
74 public:
virtual VisualPtr ChildByAxis(
unsigned int _axis)
const override;
77 public:
virtual void Reset();
80 protected:
void CreateMaterials();
83 protected:
void CreateTranslationVisual();
86 protected:
void CreateRotationVisual();
90 protected:
void CreateScaleVisual();
105 protected:
bool modeDirty =
false;
152 this->CreateMaterials();
153 this->CreateTranslationVisual();
154 this->CreateRotationVisual();
155 this->CreateScaleVisual();
157 for (
auto v : this->visuals)
158 v.second->SetVisible(
false);
166 this->materials[AM_X],
false);
168 this->materials[AM_Y],
false);
170 this->materials[AM_Z],
false);
172 this->materials[AM_X],
false);
174 this->materials[AM_Y],
false);
176 this->materials[AM_Z],
false);
178 this->materials[AM_X],
false);
180 this->materials[AM_Y],
false);
182 this->materials[AM_Z],
false);
185 this->materials[AM_HANDLE],
false);
187 this->materials[AM_HANDLE],
false);
189 this->materials[AM_HANDLE],
false);
192 this->materials[AM_HANDLE],
false);
194 this->materials[AM_HANDLE],
false);
196 this->materials[AM_HANDLE],
false);
199 this->materials[AM_HANDLE],
false);
201 this->materials[AM_HANDLE],
false);
203 this->materials[AM_HANDLE],
false);
205 for (
auto v : this->visuals)
206 v.second->SetVisible(
false);
213 if (!this->modeDirty)
220 this->modeDirty =
false;
230 if (this->axis.X() > 0)
233 this->materials[AM_ACTIVE],
false);
235 this->materials[AM_HANDLE],
false);
237 if (this->axis.Y() > 0)
240 this->materials[AM_ACTIVE],
false);
242 this->materials[AM_HANDLE],
false);
244 if (this->axis.Z() > 0)
247 this->materials[AM_ACTIVE],
false);
249 this->materials[AM_HANDLE],
false);
258 if (this->axis.X() > 0)
261 this->materials[AM_ACTIVE],
false);
263 this->materials[AM_HANDLE],
false);
265 if (this->axis.Y() > 0)
268 this->materials[AM_ACTIVE],
false);
270 this->materials[AM_HANDLE],
false);
272 if (this->axis.Z() > 0)
275 this->materials[AM_ACTIVE],
false);
277 this->materials[AM_HANDLE],
false);
285 if (this->axis.X() > 0)
288 this->materials[AM_ACTIVE],
false);
290 this->materials[AM_HANDLE],
false);
292 if (this->axis.Y() > 0)
295 this->materials[AM_ACTIVE],
false);
297 this->materials[AM_HANDLE],
false);
299 if (this->axis.Z() > 0)
302 this->materials[AM_ACTIVE],
false);
304 this->materials[AM_HANDLE],
false);
308 this->modeDirty =
false;
315 if (this->mode == _mode)
321 this->modeDirty =
true;
335 if (this->axis == _axis)
339 this->modeDirty =
true;
353 for (
auto v : this->visuals)
357 if (v.second->Id() == _id || v.second->ChildById(_id))
358 return static_cast<TransformAxis>(v.first);
375 xMat->SetDepthWriteEnabled(
false);
376 xMat->SetDepthCheckEnabled(
false);
377 yMat->SetDepthWriteEnabled(
false);
378 yMat->SetDepthCheckEnabled(
false);
379 zMat->SetDepthWriteEnabled(
false);
380 zMat->SetDepthCheckEnabled(
false);
381 activeMat->SetDepthWriteEnabled(
false);
382 activeMat->SetDepthCheckEnabled(
false);
388 oMat->SetAmbient(0.5, 0.5, 0.5);
389 oMat->SetDiffuse(0.5, 0.5, 0.5);
390 oMat->SetEmissive(0.5, 0.5, 0.5);
391 oMat->SetTransparency(0.5);
392 oMat->SetCastShadows(
false);
393 oMat->SetReceiveShadows(
false);
394 oMat->SetLightingEnabled(
false);
395 oMat->SetDepthWriteEnabled(
false);
396 oMat->SetDepthCheckEnabled(
false);
403 handleMat->SetAmbient(0.0, 0.0, 0.0);
404 handleMat->SetDiffuse(0.0, 0.0, 0.0);
405 handleMat->SetEmissive(0.0, 0.0, 0.0);
406 handleMat->SetTransparency(1.0);
407 handleMat->SetCastShadows(
false);
408 handleMat->SetReceiveShadows(
false);
409 handleMat->SetLightingEnabled(
false);
410 handleMat->SetDepthWriteEnabled(
false);
411 handleMat->SetDepthCheckEnabled(
false);
414 this->materials[AM_X] = xMat;
415 this->materials[AM_Y] = yMat;
416 this->materials[AM_Z] = zMat;
417 this->materials[AM_ACTIVE] = activeMat;
418 this->materials[AM_O] = oMat;
419 this->materials[AM_HANDLE] = handleMat;
430 transShaftXVis->AddGeometry(this->
Scene()->CreateCylinder());
431 transShaftXVis->SetOrigin(0, 0, 0.5);
432 transShaftXVis->SetLocalPosition(0, 0, 0.5);
433 transShaftXVis->SetLocalScale(0.02, 0.02, 0.45);
434 transXVis->AddChild(transShaftXVis);
437 transHeadXVis->AddGeometry(this->
Scene()->CreateCone());
438 transHeadXVis->SetOrigin(0, 0, -0.5);
439 transHeadXVis->SetLocalPosition(0, 0, 0.5);
440 transHeadXVis->SetLocalScale(0.07, 0.07, 0.2);
441 transXVis->AddChild(transHeadXVis);
443 transXVis->SetMaterial(this->materials[AM_X],
false);
444 transXVis->SetLocalRotation(0,
IGN_PI * 0.5, 0);
445 transVis->AddChild(transXVis);
450 transShaftYVis->AddGeometry(this->
Scene()->CreateCylinder());
451 transShaftYVis->SetOrigin(0, 0, 0.5);
452 transShaftYVis->SetLocalPosition(0, 0, 0.5);
453 transShaftYVis->SetLocalScale(0.02, 0.02, 0.45);
454 transYVis->AddChild(transShaftYVis);
457 transHeadYVis->AddGeometry(this->
Scene()->CreateCone());
458 transHeadYVis->SetOrigin(0, 0, -0.5);
459 transHeadYVis->SetLocalPosition(0, 0, 0.5);
460 transHeadYVis->SetLocalScale(0.07, 0.07, 0.2);
461 transYVis->AddChild(transHeadYVis);
463 transYVis->SetMaterial(this->materials[AM_Y],
false);
464 transYVis->SetLocalRotation(-
IGN_PI * 0.5, 0, 0);
465 transVis->AddChild(transYVis);
470 transShaftZVis->AddGeometry(this->
Scene()->CreateCylinder());
471 transShaftZVis->SetOrigin(0, 0, 0.5);
472 transShaftZVis->SetLocalPosition(0, 0, 0.5);
473 transShaftZVis->SetLocalScale(0.02, 0.02, 0.45);
474 transZVis->AddChild(transShaftZVis);
477 transHeadZVis->AddGeometry(this->
Scene()->CreateCone());
478 transHeadZVis->SetOrigin(0, 0, -0.5);
479 transHeadZVis->SetLocalPosition(0, 0, 0.5);
480 transHeadZVis->SetLocalScale(0.07, 0.07, 0.2);
481 transZVis->AddChild(transHeadZVis);
483 transZVis->SetMaterial(this->materials[AM_Z],
false);
484 transVis->AddChild(transZVis);
488 transOrigin->AddGeometry(this->
Scene()->CreateSphere());
489 transOrigin->SetLocalScale(0.05, 0.05, 0.05);
490 transOrigin->SetMaterial(this->materials[AM_O],
false);
491 transVis->AddChild(transOrigin);
500 transHandleXVis->AddGeometry(this->
Scene()->CreateCylinder());
501 transHandleXVis->SetLocalPosition(0, 0, 0.35);
502 transHandleXVis->SetLocalScale(0.11, 0.11, 0.7);
503 transHandleXVis->SetMaterial(this->materials[AM_HANDLE],
false);
504 transXVis->AddChild(transHandleXVis);
507 transHandleYVis->AddGeometry(this->
Scene()->CreateCylinder());
508 transHandleYVis->SetLocalPosition(0, 0, 0.35);
509 transHandleYVis->SetLocalScale(0.11, 0.11, 0.7);
510 transHandleYVis->SetMaterial(this->materials[AM_HANDLE],
false);
511 transYVis->AddChild(transHandleYVis);
514 transHandleZVis->AddGeometry(this->
Scene()->CreateCylinder());
515 transHandleZVis->SetLocalPosition(0, 0, 0.35);
516 transHandleZVis->SetLocalScale(0.11, 0.11, 0.7);
517 transHandleZVis->SetMaterial(this->materials[AM_HANDLE],
false);
518 transZVis->AddChild(transHandleZVis);
524 this->AddChild(transVis);
533 if (!meshMgr->
HasMesh(rotMeshName))
537 if (!meshMgr->
HasMesh(rotFullMeshName))
540 std::string rotHandleMeshName =
"gizmo_rotate_handle";
541 if (!meshMgr->
HasMesh(rotHandleMeshName))
548 rotXVis->AddGeometry(this->
Scene()->CreateMesh(rotMeshName));
549 rotXVis->SetLocalRotation(0,
IGN_PI * 0.5, 0);
550 rotXVis->SetLocalScale(0.5, 0.5, 0.5);
551 rotXVis->SetMaterial(this->materials[AM_X],
false);
552 rotVis->AddChild(rotXVis);
556 rotYVis->AddGeometry(this->
Scene()->CreateMesh(rotMeshName));
557 rotYVis->SetLocalRotation(
IGN_PI * 0.5, 0, 0);
558 rotYVis->SetLocalScale(0.5, 0.5, 0.5);
559 rotYVis->SetMaterial(this->materials[AM_Y],
false);
560 rotVis->AddChild(rotYVis);
564 rotZVis->AddGeometry(this->
Scene()->CreateMesh(rotMeshName));
565 rotZVis->SetLocalScale(0.5, 0.5, 0.5);
566 rotZVis->SetMaterial(this->materials[AM_Z],
false);
567 rotVis->AddChild(rotZVis);
571 rotFullVis->AddGeometry(this->
Scene()->CreateMesh(rotFullMeshName));
572 rotFullVis->SetLocalScale(0.5, 0.5, 0.5);
573 rotFullVis->SetMaterial(this->materials[AM_O],
false);
574 rotVis->AddChild(rotFullVis);
583 rotHandleXVis->AddGeometry(this->
Scene()->CreateMesh(rotHandleMeshName));
584 rotHandleXVis->SetMaterial(this->materials[AM_HANDLE],
false);
585 rotXVis->AddChild(rotHandleXVis);
588 rotHandleYVis->AddGeometry(this->
Scene()->CreateMesh(rotHandleMeshName));
589 rotHandleYVis->SetMaterial(this->materials[AM_HANDLE],
false);
590 rotYVis->AddChild(rotHandleYVis);
593 rotHandleZVis->AddGeometry(this->
Scene()->CreateMesh(rotHandleMeshName));
594 rotHandleZVis->SetMaterial(this->materials[AM_HANDLE],
false);
595 rotZVis->AddChild(rotHandleZVis);
601 this->AddChild(rotVis);
613 scaleShaftXVis->AddGeometry(this->
Scene()->CreateCylinder());
614 scaleShaftXVis->SetOrigin(0, 0, 0.5);
615 scaleShaftXVis->SetLocalPosition(0, 0, 0.5);
616 scaleShaftXVis->SetLocalScale(0.02, 0.02, 0.5);
617 scaleXVis->AddChild(scaleShaftXVis);
620 scaleHeadXVis->AddGeometry(this->
Scene()->CreateBox());
621 scaleHeadXVis->SetOrigin(0, 0, -0.5);
622 scaleHeadXVis->SetLocalPosition(0, 0, 0.5);
623 scaleHeadXVis->SetLocalScale(0.07, 0.07, 0.07);
624 scaleXVis->AddChild(scaleHeadXVis);
626 scaleXVis->SetMaterial(this->materials[AM_X],
false);
627 scaleXVis->SetLocalRotation(0,
IGN_PI * 0.5, 0);
628 scaleVis->AddChild(scaleXVis);
633 scaleShaftYVis->AddGeometry(this->
Scene()->CreateCylinder());
634 scaleShaftYVis->SetOrigin(0, 0, 0.5);
635 scaleShaftYVis->SetLocalPosition(0, 0, 0.5);
636 scaleShaftYVis->SetLocalScale(0.02, 0.02, 0.5);
637 scaleYVis->AddChild(scaleShaftYVis);
640 scaleHeadYVis->AddGeometry(this->
Scene()->CreateBox());
641 scaleHeadYVis->SetOrigin(0, 0, -0.5);
642 scaleHeadYVis->SetLocalPosition(0, 0, 0.5);
643 scaleHeadYVis->SetLocalScale(0.07, 0.07, 0.07);
644 scaleYVis->AddChild(scaleHeadYVis);
646 scaleYVis->SetMaterial(this->materials[AM_Y],
false);
647 scaleYVis->SetLocalRotation(-
IGN_PI * 0.5, 0, 0);
648 scaleVis->AddChild(scaleYVis);
653 scaleShaftZVis->AddGeometry(this->
Scene()->CreateCylinder());
654 scaleShaftZVis->SetOrigin(0, 0, 0.5);
655 scaleShaftZVis->SetLocalPosition(0, 0, 0.5);
656 scaleShaftZVis->SetLocalScale(0.02, 0.02, 0.5);
657 scaleZVis->AddChild(scaleShaftZVis);
660 scaleHeadZVis->AddGeometry(this->
Scene()->CreateBox());
661 scaleHeadZVis->SetOrigin(0, 0, -0.5);
662 scaleHeadZVis->SetLocalPosition(0, 0, 0.5);
663 scaleHeadZVis->SetLocalScale(0.07, 0.07, 0.07);
664 scaleZVis->AddChild(scaleHeadZVis);
666 scaleZVis->SetMaterial(this->materials[AM_Z],
false);
667 scaleVis->AddChild(scaleZVis);
675 scaleHandleXVis->AddGeometry(this->
Scene()->CreateCylinder());
676 scaleHandleXVis->SetLocalPosition(0, 0, 0.285);
677 scaleHandleXVis->SetLocalScale(0.11, 0.11, 0.57);
678 scaleHandleXVis->SetMaterial(this->materials[AM_HANDLE],
false);
679 scaleXVis->AddChild(scaleHandleXVis);
682 scaleHandleYVis->AddGeometry(this->
Scene()->CreateCylinder());
683 scaleHandleYVis->SetLocalPosition(0, 0, 0.285);
684 scaleHandleYVis->SetLocalScale(0.11, 0.11, 0.57);
685 scaleHandleYVis->SetMaterial(this->materials[AM_HANDLE],
false);
686 scaleYVis->AddChild(scaleHandleYVis);
689 scaleHandleZVis->AddGeometry(this->
Scene()->CreateCylinder());
690 scaleHandleZVis->SetLocalPosition(0, 0, 0.285);
691 scaleHandleZVis->SetLocalScale(0.11, 0.11, 0.57);
692 scaleHandleZVis->SetMaterial(this->materials[AM_HANDLE],
false);
693 scaleZVis->AddChild(scaleHandleZVis);
699 this->AddChild(scaleVis);
706 auto it = this->visuals.find(_axis);
707 if (it != this->visuals.end())
std::map< unsigned int, MaterialPtr > materials
A map of axis enums to materials.
Definition: BaseGizmoVisual.hh:111
TransformAxis
Definition: TransformType.hh:34
Rotation in x.
Definition: TransformType.hh:45
virtual void Init() override
Definition: BaseGizmoVisual.hh:148
Translation mode.
Definition: TransformType.hh:65
virtual TransformMode Mode() const override
Get the current transform mode.
Definition: BaseGizmoVisual.hh:326
Rotation in y.
Definition: TransformType.hh:47
Scale in x.
Definition: TransformType.hh:51
void CreateRotationVisual()
Create gizmo visual for rotation.
Definition: BaseGizmoVisual.hh:529
Scale in y.
Definition: TransformType.hh:53
Origin.
Definition: BaseGizmoVisual.hh:125
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:96
Translation in z.
Definition: TransformType.hh:43
Z axis.
Definition: BaseGizmoVisual.hh:121
virtual TransformAxis AxisById(unsigned int _id) const override
Get the Transform axis associated with the given id.
Definition: BaseGizmoVisual.hh:351
virtual ~BaseGizmoVisual()
Destructor.
Definition: BaseGizmoVisual.hh:142
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:704
X axis.
Definition: BaseGizmoVisual.hh:117
Scale mode.
Definition: TransformType.hh:69
void CreateMaterials()
Create materials used by the gizmo visual.
Definition: BaseGizmoVisual.hh:366
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:211
Manages a single scene-graph. This class updates scene-wide properties and holds the root scene node...
Definition: Scene.hh:48
virtual void SetActiveAxis(const math::Vector3d &_axis) override
Set the active axis in the gizmo visual.
Definition: BaseGizmoVisual.hh:333
static MeshManager * Instance()
Active axis.
Definition: BaseGizmoVisual.hh:123
Definition: BaseScene.hh:36
BaseGizmoVisual()
Constructor.
Definition: BaseGizmoVisual.hh:136
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:119
AxisMaterial
Material used by axes.
Definition: BaseGizmoVisual.hh:114
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:99
virtual void Reset()
Reset the gizmo visual state.
Definition: BaseGizmoVisual.hh:163
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:313
void CreateTranslationVisual()
Create gizmo visual for translation.
Definition: BaseGizmoVisual.hh:423
No axis.
Definition: TransformType.hh:37
void CreateScaleVisual()
Create gizmo visual for scale.
Definition: BaseGizmoVisual.hh:606
A base implementation of the GizmoVisual class.
Definition: BaseGizmoVisual.hh:42
VisualPtr activeVis
Currently active visual.
Definition: BaseGizmoVisual.hh:102
virtual math::Vector3d ActiveAxis() const override
Get the current active axis.
Definition: BaseGizmoVisual.hh:344
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
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...