GCC Code Coverage Report


Directory: ./
File: include/gepetto/viewer/window-manager.h
Date: 2024-08-14 11:04:57
Exec Total Coverage
Lines: 0 7 0.0%
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 */
198