Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

vuSphericBrowser.cpp

Go to the documentation of this file.
00001 #include "vuSphericBrowser.h"
00002 
00003 #define BROWSER_MAX 10000
00004 
00005 template<int SIZE,class TYPE>
00006 vuSphericBrowser<SIZE,TYPE>::vuSphericBrowser()
00007 {
00008   m_Data = NULL;
00009 }
00010 
00011 template<int SIZE,class TYPE>
00012 vuSphericBrowser<SIZE,TYPE>::~vuSphericBrowser()
00013 {
00014   if (m_Data != NULL) {
00015     delete m_Data;
00016     m_Data = NULL;
00017   }
00018 }
00019 
00020 template<int SIZE,class TYPE>
00021 const char *vuSphericBrowser<SIZE,TYPE>::_titleString()
00022 {
00023   return "Spheric Lightfield Browser";
00024 }
00025 
00026 template<int SIZE,class TYPE>
00027 bool vuSphericBrowser<SIZE,TYPE>::init(const char* DataFile)
00028 {
00029   SetEvtHandlerEnabled(true);
00030 
00031   //Set up the window
00032   SetTitle(_titleString());
00033   CreateStatusBar();
00034 
00035   //Create a volume data instance.
00036   // the "m_Data = new vu1611?1" is called by the child class
00037   m_Data->setFileName(DataFile);
00038 
00039   //Read in the data.
00040   bool success = m_Data->read();
00041   if (success) {
00042     m_glCanvas->SetSize(512,512);
00043     vuString str(m_Data->getNumberOfViews() - 1);
00044     m_ViewsText->SetLabel(str.c_str());
00045     str  = "";
00046     str += _titleString();
00047     str += ": [";
00048     str += m_Data->getWidth();
00049     str += "x";
00050     str += m_Data->getHeight();
00051     str += "] x ";
00052     str += m_Data->getNumberOfViews();
00053     str += " Views <";
00054     str += SIZE;
00055     str += " ";
00056     str += m_Data->_typeName();
00057     str += ">";
00058     SetTitle(str.c_str());
00059     Fit();
00060   }
00061   else {
00062     wxMessageDialog dlg(this,m_Data->getErrorMessage(),
00063                         _titleString(), wxOK);
00064     dlg.ShowModal();
00065   }
00066   return success;
00067 }
00068 
00069 template<int SIZE,class TYPE>
00070 vuCamera* vuSphericBrowser<SIZE,TYPE>::getCamera()
00071 {
00072   return NULL;
00073 }
00074 
00075 template<int SIZE,class TYPE>
00076 vuImage* vuSphericBrowser<SIZE,TYPE>::getCurrentImage()
00077 {
00078   return NULL;
00079 }
00080 
00081 template<int SIZE,class TYPE>
00082 void vuSphericBrowser<SIZE,TYPE>::DrawFromImage()
00083 {
00084 }
00085 
00086 template<int SIZE,class TYPE>
00087 void vuSphericBrowser<SIZE,TYPE>::DrawAgain()
00088 {
00089 }
00090 
00091 template<int SIZE,class TYPE>
00092 wxString vuSphericBrowser<SIZE,TYPE>::helpText()
00093 {
00094   wxString str("");
00095 
00096   str += 
00097     "\n  Keyboard bindings:\n\n"
00098     "\t ?\t\t\t\t this help window\n"
00099     "\t UP\t\t\t previous view\n"
00100     "\t DOWN\t\t\t next view\n"
00101     "\t LEFT\t\t\t decrease image scaling\n"
00102     "\t RIGHT\t\t\t increase image scaling\n"
00103     "\t SHIFT+LEFT\t\t slowly decrease image scaling\n"
00104     "\t SHIFT+RIGHT\t\t slowly increase image scaling\n"
00105     "\t SPACE\t\t\t set image scaling to one (same as 'fit' button)\n";
00106 
00107   return str;
00108 }
00109 
00110 template<int SIZE,class TYPE>
00111 void vuSphericBrowser<SIZE,TYPE>::addRight(wxSizer *sizer)
00112 {
00113   //Add some control elements
00114   sizer->Add(new wxStaticText(this, -1, "0", wxDefaultPosition,
00115                               wxSize(40,20), wxALIGN_CENTRE), 0,
00116              wxEXPAND, 5);
00117   
00118   m_ViewSlider = new wxSlider(this, idBROWSELIGHTFIELD, 0, 0,
00119                               BROWSER_MAX, 
00120                               wxDefaultPosition, wxSize(30,300),
00121                               wxSL_VERTICAL, wxDefaultValidator,"browser");
00122   sizer->Add(m_ViewSlider, 1, wxALL, 10);
00123 
00124   m_ViewsText = new wxStaticText(this, -1, "0", wxDefaultPosition,
00125                                  wxSize(40,20), wxALIGN_CENTRE);
00126   sizer->Add(m_ViewsText, 0, wxEXPAND, 5);
00127 }
00128 
00129 template<int SIZE,class TYPE>
00130 void vuSphericBrowser<SIZE,TYPE>::addBottom(wxSizer *sizer)
00131 {
00132   //Add some control elements
00133   wxBoxSizer *verSpacer = new wxBoxSizer(wxVERTICAL);
00134   wxBoxSizer *horSpacer = new wxBoxSizer(wxHORIZONTAL);
00135 
00136   m_ImageScale = new wxSlider(this, idIMAGESCALE, 100, 1,
00137                               1500, 
00138                               wxDefaultPosition, wxSize(300,18),
00139                               wxSL_HORIZONTAL,wxDefaultValidator,"imageScale");
00140 
00141   horSpacer->Add(10,0);
00142   horSpacer->Add(new wxStaticText(this, -1, "Scale:"));
00143   horSpacer->Add(5,0);
00144   horSpacer->Add(m_ImageScale);
00145   horSpacer->Add(5,0);
00146   horSpacer->Add(new wxButton(this, idIMAGESCALE2ONE, "fit",
00147                  wxDefaultPosition, wxSize(40,18)));
00148   horSpacer->Add(40,0);
00149 
00150   verSpacer->Add(1,10);
00151   verSpacer->Add(horSpacer);
00152   verSpacer->Add(1,10);
00153   sizer->Add(verSpacer);
00154 }
00155 
00156 
00157 template<int SIZE,class TYPE>
00158 bool vuSphericBrowser<SIZE,TYPE>::glInit()
00159 {
00160   if (m_Data == NULL) return false;
00161   m_Data->initOpenGL();
00162   return true;
00163 }
00164 
00165 template<int SIZE,class TYPE>
00166 void vuSphericBrowser<SIZE,TYPE>::glRender()
00167 {
00168   m_Data->render();
00169   vuFixelMap<SIZE,TYPE> map = *(m_Data->getMap());
00170   
00171   map.scaleAndBias((float)m_ImageScale->GetValue()/100);
00172   map.glRender();
00173 
00174   char msg[512];
00175   vuVector lookFrom = m_Data->getCurrentView()->getLookFrom();
00176   sprintf(msg,"view: %lu  x=%6.3f  y=%6.3f  z=%6.3f",
00177           m_Data->getViewIndex(), lookFrom[0], lookFrom[1], lookFrom[2]);
00178   wxString statusText = msg;
00179   statusText += " -- Press '?' for help";
00180 
00181   SetStatusText(statusText);
00182 }
00183 
00184 template<int SIZE,class TYPE>
00185 void vuSphericBrowser<SIZE,TYPE>::glResize()
00186 {
00187   m_Data->glResize(m_glCanvas->getWidth(), m_glCanvas->getHeight());
00188   m_glCanvas->redraw();
00189 }
00190 
00191 template<int SIZE,class TYPE>
00192 void vuSphericBrowser<SIZE,TYPE>::glOnMouse(wxMouseEvent &ev)
00193 {
00194  // do nothing
00195 }
00196 
00197 template<int SIZE,class TYPE>
00198 void vuSphericBrowser<SIZE,TYPE>::OnChar(wxKeyEvent &event)
00199 {
00200   switch(event.GetKeyCode()) {
00201     case '?' :
00202       onKeyboardHelp(event);
00203       break;
00204     case 317: { // up
00205       dword idx = m_Data->getViewIndex();
00206       if (idx > 0)
00207         _updateIndexAndRefresh(idx - 1);
00208       break;
00209     }
00210     case 319: { // down
00211       dword idx = m_Data->getViewIndex() + 1;
00212       if (idx < m_Data->getNumberOfViews())
00213         _updateIndexAndRefresh(idx);
00214       break;
00215     }
00216     case 318: { // right
00217       int delta = (event.m_shiftDown) ? 1 : 10;
00218       _updateScaleAndRefresh(m_ImageScale->GetValue() + delta);
00219       break;
00220     }
00221     case 316: { // left
00222       int delta = (event.m_shiftDown) ? 1 : 10;
00223       _updateScaleAndRefresh(m_ImageScale->GetValue() - delta);
00224       break;
00225     }
00226     case ' ': { // space --> set image scaling to one
00227       _updateScaleAndRefresh(100);
00228     }
00229   }
00230 }
00231 
00232 template<int SIZE,class TYPE>
00233 void vuSphericBrowser<SIZE,TYPE>::OnBrowseViews(wxScrollEvent& event)
00234 {
00235   dword idx;
00236 
00237   idx = m_ViewSlider->GetValue()*m_Data->getNumberOfViews()/BROWSER_MAX;
00238   m_Data->setViewIndex(idx);
00239   m_glCanvas->redraw();
00240 }
00241 
00242 template<int SIZE,class TYPE>
00243 void vuSphericBrowser<SIZE,TYPE>::OnScaleImage(wxScrollEvent& event)
00244 {
00245   m_glCanvas->redraw();
00246 }
00247 
00248 template<int SIZE,class TYPE>
00249 #if wxMINOR_VERSION < 5
00250 void vuSphericBrowser<SIZE,TYPE>::OnScaleImage2One(wxScrollEvent& event)
00251 #else
00252 void vuSphericBrowser<SIZE,TYPE>::OnScaleImage2One(wxCommandEvent& event)
00253 #endif
00254 {
00255   m_ImageScale->SetValue(100);
00256   m_glCanvas->redraw();
00257 }
00258 
00259 /* ------------------------------------------------------------------------- */
00260 /* --- internal methods ---------------------------------------------------- */
00261 /* ------------------------------------------------------------------------- */
00262 
00263 template<int SIZE,class TYPE>
00264 void vuSphericBrowser<SIZE,TYPE>::_updateIndexAndRefresh(dword idx)
00265 {
00266   m_Data->setViewIndex(idx);
00267   m_ViewSlider->SetValue(BROWSER_MAX*idx/(m_Data->getNumberOfViews()-1));
00268   m_glCanvas->redraw();
00269 }
00270 
00271 template<int SIZE,class TYPE>
00272 void vuSphericBrowser<SIZE,TYPE>::_updateScaleAndRefresh(int scale)
00273 {
00274   if (scale >= 1 && scale <= 1500) {
00275     m_ImageScale->SetValue(scale);
00276     m_glCanvas->redraw();
00277   }
00278 }

Generated on Wed Dec 15 21:20:36 2004 for vuVolume by  doxygen 1.3.9.1