MIRA
Marker.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Contact: info@mira-project.org
9  *
10  * Commercial Usage:
11  * Licensees holding valid commercial licenses may use this file in
12  * accordance with the commercial license agreement provided with the
13  * software or, alternatively, in accordance with the terms contained in
14  * a written agreement between you and MLAB or NICR.
15  *
16  * GNU General Public License Usage:
17  * Alternatively, this file may be used under the terms of the GNU
18  * General Public License version 3.0 as published by the Free Software
19  * Foundation and appearing in the file LICENSE.GPL3 included in the
20  * packaging of this file. Please review the following information to
21  * ensure the GNU General Public License version 3.0 requirements will be
22  * met: http://www.gnu.org/copyleft/gpl.html.
23  * Alternatively you may (at your option) use any later version of the GNU
24  * General Public License if such license has been publicly approved by
25  * MLAB and NICR (or its successors, if any).
26  *
27  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
28  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
29  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
30  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
33  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
34  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
35  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
36  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
37  */
38 
47 #ifndef _MIRA_MARKER_H_
48 #define _MIRA_MARKER_H_
49 
50 #include <image/Color.h>
51 #include <transform/Pose.h>
52 #include <geometry/Line.h>
53 #include <geometry/Point.h>
54 #include <geometry/Size.h>
55 #include <geometry/Polygon.h>
56 
57 namespace mira { namespace model {
58 
60 
64 class MarkerBase : public Object
65 {
67 public:
68 
69  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
70 
72  color(Color::White),
73  scale(1.0f, 1.0f, 1.0f) {}
74 
75  MarkerBase(const Pose3& pos, const Color::RGBA& col=Color::White, const Size3f& s=Size3f(1.0f,1.0f,1.0f)) :
76  position(pos),
77  color(col),
78  scale(s) {}
79 
80  template<typename Reflector>
81  void reflect(Reflector& r)
82  {
83  r.member("Position", position, "");
84  r.member("Color", color, "");
85  r.member("Scale", scale, "");
86  }
87 
91 };
92 
93 typedef boost::shared_ptr<MarkerBase> MarkerBasePtr;
94 
96 
101 class BoxMarker : public MarkerBase
102 {
104 public:
106  BoxMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
108 };
109 
110 typedef boost::shared_ptr<BoxMarker> BoxMarkerPtr;
111 
113 
118 class SphereMarker : public MarkerBase
119 {
121 public:
123  SphereMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
125 };
126 
127 typedef boost::shared_ptr<SphereMarker> SphereMarkerPtr;
128 
130 
136 {
138 public:
140  CylinderMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
142 };
143 
144 typedef boost::shared_ptr<CylinderMarker> CylinderMarkerPtr;
145 
147 
152 class ConeMarker : public MarkerBase
153 {
155 public:
157  ConeMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
159 };
160 
161 typedef boost::shared_ptr<ConeMarker> ConeMarkerPtr;
162 
164 
168 class TextMarker : public MarkerBase
169 {
171 public:
173  TextMarker(const std::string& str, const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
174  MarkerBase(position, color, scale), text(str) {}
175 
176  template<typename Reflector>
177  void reflect(Reflector& r)
178  {
180  r.member("Text", text, "");
181  }
182  std::string text;
183 };
184 
185 typedef boost::shared_ptr<TextMarker> TextMarkerPtr;
186 
188 
192 class ArrowMarker : public MarkerBase
193 {
195 };
196 
197 typedef boost::shared_ptr<ArrowMarker> ArrowMarkerPtr;
198 
204 {
206 public:
207 
208  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
209 
210  template<typename Reflector>
211  void reflect(Reflector& r)
212  {
214  r.member("Start", start, "");
215  r.member("End", end, "");
216  }
217 
220 };
221 
222 typedef boost::shared_ptr<PointedArrowMarker> PointedArrowMarkerPtr;
223 
225 
230 class AxesMarker : public MarkerBase
231 {
233 public:
235 
236  template<typename Reflector>
237  void reflect(Reflector& r)
238  {
240  r.member("ApplyColor", applyColor, "");
241  }
242 
244 };
245 
246 typedef boost::shared_ptr<AxesMarker> AxesMarkerPtr;
247 
249 
253 class PolygonMarker : public MarkerBase
254 {
256 public:
257  template<typename Reflector>
258  void reflect(Reflector& r)
259  {
261  r.member("Polygon", polygon, "");
262  }
263 
265 };
266 
267 typedef boost::shared_ptr<PolygonMarker> PolygonMarkerPtr;
268 
270 
278 {
280 public:
281  LineListMarker() : lineWidth(0.01f) {}
282 
283  template<typename Reflector>
284  void reflect(Reflector& r)
285  {
287  r.member("LineWidth", lineWidth, "", 0.01f);
288  r.member("Lines", lines, "");
289  }
290  float lineWidth;
291  std::vector<Line3f> lines;
292 };
293 
294 typedef boost::shared_ptr<LineListMarker> LineListMarkerPtr;
295 
297 
305 {
307 public:
309 
310  template<typename Reflector>
311  void reflect(Reflector& r)
312  {
314  r.member("LineWidth", lineWidth, "", 0.01f);
315  r.member("Points", points, "");
316  }
317  float lineWidth;
318  std::vector<Point3f> points;
319 };
320 
321 typedef boost::shared_ptr<LineStripMarker> LineStripMarkerPtr;
323 
332 class MeshMarker : public MarkerBase
333 {
335 public:
337  MeshMarker(const std::string& file, bool forceReload = false)
338  : meshFile(file), forceReloadResources(false) {}
339 
340  template<typename Reflector>
341  void reflect(Reflector& r)
342  {
344  r.member("MeshFile", meshFile, "");
345  r.member("ForceReloadDir", forceReloadResources, "");
346  }
347 
348  std::string meshFile;
350 };
351 
352 typedef boost::shared_ptr<MeshMarker> MeshMarkerPtr;
354 
359 struct Marker
360 {
361  enum Command
362  {
364  REMOVE = 1
365  };
366  Marker() :
367  id(0),
368  ns(""),
370 
371  template<typename Reflector>
372  void reflect(Reflector& r)
373  {
374  r.member("ID", id, "");
375  r.member("Namespace", ns, "");
376  r.member("Command", command, "");
377  r.member("Objects", objects, "");
378  }
380  std::string ns;
382  std::vector<MarkerBasePtr> objects;
383 };
384 
386 
387 }} // namespace
388 
389 #endif
Command command
Definition: Marker.h:381
Polygon3f polygon
Definition: Marker.h:264
void reflect(Reflector &r)
Definition: Marker.h:258
TextMarker(const std::string &str, const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:173
boost::shared_ptr< BoxMarker > BoxMarkerPtr
Definition: Marker.h:110
Remove marker with namespace and id.
Definition: Marker.h:364
std::vector< Line3f > lines
Definition: Marker.h:291
Text marker.
Definition: Marker.h:168
float lineWidth
Definition: Marker.h:290
std::string ns
Definition: Marker.h:380
BoxMarker()
Definition: Marker.h:105
std::string meshFile
Definition: Marker.h:348
Marker()
Definition: Marker.h:366
boost::shared_ptr< MeshMarker > MeshMarkerPtr
Definition: Marker.h:352
boost::geometry::model::ring< Point3f > Polygon3f
Point3f start
Definition: Marker.h:218
PropertyHint file(const std::string &filters=std::string(), bool save=false)
Point3f end
Definition: Marker.h:219
void reflect(Reflector &r)
Definition: Marker.h:372
boost::shared_ptr< SphereMarker > SphereMarkerPtr
Definition: Marker.h:127
Base class for all marker types.
Definition: Marker.h:64
void reflect(Reflector &r)
Definition: Marker.h:237
Cylinder marker.
Definition: Marker.h:135
CylinderMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:140
#define MIRA_REFLECT_BASE(reflector, BaseClass)
void reflect(Reflector &r)
Definition: Marker.h:81
uint32_t uint32
boost::shared_ptr< PointedArrowMarker > PointedArrowMarkerPtr
Definition: Marker.h:222
const RGB White(1.0f, 1.0f, 1.0f)
std::vector< Point3f > points
Definition: Marker.h:318
SphereMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:123
BoxMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:106
Cone marker.
Definition: Marker.h:152
TextMarker()
Definition: Marker.h:172
float lineWidth
Definition: Marker.h:317
Sphere marker.
Definition: Marker.h:118
std::string text
Definition: Marker.h:182
ConeMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:157
Size< float, 3 > Size3f
LineListMarker()
Definition: Marker.h:281
LineStripMarker()
Definition: Marker.h:308
Pose3 position
Definition: Marker.h:88
Marker message.
Definition: Marker.h:359
std::vector< MarkerBasePtr > objects
Definition: Marker.h:382
void reflect(Reflector &r)
Definition: Marker.h:341
boost::shared_ptr< MarkerBase > MarkerBasePtr
Definition: Marker.h:93
Line list marker.
Definition: Marker.h:277
void reflect(Reflector &r)
Definition: Marker.h:284
uint32 id
Definition: Marker.h:379
boost::shared_ptr< CylinderMarker > CylinderMarkerPtr
Definition: Marker.h:144
MeshMarker()
Definition: Marker.h:336
Axes marker consisting of 3 orthogonal arrows.
Definition: Marker.h:230
Box marker.
Definition: Marker.h:101
Arrow marker that points from start to end point.
Definition: Marker.h:203
boost::shared_ptr< AxesMarker > AxesMarkerPtr
Definition: Marker.h:246
Polygon marker.
Definition: Marker.h:253
#define MIRA_OBJECT(classIdentifier)
Color::RGBA color
Definition: Marker.h:89
boost::shared_ptr< LineStripMarker > LineStripMarkerPtr
Definition: Marker.h:321
bool applyColor
Definition: Marker.h:243
void reflect(Reflector &r)
Definition: Marker.h:177
Mesh marker.
Definition: Marker.h:332
Line strip marker.
Definition: Marker.h:304
boost::shared_ptr< PolygonMarker > PolygonMarkerPtr
Definition: Marker.h:267
MarkerBase(const Pose3 &pos, const Color::RGBA &col=Color::White, const Size3f &s=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:75
ConeMarker()
Definition: Marker.h:156
Size3f scale
Definition: Marker.h:90
void reflect(Reflector &r)
Definition: Marker.h:311
Command
Definition: Marker.h:361
bool forceReloadResources
Definition: Marker.h:349
boost::shared_ptr< ConeMarker > ConeMarkerPtr
Definition: Marker.h:161
AxesMarker()
Definition: Marker.h:234
Arrow marker.
Definition: Marker.h:192
EIGEN_MAKE_ALIGNED_OPERATOR_NEW void reflect(Reflector &r)
Definition: Marker.h:211
SphereMarker()
Definition: Marker.h:122
CylinderMarker()
Definition: Marker.h:139
boost::shared_ptr< LineListMarker > LineListMarkerPtr
Definition: Marker.h:294
boost::shared_ptr< ArrowMarker > ArrowMarkerPtr
Definition: Marker.h:197
boost::shared_ptr< TextMarker > TextMarkerPtr
Definition: Marker.h:185
MeshMarker(const std::string &file, bool forceReload=false)
Definition: Marker.h:337
Create or modify marker for namespace and id.
Definition: Marker.h:363
EIGEN_MAKE_ALIGNED_OPERATOR_NEW MarkerBase()
Definition: Marker.h:71