Initial revision
[lsystem3d.git] / src / openglwindow.h
1 // Copyright (C) 2006 Erik Dahlberg
2 //
3 // This file is part of LSystem3d.
4 //
5 // LSystem3D is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // LSystem3D is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with LSystem3D; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19
20
21
22 #ifndef OPENGLWINDOW_H
23 #define OPENGLWINDOW_H
24
25 #include <string>
26 #include <vector>
27
28 #include <glui.h>
29
30 #include "lindenmayersystem.h"
31 #include "lsystemparameters.h"
32 #include "model.h"
33
34 using namespace std;
35
36
37
38 /**
39 * OpenGL drawing context
40 */
41 class OpenGLWindow
42 {
43 public:
44 /**
45 * Constructor
46 */
47 OpenGLWindow();
48
49 /**
50 * Destructor
51 */
52 ~OpenGLWindow();
53
54 /**
55 * Start generation of l-system data
56 */
57 void generate();
58
59 /**
60 * Move camera left
61 */
62 void left();
63
64 /**
65 * Move camera right
66 */
67 void right();
68
69 /**
70 * Move camera up
71 */
72 void up();
73
74 /**
75 * Move camera down
76 */
77 void down();
78
79 /**
80 * Move camera forth
81 */
82 void forth();
83
84 /**
85 * Move camera back
86 */
87 void back();
88
89 /**
90 * Zoom in
91 */
92 void zoomIn();
93
94 /**
95 * Zoom out
96 */
97 void zoomOut();
98
99 /**
100 * Rotate around y-axis
101 */
102 void rotateY();
103
104 /**
105 * Draw l-system model to screen
106 */
107 void draw();
108
109 /**
110 * Reset to default view
111 */
112 void defaultView();
113
114 /**
115 * Check if live mode is activated
116 * @return true, if activated
117 */
118 bool liveActivated();
119
120 protected:
121
122 // Model view
123 double _xModel, // model coordinate (starting point)
124 _yModel,
125 _zModel;
126 double _scaleModel; // model scale factor
127 double _yRotationModel; // model rotation
128
129 // L-system
130 LindenmayerSystem *_lsystem; // l-system generator
131 Model *_model; // the generated l-system model
132 LSystemParameters _lsystemParameters; // saves/loads l-system parameters from file
133 string lsystemParametersPath; // where to find the l-system rules
134
135 // Rendering window
136 int _window; // the rendering window
137 bool _busyGenerating; // currently generating?
138
139 // GUI window
140 GLUI *_glui; // the GUI window
141 GLUI_EditText *_axiomEditText; // axiom textbox
142 vector<GLUI_EditText *> _ruleEditTexts; // rule textboxes
143 GLUI_Spinner *_angleSpinner; // angle spinner
144 GLUI_Spinner *_iterationsSpinner; // iteration spinner
145 GLUI_Checkbox *_liveCheckbox; // live checkbox
146 int _liveUpdates; // status of live checkbox
147 };
148
149
150
151 #endif