GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/gepetto/viewer/window-manager.h Lines: 0 7 0.0 %
Date: 2024-04-14 11:13:22 Branches: 0 0 - %

Line Branch Exec Source
1
//
2
//  window-manager.h
3
//  ScneViewer
4
//
5
//  Created by Justin Carpentier, Mathieu Geisert in  November 2014.
6
//  Copyright (c) 2014 LAAS-CNRS. All rights reserved.
7
//
8
9
#ifndef GEPETTO_VIEWER_WINDOWMANAGER_HH
10
#define GEPETTO_VIEWER_WINDOWMANAGER_HH
11
12
#include <gepetto/viewer/group-node.h>
13
14
#include <osgGA/KeySwitchMatrixManipulator>
15
#include <osgViewer/Viewer>
16
#include <osgViewer/ViewerEventHandlers>
17
18
namespace gepetto {
19
namespace viewer {
20
21
DEF_CLASS_SMART_PTR(WindowManager)
22
23
/// Manage a window that renders a scene.
24
/// The root of the rendered scene is a \ref GroupNode.
25
class WindowManager : public GroupNode {
26
 private:
27
  const int nodeTrackerManipulatorIndex;
28
29
  /** Scene Graphical Group */
30
  GroupNodePtr_t scene_ptr_;
31
32
  /** OSG viewer */
33
  ::osgViewer::ViewerRefPtr viewer_ptr_;
34
35
  /** OSG cameras */
36
  ::osg::CameraRefPtr main_camera_;
37
  ::osg::GraphicsContextRefPtr gc_;
38
39
  /** Backgound camera */
40
  ::osg::CameraRefPtr bg_camera_;
41
  ::osg::Vec4 bg_color1_;
42
  ::osg::Vec4 bg_color2_;
43
  ::osg::GeometryRefPtr bg_geom_;
44
45
  /* OSG Screen capture handler */
46
  osg::ref_ptr< ::osgViewer::ScreenCaptureHandler> screen_capture_ptr_;
47
48
  /** Heads-Up Display (HUD) camera */
49
  ::osg::CameraRefPtr hud_camera_;
50
  osg::ref_ptr<osgText::Text> texts_[3][3];
51
  osg::ref_ptr<osg::Geode> textGeode_;
52
  bool textActive_[3][3];
53
54
  bool lastSceneWasDisrty_;
55
56
  osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> manipulator_ptr;
57
  /** Associated weak pointer */
58
  WindowManagerWeakPtr weak_ptr_;
59
60
  void createManipulator();
61
62
  void createBackground();
63
  void applyBackgroundColor();
64
65
  void createHUDcamera();
66
67
  void init(osg::GraphicsContext* gc);
68
69
  void init(osgViewer::Viewer* v, osg::GraphicsContext* gc);
70
71
  void init(const unsigned int& x, const unsigned int& y,
72
            const unsigned int& width, const unsigned int& height);
73
74
  WindowManager();
75
76
  WindowManager(osgViewer::Viewer* v, osg::GraphicsContext* gc);
77
78
  WindowManager(osg::GraphicsContext* gc);
79
80
  WindowManager(const unsigned int& x, const unsigned int& y,
81
                const unsigned int& width, const unsigned int& height);
82
83
  WindowManager(const WindowManager& other);
84
85
  /** Initialize weak_ptr */
86
  void initWeakPtr(WindowManagerWeakPtr other_weak_ptr);
87
88
 protected:
89
 public:
90
  enum TextAlignment { TOP = 0, CENTER = 1, BOTTOM = 2, RIGHT = 0, LEFT = 2 };
91
92
  /** Create and initialize a graphical engine of type OSG
93
   */
94
  static WindowManagerPtr_t create();
95
96
  /** Create and initialize a graphical engine with a GraphicsContext
97
   */
98
  static WindowManagerPtr_t create(osg::GraphicsContext* gc);
99
100
  static WindowManagerPtr_t create(osgViewer::Viewer* v,
101
                                   osg::GraphicsContext* gc);
102
103
  /** Create and initialize a graphical engine of type OSG with some parameters
104
   * : position + dimension
105
   */
106
  static WindowManagerPtr_t create(const unsigned int& x, const unsigned int& y,
107
                                   const unsigned int& width,
108
                                   const unsigned int& height);
109
110
  /** Static method for creating a clone of box other with the copy constructor
111
   */
112
  static WindowManagerPtr_t createCopy(WindowManagerPtr_t other);
113
114
  /** Proceed to a clonage of the current object defined by the copy constructor
115
   */
116
  virtual WindowManagerPtr_t clone(void) const;
117
118
  /** Return a shared pointer of the current object
119
   */
120
  WindowManagerPtr_t self(void) const;
121
122
  /** Add a graphical object to the scene
123
   */
124
  virtual bool addNode(NodePtr_t graphical_object_ptr);
125
126
  /** Return the scene group
127
   */
128
  virtual GroupNodePtr_t getScene() const { return self(); }
129
130
  /** Return the current doing of procedure
131
   */
132
  virtual bool done();
133
134
  /** Generate a new frame rendering
135
   */
136
  virtual bool frame();
137
138
  /** Run the scene process
139
   */
140
  virtual bool run();
141
142
  /** Define dimension of the window
143
   *  \param size (width, height)
144
   **/
145
  virtual void setWindowDimension(const osgVector2& size);
146
147
  /** Define the window position
148
   *  \param position (x_pos, y_pos)
149
   **/
150
  virtual void setWindowPosition(const osgVector2& position);
151
152
  /** Return the window x and y position as a 2D vector */
153
  osgVector2 getWindowPosition() const;
154
155
  /** Return the window width and height as a 2D vector */
156
  osgVector2 getWindowDimension() const;
157
158
  std::string getText(TextAlignment verticalPos,
159
                      TextAlignment horizontalPos) const;
160
161
  /** Set the HUD text */
162
  void setText(TextAlignment verticalPos, TextAlignment horizontalPos,
163
               const std::string& text, float size = 20);
164
165
  /** Return a ref to the viewer */
166
  ::osgViewer::ViewerRefPtr getViewerClone();
167
168
  virtual ~WindowManager();
169
170
  void captureFrame(const std::string& filename);
171
172
  void startCapture(const std::string& filename, const std::string& extension);
173
174
  void stopCapture();
175
176
  bool writeNodeFile(const std::string& filename);
177
178
  void setBackgroundColor1(const osg::Vec4& color) {
179
    bg_color1_ = color;
180
    applyBackgroundColor();
181
  }
182
183
  void setBackgroundColor2(const osg::Vec4& color) {
184
    bg_color2_ = color;
185
    applyBackgroundColor();
186
  }
187
188
  void getCameraTransform(osg::Vec3d& pos, osg::Quat& rot);
189
  void setCameraTransform(const osg::Vec3d& pos, const osg::Quat& rot);
190
191
  void attachCameraToNode(NodePtr_t node);
192
  void detachCamera();
193
};
194
} /* namespace viewer */
195
} /* namespace gepetto */
196
197
#endif /* GEPETTO_VIEWER_WINDOWMANAGER_HH */