AdvancedVisualizationFactory.h
Go to the documentation of this file.
1 
2 /* This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package ArmarXGuiPlugins::RobotTrajectoryDesigner::Visualization
17 * @author Timo Birr
18 * @date 2018
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 #ifndef ADVANCEDVISUALIZATIONFACTORY_H
23 #define ADVANCEDVISUALIZATIONFACTORY_H
24 
25 #include <memory>
26 
27 #include <VirtualRobot/Primitive.h>
28 #include <VirtualRobot/Robot.h>
29 #include <VirtualRobot/Visualization/VisualizationFactory.h>
30 #include <VirtualRobot/Visualization/VisualizationNode.h>
31 
33 #include "VirtualRobot/BoundingBox.h"
34 #include "VirtualRobot/MathTools.h"
35 #include "VirtualRobot/Trajectory.h"
36 #include "VirtualRobot/Visualization/TriMeshModel.h"
37 
38 namespace armarx
39 {
40  /**
41  * @brief The AdvancedVisualizationFactory class is the abstract decorator of the Decorator-Pattern and decorates the VisualizationFactoy in Simox
42  *
43  * The additional Functionality is that it can also generate the Visualization for a Manipulator
44  */
45  class AdvancedVisualizationFactory : public VirtualRobot::VisualizationFactory
46  {
47 
48 
49  public:
50  /**
51  * @brief createManipulator
52  * @param kc
53  * @param robot
54  * @return
55  */
56  AbstractManipulatorVisualizationPtr createManipulator(VirtualRobot::RobotNodeSetPtr kc,
58 
59  virtual void
60  init(int& argc, char* argv[], const std::string& appName) override
61  {
62  }
63 
64  virtual VirtualRobot::VisualizationNodePtr
66  const std::vector<VirtualRobot::Primitive::PrimitivePtr>& primitives,
67  bool boundingBox = false,
68  Color color = Color::Gray()) override
69  {
70  return component.getVisualizationFromPrimitives(primitives, boundingBox, color);
71  }
72 
73  virtual VirtualRobot::VisualizationNodePtr
74  getVisualizationFromFile(const std::string& filename,
75  bool boundingBox = false,
76  float scaleX = 1.0f,
77  float scaleY = 1.0f,
78  float scaleZ = 1.0f) override
79  {
80  return component.getVisualizationFromFile(
81  filename, boundingBox, scaleX, scaleY, scaleZ);
82  }
83 
84  virtual VirtualRobot::VisualizationNodePtr
85  getVisualizationFromFile(const std::ifstream& ifs,
86  bool boundingBox = false,
87  float scaleX = 1.0f,
88  float scaleY = 1.0f,
89  float scaleZ = 1.0f) override
90  {
91  return component.getVisualizationFromFile(ifs, boundingBox, scaleX, scaleY, scaleZ);
92  }
93 
94  virtual VirtualRobot::VisualizationNodePtr
95  createBox(float width,
96  float height,
97  float depth,
98  float colorR = 0.5f,
99  float colorG = 0.5f,
100  float colorB = 0.5f) override
101  {
102  return component.createBox(width, height, depth, colorR, colorG, colorB);
103  }
104 
105  virtual VirtualRobot::VisualizationNodePtr
106  createLine(const Eigen::Vector3f& from,
107  const Eigen::Vector3f& to,
108  float width = 1.0f,
109  float colorR = 0.5f,
110  float colorG = 0.5f,
111  float colorB = 0.5f) override
112  {
113  return component.createLine(from, to, width, colorR, colorG, colorB);
114  }
115 
116  virtual VirtualRobot::VisualizationNodePtr
118  const Eigen::Matrix4f& to,
119  float width = 1.0f,
120  float colorR = 0.5f,
121  float colorG = 0.5f,
122  float colorB = 0.5f) override
123  {
124  return component.createLine(from, to, width, colorR, colorG, colorB);
125  }
126 
127  virtual VirtualRobot::VisualizationNodePtr
128  createSphere(float radius,
129  float colorR = 0.5f,
130  float colorG = 0.5f,
131  float colorB = 0.5f) override
132  {
133  return component.createSphere(radius, colorR, colorG, colorB);
134  }
135 
136  virtual VirtualRobot::VisualizationNodePtr
137  createCircle(float radius,
138  float circleCompletion,
139  float width,
140  float colorR = 1.0f,
141  float colorG = 0.5f,
142  float colorB = 0.5f,
143  size_t numberOfCircleParts = 30) override
144  {
145  return component.createCircle(
146  radius, circleCompletion, width, colorR, colorG, colorB, numberOfCircleParts);
147  }
148 
149  virtual VirtualRobot::VisualizationNodePtr
150  createTorus(float radius,
151  float tubeRadius,
152  float completion = 1.0f,
153  float colorR = 0.5f,
154  float colorG = 0.5f,
155  float colorB = 0.5f,
156  float transparency = 0.0f,
157  int sides = 8,
158  int rings = 30) override
159  {
160  return component.createTorus(
161  radius, tubeRadius, completion, colorR, colorG, colorB, transparency, sides, rings);
162  }
163 
164  virtual VirtualRobot::VisualizationNodePtr
165  createCircleArrow(float radius,
166  float tubeRadius,
167  float completion = 1,
168  float colorR = 0.5f,
169  float colorG = 0.5f,
170  float colorB = 0.5f,
171  float transparency = 0.0f,
172  int sides = 8,
173  int rings = 30) override
174  {
175  return component.createCircleArrow(
176  radius, tubeRadius, completion, colorR, colorG, colorB, transparency, sides, rings);
177  }
178 
179  virtual VirtualRobot::VisualizationNodePtr
180  createCylinder(float radius,
181  float height,
182  float colorR = 0.5f,
183  float colorG = 0.5f,
184  float colorB = 0.5f) override
185  {
186  return component.createCylinder(radius, height, colorR, colorG, colorB);
187  }
188 
189  virtual VirtualRobot::VisualizationNodePtr
190  createCoordSystem(float scaling = 1.0f,
191  std::string* text = NULL,
192  float axisLength = 100.0f,
193  float axisSize = 3.0f,
194  int nrOfBlocks = 10) override
195  {
196  return component.createCoordSystem(scaling, text, axisLength, axisSize, nrOfBlocks);
197  }
198 
199  virtual VirtualRobot::VisualizationNodePtr
200  createBoundingBox(const VirtualRobot::BoundingBox& bbox, bool wireFrame = false) override
201  {
202  return component.createBoundingBox(bbox, wireFrame);
203  }
204 
205  virtual VirtualRobot::VisualizationNodePtr
206  createVertexVisualization(const Eigen::Vector3f& position,
207  float radius,
208  float transparency,
209  float colorR = 0.5f,
210  float colorG = 0.5f,
211  float colorB = 0.5f) override
212  {
213  return component.createVertexVisualization(
214  position, radius, transparency, colorR, colorG, colorB);
215  }
216 
217  virtual VirtualRobot::VisualizationNodePtr
218  createTriMeshModelVisualization(VirtualRobot::TriMeshModelPtr model,
219  Eigen::Matrix4f& pose,
220  float scaleX = 1.0f,
221  float scaleY = 1.0f,
222  float scaleZ = 1.0f) override
223  {
224  return component.createTriMeshModelVisualization(model, pose, scaleX, scaleY, scaleZ);
225  }
226 
227  virtual VirtualRobot::VisualizationNodePtr
228  createTriMeshModelVisualization(VirtualRobot::TriMeshModelPtr model,
229  bool showNormals,
230  Eigen::Matrix4f& pose,
231  bool showLines = true) override
232  {
233  return component.createTriMeshModelVisualization(model, showNormals, pose, showLines);
234  }
235 
236  virtual VirtualRobot::VisualizationNodePtr
237  createPlane(const Eigen::Vector3f& position,
238  const Eigen::Vector3f& normal,
239  float extend,
240  float transparency,
241  float colorR = 0.5f,
242  float colorG = 0.5f,
243  float colorB = 0.5f) override
244  {
245  return component.createPlane(
246  position, normal, extend, transparency, colorR, colorG, colorB);
247  }
248 
249  virtual VirtualRobot::VisualizationNodePtr
250  createPlane(const VirtualRobot::MathTools::Plane& plane,
251  float extend,
252  float transparency,
253  float colorR = 0.5f,
254  float colorG = 0.5f,
255  float colorB = 0.5f) override
256  {
257  return component.createPlane(plane, extend, transparency, colorR, colorG, colorB);
258  }
259 
260  virtual VirtualRobot::VisualizationNodePtr
261  createArrow(const Eigen::Vector3f& n,
262  float length = 50.0f,
263  float width = 2.0f,
264  const Color& color = Color::Gray()) override
265  {
266  return component.createArrow(n, length, width, color);
267  }
268 
269  virtual VirtualRobot::VisualizationNodePtr
271  Color colorNode = Color::Blue(),
272  Color colorLine = Color::Gray(),
273  float nodeSize = 15.0f,
274  float lineSize = 4.0f) override
275  {
276  return component.createTrajectory(t, colorNode, colorLine, nodeSize, lineSize);
277  }
278 
279  virtual VirtualRobot::VisualizationNodePtr
280  createText(const std::string& text,
281  bool billboard = false,
282  float scaling = 1.0f,
283  Color c = Color::Black(),
284  float offsetX = 20.0f,
285  float offsetY = 20.0f,
286  float offsetZ = 0.0f) override
287  {
288  return component.createText(text, billboard, scaling, c, offsetX, offsetY, offsetZ);
289  }
290 
291  virtual VirtualRobot::VisualizationNodePtr
292  createEllipse(float x,
293  float y,
294  float z,
295  bool showAxes = true,
296  float axesHeight = 4.0f,
297  float axesWidth = 8.0f) override
298  {
299  return component.createEllipse(x, y, z, showAxes, axesHeight, axesWidth);
300  }
301 
302  virtual void
303  applyDisplacement(VirtualRobot::VisualizationNodePtr o, Eigen::Matrix4f& m) override
304  {
305  }
306 
307  virtual VirtualRobot::VisualizationNodePtr
309  {
310  return component.createVisualization();
311  }
312 
313  virtual VirtualRobot::VisualizationNodePtr
315  const std::vector<VirtualRobot::VisualizationNodePtr>& visualizations) const override
316  {
317  return component.createUnitedVisualization(visualizations);
318  }
319 
320  /**
321  * @brief createCurve creates the visualization of a curve that goes through the Waypoints in transition
322  * @param transition the curve/transition to visualize
323  * @param highligt true when the Transition should be highlighted(red) , false if not (blue)
324  * @return the visualization node in the visualization method of this factory
325  */
326  virtual VirtualRobot::VisualizationNodePtr
327  createCurve(const std::vector<PoseBasePtr> transition, bool highligt);
328 
329 
330  protected:
331  VisualizationFactory component;
332  };
333 
334  using AdvancedVisualizationFactoryPtr = std::shared_ptr<AdvancedVisualizationFactory>;
335 } // namespace armarx
336 
337 #endif
armarx::AdvancedVisualizationFactory::createSphere
virtual VirtualRobot::VisualizationNodePtr createSphere(float radius, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:128
armarx::AdvancedVisualizationFactory::createTorus
virtual VirtualRobot::VisualizationNodePtr createTorus(float radius, float tubeRadius, float completion=1.0f, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f, float transparency=0.0f, int sides=8, int rings=30) override
Definition: AdvancedVisualizationFactory.h:150
armarx::AdvancedVisualizationFactory::createTrajectory
virtual VirtualRobot::VisualizationNodePtr createTrajectory(VirtualRobot::TrajectoryPtr t, Color colorNode=Color::Blue(), Color colorLine=Color::Gray(), float nodeSize=15.0f, float lineSize=4.0f) override
Definition: AdvancedVisualizationFactory.h:270
armarx::AdvancedVisualizationFactory::createPlane
virtual VirtualRobot::VisualizationNodePtr createPlane(const VirtualRobot::MathTools::Plane &plane, float extend, float transparency, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:250
armarx::AdvancedVisualizationFactory::createBoundingBox
virtual VirtualRobot::VisualizationNodePtr createBoundingBox(const VirtualRobot::BoundingBox &bbox, bool wireFrame=false) override
Definition: AdvancedVisualizationFactory.h:200
armarx::AdvancedVisualizationFactory::createCircle
virtual VirtualRobot::VisualizationNodePtr createCircle(float radius, float circleCompletion, float width, float colorR=1.0f, float colorG=0.5f, float colorB=0.5f, size_t numberOfCircleParts=30) override
Definition: AdvancedVisualizationFactory.h:137
armarx::AdvancedVisualizationFactory::createManipulator
AbstractManipulatorVisualizationPtr createManipulator(VirtualRobot::RobotNodeSetPtr kc, VirtualRobot::RobotPtr robot)
createManipulator
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::AdvancedVisualizationFactory::createCylinder
virtual VirtualRobot::VisualizationNodePtr createCylinder(float radius, float height, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:180
armarx::AdvancedVisualizationFactory::createUnitedVisualization
virtual VirtualRobot::VisualizationNodePtr createUnitedVisualization(const std::vector< VirtualRobot::VisualizationNodePtr > &visualizations) const override
Definition: AdvancedVisualizationFactory.h:314
armarx::AdvancedVisualizationFactory::createPlane
virtual VirtualRobot::VisualizationNodePtr createPlane(const Eigen::Vector3f &position, const Eigen::Vector3f &normal, float extend, float transparency, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:237
armarx::AdvancedVisualizationFactory::component
VisualizationFactory component
Definition: AdvancedVisualizationFactory.h:331
armarx::AdvancedVisualizationFactory
The AdvancedVisualizationFactory class is the abstract decorator of the Decorator-Pattern and decorat...
Definition: AdvancedVisualizationFactory.h:45
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
AbstractManipulatorVisualization.h
armarx::AdvancedVisualizationFactory::createBox
virtual VirtualRobot::VisualizationNodePtr createBox(float width, float height, float depth, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:95
armarx::AdvancedVisualizationFactory::getVisualizationFromFile
virtual VirtualRobot::VisualizationNodePtr getVisualizationFromFile(const std::string &filename, bool boundingBox=false, float scaleX=1.0f, float scaleY=1.0f, float scaleZ=1.0f) override
Definition: AdvancedVisualizationFactory.h:74
armarx::AdvancedVisualizationFactory::createLine
virtual VirtualRobot::VisualizationNodePtr createLine(const Eigen::Vector3f &from, const Eigen::Vector3f &to, float width=1.0f, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:106
armarx::AdvancedVisualizationFactory::getVisualizationFromPrimitives
virtual VirtualRobot::VisualizationNodePtr getVisualizationFromPrimitives(const std::vector< VirtualRobot::Primitive::PrimitivePtr > &primitives, bool boundingBox=false, Color color=Color::Gray()) override
Definition: AdvancedVisualizationFactory.h:65
armarx::AdvancedVisualizationFactory::getVisualizationFromFile
virtual VirtualRobot::VisualizationNodePtr getVisualizationFromFile(const std::ifstream &ifs, bool boundingBox=false, float scaleX=1.0f, float scaleY=1.0f, float scaleZ=1.0f) override
Definition: AdvancedVisualizationFactory.h:85
Color
uint32_t Color
RGBA color.
Definition: color.h:8
armarx::AdvancedVisualizationFactory::createTriMeshModelVisualization
virtual VirtualRobot::VisualizationNodePtr createTriMeshModelVisualization(VirtualRobot::TriMeshModelPtr model, Eigen::Matrix4f &pose, float scaleX=1.0f, float scaleY=1.0f, float scaleZ=1.0f) override
Definition: AdvancedVisualizationFactory.h:218
armarx::AdvancedVisualizationFactory::createArrow
virtual VirtualRobot::VisualizationNodePtr createArrow(const Eigen::Vector3f &n, float length=50.0f, float width=2.0f, const Color &color=Color::Gray()) override
Definition: AdvancedVisualizationFactory.h:261
armarx::AdvancedVisualizationFactory::createCircleArrow
virtual VirtualRobot::VisualizationNodePtr createCircleArrow(float radius, float tubeRadius, float completion=1, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f, float transparency=0.0f, int sides=8, int rings=30) override
Definition: AdvancedVisualizationFactory.h:165
filename
std::string filename
Definition: VisualizationRobot.cpp:86
armarx::AdvancedVisualizationFactoryPtr
std::shared_ptr< AdvancedVisualizationFactory > AdvancedVisualizationFactoryPtr
Definition: AdvancedVisualizationFactory.h:334
armarx::TrajectoryPtr
IceInternal::Handle< Trajectory > TrajectoryPtr
Definition: Trajectory.h:52
armarx::AdvancedVisualizationFactory::applyDisplacement
virtual void applyDisplacement(VirtualRobot::VisualizationNodePtr o, Eigen::Matrix4f &m) override
Definition: AdvancedVisualizationFactory.h:303
armarx::AdvancedVisualizationFactory::createVisualization
virtual VirtualRobot::VisualizationNodePtr createVisualization() override
Definition: AdvancedVisualizationFactory.h:308
armarx::AbstractManipulatorVisualizationPtr
std::shared_ptr< AbstractManipulatorVisualization > AbstractManipulatorVisualizationPtr
Definition: AbstractManipulatorVisualization.h:49
armarx::AdvancedVisualizationFactory::createCoordSystem
virtual VirtualRobot::VisualizationNodePtr createCoordSystem(float scaling=1.0f, std::string *text=NULL, float axisLength=100.0f, float axisSize=3.0f, int nrOfBlocks=10) override
Definition: AdvancedVisualizationFactory.h:190
armarx::AdvancedVisualizationFactory::createEllipse
virtual VirtualRobot::VisualizationNodePtr createEllipse(float x, float y, float z, bool showAxes=true, float axesHeight=4.0f, float axesWidth=8.0f) override
Definition: AdvancedVisualizationFactory.h:292
armarx::AdvancedVisualizationFactory::init
virtual void init(int &argc, char *argv[], const std::string &appName) override
Definition: AdvancedVisualizationFactory.h:60
armarx::AdvancedVisualizationFactory::createCurve
virtual VirtualRobot::VisualizationNodePtr createCurve(const std::vector< PoseBasePtr > transition, bool highligt)
createCurve creates the visualization of a curve that goes through the Waypoints in transition
Definition: AdvancedVisualizationFactory.cpp:12
armarx::AdvancedVisualizationFactory::createText
virtual VirtualRobot::VisualizationNodePtr createText(const std::string &text, bool billboard=false, float scaling=1.0f, Color c=Color::Black(), float offsetX=20.0f, float offsetY=20.0f, float offsetZ=0.0f) override
Definition: AdvancedVisualizationFactory.h:280
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19
armarx::AdvancedVisualizationFactory::createVertexVisualization
virtual VirtualRobot::VisualizationNodePtr createVertexVisualization(const Eigen::Vector3f &position, float radius, float transparency, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:206
armarx::AdvancedVisualizationFactory::createTriMeshModelVisualization
virtual VirtualRobot::VisualizationNodePtr createTriMeshModelVisualization(VirtualRobot::TriMeshModelPtr model, bool showNormals, Eigen::Matrix4f &pose, bool showLines=true) override
Definition: AdvancedVisualizationFactory.h:228
armarx::AdvancedVisualizationFactory::createLine
virtual VirtualRobot::VisualizationNodePtr createLine(const Eigen::Matrix4f &from, const Eigen::Matrix4f &to, float width=1.0f, float colorR=0.5f, float colorG=0.5f, float colorB=0.5f) override
Definition: AdvancedVisualizationFactory.h:117