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 
58 
59 namespace mira { namespace model {
60 
62 
67 {
69 public:
70 
71  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
72 
74  color(Color::White),
75  scale(1.0f, 1.0f, 1.0f) {}
76 
77  MarkerBase(const Pose3& pos, const Color::RGBA& col=Color::White, const Size3f& s=Size3f(1.0f,1.0f,1.0f)) :
78  position(pos),
79  color(col),
80  scale(s) {}
81 
82  template<typename Reflector>
83  void reflect(Reflector& r)
84  {
85  r.member("Position", position, "");
86  r.member("Color", color, "");
87  r.member("Scale", scale, "");
88  }
89 
93 };
94 
95 typedef boost::shared_ptr<MarkerBase> MarkerBasePtr;
96 
98 
104 {
106 public:
108  BoxMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
109  MarkerBase(position, color, scale) {}
110 };
111 
112 typedef boost::shared_ptr<BoxMarker> BoxMarkerPtr;
113 
115 
121 {
123 public:
125  SphereMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
126  MarkerBase(position, color, scale) {}
127 };
128 
129 typedef boost::shared_ptr<SphereMarker> SphereMarkerPtr;
130 
132 
138 {
140 public:
142  CylinderMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
143  MarkerBase(position, color, scale) {}
144 };
145 
146 typedef boost::shared_ptr<CylinderMarker> CylinderMarkerPtr;
147 
149 
155 {
157 public:
159  ConeMarker(const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
160  MarkerBase(position, color, scale) {}
161 };
162 
163 typedef boost::shared_ptr<ConeMarker> ConeMarkerPtr;
164 
166 
171 {
173 public:
175  TextMarker(const std::string& str, const Pose3& position, const Color::RGBA& color=Color::White, const Size3f& scale=Size3f(1.0f,1.0f,1.0f)) :
176  MarkerBase(position, color, scale), text(str) {}
177 
178  template<typename Reflector>
179  void reflect(Reflector& r)
180  {
182  r.member("Text", text, "");
183  }
184  std::string text;
185 };
186 
187 typedef boost::shared_ptr<TextMarker> TextMarkerPtr;
188 
190 
195 {
197 };
198 
199 typedef boost::shared_ptr<ArrowMarker> ArrowMarkerPtr;
200 
206 {
208 public:
209 
210  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
211 
212  template<typename Reflector>
213  void reflect(Reflector& r)
214  {
216  r.member("Start", start, "");
217  r.member("End", end, "");
218  }
219 
222 };
223 
224 typedef boost::shared_ptr<PointedArrowMarker> PointedArrowMarkerPtr;
225 
227 
233 {
235 public:
236  AxesMarker() : MarkerBase(), applyColor(false) {}
237 
238  template<typename Reflector>
239  void reflect(Reflector& r)
240  {
242  r.member("ApplyColor", applyColor, "");
243  }
244 
246 };
247 
248 typedef boost::shared_ptr<AxesMarker> AxesMarkerPtr;
249 
251 
256 {
258 public:
259  template<typename Reflector>
260  void reflect(Reflector& r)
261  {
263  r.member("Polygon", polygon, "");
264  }
265 
267 };
268 
269 typedef boost::shared_ptr<PolygonMarker> PolygonMarkerPtr;
270 
272 
280 {
282 public:
283  LineListMarker() : lineWidth(0.01f) {}
284 
285  template<typename Reflector>
286  void reflect(Reflector& r)
287  {
289  r.member("LineWidth", lineWidth, "", 0.01f);
290  r.member("Lines", lines, "");
291  }
292  float lineWidth;
293  std::vector<Line3f> lines;
294 };
295 
296 typedef boost::shared_ptr<LineListMarker> LineListMarkerPtr;
297 
299 
307 {
309 public:
310  LineStripMarker() : lineWidth(0.01f) {}
311 
312  template<typename Reflector>
313  void reflect(Reflector& r)
314  {
316  r.member("LineWidth", lineWidth, "", 0.01f);
317  r.member("Points", points, "");
318  }
319  float lineWidth;
320  std::vector<Point3f> points;
321 };
322 
323 typedef boost::shared_ptr<LineStripMarker> LineStripMarkerPtr;
325 
335 {
337 public:
338  MeshMarker() : forceReloadResources(false) {}
339  MeshMarker(const std::string& file, bool forceReload = false)
340  : meshFile(file), forceReloadResources(false) {}
341 
342  template<typename Reflector>
343  void reflect(Reflector& r)
344  {
346  r.member("MeshFile", meshFile, "");
347  r.member("ForceReloadDir", forceReloadResources, "");
348  }
349 
350  std::string meshFile;
352 };
353 
354 typedef boost::shared_ptr<MeshMarker> MeshMarkerPtr;
356 
361 struct Marker
362 {
363  enum Command
364  {
366  REMOVE = 1
367  };
368  Marker() :
369  id(0),
370  ns(""),
372 
373  template<typename Reflector>
374  void reflect(Reflector& r)
375  {
376  r.member("ID", id, "");
377  r.member("Namespace", ns, "");
378  r.member("Command", command, "");
379  r.member("Objects", objects, "");
380  }
381  uint32 id;
382  std::string ns;
384  std::vector<MarkerBasePtr> objects;
385 };
386 
388 
389 }} // namespace
390 
391 #endif
Command command
Definition: Marker.h:383
Polygon3f polygon
Definition: Marker.h:266
void reflect(Reflector &r)
Definition: Marker.h:260
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:175
boost::shared_ptr< BoxMarker > BoxMarkerPtr
Definition: Marker.h:112
Create or modify marker for namespace and id.
Definition: Marker.h:366
std::vector< Line3f > lines
Definition: Marker.h:293
Text marker.
Definition: Marker.h:170
float lineWidth
Definition: Marker.h:292
std::string ns
Definition: Marker.h:382
BoxMarker()
Definition: Marker.h:107
std::string meshFile
Definition: Marker.h:350
Marker()
Definition: Marker.h:368
boost::shared_ptr< MeshMarker > MeshMarkerPtr
Definition: Marker.h:354
boost::geometry::model::ring< Point3f > Polygon3f
Point3f start
Definition: Marker.h:220
PropertyHint file(const std::string &filters=std::string(), bool save=false)
Point3f end
Definition: Marker.h:221
void reflect(Reflector &r)
Definition: Marker.h:374
boost::shared_ptr< SphereMarker > SphereMarkerPtr
Definition: Marker.h:129
Base class for all marker types.
Definition: Marker.h:66
void reflect(Reflector &r)
Definition: Marker.h:239
Cylinder marker.
Definition: Marker.h:137
CylinderMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:142
#define MIRA_REFLECT_BASE(reflector, BaseClass)
void reflect(Reflector &r)
Definition: Marker.h:83
boost::shared_ptr< PointedArrowMarker > PointedArrowMarkerPtr
Definition: Marker.h:224
const RGB White(1.0f, 1.0f, 1.0f)
std::vector< Point3f > points
Definition: Marker.h:320
SphereMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:125
BoxMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:108
Cone marker.
Definition: Marker.h:154
TextMarker()
Definition: Marker.h:174
float lineWidth
Definition: Marker.h:319
Sphere marker.
Definition: Marker.h:120
std::string text
Definition: Marker.h:184
ConeMarker(const Pose3 &position, const Color::RGBA &color=Color::White, const Size3f &scale=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:159
Size< float, 3 > Size3f
LineListMarker()
Definition: Marker.h:283
LineStripMarker()
Definition: Marker.h:310
Pose3 position
Definition: Marker.h:90
Marker message.
Definition: Marker.h:361
std::vector< MarkerBasePtr > objects
Definition: Marker.h:384
void reflect(Reflector &r)
Definition: Marker.h:343
boost::shared_ptr< MarkerBase > MarkerBasePtr
Definition: Marker.h:95
Line list marker.
Definition: Marker.h:279
void reflect(Reflector &r)
Definition: Marker.h:286
uint32 id
Definition: Marker.h:381
boost::shared_ptr< CylinderMarker > CylinderMarkerPtr
Definition: Marker.h:146
MeshMarker()
Definition: Marker.h:338
RigidModel export macro declaration.
Axes marker consisting of 3 orthogonal arrows.
Definition: Marker.h:232
Box marker.
Definition: Marker.h:103
Arrow marker that points from start to end point.
Definition: Marker.h:205
boost::shared_ptr< AxesMarker > AxesMarkerPtr
Definition: Marker.h:248
Polygon marker.
Definition: Marker.h:255
#define MIRA_OBJECT(classIdentifier)
Color::RGBA color
Definition: Marker.h:91
boost::shared_ptr< LineStripMarker > LineStripMarkerPtr
Definition: Marker.h:323
bool applyColor
Definition: Marker.h:245
void reflect(Reflector &r)
Definition: Marker.h:179
Mesh marker.
Definition: Marker.h:334
Line strip marker.
Definition: Marker.h:306
boost::shared_ptr< PolygonMarker > PolygonMarkerPtr
Definition: Marker.h:269
#define MIRA_RIGID_MODEL_EXPORT
Definition: RigidModelExports.h:61
MarkerBase(const Pose3 &pos, const Color::RGBA &col=Color::White, const Size3f &s=Size3f(1.0f, 1.0f, 1.0f))
Definition: Marker.h:77
ConeMarker()
Definition: Marker.h:158
Size3f scale
Definition: Marker.h:92
void reflect(Reflector &r)
Definition: Marker.h:313
Command
Definition: Marker.h:363
bool forceReloadResources
Definition: Marker.h:351
boost::shared_ptr< ConeMarker > ConeMarkerPtr
Definition: Marker.h:163
AxesMarker()
Definition: Marker.h:236
Arrow marker.
Definition: Marker.h:194
EIGEN_MAKE_ALIGNED_OPERATOR_NEW void reflect(Reflector &r)
Definition: Marker.h:213
SphereMarker()
Definition: Marker.h:124
CylinderMarker()
Definition: Marker.h:141
boost::shared_ptr< LineListMarker > LineListMarkerPtr
Definition: Marker.h:296
boost::shared_ptr< ArrowMarker > ArrowMarkerPtr
Definition: Marker.h:199
boost::shared_ptr< TextMarker > TextMarkerPtr
Definition: Marker.h:187
MeshMarker(const std::string &file, bool forceReload=false)
Definition: Marker.h:339
Definition: Marker.h:365
EIGEN_MAKE_ALIGNED_OPERATOR_NEW MarkerBase()
Definition: Marker.h:73