-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSceneManager.h
178 lines (134 loc) · 4.97 KB
/
SceneManager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
///////////////////////////////////////////////////////////////////////////////////////////////
//
// Name: SceneManager.h
//
// Author: Mike Conway
//
// Description: Top level class that defines a scene manager. The scene manager is in
// charge of describing the display environment, including corners, stitch lines,
// and aspects of the display that can effect the display of images, such as
// thumbnail walls and magnification walls.
//
// SceneManager also defines a SceneDisplayGroup, which controls a group of
// SceneDisplays. Consider an individual projector in a display wall as a
// SceneDisplay, while a functional group of projectors makes a SceneDisplayGroup.
//
///////////////////////////////////////////////////////////////////////////////////////////////
#ifndef SCENEMANAGER_H
#define SCENEMANAGER_H
#include <string>
#include <vector>
#include <iterator>
#include <Vec2.h>
// Forward declarations
class CollageGraphics;
class SceneDisplayGroup;
class SceneDisplay;
class SceneManager {
public:
// Constructor takes a handle to a CollageGraphics
enum DisplayRole {
SM_THUMBNAIL_DISPLAY,
SM_MAGNIFICATION_DISPLAY
};
SceneManager(CollageGraphics* collageGraphics);
virtual ~SceneManager(void);
std::vector<SceneDisplayGroup*> GetSceneDisplayGroups(void);
bool IsToroidalDisplay(void);
bool IsPadForBoundaries(void);
bool IsCalculated(void);
unsigned int GetPadPixelsBetweenDisplays(void);
SceneManager::DisplayRole GetRoleByCollision(unsigned int originX, unsigned int originY, unsigned int width, unsigned int height);
SceneManager::DisplayRole GetRoleByCentroid(unsigned int centroidX, unsigned int centroidY);
void CalculateScene(void);
unsigned int GetNumberOfDisplaysByRole(SceneManager::DisplayRole);
unsigned int GetAvailableSingleDisplayWidth(void);
unsigned int GetAvailableSingleDisplayHeight(void);
unsigned int GetTotalDisplayWidth(void);
unsigned int GetTotalDisplayHeight(void);
protected:
CollageGraphics* collageGraphics;
std::vector<SceneDisplayGroup*> sceneDisplayGroups;
bool toroidalDisplay;
bool padForBoundaries;
bool calculated;
unsigned int padPixelsBetweenDisplays;
unsigned int availableSingleDisplayWidth;
unsigned int availableSingleDisplayHeight;
unsigned int totalDisplayWidth;
unsigned int totalDisplayHeight;
};
// SceneDisplayGroup is a functional group of displays, such as a wall in the SCR
class SceneDisplayGroup {
public:
SceneDisplayGroup(SceneManager* sceneManager);
virtual ~SceneDisplayGroup(void);
unsigned int GetXOrigin(void);
unsigned int GetYOrigin(void);
std::vector<SceneDisplay*>* GetSceneDisplays(void);
std::string GetGroupName(void);
void SetGroupName(std::string);
void SetGroupToDisplayRole(SceneManager::DisplayRole displayRole);
void CalculateDisplayGroup(void);
unsigned int GetXThru(void);
unsigned int GetYThru(void);
SceneManager* GetSceneManager(void);
protected:
std::vector<SceneDisplay*> sceneDisplays;
std::string groupName;
SceneManager* sceneManager;
unsigned int xOrigin;
unsigned int yOrigin;
unsigned int yThru;
unsigned int xThru;
};
// SceneDisplay is one physical display in a group, such as one projector in the SCR belonging to a particular
// SceneDisplayGroup, e.g. a wall in the SCR
class SceneDisplay {
public:
SceneDisplay(SceneDisplayGroup* sceneDisplayGroup);
virtual ~SceneDisplay(void);
void SetWidthInPixels(unsigned int widthInPixels);
void SetHeightInPixels(unsigned int heightInPixels);
unsigned int GetAvailableWidthInPixels(void);
unsigned int GetAvailableHeightInPixels(void);
unsigned int GetWidthInPixels(void);
unsigned int GetHeightInPixels(void);
void SetXOrigin(unsigned int xOrigin);
void SetYOrigin(unsigned int yOrigin);
unsigned int GetXOrigin(void);
unsigned int GetYOrigin(void);
double GetXOriginInScale(void);
double GetYOriginInScale(void);
unsigned int GetXThru(void);
unsigned int GetYThru(void);
void SetDisplayRole(SceneManager::DisplayRole displayRole);
SceneManager::DisplayRole GetDisplayRole(void);
SceneDisplayGroup* GetSceneDisplayGroup(void);
void CalculateSceneDisplay(void);
unsigned int GetPaddedXOrigin(void);
unsigned int GetPaddedYOrigin(void);
double GetPaddedXOriginInScale(void);
double GetPaddedYOriginInScale(void);
Vec2 GetDisplayCenter(void);
protected:
unsigned int widthInPixels;
unsigned int heightInPixels;
unsigned int xOrigin;
unsigned int yOrigin;
double xOriginInScale;
double yOriginInScale;
unsigned int yThru;
unsigned int xThru;
SceneManager::DisplayRole displayRole;
SceneDisplayGroup* sceneDisplayGroup;
};
class SceneManagerException {
public:
SceneManagerException(std::string message);
virtual ~SceneManagerException(void);
std::string GetMessage(void);
protected:
std::string message;
};
#endif