00001 #include "vuSimpleFVRDialog.h"
00002
00003 #include <iostream>
00004 #include "../vuUtilityWindow.h"
00005 #include "../wxUtilities/vuBasicUtility.h"
00006
00007 #define WINDOW_TITLE "Simple FVR"
00008
00009 enum {
00010 idCANVAS,
00011 idLOAD,
00012 idCLOSE,
00013 idEQUALSIZE,
00014 idMETHOD,
00015
00016 idIMAGESCALE,
00017 idIMAGEBIAS,
00018 idAUTOSCALEANDBIAS,
00019 idFITSCALEANDBIAS
00020 };
00021
00022
00023
00024
00025
00026 BEGIN_EVENT_TABLE(vuSimpleFVRDialog, vuBasicSubViewer)
00027 EVT_BUTTON(idLOAD, vuSimpleFVRDialog::OnButtonLoadFile)
00028 EVT_BUTTON(idCLOSE, vuSimpleFVRDialog::OnButtonCloseFile)
00029 EVT_BUTTON(idEQUALSIZE, vuSimpleFVRDialog::OnButtonEqualSize)
00030 EVT_CHOICE(idMETHOD, vuSimpleFVRDialog::OnChoiceMethod)
00031
00032 EVT_BUTTON(idFITSCALEANDBIAS, vuSimpleFVRDialog::OnButtonFitScaleAndBias)
00033 EVT_COMMAND_SCROLL(idIMAGESCALE, vuSimpleFVRDialog::OnSliderImageScale)
00034 EVT_COMMAND_SCROLL(idIMAGEBIAS, vuSimpleFVRDialog::OnSliderImageScale)
00035 EVT_CHECKBOX(idAUTOSCALEANDBIAS, vuSimpleFVRDialog::OnCheckboxAutoScaleAndBias)
00036 END_EVENT_TABLE()
00037
00038
00039
00040
00041
00042 vuSimpleFVRDialog::vuSimpleFVRDialog(wxWindow *parent)
00043 : vuBasicSubViewer(parent, WINDOW_TITLE)
00044 {
00045 m_FVR = NULL;
00046 m_FourierFilter = NULL;
00047 m_Camera = NULL;
00048 m_Canvas = new vuSimpleFVRCanvas(this, idCANVAS);
00049 m_Canvas->SetSize(200,200);
00050 }
00051
00052 vuSimpleFVRDialog::~vuSimpleFVRDialog()
00053 {
00054 m_Canvas->setFVR(NULL);
00055 CHECKNDELETE(m_FVR);
00056
00057 m_Canvas = NULL;
00058 m_FourierFilter = NULL;
00059 m_Camera = NULL;
00060 m_BUTTONcloseFile = NULL;
00061
00062 m_CHECKBOXautoScaleAndBias = NULL;
00063 m_BUTTONfitScaleAndBias = NULL;
00064 m_SLIDERimageScale = NULL;
00065 m_SLIDERimageBias = NULL;
00066 }
00067
00068 vuBasicSubViewerCanvas *vuSimpleFVRDialog::getCanvas()
00069 {
00070 return m_Canvas;
00071 }
00072
00073 void vuSimpleFVRDialog::addLeftRight(wxSizer *sizer, wxWindow *control)
00074 {
00075 wxStaticBox *borderBox = NULL;
00076 wxStaticBoxSizer *borderSizer = NULL;
00077 wxFlexGridSizer *flexGrid = NULL;
00078
00079
00080 borderBox = new wxStaticBox(control, -1, "File", wxDefaultPosition,
00081 wxSize(-1,-1),wxCAPTION);
00082 borderSizer = new wxStaticBoxSizer(borderBox, wxVERTICAL);
00083 flexGrid = new wxFlexGridSizer(2,5,5);
00084
00085 flexGrid->Add(new wxButton(control, idLOAD, "load",
00086 wxDefaultPosition,
00087 wxSize(80,18)), 0, wxALIGN_CENTER);
00088 m_BUTTONcloseFile = new wxButton(control, idCLOSE, "close",
00089 wxDefaultPosition, wxSize(80,18));
00090 m_BUTTONcloseFile->Disable();
00091 flexGrid->Add(m_BUTTONcloseFile, 0, wxALIGN_CENTER);
00092
00093 borderSizer->Add(flexGrid);
00094 sizer->Add(borderSizer,0,wxEXPAND,5);
00095 sizer->Add(0,10);
00096
00097
00098
00099 borderBox = new wxStaticBox(control, -1, "Scale and Bias");
00100 borderSizer = new wxStaticBoxSizer(borderBox, wxVERTICAL);
00101
00102 flexGrid = new wxFlexGridSizer(2,5,5);
00103
00104
00105 {
00106 m_SLIDERimageScale =
00107 new wxSlider(control, idIMAGESCALE, 0, 0, 10000,
00108 wxDefaultPosition, wxSize(130,20), wxSL_HORIZONTAL,
00109 wxDefaultValidator, "imageScaleSlider");
00110 m_SLIDERimageScale->SetValue(2550);
00111 }
00112
00113
00114 {
00115 m_SLIDERimageBias =
00116 new wxSlider(control, idIMAGEBIAS, 0, -1280, 1270,
00117 wxDefaultPosition, wxSize(130,20), wxSL_HORIZONTAL,
00118 wxDefaultValidator, "imageBiasSlider");
00119 }
00120
00121 flexGrid->Add(80,1);
00122 flexGrid->Add(0, 1);
00123
00124 flexGrid->Add(new wxStaticText(control,-1,"Scale:"),0,wxALIGN_RIGHT);
00125 flexGrid->Add(m_SLIDERimageScale,0,wxALL|wxALIGN_LEFT,1);
00126
00127 flexGrid->Add(new wxStaticText(control,-1,"Bias:"),0,wxALIGN_RIGHT);
00128 flexGrid->Add(m_SLIDERimageBias,0,wxALL|wxALIGN_LEFT,1);
00129
00130 m_BUTTONfitScaleAndBias =
00131 new wxButton(control, idFITSCALEANDBIAS, "fit",
00132 wxDefaultPosition, wxSize(130,16));
00133
00134 flexGrid->Add(new wxStaticText(control,-1,"Fit:"),0,wxALIGN_RIGHT);
00135 flexGrid->Add(m_BUTTONfitScaleAndBias, 0, wxALL|wxALIGN_LEFT,1);
00136
00137 flexGrid->Add(new wxStaticText(control,-1,"Auto:"),0,wxALIGN_RIGHT);
00138 m_CHECKBOXautoScaleAndBias =
00139 new wxCheckBox(control, idAUTOSCALEANDBIAS, "",
00140 wxDefaultPosition, wxSize(15,15));
00141 flexGrid->Add(m_CHECKBOXautoScaleAndBias);
00142
00143 flexGrid->Add(0,3);
00144 flexGrid->Add(0,3);
00145
00146 borderSizer->Add(flexGrid);
00147
00148 sizer->Add(borderSizer);
00149 sizer->Add(0,10);
00150
00151
00152 borderBox = new wxStaticBox(control, -1, "view", wxDefaultPosition,
00153 wxSize(-1,-1),wxCAPTION);
00154 borderSizer = new wxStaticBoxSizer(borderBox, wxVERTICAL);
00155 flexGrid = new wxFlexGridSizer(2,5,5);
00156
00157 flexGrid->Add(80,5);
00158 flexGrid->Add(0,5);
00159 flexGrid->Add(new wxStaticText(control, -1, "Views:"), 0, wxALIGN_RIGHT);
00160 flexGrid->Add(new wxButton(control, idEQUALSIZE, "equal size"));
00161 flexGrid->Add(80,5);
00162 flexGrid->Add(0,5);
00163
00164 borderSizer->Add(flexGrid);
00165
00166
00167 {
00168 m_CHOICEmethod =
00169 new wxChoice(control, idMETHOD, wxDefaultPosition, wxSize(130,20),
00170 0, NULL, wxCAPTION, wxDefaultValidator, "Method");
00171
00172 m_CHOICEmethod->Append("Spatial");
00173 m_CHOICEmethod->Append("Spatial Delta");
00174 m_CHOICEmethod->Append("Freq. Ampl.");
00175 m_CHOICEmethod->Append("Freq. Ampl. Delta");
00176 m_CHOICEmethod->Append("Freq. Phase");
00177 m_CHOICEmethod->Append("Freq. Phase Delta");
00178 m_CHOICEmethod->Append("Freq. Real");
00179 m_CHOICEmethod->Append("Freq. Real Delta");
00180 m_CHOICEmethod->Append("Freq. Imag.");
00181 m_CHOICEmethod->Append("Freq. Imag. Delta");
00182
00183 m_CHOICEmethod->SetSelection(0);
00184 }
00185
00186 borderSizer->Add(m_CHOICEmethod);
00187 sizer->Add(borderSizer,0,wxEXPAND,5);
00188 sizer->Add(0,10);
00189 }
00190
00192 void vuSimpleFVRDialog::setFourierVolume(vuFourierVolume1 *volume)
00193 {
00194 m_Canvas->setFourierVolume(volume);
00195 }
00196
00197 void vuSimpleFVRDialog::setFourierFilter(vuFourierFilter *filter)
00198 {
00199 m_FourierFilter = filter;
00200 if (m_FVR) m_FVR->setFilter(filter);
00201 }
00202
00203 void vuSimpleFVRDialog::setCamera(vuCamera *camera)
00204 {
00205 m_Camera = camera;
00206 if (m_FVR) m_FVR->setCamera(camera);
00207 }
00208
00209 bool vuSimpleFVRDialog::Show(bool flag)
00210 {
00211 if (flag) {
00212 m_Canvas->setFVR(m_FVR);
00213 }
00214 else
00215 m_Canvas->setFVR(NULL);
00216
00217 return vuBasicSubViewer::Show(flag);
00218 }
00219
00220 void vuSimpleFVRDialog::OnButtonLoadFile(wxCommandEvent& event)
00221 {
00222
00223 wxFileDialog fd(this,"Choose a frequency volume file","","","*.fvr",wxOPEN);
00224
00225 if(fd.ShowModal() == wxID_OK) {
00226 vuString fileName = fd.GetPath().c_str();
00227
00228 m_Canvas->setFVR(NULL);
00229 CHECKNDELETE(m_FVR);
00230
00231 m_FVR = new vu1112119();
00232 m_FVR->setWrap(3);
00233
00234 if (m_Camera == NULL) {
00235 cerr << "vuSimpleFVRDialog.OnButtonLoadFile(): no camera set" << endl;
00236 return;
00237 }
00238 if (m_FourierFilter == NULL) {
00239 cerr << "vuSimpleFVRDialog.OnButtonLoadFile(): no fourierFilter set";
00240 cerr << endl;
00241 return;
00242 }
00243
00244 cerr << "loading " << fileName.getLastPathComponent()<<"...";
00245 if (m_FVR->readFourierFromFile(fileName)) {
00246 m_FVR->setFilter(m_FourierFilter);
00247 m_FVR->setCamera(m_Camera);
00248 cerr << "vuSimpleFVRDialog::OnButtonLoadFile: not implemented properly" << endl;
00249
00250 m_FVR->glResize(m_Canvas->getWidth(), m_Canvas->getHeight());
00251 m_Canvas->setFVR(m_FVR);
00252
00253
00254 {
00255 m_BUTTONcloseFile->Enable(true);
00256 wxString title = WINDOW_TITLE;
00257 title += " - ";
00258 title += fileName.getLastPathComponent().c_str();
00259 title += " [";
00260 title += vuString(m_FVR->getXSize()).c_str();
00261 title += "x";
00262 title += vuString(m_FVR->getYSize()).c_str();
00263 title += "x";
00264 title += vuString(m_FVR->getZSize()).c_str();
00265 title += "]";
00266 SetTitle(title);
00267 }
00268 cerr << " done." << endl;
00269 }
00270 else
00271 cerr << " COULD NOT LOAD FILE!" << endl;
00272
00273 m_Canvas->redraw();
00274 }
00275 }
00276
00277 void vuSimpleFVRDialog::OnButtonCloseFile(wxCommandEvent& event)
00278 {
00279 CHECKNDELETE(m_FVR);
00280 m_BUTTONcloseFile->Disable();
00281 m_Canvas->setFVR(NULL);
00282 SetTitle(WINDOW_TITLE);
00283 m_Canvas->redraw();
00284 }
00285
00286 void vuSimpleFVRDialog::OnButtonEqualSize(wxCommandEvent& event)
00287 {
00288 makeCanvasSizeEqual();
00289 }
00290
00291
00292 void vuSimpleFVRDialog::OnChoiceMethod(wxCommandEvent& event)
00293 {
00294 m_Canvas->setRenderMethod(m_CHOICEmethod->GetSelection());
00295 m_Canvas->redraw();
00296 }
00297
00298 void vuSimpleFVRDialog::OnButtonFitScaleAndBias(wxCommandEvent& event)
00299 {
00300
00301 m_Canvas->redraw();
00302 }
00303
00304 void vuSimpleFVRDialog::OnCheckboxAutoScaleAndBias(wxCommandEvent& event)
00305 {
00306 if (m_CHECKBOXautoScaleAndBias->GetValue()) {
00307 m_SLIDERimageScale->Disable();
00308 m_SLIDERimageBias->Disable();
00309 m_BUTTONfitScaleAndBias->Disable();
00310 }
00311 else {
00312 m_SLIDERimageScale->Enable();
00313 m_SLIDERimageBias->Enable();
00314 m_BUTTONfitScaleAndBias->Enable(true);
00315 }
00316 m_Canvas->redraw();
00317 }
00318
00319 void vuSimpleFVRDialog::OnSliderImageScale(wxScrollEvent& event)
00320 {
00321 m_Canvas->setImageScale((float)m_SLIDERimageScale->GetValue()/10);
00322 m_Canvas->redraw();
00323 }