Go to the documentation of this file.00001
00002 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00003 #pragma implementation
00004 #endif
00005
00006
00007
00008
00009
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
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
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 }