contrib/brl/bbas/bgui/bgui_image_tableau.cxx

Go to the documentation of this file.
00001 // This is brl/bbas/bgui/bgui_image_tableau.cxx
00002 #include "bgui_image_tableau.h"
00003 //:
00004 // \file
00005 // \author J.L. Mundy
00006 // \brief  See bgui_image_tableau.h for a description of this file.
00007 
00008 #include <vcl_cmath.h>
00009 #include <vcl_cstdio.h> // sprintf
00010 #include <vgui/vgui_event.h>
00011 #include <vgui/vgui.h>
00012 #include <vgui/vgui_projection_inspector.h>
00013 #include <vil1/vil1_image.h>
00014 #include <vil1/vil1_rgba.h>
00015 #include <vil/vil_image_view.h>
00016 #include <vgui/vgui_range_map_params.h>
00017 
00018 
00019 //-----------------------------------------------------------------------------
00020 //: The constructor takes a snapshot of the current viewport and scissor areas.
00021 //  The destructor restores that state.
00022 
00023 
00024 //--------------------------------------------------------------------------------
00025 
00026 bgui_image_tableau::bgui_image_tableau()
00027   { 
00028     handle_motion_ = true; locked_ = false; show_path_=false;
00029     tt_ = new vgui_text_tableau();
00030   }
00031 
00032 bgui_image_tableau::bgui_image_tableau(vil_image_resource_sptr const & img,
00033                                        vgui_range_map_params_sptr const& rmp)
00034  : base(img, rmp) { handle_motion_ = true; locked_ = false; show_path_=false;
00035  tt_ = new vgui_text_tableau();}
00036 
00037 bgui_image_tableau::bgui_image_tableau(vil_image_view_base const & img,
00038                                        vgui_range_map_params_sptr const& rmp)
00039  : base(img, rmp) { handle_motion_ = true; locked_ = false; show_path_=false;
00040  tt_ = new vgui_text_tableau();}
00041 
00042 bgui_image_tableau::bgui_image_tableau(vil1_image const & img,
00043                                        vgui_range_map_params_sptr const& rmp)
00044  : base(img, rmp) { handle_motion_ = true; locked_ = false; show_path_=false;
00045  tt_ = new vgui_text_tableau();}
00046 
00047 bgui_image_tableau::bgui_image_tableau(char const *f,
00048                                        vgui_range_map_params_sptr const& rmp)
00049  : base(f, rmp) { handle_motion_ = true; locked_ = false; show_path_=false;
00050  tt_ = new vgui_text_tableau();}
00051 
00052 //--------------------------------------------------------------------------------
00053 
00054 vil1_image bgui_image_tableau::get_image() const
00055 {
00056   return base::get_image();
00057 }
00058 
00059 vil_image_resource_sptr bgui_image_tableau::get_image_resource() const
00060 {
00061   return base::get_image_resource();
00062 }
00063 
00064 void bgui_image_tableau::get_pixel_info_from_frame_buffer(const int x, const int y, vgui_event const &e, char* msg)
00065 {
00066   // It's easier to get the buffer in vil1_rgba format and then convert to
00067   // RGB, because that avoids alignment problems with glReadPixels.
00068   glPixelZoom(1,1);
00069   glPixelTransferi(GL_MAP_COLOR,0);
00070   glPixelTransferi(GL_RED_SCALE,1);   glPixelTransferi(GL_RED_BIAS,0);
00071   glPixelTransferi(GL_GREEN_SCALE,1); glPixelTransferi(GL_GREEN_BIAS,0);
00072   glPixelTransferi(GL_BLUE_SCALE,1);  glPixelTransferi(GL_BLUE_BIAS,0);
00073 
00074   glPixelStorei(GL_PACK_ALIGNMENT,1);   // byte alignment.
00075   glPixelStorei(GL_PACK_ROW_LENGTH,0);  // use default value (the arg to pixel routine).
00076   glPixelStorei(GL_PACK_SKIP_PIXELS,0); //
00077   glPixelStorei(GL_PACK_SKIP_ROWS,0);   //
00078   vil1_rgba<GLubyte> pixel;
00079   glReadPixels(e.wx, e.wy,             //
00080                1, 1,             // height and width (only one pixel)
00081                GL_RGBA,          // format
00082                GL_UNSIGNED_BYTE, // type
00083                &pixel);
00084   vcl_sprintf(msg, "(%d, %d)   (ubyte)[ R=%d,G=%d,B=%d]", x, y,
00085               pixel.r, pixel.g, pixel.b);
00086 }
00087 
00088 void bgui_image_tableau::
00089 get_pixel_info_from_image(const int x, const int y,
00090                           vgui_event const &e, char* msg)
00091 {
00092   //only implemented for vil image resource and common vil types
00093   //(I don't like macros)
00094   vil_image_resource_sptr r = this->get_image_resource();
00095   if (!r)
00096     if (!this->get_image())
00097     {
00098       vcl_sprintf(msg, "(%d, %d)   ?", x, y);
00099       return;
00100     }
00101     else
00102     {
00103       this->get_pixel_info_from_frame_buffer(x, y, e, msg);
00104       return;
00105     }
00106   //At this point, we have a vil_image and can proceed with the cases.
00107   unsigned w = r->ni(), h = r->nj(), n_p = r->nplanes();
00108   if (x<0||x>=int(w)||y<0||y>=int(h))
00109   {
00110     vcl_sprintf(msg, "(%d, %d)   ?", 0, 0);
00111     return;
00112   }
00113   vil_pixel_format type = r->pixel_format();
00114   switch (type )
00115   {
00116    case VIL_PIXEL_FORMAT_BOOL: {
00117     vil_image_view<bool> v = r->get_view();
00118     if (!v)
00119       vcl_sprintf(msg, "Pixel Not Available");
00120     else
00121       vcl_sprintf(msg, "(%d, %d)   (bool) %d", x, y, v(x,y));
00122     return; }
00123    case  VIL_PIXEL_FORMAT_BYTE: {
00124     if (n_p==1)
00125     {
00126       vil_image_view<vxl_byte> v = r->get_view(x,1,y,1);
00127       if (!v)
00128         vcl_sprintf(msg, "Pixel Not Available");
00129       else
00130         vcl_sprintf(msg, "(%d, %d)   (ubyte) %d", x, y, v(0,0));
00131       return;
00132     }
00133     else if (n_p==3)
00134     {
00135       vil_image_view<vxl_byte > v = r->get_view(x,1,y,1);
00136       if (!v)
00137         vcl_sprintf(msg, "Pixel Not Available");
00138       else
00139         vcl_sprintf(msg, "(%d, %d)   (ubyte)[ R=%d,G=%d,B=%d]", x, y,
00140                     v(0,0,0), v(0,0,1), v(0,0,2) );
00141       return;
00142     }
00143     return; }
00144    case  VIL_PIXEL_FORMAT_SBYTE: {
00145     if (n_p==1)
00146     {
00147       vil_image_view<vxl_sbyte> v = r->get_view(x,1,y,1);
00148       if (!v)
00149         vcl_sprintf(msg, "Pixel Not Available");
00150       else
00151         vcl_sprintf(msg, "(%d, %d)   (sbyte) %d", x, y, v(0,0));
00152       return;
00153     }
00154     else if (n_p==3)
00155     {
00156       vil_image_view<vil_rgb<vxl_sbyte> > v = r->get_view(x,1,y,1);
00157       if (!v)
00158         vcl_sprintf(msg, "Pixel Not Available");
00159       else
00160         vcl_sprintf(msg, "(%d, %d)   (sbyte)[ R=%d,G=%d,B=%d]", x, y,
00161                     v(0,0).R(), v(0,0).G(),v(0,0).B() );
00162       return;
00163     }
00164     return; }
00165    case  VIL_PIXEL_FORMAT_UINT_16: {
00166     if (n_p==1)
00167     {
00168       vil_image_view<vxl_uint_16> v = r->get_view(x,1,y,1);
00169       if (!v)
00170         vcl_sprintf(msg, "Pixel Not Available");
00171       else
00172         vcl_sprintf(msg, "(%d, %d)   (uint16) %d", x, y, v(0,0));
00173       return;
00174     }
00175     else if (n_p==3)
00176     {
00177       vil_image_view<vil_rgb<vxl_uint_16> > v = r->get_view(x,1,y,1);
00178       if (!v)
00179         vcl_sprintf(msg, "Pixel Not Available");
00180       else
00181         vcl_sprintf(msg, "(%d, %d)   (uint16)[ R=%d,G=%d,B=%d]", x, y,
00182                     v(0,0).R(), v(0,0).G(),v(0,0).B() );
00183     }
00184     else if (n_p==4)
00185     {
00186 
00187       vil_image_view<vil_rgba<vxl_uint_16> > v = r->get_view(x,1,y,1);
00188       if (!v){
00189         vcl_sprintf(msg, "Pixel Not Available");
00190         return;
00191       }else{        
00192         int band_map = 0;
00193         if(rmp_)
00194           band_map = rmp_->band_map_;
00195         switch(band_map){
00196         case vgui_range_map_params::RGB_m :
00197           {
00198             vcl_sprintf(msg, "(%d, %d)   (RGB:uint16)[ R=%d,G=%d,B=%d,I=%d]",
00199                         x, y, v(0,0).R(), v(0,0).G(),v(0,0).B(),v(0,0).A() );
00200             break;
00201           }
00202         case vgui_range_map_params::XRG_m :
00203           {
00204             vcl_sprintf(msg, "(%d, %d)   (IRG:uint16)[ R=%d,G=%d,B=%d,I=%d]",
00205                         x, y, v(0,0).R(), v(0,0).G(),v(0,0).B(),v(0,0).A() );
00206             break;
00207           }
00208         case vgui_range_map_params::RXB_m :
00209           {
00210             vcl_sprintf(msg, "(%d, %d)   (RIB:uint16)[ R=%d,G=%d,B=%d,I=%d]",
00211                         x, y, v(0,0).R(), v(0,0).G(),v(0,0).B(),v(0,0).A() );
00212             break;
00213           }
00214         case vgui_range_map_params::RGX_m :
00215           {
00216             vcl_sprintf(msg, "(%d, %d)   (RGI:uint16)[ R=%d,G=%d,B=%d,I=%d]",
00217                         x, y, v(0,0).R(), v(0,0).G(),v(0,0).B(),v(0,0).A() );
00218             break;
00219           }
00220         default:
00221           {
00222             vcl_sprintf(msg, "Pixel Not Available");
00223             return;
00224           }
00225         }
00226       }
00227     }
00228    }
00229    case  VIL_PIXEL_FORMAT_INT_16: {
00230     if (n_p==1)
00231     {
00232       vil_image_view<vxl_int_16> v = r->get_view(x,1,y,1);
00233       if (!v)
00234         vcl_sprintf(msg, "Pixel Not Available");
00235       else
00236         vcl_sprintf(msg, "(%d, %d)   (int16) %d", x, y, v(0,0));
00237       return;
00238     }
00239     else if (n_p==3)
00240     {
00241       vil_image_view<vil_rgb<vxl_int_16> > v = r->get_view(x,1,y,1);
00242       if (!v)
00243         vcl_sprintf(msg, "Pixel Not Available");
00244       else
00245         vcl_sprintf(msg, "(%d, %d)   (int16)[ R=%d,G=%d,B=%d]", x, y,
00246                     v(0,0).R(), v(0,0).G(),v(0,0).B() );
00247       return;
00248     }
00249     return; }
00250     case  VIL_PIXEL_FORMAT_UINT_32: {
00251       if (n_p==1)
00252       {
00253         vil_image_view<vxl_uint_32> v = r->get_view(x,1,y,1);
00254         if (!v)
00255           vcl_sprintf(msg, "Pixel Not Available");
00256         else
00257           vcl_sprintf(msg, "(%d, %d)   (uint32) %d", x, y, v(0,0));
00258         return;
00259       }
00260       else if (n_p==3)
00261       {
00262         vil_image_view<vil_rgb<vxl_uint_32> > v = r->get_view(x,1,y,1);
00263         if (!v)
00264           vcl_sprintf(msg, "Pixel Not Available");
00265         else
00266           vcl_sprintf(msg, "(%d, %d)   (uint32)[ R=%d,G=%d,B=%d]", x, y,
00267                       v(0,0).R(), v(0,0).G(),v(0,0).B() );
00268         return;
00269       }
00270     return; }
00271    case  VIL_PIXEL_FORMAT_FLOAT: {
00272     vil_image_view<float> v = r->get_view(x,1,y,1);
00273     if (!v)
00274       vcl_sprintf(msg, "Pixel Not Available");
00275     else
00276       vcl_sprintf(msg, "(%d, %d)   (float) %f", x, y, v(0,0));
00277     return; }
00278    case  VIL_PIXEL_FORMAT_DOUBLE: {
00279     vil_image_view<double> v = r->get_view(x,1,y,1);
00280     if (!v)
00281       vcl_sprintf(msg, "Pixel Not Available");
00282     else
00283       vcl_sprintf(msg, "(%d, %d)   (double) %g", x, y, v(0,0));
00284     return; }
00285    case VIL_PIXEL_FORMAT_RGB_BYTE: {
00286     vil_image_view<vil_rgb<vxl_byte> > v = r->get_view(x,1,y,1);
00287     if (!v)
00288       vcl_sprintf(msg, "Pixel Not Available");
00289     else
00290       vcl_sprintf(msg, "(%d, %d)   (ubyte)[ R=%d,G=%d,B=%d]", x, y,
00291                   v(0,0).R(), v(0,0).G(),v(0,0).B() );
00292       return; }
00293    case VIL_PIXEL_FORMAT_RGB_UINT_16: {
00294     vil_image_view<vil_rgb<vxl_uint_16> > v = r->get_view(x,1,y,1);
00295     if (!v)
00296       vcl_sprintf(msg, "Pixel Not Available");
00297     else
00298       vcl_sprintf(msg, "(%d, %d)   (uint16)[ R=%d,G=%d,B=%d]", x, y,
00299                   v(0,0).R(), v(0,0).G(),v(0,0).B() );
00300     return; }
00301 #if 0
00302    case VIL_PIXEL_FORMAT_UINT_32:
00303    case VIL_PIXEL_FORMAT_INT_32:
00304    case VIL_PIXEL_FORMAT_RGB_SBYTE:
00305    case VIL_PIXEL_FORMAT_RGB_INT_16:
00306    case VIL_PIXEL_FORMAT_RGB_UINT_32:
00307    case VIL_PIXEL_FORMAT_RGB_INT_32:
00308    case VIL_PIXEL_FORMAT_RGB_FLOAT:
00309    case VIL_PIXEL_FORMAT_RGB_DOUBLE:
00310    case VIL_PIXEL_FORMAT_RGBA_UINT_32:
00311    case VIL_PIXEL_FORMAT_RGBA_INT_32:
00312    case VIL_PIXEL_FORMAT_RGBA_UINT_16:
00313    case VIL_PIXEL_FORMAT_RGBA_INT_16:
00314    case VIL_PIXEL_FORMAT_RGBA_BYTE:
00315    case VIL_PIXEL_FORMAT_RGBA_SBYTE:
00316    case VIL_PIXEL_FORMAT_RGBA_FLOAT:
00317    case VIL_PIXEL_FORMAT_RGBA_DOUBLE:
00318    case VIL_PIXEL_FORMAT_COMPLEX_FLOAT:
00319    case VIL_PIXEL_FORMAT_COMPLEX_DOUBLE:
00320 #endif
00321    default:
00322     vcl_sprintf(msg, "Pixel Not Available");
00323   }
00324 }
00325 
00326 double bgui_image_tableau::
00327 get_pixel_value(const unsigned c, const unsigned r)
00328 {
00329   vil_image_resource_sptr rs = this->get_image_resource();
00330   if (!rs)
00331     return 0;
00332   if (c<0||c>=rs->ni()||r<0||r>=rs->nj())
00333     return 0;
00334   unsigned n_p = rs->nplanes();
00335   vil_pixel_format type = rs->pixel_format();
00336   switch (type )
00337     {
00338     case VIL_PIXEL_FORMAT_BOOL: {
00339       vil_image_view<bool> v = rs->get_view();
00340       if (!v)
00341         return 0;
00342       else
00343         return static_cast<double>(v(0,0));
00344     }
00345     case  VIL_PIXEL_FORMAT_BYTE: {
00346 
00347       vil_image_view<vxl_byte> v = rs->get_view(c,1,r,1);
00348       if (!v)
00349         return 0;
00350       if (n_p==1)
00351         return static_cast<double>(v(0,0));
00352       else if (n_p==3)
00353         return static_cast<double>(v(0,0,0)+v(0,0,1)+v(0,0,2))/3;
00354     }
00355     case  VIL_PIXEL_FORMAT_SBYTE: {
00356       vil_image_view<vxl_sbyte> v = rs->get_view(c,1,r,1);
00357       if (!v)
00358         return 0;
00359       else
00360         if (n_p==1)
00361           return static_cast<double>(v(0,0));
00362         else if (n_p==3)
00363           return static_cast<double>(v(0,0,0)+v(0,0,1)+v(0,0,2))/3;
00364     }
00365     case  VIL_PIXEL_FORMAT_UINT_16: {
00366       vil_image_view<vxl_uint_16> v = rs->get_view(c,1,r,1);
00367       if (!v)
00368         return 0;
00369       else
00370         if (n_p==1)
00371           return static_cast<double>(v(0,0));
00372         else if (n_p==3)
00373           return static_cast<double>(v(0,0,0)+v(0,0,1)+v(0,0,2))/3;
00374         else if (n_p==4)
00375           return static_cast<double>(v(0,0,0)+v(0,0,1)+v(0,0,2)+v(0,0,3))/4;
00376     }
00377     case  VIL_PIXEL_FORMAT_INT_16: {
00378       vil_image_view<vxl_int_16> v = rs->get_view(c,1,r,1);
00379       if (!v)
00380         return 0;
00381       else
00382         if (n_p==1)
00383           return static_cast<double>(v(0,0));
00384         else if (n_p==3)
00385           return static_cast<double>(v(0,0,0)+v(0,0,1)+v(0,0,2))/3;
00386     }
00387     case  VIL_PIXEL_FORMAT_FLOAT: {
00388       vil_image_view<float> v = rs->get_view(c,1,r,1);
00389       if (!v)
00390         return 0;
00391       else
00392         return static_cast<double>(v(0,0));
00393     }
00394     case  VIL_PIXEL_FORMAT_DOUBLE: {
00395       vil_image_view<double> v = rs->get_view(c,1,r,1);
00396       if (!v)
00397         return 0;
00398       else
00399         return v(0,0);
00400     }
00401     case VIL_PIXEL_FORMAT_RGB_BYTE: {
00402       vil_image_view<vil_rgb<vxl_byte> > v = rs->get_view(c,1,r,1);
00403       if (!v)
00404         return 0;
00405       else
00406         return static_cast<double>(v(0,0).R()+v(0,0).G()+v(0,0).B())/3;
00407     }
00408     case VIL_PIXEL_FORMAT_RGB_UINT_16: {
00409       vil_image_view<vil_rgb<vxl_uint_16> > v = rs->get_view(c,1,r,1);
00410       if (!v)
00411         return 0;
00412       else
00413         return static_cast<double>(v(0,0).R()+v(0,0).G()+v(0,0).B())/3;
00414     }
00415     default:
00416       return 0;
00417     }
00418 }
00419 
00420 //: get the pixel value as color
00421 vcl_vector<double> bgui_image_tableau::get_color_pixel_value(const unsigned c, const unsigned r)
00422 {
00423   vil_image_resource_sptr rs = this->get_image_resource();
00424   if (!rs)
00425     return vcl_vector<double>(0);
00426   if (c<0||c>=rs->ni()||r<0||r>=rs->nj())
00427     return vcl_vector<double>(0);
00428   unsigned n_p = rs->nplanes();
00429   vcl_vector<double> val(n_p, 0.0);
00430   if(n_p==1)
00431     {
00432       val[0]=this->get_pixel_value(c, r);
00433       return val;
00434     }
00435   vil_pixel_format type = rs->pixel_format();
00436   switch (type )
00437     {
00438     case  VIL_PIXEL_FORMAT_BYTE: {
00439 
00440       vil_image_view<vxl_byte> v = rs->get_view(c,1,r,1);
00441       if (!v)
00442         return val;
00443       for(unsigned p = 0; p<n_p; ++p)
00444         val[p]=static_cast<double>(v(0,0,p));
00445       return val;
00446     }
00447     case  VIL_PIXEL_FORMAT_UINT_16: {
00448       vil_image_view<vxl_uint_16> v = rs->get_view(c,1,r,1);
00449       if (!v)
00450         return val;
00451       for(unsigned p = 0; p<n_p; ++p)
00452         val[p]=static_cast<double>(v(0,0,p));
00453       return val;
00454     }
00455     default:
00456       return val;
00457     }
00458 }
00459 void bgui_image_tableau::image_line(const float col_start,
00460                                     const float row_start,
00461                                     const float col_end,
00462                                     const float row_end,
00463                                     vcl_vector<double>& line_pos,
00464                                     vcl_vector<double>& vals)
00465 {
00466   line_pos.clear();vals.clear();
00467   //Get the image data
00468   // the line length in pixels
00469   float length = vcl_sqrt((col_end-col_start)*(col_end-col_start) +
00470                           (row_end-row_start)*(row_end-row_start));
00471   if (length == 0)
00472     return;
00473   //initialize the line scan parameters
00474   float xstep = (col_end-col_start)/length;
00475   float ystep = (row_end-row_start)/length;
00476   float sinc = vcl_sqrt(xstep*xstep + ystep*ystep);
00477   float spos = 0;
00478   line_pos.push_back(spos);
00479   unsigned c = static_cast<unsigned>(col_start),
00480    r = static_cast<unsigned>(row_start);
00481   vals.push_back(get_pixel_value(c, r));
00482 
00483   //extract the pixel values along the line
00484   float xpos = col_start, ypos = row_start;
00485   unsigned nsteps = static_cast<unsigned>(length);
00486   for (unsigned i = 0; i<nsteps; ++i)
00487   {
00488     xpos += xstep;
00489     ypos += ystep;
00490     spos += sinc;
00491     c = static_cast<unsigned>(xpos);
00492     r = static_cast<unsigned>(ypos);
00493     line_pos.push_back(spos);
00494     vals.push_back(get_pixel_value(c, r));
00495   }
00496 }
00497   //: Extract a line of pixel values return color if available
00498 void bgui_image_tableau::image_line(const float col_start,
00499                   const float row_start,
00500                   const float col_end,
00501                   const float row_end,
00502                   vcl_vector<double>& line_pos,
00503                   vcl_vector<vcl_vector<double> >& vals)
00504 {
00505   line_pos.clear();vals.clear();
00506   //Get the image data
00507   // the line length in pixels
00508   float length = vcl_sqrt((col_end-col_start)*(col_end-col_start) +
00509                           (row_end-row_start)*(row_end-row_start));
00510   if (length == 0)
00511     return;
00512   //initialize the line scan parameters
00513   float xstep = (col_end-col_start)/length;
00514   float ystep = (row_end-row_start)/length;
00515   float sinc = vcl_sqrt(xstep*xstep + ystep*ystep);
00516   float spos = 0;
00517   line_pos.push_back(spos);
00518   unsigned c = static_cast<unsigned>(col_start),
00519    r = static_cast<unsigned>(row_start);
00520   vcl_vector<double> cv = get_color_pixel_value(c, r);
00521   unsigned n_bands = cv.size();
00522   vals.resize(n_bands);
00523   for(unsigned i = 0; i<n_bands; ++i)
00524     vals[i].push_back(cv[i]);
00525 
00526   //extract the pixel values along the line
00527   float xpos = col_start, ypos = row_start;
00528   unsigned nsteps = static_cast<unsigned>(length);
00529   for (unsigned i = 0; i<nsteps; ++i)
00530   {
00531     xpos += xstep;
00532     ypos += ystep;
00533     spos += sinc;
00534     c = static_cast<unsigned>(xpos);
00535     r = static_cast<unsigned>(ypos);
00536     line_pos.push_back(spos);
00537     cv = get_color_pixel_value(c, r);
00538     for(unsigned i = 0; i<n_bands; ++i)
00539       vals[i].push_back(cv[i]);
00540   }
00541 }
00542 
00543 
00544 //--------------------------------------------------------------------------------
00545 //:
00546 // Handle all events for this tableau.
00547 bool bgui_image_tableau::handle(vgui_event const &e)
00548 {
00549   static bool button_down = false;
00550   if (e.type == vgui_DRAW)
00551   {
00552     base::handle(e);
00553     if(tt_) tt_->handle(e);
00554     return true;
00555   }
00556 
00557   if (e.type == vgui_BUTTON_DOWN)
00558   {
00559     button_down = true;
00560     if (handle_motion_)
00561       vgui::out << ' ' << vcl_endl;
00562   }
00563   else if (e.type == vgui_BUTTON_UP)
00564   {
00565     button_down = false;
00566   }
00567   else if (e.type == vgui_MOTION && handle_motion_&&button_down == false)
00568   {
00569     // Get X,Y position to display on status bar:
00570     float pointx, pointy;
00571     vgui_projection_inspector p_insp;
00572     p_insp.window_to_image_coordinates(e.wx, e.wy, pointx, pointy);
00573     int intx = (int)vcl_floor(pointx), inty = (int)vcl_floor(pointy);
00574     char msg[100];
00575 
00576     this->get_pixel_info_from_image(intx, inty,e, msg);
00577 
00578     // gets a snapshot of the viewport so that it restores it back after vgui::out
00579     // this is needed, because vgui::out changes viewport, and image tableau 
00580     // gets confused
00581     bgui_image_tableau_vp_sc_snapshot snap;
00582 
00583     // Display on status bar:
00584     if (!locked_) {
00585       if(show_path_)
00586         vgui::out << msg << "  " << this->file_name() << vcl_endl;
00587       else
00588         vgui::out << msg << vcl_endl;
00589     }
00590   }
00591   return base::handle(e);
00592 }
00593 
00594 //--------------------------------------------------------------------------------

Generated on Thu Nov 20 05:22:06 2008 for contrib/brl/bbas/bgui by  doxygen 1.5.1