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

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