core/vgui/vgui_loader_tableau.cxx
Go to the documentation of this file.
00001 // This is core/vgui/vgui_loader_tableau.cxx
00002 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00003 #pragma implementation
00004 #endif
00005 //:
00006 // \file
00007 // \author Geoffrey Cross, Oxford RRG
00008 // \date   03 Nov 1999
00009 // \brief  See vgui_loader_tableau.h for a description of this file.
00010 
00011 #include "vgui_loader_tableau.h"
00012 #include <vcl_iostream.h>
00013 #include <vnl/vnl_matrix_fixed.h>
00014 #include <vgui/vgui_gl.h>
00015 
00016 vcl_string vgui_loader_tableau::type_name() const
00017 {
00018   return "vgui_loader_tableau";
00019 }
00020 
00021 // Default ctor
00022 vgui_loader_tableau::vgui_loader_tableau(vgui_tableau_sptr const& child_tableau)
00023   : vgui_wrapper_tableau( child_tableau)
00024   , projectionmatrixloaded(false)
00025   , modelviewmatrixloaded(false)
00026 #if 0
00027   , projectionmatrixt(4,4)
00028   , modelviewmatrixt(4,4)
00029 #endif // 0
00030 {
00031 }
00032 
00033 void vgui_loader_tableau::set_projection( vnl_matrix_fixed<double,4,4> const &m)
00034 {
00035   projectionmatrixloaded= true;
00036   m.transpose().copy_out(projectionmatrixt);
00037 }
00038 
00039 void vgui_loader_tableau::unset_projection()
00040 {
00041   projectionmatrixloaded= false;
00042 }
00043 
00044 void vgui_loader_tableau::set_modelview( vnl_matrix_fixed<double,4,4> const &m)
00045 {
00046   modelviewmatrixloaded= true;
00047   m.transpose().copy_out(modelviewmatrixt);
00048 }
00049 
00050 void vgui_loader_tableau::unset_modelview()
00051 {
00052   modelviewmatrixloaded= false;
00053 }
00054 
00055 bool vgui_loader_tableau::handle( vgui_event const &e)
00056 {
00057   if (projectionmatrixloaded)
00058   {
00059     glMatrixMode(GL_PROJECTION);
00060     glLoadMatrixd( projectionmatrixt );
00061   }
00062 
00063   if (modelviewmatrixloaded)
00064   {
00065     glMatrixMode(GL_MODELVIEW);
00066     glLoadMatrixd( modelviewmatrixt );
00067   }
00068 
00069   return child && child->handle(e);
00070 }
00071 
00072 //--------------------------------------------------------------------------------
00073 
00074 void vgui_loader_tableau::set_identity()
00075 {
00076   vnl_matrix_fixed<double,4,4> I; I.set_identity();
00077   set_projection(I);
00078   set_modelview(I);
00079 }
00080 
00081 void vgui_loader_tableau::set_ortho(float x1,float y1,float z1, float x2,float y2,float z2)
00082 {
00083   if (x1==x2 || y1==y2 || z1==z2)
00084     vcl_cerr << __FILE__ " warning in set_ortho() : volume has no extent\n";
00085 
00086   vnl_matrix_fixed<double,4,4> M; M.set_identity();
00087   set_projection(M);
00088 
00089   M(0,0) = 2/(x2-x1); M(0,3) = (x1+x2)/(x1-x2);
00090   M(1,1) = 2/(y2-y1); M(1,3) = (y1+y2)/(y1-y2);
00091   M(2,2) = 2/(z2-z1); M(2,3) = (z1+z2)/(z1-z2);
00092   set_modelview(M);
00093 }
00094 
00095 void vgui_loader_tableau::set_ortho(float x1, float y1, float x2, float y2)
00096 {
00097   set_ortho(x1,y1, -1, x2,y2, +1);
00098 }