arrow.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008, Willow Garage, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Willow Garage, Inc. nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #include "arrow.h"
31 #include "shape.h"
32 
33 #include <OgreSceneManager.h>
34 #include <OgreSceneNode.h>
36 #include <OgreQuaternion.h>
37 
38 #include <sstream>
39 
40 namespace rviz
41 {
42 Arrow::Arrow(Ogre::SceneManager* scene_manager,
43  Ogre::SceneNode* parent_node,
44  float shaft_length,
45  float shaft_diameter,
46  float head_length,
47  float head_diameter)
48  : Object(scene_manager)
49 {
50  if (!parent_node)
51  {
52  parent_node = scene_manager_->getRootSceneNode();
53  }
54 
55  scene_node_ = parent_node->createChildSceneNode();
56 
59  head_->setOffset(Ogre::Vector3(0.0f, 0.5f, 0.0f));
60 
61  set(shaft_length, shaft_diameter, head_length, head_diameter);
62 
63  Arrow::setOrientation(Ogre::Quaternion::IDENTITY);
64 }
65 
67 {
68  delete shaft_;
69  delete head_;
70 
71  scene_manager_->destroySceneNode(scene_node_);
72 }
73 
74 void Arrow::set(float shaft_length, float shaft_diameter, float head_length, float head_diameter)
75 {
76  shaft_->setScale(Ogre::Vector3(shaft_diameter, shaft_length, shaft_diameter));
77  shaft_->setPosition(Ogre::Vector3(0.0f, shaft_length / 2.0f, 0.0f));
78 
79  head_->setScale(Ogre::Vector3(head_diameter, head_length, head_diameter));
80  head_->setPosition(Ogre::Vector3(0.0f, shaft_length, 0.0f));
81 }
82 
83 void Arrow::setColor(const Ogre::ColourValue& c)
84 {
85  setShaftColor(c);
86  setHeadColor(c);
87 }
88 
89 void Arrow::setColor(float r, float g, float b, float a)
90 {
91  setColor(Ogre::ColourValue(r, g, b, a));
92 }
93 
94 void Arrow::setShaftColor(const Ogre::ColourValue& c)
95 {
96  shaft_->setColor(c);
97 }
98 
99 void Arrow::setHeadColor(const Ogre::ColourValue& c)
100 {
101  head_->setColor(c);
102 }
103 
104 void Arrow::setShaftColor(float r, float g, float b, float a)
105 {
106  setShaftColor(Ogre::ColourValue(r, g, b, a));
107 }
108 
109 void Arrow::setHeadColor(float r, float g, float b, float a)
110 {
111  setHeadColor(Ogre::ColourValue(r, g, b, a));
112 }
113 
114 void Arrow::setPosition(const Ogre::Vector3& position)
115 {
116  scene_node_->setPosition(position);
117 }
118 
119 void Arrow::setOrientation(const Ogre::Quaternion& orientation)
120 {
121  // "forward" (negative z) should always be our identity orientation
122  // ... wouldn't need to mangle the orientation if we just fix the cylinders!
123  scene_node_->setOrientation(orientation * Ogre::Quaternion(Ogre::Degree(-90), Ogre::Vector3::UNIT_X));
124 }
125 
126 void Arrow::setDirection(const Ogre::Vector3& direction)
127 {
128  if (!direction.isZeroLength())
129  {
130  setOrientation(Ogre::Vector3::NEGATIVE_UNIT_Z.getRotationTo(direction));
131  }
132 }
133 
134 void Arrow::setScale(const Ogre::Vector3& scale)
135 {
136  // Have to mangle the scale because of the default orientation of the cylinders :(
137  scene_node_->setScale(Ogre::Vector3(scale.z, scale.x, scale.y));
138 }
139 
140 const Ogre::Vector3& Arrow::getPosition()
141 {
142  return scene_node_->getPosition();
143 }
144 
145 const Ogre::Quaternion& Arrow::getOrientation()
146 {
147  return scene_node_->getOrientation();
148 }
149 
150 void Arrow::setUserData(const Ogre::Any& data)
151 {
152  head_->setUserData(data);
153  shaft_->setUserData(data);
154 }
155 
156 } // namespace rviz
rviz::Arrow::set
void set(float shaft_length, float shaft_diameter, float head_length, float head_diameter)
Set the parameters for this arrow.
Definition: arrow.cpp:74
shape.h
rviz::Shape::Cylinder
@ Cylinder
Definition: shape.h:58
rviz::Shape::setColor
void setColor(float r, float g, float b, float a) override
Set the color of the object. Values are in the range [0, 1].
Definition: shape.cpp:136
rviz::Arrow::scene_node_
Ogre::SceneNode * scene_node_
Definition: arrow.h:167
rviz::Arrow::shaft_
Shape * shaft_
Cylinder used for the shaft of the arrow.
Definition: arrow.h:169
rviz::Arrow::getOrientation
const Ogre::Quaternion & getOrientation() override
Get the local orientation of this object.
Definition: arrow.cpp:145
rviz::Arrow::setOrientation
void setOrientation(const Ogre::Quaternion &orientation) override
Set the orientation.
Definition: arrow.cpp:119
rviz::Object::scene_manager_
Ogre::SceneManager * scene_manager_
Ogre scene manager this object is part of.
Definition: object.h:103
rviz::Shape::Cone
@ Cone
Definition: shape.h:56
rviz::Arrow::setUserData
void setUserData(const Ogre::Any &data) override
Sets user data on all ogre objects we own.
Definition: arrow.cpp:150
f
f
rviz::Arrow::setHeadColor
void setHeadColor(float r, float g, float b, float a=1.0f)
Set the color of the arrow's head. Values are in the range [0, 1].
Definition: arrow.cpp:109
rviz
Definition: add_display_dialog.cpp:54
rviz::Shape::setOffset
void setOffset(const Ogre::Vector3 &offset)
Set the offset for this shape.
Definition: shape.cpp:141
arrow.h
ogre_vector.h
rviz::Shape::setUserData
void setUserData(const Ogre::Any &data) override
Sets user data on all ogre objects we own.
Definition: shape.cpp:171
rviz::Arrow::setDirection
void setDirection(const Ogre::Vector3 &direction)
Set the direction of the arrow.
Definition: arrow.cpp:126
rviz::Arrow::~Arrow
~Arrow() override
Definition: arrow.cpp:66
rviz::Arrow::setShaftColor
void setShaftColor(float r, float g, float b, float a=1.0f)
Set the color of the arrow's shaft. Values are in the range [0, 1].
Definition: arrow.cpp:104
rviz::Shape
Definition: shape.h:51
rviz::Object
Base class for visible objects, providing a minimal generic interface.
Definition: object.h:47
rviz::Arrow::setPosition
void setPosition(const Ogre::Vector3 &position) override
Set the position of the base of the arrow.
Definition: arrow.cpp:114
rviz::Arrow::Arrow
Arrow(Ogre::SceneManager *scene_manager, Ogre::SceneNode *parent_node=nullptr, float shaft_length=1.0f, float shaft_diameter=0.1f, float head_length=0.3f, float head_diameter=0.2f)
Constructor.
Definition: arrow.cpp:42
rviz::Shape::setScale
void setScale(const Ogre::Vector3 &scale) override
Set the scale of the object. Always relative to the identity orientation of the object.
Definition: shape.cpp:156
rviz::Arrow::head_
Shape * head_
Cone used for the head of the arrow.
Definition: arrow.h:170
rviz::Arrow::setColor
void setColor(float r, float g, float b, float a) override
Set the color of this arrow. Sets both the head and shaft color to the same value....
Definition: arrow.cpp:89
rviz::Shape::setPosition
void setPosition(const Ogre::Vector3 &position) override
Set the position of this object.
Definition: shape.cpp:146
rviz::Arrow::getPosition
const Ogre::Vector3 & getPosition() override
Get the local position of this object.
Definition: arrow.cpp:140
rviz::Arrow::setScale
void setScale(const Ogre::Vector3 &scale) override
Set the scale of the object. Always relative to the identity orientation of the object.
Definition: arrow.cpp:134


rviz
Author(s): Dave Hershberger, David Gossow, Josh Faust, William Woodall
autogenerated on Fri Dec 13 2024 03:31:02