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

Revision 895, 11.4 KB checked in by gumbau, 19 years ago (diff)

Working LODTree constructor and visualizer

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