source: GTP/trunk/Lib/Geom/shared/GeoTool/include/GeoMeshViewUI.h @ 993

Revision 993, 11.4 KB checked in by gumbau, 18 years ago (diff)
Line 
1// generated by Fast Light User Interface Designer (fluid) version 2.0100
2#ifndef GeoMeshViewUI_h
3#define GeoMeshViewUI_h
4#include "GL/glew.h"
5#ifdef _WIN32
6#include "GL/wglew.h"
7#endif
8#include        <stdio.h>
9#include        <stdlib.h>
10#include        <string.h>
11#include        <fltk/run.h>
12#include        <fltk/Group.h>
13#include        <fltk/Window.h>
14#include        <fltk/ask.h>
15#include        <fltk/file_chooser.h>
16#include        <fltk/FileChooser.h>
17#include        <fltk/MenuBar.h>
18#include        <fltk/Input.h>
19#include        <fltk/Button.h>
20#include        <fltk/ReturnButton.h>
21#include        <fltk/TextBuffer.h>
22#include        <fltk/TextEditor.h>
23#include        <fltk/Input.h>
24#include        <fltk/events.h>
25#include        <fltk/InvisibleBox.h>
26#include        <fltk/ItemGroup.h>
27#include        <fltk/Item.h>
28#include        <fltk/Divider.h>
29#include        <fltk/Output.h>
30#include        <fltk/Button.h>
31#include        <fltk/ProgressBar.h>
32#include        <fltk/CheckButton.h>
33#include        <fltk/RadioButton.h>
34#include        <fltk/FloatInput.h>
35#include        <fltk/Browser.h>
36#include        <fltk/Image.h>
37#include        <fltk/SharedImage.h>
38#include        <fltk/Slider.h>
39#include        <GeoMesh.h>
40#include        <GeoLodStripsLibrary.h>
41#include        <GeoMeshView.h>
42#include        <GeoMeshSaver.h>
43#include        <GeoMeshSimplifier.h>
44#include        <GeoMeshStripifier.h>
45#include        <GeoTreeSimplifier.h>
46#include        "GeoTreeSimpSequence.h"
47#include        "GeoLodStripsConstructor.h"
48#include        "GeoLodTreeLibrary.h"
49
50//      About Dialog.
51#include "GTAboutDialog.h"
52#include        "../resource.h"
53
54//#include <IL/IL.h>
55
56//      State of the button process.
57enum    ProcessState
58{
59        NONE,
60        STRIPIFY,
61        EDGE_COLLAPSE,
62        LEAVES_COLLAPSE,
63        LODSTRIPS,
64        LODSTRIPS_AUTO,
65        LODTREES,
66        LODTREES_AUTO,
67        SELECT_LEAVES,
68        VISUALIZE_LODSTRIPS,
69        VISUALIZE_LODTREES
70};
71
72// Simplification types
73enum    SimplificationType
74{
75        NO_SIMPLIFICATION,
76        MESHSIMP,
77        HOJAS,
78        VIEWPOINTDRIVEN
79};
80
81enum    ProgressBarType
82{
83        PROCESS,
84        BUILD
85};
86
87using   namespace       Geometry;
88
89class GeoMeshViewUI
90{
91        friend  class   GeoMeshView;
92
93        private:
94
95        //      File name Selected.
96        char    *mFileName;
97
98        //      The state of the application menus.
99        ProcessState    mApplicationState;
100
101        //      Mesh object(Model).
102        Mesh    *mGeoMesh;
103
104        //      Mesh for undo operation.
105        Mesh    *mUndoMesh;
106
107        //      Lod strips object.
108        LodStripsLibrary        *lodStripsLib;
109        //      Lod tree object.
110        LodTreeLibrary  *lodTreeLib;
111       
112        MeshSimplifier                  *mMeshSimplifier;
113        TreeSimplifier                  *mTreeSimplifier;
114        char                                                            *nombremesh;
115        SimplificationType      simplificationState;
116        ProgressBarType                 progressBarType;
117
118        MeshSimplificationSequence      *oMeshSimpSequence;
119        LodStripsConstructor                            *oLodStrip;
120        GeoMeshLoader                                                           *geoMeshLoader;
121
122        inline void cb_menuFileOpen_i(fltk::Item*, void*);
123        static void cb_menuFileOpen(fltk::Item*, void*);
124        inline void cb_menuFileSave_i(fltk::Item*, void*);
125        static void cb_menuFileSave(fltk::Item*, void*);
126        inline void cb_menuFileSaveAs_i(fltk::Item*, void*);
127        static void cb_menuFileSaveAs(fltk::Item*, void*);
128        inline void cb_menuFileLoadTexture_i(fltk::Item*, void*);
129        static void cb_menuFileLoadTexture(fltk::Item*, void*);
130
131        inline void cb_menuMeshInfo_i(fltk::Item*, void*);
132        static void cb_menuMeshInfo(fltk::Item*, void*);
133        inline void cb_menuMeshExportOBJ_i(fltk::Item*, void*);
134        static void cb_menuMeshExportOBJ(fltk::Item*, void*);
135        inline void cb_menuTransformSharedVertex_i(fltk::Item*, void*);
136        static void     cb_menuFileTransformSharedVertex(fltk::Item* o, void* v);
137
138        inline void cb_menuFileQuit_i(fltk::Item*, void*);
139        static void cb_menuFileQuit(fltk::Item*, void*);
140        inline void cb_menuEditUndo_i(fltk::Item*, void*);
141        static void cb_menuEditUndo(fltk::Item*, void*);
142        inline void cb_menuEditFit_i(fltk::Item*, void*);
143        static void cb_menuEditFit(fltk::Item*, void*);
144        inline void cb_menuEditRotate_i(fltk::Item*, void*);
145        static void cb_menuEditRotate(fltk::Item*, void*);
146        inline void cb_menuEditPan_i(fltk::Item*, void*);
147        static void cb_menuEditPan(fltk::Item*, void*);
148        inline void cb_menuEditZoom_i(fltk::Item*, void*);
149        static void cb_menuEditZoom(fltk::Item*, void*);
150        inline void cb_menuRenderWire_i(fltk::Item*, void*);
151        static void cb_menuRenderWire(fltk::Item*, void*);
152        inline void cb_menuRenderSolid_i(fltk::Item*, void*);
153        static void cb_menuRenderSolid(fltk::Item*, void*);
154        inline void cb_menuRenderCW_i(fltk::Item*, void*);
155        static void cb_menuRenderCW(fltk::Item*, void*);
156        inline void cb_menuRenderCCW_i(fltk::Item*, void*);
157        static void cb_menuRenderCCW(fltk::Item*, void*);
158        inline void cb_menuRenderFlat_i(fltk::Item*, void*);
159        static void cb_menuRenderFlat(fltk::Item*, void*);
160        inline void cb_menuRenderSmooth_i(fltk::Item*, void*);
161        static void cb_menuRenderSmooth(fltk::Item*, void*);
162        inline void cb_menuRenderTextures_i(fltk::Item*, void*);
163        static void cb_menuRenderTextures(fltk::Item*, void*);
164        inline void cb_menuStripify_i(fltk::Item*, void*);
165        static void cb_menuStripify(fltk::Item*, void*);
166        inline void cb_menuSimplify_i(fltk::ItemGroup*, void*);
167        static void cb_menuSimplify(fltk::ItemGroup*, void*);
168        inline void cb_menuSimplifyEdgeCollapse_i(fltk::Item*, void*);
169        static void cb_menuSimplifyEdgeCollapse(fltk::Item*, void*);
170        inline void cb_menuSimplifyLeavesCollapse_i(fltk::Item*, void*);
171        static void cb_menuSimplifyLeavesCollapse(fltk::Item*, void*);
172
173        inline void cb_menuLodStripsGenerate_i(fltk::Item*, void*);
174        static void cb_menuLodStripsGenerate(fltk::Item*, void*);
175        inline void cb_menuLodStripsVisualize_i(fltk::Item*, void*);
176        static void cb_menuLodStripsVisualize(fltk::Item*, void*);
177
178        inline void cb_menuSelectLeaves_i(fltk::Item*, void*);
179        static void cb_menuSelectLeaves(fltk::Item*, void*);
180        inline void cb_menuLodTreesOpenLodStripTrunk_i(fltk::Item*, void*);
181        static void cb_menuLodTreesOpenLodStripTrunk(fltk::Item*, void*);
182        inline void cb_menuLodTreesOpenLeavesSimplification_i(fltk::Item*, void*);
183        static void cb_menuLodTreesOpenLeavesSimplification(fltk::Item*, void*);
184        inline void cb_menuLodTreesGenerate_i(fltk::Item*, void*);
185        static void cb_menuLodTreesGenerate(fltk::Item*, void*);
186        inline void cb_menuLodTreesVisualize_i(fltk::Item*, void*);
187        static void cb_menuLodTreesVisualize(fltk::Item*, void*);
188        inline void cb_menuHelpAbout_i(fltk::Item*, void*);
189        static void cb_menuHelpAbout(fltk::Item*, void*);
190
191        inline void cb_mButtonProcess_i(fltk::Button*, void*);
192        static void cb_mButtonProcess(fltk::Button*, void*);
193        inline void cb_mButtonSort_i(fltk::Button*, void*);
194        static void cb_mButtonSort(fltk::Button*, void*);
195        inline void cb_mButtonBuild_i(fltk::Button*, void*);
196        static void cb_mButtonBuild(fltk::Button*, void*);
197        inline void cb_mMeshInfo_i(fltk::Browser*, void*);
198        static void cb_mMeshInfo(fltk::Browser*, void*);
199        inline void cb_mLodStripSlider_i(fltk::Slider*, void*);
200        static void cb_mLodStripSlider(fltk::Slider*, void*);
201        inline void cb_mLodTreeSlider_i(fltk::Slider*, void*);
202        static void cb_mLodTreeSlider(fltk::Slider*, void*);
203
204        //      Logo's callback.
205        inline void cb_mLogo_i(fltk::InvisibleBox*, void*);
206        static void cb_mLogo(fltk::InvisibleBox*, void*);
207
208        //      Shows build process.
209        void    activeBuildProcess();
210
211        //      Shows the stripify panel.
212        void    showStripify();
213
214        //      Shows the simplify panels.
215        void    showEdgeCollapse();
216        void    showLeavesCollapse();
217
218        //      Shows the LodStrips panels.
219        void    showOpenMeshSimplification();
220        void    showAutoGenerateLodStrips();
221        void    showAutoGenerateLodTrees();
222
223        //      Shows the LodTrees panel.
224        void    showOpenLeavesSimplification();
225
226        //      Show the mesh info browser.
227        void    showMeshInfo();
228       
229        //      Show the LodStrips visulization panel.
230        void    showLodStripSlider();
231        void    showLodTreeSlider();
232
233        void    hideStripify();
234        void    hideEdgeCollapse();
235        void    hideLeavesCollapse();
236        void    hideOpenMeshSimplification();
237        void    hideOpenLeavesSimplification();
238        void    hideRightPanel();
239        //      Hide the mesh info browser.
240        void    hideMeshInfo();
241
242        //      Hide the LodStrips visualization panel.
243        void    hideLodStripSlider();
244        void    hideLodTreeSlider();
245       
246        //      Get the number of vertices.
247        size_t  getVertexCount(Mesh     *geoMesh);
248
249        //      Get the number of triangles.
250        size_t  getTriangleCount(Mesh   *geoMesh);
251
252        //      Get the number of strips.
253        size_t  getStripCount(Mesh      *geoMesh);
254
255        int             paintMesh();
256
257        //      Simplify the mesh object.
258        bool    simplifyEdgeCollapse();
259
260        //      Simplify the mesh object.
261        void    simplifyLeavesCollapse();
262
263        //      Create a siplification sequence of the simplification method.
264        void    createSimplificationSequence();
265
266        //      Create a siplification sequence of the leaves.
267        void    createLeavesSequence(const std::string &);
268
269        //      Stripify the mesh object.
270        void    stripify();
271
272        //      Method that undo then mesh changes.
273        void    undo();
274
275        //      Refresh number of vertices, triangles, strips, ...
276        void    refreshApplicationBar();
277
278        //      Open a mesh file.
279        void    openMeshFile();
280
281        //      Check if file exists.
282        bool    fileExists(const char   *fileNameMesh);
283
284        public:
285
286        GeoMeshView                                     *geoMeshView;
287        fltk::Window                            *mMainWindow;
288        fltk::Group                                     *MainView;
289        fltk::InvisibleBox      *cframe;
290        fltk::MenuBar                           *menuBar;
291        fltk::ItemGroup                 *menuFile;
292        fltk::Item                                      *menuFileOpen;
293        fltk::Item                                      *menuFileSave;
294        fltk::Item                                      *menuFileSaveAs;
295        fltk::Item                                      *menuMeshInfo;
296        fltk::Item                                      *menuMeshExportOBJ;
297        fltk::Item                                      *menuFileTransformSharedVertex;
298        fltk::Item                                      *menuFileLoadTexture;
299
300        fltk::Item                                      *menuFileQuit;
301        fltk::ItemGroup                 *menuEdit;
302        fltk::Item                                      *menuEditUndo;
303        fltk::Item                                      *menuEditFit;
304        fltk::Item                                      *menuEditRotate;
305        fltk::Item                                      *menuEditPan;
306        fltk::Item                                      *menuEditZoom;
307        fltk::ItemGroup                 *menuRender;
308        fltk::Item                                      *menuRenderWire;
309        fltk::Item                                      *menuRenderSolid;
310        fltk::Item                                      *menuRenderCW;
311        fltk::Item                                      *menuRenderCCW;
312        fltk::Item                                      *menuRenderFlat;
313        fltk::Item                                      *menuRenderSmooth;
314        fltk::Item                                      *menuRenderTextures;
315        fltk::Item                                      *menuStripify;
316        fltk::ItemGroup                 *menuSimplify;
317        fltk::Item                                      *menuSimplifyEdgeCollapse;
318        fltk::Item                                      *menuSimplifyLeavesCollapse;
319        fltk::Item                                      *menuSimplifySaveSequence;
320
321        fltk::ItemGroup                 *menuLodStrips;
322        fltk::Item                                      *menuLodStripsGenerate;
323        fltk::Item                                      *menuLodStripsVisualize;
324        fltk::ItemGroup                 *menuLodTrees;
325        fltk::Item                                      *menuLodTreesGenerate;
326        fltk::Item                                      *menuLodTreesVisualize;
327
328        fltk::Item                                      *menuSelectLeaves;
329        fltk::Item                                      *menuLodTreesOpenLodStripTrunk;
330        fltk::Item                                      *menuLodTreesOpenLeavesSimplification;
331        fltk::Item                                      *menuHelpAbout;
332        fltk::InvisibleBox      *mLogo;
333        fltk::Group                                     *ApplicationBar;
334        fltk::Widget                            *mFPS;
335        fltk::Widget                            *mVertices;
336        fltk::Widget                            *mTriangles;
337        fltk::Widget                            *mStrips;
338        fltk::Widget                            *mQuads;
339        fltk::Widget                            *mMB;
340        fltk::Button                            *mButtonProcess;
341        fltk::ProgressBar               *mProcessBar;
342        fltk::Button                            *mButtonSort;
343        fltk::ProgressBar               *mSortBar;
344        fltk::Button                            *mButtonBuild;
345        fltk::ProgressBar               *mBuildBar;
346        fltk::Slider                            *mLodStripSlider;
347        fltk::Slider                            *mLodTreeSlider;
348        fltk::CheckButton               *mGeometryBased;
349        fltk::CheckButton               *mViewPointDriven;
350        fltk::CheckButton               *mChangeVertices;
351        fltk::CheckButton               *mChangeTexture;
352        fltk::CheckButton               *mPercent;
353        fltk::CheckButton               *mVerticesNumber;
354        fltk::CheckButton               *mOneCacheStrip;
355        fltk::CheckButton               *mQualityStrips;
356        fltk::FloatInput                *mMeshReduction;
357        fltk::Widget                            *mProcessTitle;
358        fltk::Output                            *mMetricLabel;
359        fltk::Output                            *mTypeLabel;
360        fltk::Output                            *mMeshReductionLabel;
361        fltk::Browser                           *mMeshInfo;
362        fltk::ItemGroup                 *ogeometry;
363
364        //      Repaint the FPS label.
365        void    refreshFPS(int fps);
366
367        //      Initialize the lodstripslibrary for visualization.
368        void    setLodStripsLibrary(std::string lodfile, Mesh   *geomesh);
369        //      Initialize the lodtreelibrary for visualization.
370        void    setLodTreesLibrary(std::string lodfile, std::string leafseqfile, Mesh   *geomesh, uint32 ileafSubMesh);
371
372        // Indentify the mesh of leaves.
373        unsigned        short                   idMeshLeaves;
374
375        GeoMeshViewUI(TIPOFUNC fun=NULL);
376        ~GeoMeshViewUI();
377        void show();
378
379        TIPOFUNC progress_function;
380        float updateProgressBar(float);
381
382};
383
384#endif
385
Note: See TracBrowser for help on using the repository browser.