libalmath  2.8.7.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
scenebuilder.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015 Aldebaran. All rights reserved.
3  *
4  */
5 
6 #ifndef LIB_ALMATH_SCENEGRAPH_SCENEBUILDER_H
7 #define LIB_ALMATH_SCENEGRAPH_SCENEBUILDER_H
8 
9 #include <Eigen/Geometry>
10 #include <almath/api.h>
11 
12 namespace AL {
13 class Mesh;
14 
15 namespace Math {
16 struct Transform;
17 class Sphere;
18 class RoundedRectangle;
19 class Pill;
20 class Shape3D;
21 }
22 // Interface for a simple Scene builder.
23 //
24 // The scene is indeed simple:
25 //
26 // * all meshes have the same material
27 // * each node binds a single mesh, and a mesh is bound by a single node
28 // * there is no node hierarchy
29 // * there is no texture support (yet?)
30 //
31 //
32 // Possible future developments:
33 //
34 // * add texture support
35 // * add support for external meshes
36 // * add support for debugging markers (arrows, frames, lines, points)
37 // * add ids (and maybe scoped ids) to nodes so that one can target them later
38 // (maybe add an id for individual shapes color)
39 // * add animation support: let one
40 // * move
41 // * change color
42 // * toggle visibility
43 // of stuff at specific time
44 //
45 // One can imagine several implementations of this interface:
46 //
47 // * build the scene in a collada file
48 // * animate a collada scene by dumping collada animations
49 // (though we lack a nice portable collada animation viewer, maybe blender
50 // would fit the bill for specifically created collada files?)
51 // * build the scene in a node of the Ogre scene graph (we do not need to
52 // build the whole Ogre scene)
53 // * animate an ogre scene
54 // * idem with renderwidget?
55 // * write the animation in a ros bag
56 class ALMATH_API SceneBuilder {
57  public:
58  class Color {
59  public:
60  Color() : r(0.5f), g(0.5f), b(0.5f), a(0.5f) {}
61  float r, g, b, a;
62  };
63 
64  // a class for configuration which can be used by the SceneBuilder
65  // implementations
66  class Config {
67  public:
68  Config() : nbArcVertices(2) {}
70  // the number of intermediate vertices on the are of a rounded box
72  };
73 
74  SceneBuilder(const Config &_config);
75  SceneBuilder(const SceneBuilder &other);
76 
77  virtual ~SceneBuilder();
78 
79  const Config &getConfig() const;
80 
81  void add(const Mesh &mesh, const Eigen::Affine3f &tf);
82  void add(const Mesh &mesh, const Math::Transform &tf);
83  void add(const Math::Sphere &shape, const Math::Transform &tf);
84  void add(const Math::RoundedRectangle &shape, const Math::Transform &tf);
85  void add(const Math::Pill &shape, const Math::Transform &tf);
86 
87  void add(const Math::Shape3D &shape, const Math::Transform &tf);
88 
89  protected:
90  virtual void xAddMesh(const Mesh &mesh, const Eigen::Affine3f &tf) = 0;
91 
92  private:
93  Config _config;
94 };
95 }
96 
97 #endif
Definition: mesh.h:89
A homogenous transformation matrix.
Definition: altransform.h:23