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