086ee42b903141676dcb4c6713599090764ca106
[blender.git] / intern / bsp / test / BSP_GhostTest / BSP_GhostTest3D.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program 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. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 #ifndef BSP_GhostTest_h
33
34 #define BSP_GhostTest_h
35
36
37
38 #include "GHOST_IEventConsumer.h"
39 #include "MT_Vector3.h"
40 #include "BSP_TMesh.h"
41 #include "BSP_MeshDrawer.h"
42
43 #include <vector>
44
45 class GHOST_IWindow;
46 class GHOST_ISystem;
47
48
49 class BSP_GhostTestApp3D :
50 public GHOST_IEventConsumer
51 {
52 public :
53         // Construct an instance of the application;
54
55         BSP_GhostTestApp3D(
56         );
57
58         // initialize the applicaton
59
60                 bool
61         InitApp(
62         );
63
64         // Run the application untill internal return.
65                 void
66         Run(
67         );
68         
69         ~BSP_GhostTestApp3D(
70         );
71
72                 void
73         SetMesh(
74                 MEM_SmartPtr<BSP_TMesh> mesh
75         );
76
77 private :
78         
79         struct BSP_RotationSetting {
80                 MT_Scalar m_angle_x;
81                 MT_Scalar m_angle_y;
82                 int x_old;
83                 int y_old;
84                 bool m_moving;
85         };
86
87         struct BSP_TranslationSetting {
88                 MT_Scalar m_t_x;
89                 MT_Scalar m_t_y;
90                 MT_Scalar m_t_z;
91                 int x_old;
92                 int y_old;
93                 bool m_moving;
94         };
95
96         // Return the transform of object i
97
98                 MT_Transform
99         GetTransform(
100                 int active_object
101         );
102
103         // Perform an operation between the first two objects in the
104         // list
105         
106                 void
107         Operate(
108                 int type
109         );
110         
111         // Swap mesh i and settings with the last mesh in list.
112
113                 void
114         Swap(
115                 int i
116         );
117
118                 void
119         DrawPolies(
120         );
121
122                 void
123         UpdateFrame(
124         );
125         
126                 MT_Vector3
127         UnProject(
128                 const MT_Vector3 & vec
129         );
130
131         // Create a frustum and projection matrix to
132         // look at the bounding box 
133
134                 void
135         InitOpenGl(
136                 const MT_Vector3 &min,
137                 const MT_Vector3 &max
138         );
139
140
141         // inherited from GHOST_IEventConsumer
142                 bool 
143         processEvent(
144                 GHOST_IEvent* event
145         );
146
147         GHOST_IWindow *m_window;
148         GHOST_ISystem *m_system;
149
150         bool m_finish_me_off;
151
152         // List of current meshes.
153         std::vector< MEM_SmartPtr<BSP_TMesh> > m_meshes;
154
155         std::vector< BSP_RotationSetting> m_rotation_settings;
156         std::vector< BSP_TranslationSetting> m_translation_settings;
157         std::vector< MT_Scalar> m_scale_settings;
158         std::vector< int> m_render_modes;
159
160         int m_current_object;
161
162
163 };
164
165 #endif