source: GTP/trunk/Lib/Illum/GPUObscurancesGT/src/MyFrame.cpp @ 1648

Revision 1648, 6.7 KB checked in by igarcia, 18 years ago (diff)
Line 
1/* -----------------------------------------------------------------------
2  Main Window
3-------------------------------------------------------------------------*/
4#include "MyFrame.h"
5
6//Icones
7#include "UDG.xpm"
8
9#include <wx/progdlg.h>
10#include <wx/file.h>
11#include <wx/string.h>
12#include <wx/strconv.h>
13#include <wx/bitmap.h>
14#include <wx/image.h>
15
16#include "glew.h"
17#include "vcObscuranceMap.h"
18#include "CMesh.h"
19
20BEGIN_EVENT_TABLE(MyFrame,wxFrame)
21        EVT_BUTTON(MyFrame::MAIN_MODEL, MyFrame::OnSelectModel)
22        EVT_BUTTON(MyFrame::MAIN_IMAGE, MyFrame::OnSelectImage)
23        EVT_BUTTON(MyFrame::MAIN_START, MyFrame::OnStart)
24        EVT_COMBOBOX(MyFrame::MAIN_RES, MyFrame::OnSelectResolution)
25END_EVENT_TABLE()
26
27
28// My frame constructor
29MyFrame::MyFrame (const wxChar * title, int xpos, int ypos, int width, int height)
30        : wxFrame ( (wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width,height), wxCLOSE_BOX|wxCAPTION|wxSYSTEM_MENU )
31{
32        //Init Parameters
33        modelString = new wxString("");
34        imageString = new wxString("");
35        res = 0;
36
37        wxString choices_res_text[3];
38        choices_res_text[0] = " 256 x  256";
39        choices_res_text[1] = " 512 x  512";
40        choices_res_text[2] = "1024 x 1024";
41
42        choices_res[0] = 256;
43        choices_res[1] = 512;
44        choices_res[2] = 1024;
45
46        //Create Fonts
47        wxFont * font10 = new wxFont(10, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
48        wxFont * font10bold = new wxFont(10, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
49
50        //Set Frame Icon
51        SetIcon(wxIcon(UDG_xpm));
52
53        //Set BackGround
54        SetBackgroundColour(wxColour(200,200,200));
55
56        //Create Main Sizer
57        wxBoxSizer * mainSizer = new wxBoxSizer(wxVERTICAL);
58
59        //Create GridSizer
60        wxGridSizer * gridSizer = new wxGridSizer(3,1,5,5);
61        mainSizer->Add(gridSizer,1,wxALL|wxEXPAND,10);
62
63        //Model
64        wxStaticBoxSizer * modelBoxSizer = new wxStaticBoxSizer(wxVERTICAL,this);
65        gridSizer->Add(modelBoxSizer,2,wxALL|wxEXPAND,5);
66
67        wxButton * modelButton = new wxButton( this, MAIN_MODEL, "Select Model");
68        modelButton->SetFont(*font10bold);
69        modelBoxSizer->Add(modelButton,1,wxALL|wxEXPAND,5);
70       
71        modelText = new wxStaticText(this, wxID_ANY, "Load a Model...");
72        modelText->SetFont(*font10);
73        modelBoxSizer->Add(modelText,1,wxALL|wxEXPAND,5);
74
75        //Image
76        wxStaticBoxSizer * imageBoxSizer = new wxStaticBoxSizer(wxVERTICAL,this);
77        gridSizer->Add(imageBoxSizer,2,wxALL|wxEXPAND,5);
78
79        wxButton * imageButton = new wxButton( this, MAIN_IMAGE, "Select Image");
80        imageButton->SetFont(*font10bold);
81        imageBoxSizer->Add(imageButton,1,wxALL|wxEXPAND,5);
82       
83        imageText = new wxStaticText(this, wxID_ANY, "Save to...");
84        imageText->SetFont(*font10);
85        imageBoxSizer->Add(imageText,1,wxALL|wxEXPAND,5);
86
87        //Group
88        wxGridSizer * groupSizer = new wxGridSizer(1,2,5,5);
89        gridSizer->Add(groupSizer,1,wxALL|wxEXPAND,2);
90
91        //Resolution
92        wxStaticBoxSizer * resBoxSizer = new wxStaticBoxSizer(wxVERTICAL,this);
93        groupSizer->Add(resBoxSizer,1,wxALL|wxEXPAND);
94
95        wxStaticText * resLabel = new wxStaticText(this, wxID_ANY, "Resolution");
96        resLabel->SetFont(*font10bold);
97        resBoxSizer->Add(resLabel,1,wxALL|wxEXPAND,2);
98
99        wxComboBox * combo_res = new wxComboBox(this, MAIN_RES, "", wxDefaultPosition, wxDefaultSize, 3, choices_res_text, wxCB_READONLY);
100        combo_res->Select(0);
101        res = choices_res[0];
102        resBoxSizer->Add(combo_res,1,wxALL|wxEXPAND,2);
103
104        //Start
105        startButton = new wxButton( this, MAIN_START, "Start",wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
106        startButton->SetFont(*font10bold);
107        startButton->Enable(false);
108        mainSizer->Add(startButton,0,wxALL|wxCENTER,5);
109
110        //mainSizer
111        SetSizer(mainSizer);
112        mainSizer->SetSizeHints(this);
113}
114
115//Destructor
116MyFrame::~MyFrame()
117{
118}
119
120void MyFrame::CheckStart()
121{
122
123        if  (  ( *modelString != "" )
124                && ( *imageString != "" )
125                && ( res != 0))
126        {
127                //Toggle Button
128                startButton->Enable(true);
129        }
130        else
131                startButton->Enable(false);
132
133}
134
135
136void MyFrame::OnSelectModel(wxCommandEvent & event)
137{
138        const wxChar * FILETYPES = wxT
139                (
140                        //"Ogre Mesh files|*.mesh|"
141                        "Ogre XML files|*.xml|"
142                        "All files|*.*"
143                );
144
145        wxFileDialog * openFileDialog = new wxFileDialog(this,"Select Mesh",
146                /*Default folder*/"",/*Default Filename*/"",
147                FILETYPES,wxOPEN|wxFILE_MUST_EXIST,wxDefaultPosition);
148
149        if (openFileDialog->ShowModal() == wxID_OK )
150        {
151                modelString = new wxString("");
152                modelString->Append(openFileDialog->GetPath());
153                modelText->SetLabel(openFileDialog->GetFilename());
154        }
155
156        CheckStart();
157}
158
159//Image saving location
160void MyFrame::OnSelectImage(wxCommandEvent & event)
161{
162                const wxChar * FILETYPES = wxT
163                (
164                        "Bitmap|*.bmp|"
165                        "All files|*.*"
166                );
167
168        wxFileDialog * saveFileDialog = new wxFileDialog(this,"Select where to Save Image",
169                /*Default folder*/"",/*Default Filename*/"",
170                FILETYPES,wxSAVE,wxDefaultPosition);
171
172        if (saveFileDialog->ShowModal() == wxID_OK )
173        {
174                imageString = new wxString("");
175                imageString->Append(saveFileDialog->GetPath());
176                imageText->SetLabel(saveFileDialog->GetFilename());
177        }
178
179        CheckStart();
180}
181
182void MyFrame::OnStart(wxCommandEvent & event)
183{
184        float *ObscuranceMap;
185        int i, j;
186       
187       
188        CMesh g_pMesh;
189
190        //if image.bmp exists...
191        if ( wxFile::Exists(imageString->GetData()) )
192        {
193                int response = ::wxMessageBox("Image already exists?\nOverwrite?", "Attention!", wxYES_NO);
194               
195                if ( response == wxNO )
196                        return;
197        }
198
199
200        ObscuranceMap = new float[res * res * 4];
201       
202        char *name = new char[modelString->Length() + 100], character;
203       
204       
205        for (i = 0, j = 0; i < modelString->Length(); i++, j++)
206        {               
207                character = modelString->GetChar(i);
208
209                if (character == '\\')
210                {
211                        name[j] = modelString->GetChar(i);
212                        name[j + 1] = modelString->GetChar(i);
213                        j++;
214                }
215                else
216                        name[j] = modelString->GetChar(i);
217        }
218
219        name[j] = '\0';
220
221        //start Obscurances generation
222        vcObscurerGenerateImage(g_pMesh, name, int(res/256), &res, &res, &ObscuranceMap);
223
224        typedef unsigned char uchar;
225        uchar *bmp = new unsigned char[res * res * 3];
226        float r_float;
227
228        i = 0;
229        j = 0; 
230        while (i < (res * res * 4))
231        {
232                r_float = ObscuranceMap[i] * 255;
233                bmp[j] = uchar(r_float);
234                r_float = ObscuranceMap[i+1] * 255;
235                bmp[j + 1] = uchar(r_float);
236                r_float = ObscuranceMap[i+2] * 255;
237                bmp[j + 2] = uchar(r_float);
238
239                j += 3;
240                i += 4;
241        }
242
243
244        wxImage img(res,res);
245
246        img.SetData(bmp,res,res);
247       
248        img.SaveFile(*imageString, wxBITMAP_TYPE_BMP);
249
250        //freeing memory
251        g_pMesh.FreeMem();
252        delete name;
253       
254
255}
256
257//Seleccionar Resolucio
258void MyFrame::OnSelectResolution(wxCommandEvent & event)
259{
260        int id = event.GetSelection();
261        res = choices_res[id];
262        CheckStart();
263}
264
265//Seleccionar Qualitat
266/*->void MyFrame::OnSelectQuality(wxCommandEvent & event)
267{
268        int id = event.GetSelection();
269        qua = choices_qua[id];
270        ComprovaStart();
271}*/
272
273
Note: See TracBrowser for help on using the repository browser.