Go to the documentation of this file.00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef GRAPH3D_HPP
00044 #define GRAPH3D_HPP 1
00045
00046
00047 #include "graph.hpp"
00048 #include "error.hpp"
00049
00050
00053 enum view_e {
00054 VIEW_XY = 0,
00055 VIEW_XZ,
00056 VIEW_YX,
00057 VIEW_YZ,
00058 VIEW_ZX,
00059 VIEW_ZY
00060 };
00061
00062
00078 class Graph3D : public Graph {
00079
00080 protected:
00081
00082 view_e _view;
00083 int _vb[3];
00084 int _level;
00086 public:
00087
00090 Graph3D() {
00091 _view = VIEW_XY;
00092 _vb[0] = 0;
00093 _vb[1] = 1;
00094 _vb[2] = 2;
00095 _level = 0;
00096 }
00097
00100 virtual ~Graph3D() {}
00101
00111 virtual void plot( cairo_t *cairo, const Coordmapper *cm, const double range[4] ) = 0;
00112
00117 virtual void plot_sample( cairo_t *cairo, double x, double y, double width, double height ) = 0;
00118
00124 virtual void get_bbox( double bbox[4] ) = 0;
00125
00130 void set_view( view_e view, int level ) {
00131 switch( view ) {
00132 case VIEW_XY:
00133 _vb[0] = 0;
00134 _vb[1] = 1;
00135 _vb[2] = 2;
00136 break;
00137 case VIEW_XZ:
00138 _vb[0] = 0;
00139 _vb[1] = 2;
00140 _vb[2] = 1;
00141 break;
00142 case VIEW_YX:
00143 _vb[0] = 1;
00144 _vb[1] = 0;
00145 _vb[2] = 2;
00146 break;
00147 case VIEW_YZ:
00148 _vb[0] = 1;
00149 _vb[1] = 2;
00150 _vb[2] = 0;
00151 break;
00152 case VIEW_ZX:
00153 _vb[0] = 2;
00154 _vb[1] = 0;
00155 _vb[2] = 1;
00156 break;
00157 case VIEW_ZY:
00158 _vb[0] = 2;
00159 _vb[1] = 1;
00160 _vb[2] = 0;
00161 break;
00162 default:
00163 throw( ErrorUnimplemented( ERROR_LOCATION ) );
00164 break;
00165 }
00166 _view = view;
00167 _level = level;
00168 }
00169 };
00170
00171
00172 #endif