inlib
1.2.0
|
00001 // Copyright (C) 2010, Guy Barrand. All rights reserved. 00002 // See the file inlib.license for terms. 00003 00004 #ifndef inlib_sg_plottable 00005 #define inlib_sg_plottable 00006 00007 // Pure abstract interfaces. 00008 00009 #include <string> 00010 00011 #include "../scast" 00012 00013 namespace inlib { 00014 namespace sg { 00015 00016 class plottable { 00017 public: 00018 static const std::string& s_class() { 00019 static const std::string s_v("inlib::sg::plottable"); 00020 return s_v; 00021 } 00022 public: 00023 virtual void* cast(const std::string& a_class) const { 00024 if(void* p = inlib::cmp_cast<plottable>(this,a_class)) {return p;} 00025 return 0; 00026 } 00027 public: 00028 virtual ~plottable(){} 00029 public: 00030 virtual plottable* copy() const = 0; 00031 virtual bool is_valid() const = 0; 00032 virtual std::string infos(const std::string&) = 0; 00033 00034 virtual std::string name() = 0; 00035 virtual void set_name(const std::string&) = 0; 00036 00037 virtual std::string title() = 0; 00038 virtual std::string legend() = 0; 00039 virtual void set_legend(const std::string&) = 0; 00040 00041 //virtual unsigned int dimension() const = 0; 00042 }; 00043 00044 class bins1D : public virtual plottable { 00045 public: 00046 static const std::string& s_class() { 00047 static const std::string s_v("inlib::sg::bins1D"); 00048 return s_v; 00049 } 00050 public: 00051 virtual void* cast(const std::string& a_class) const { 00052 if(void* p = inlib::cmp_cast<bins1D>(this,a_class)) {return p;} 00053 return plottable::cast(a_class); 00054 } 00055 public: 00056 virtual ~bins1D(){} 00057 public: 00058 virtual void bins_Sw_range(float&,float&) const = 0; 00059 public: 00060 // axis : 00061 virtual unsigned int bins() const = 0; 00062 virtual float axis_min() const = 0; 00063 virtual float axis_max() const = 0; 00064 // bins on axis : 00065 virtual float bin_lower_edge(int) const = 0; 00066 virtual float bin_upper_edge(int) const = 0; 00067 virtual unsigned int bin_entries(int) const = 0; 00068 // bins : 00069 virtual float bin_Sw(int) const = 0; 00070 virtual float bin_error(int) const = 0; 00071 public: 00072 virtual bool is_profile() const = 0; 00073 }; 00074 00075 class bins2D : public virtual plottable { 00076 public: 00077 static const std::string& s_class() { 00078 static const std::string s_v("inlib::sg::bins2D"); 00079 return s_v; 00080 } 00081 public: 00082 virtual void* cast(const std::string& a_class) const { 00083 if(void* p = inlib::cmp_cast<bins2D>(this,a_class)) {return p;} 00084 return plottable::cast(a_class); 00085 } 00086 public: 00087 virtual ~bins2D(){} 00088 public: 00089 virtual void bins_Sw_range(float&,float&) const = 0; 00090 public: 00091 // x axis : 00092 virtual unsigned int x_bins() const = 0; 00093 virtual float x_axis_min() const = 0; 00094 virtual float x_axis_max() const = 0; 00095 // y axis : 00096 virtual unsigned int y_bins() const = 0; 00097 virtual float y_axis_min() const = 0; 00098 virtual float y_axis_max() const = 0; 00099 // bins on x axis : 00100 virtual float bin_lower_edge_x(int) const = 0; 00101 virtual float bin_upper_edge_x(int) const = 0; 00102 // bins on y axis : 00103 virtual float bin_lower_edge_y(int) const = 0; 00104 virtual float bin_upper_edge_y(int) const = 0; 00105 // bins : 00106 virtual unsigned int bin_entries(int,int) const = 0; 00107 virtual float bin_Sw(int,int) const = 0; 00108 virtual float bin_error(int,int) const = 0; 00109 }; 00110 00111 class func1D : public virtual plottable { 00112 public: 00113 static const std::string& s_class() { 00114 static const std::string s_v("inlib::sg::func1D"); 00115 return s_v; 00116 } 00117 public: 00118 virtual void* cast(const std::string& a_class) const { 00119 if(void* p = inlib::cmp_cast<func1D>(this,a_class)) {return p;} 00120 return plottable::cast(a_class); 00121 } 00122 public: 00123 virtual ~func1D(){} 00124 public: 00125 virtual bool value(float,float&) const = 0; 00126 virtual unsigned int x_steps() const = 0; 00127 virtual float x_min() const = 0; 00128 virtual float x_max() const = 0; 00129 }; 00130 00131 class func2D : public virtual plottable { 00132 public: 00133 static const std::string& s_class() { 00134 static const std::string s_v("inlib::sg::func2D"); 00135 return s_v; 00136 } 00137 public: 00138 virtual void* cast(const std::string& a_class) const { 00139 if(void* p = inlib::cmp_cast<func2D>(this,a_class)) {return p;} 00140 return plottable::cast(a_class); 00141 } 00142 public: 00143 virtual ~func2D(){} 00144 public: 00145 virtual bool value(float,float,float&) const = 0; 00146 virtual unsigned int x_steps() const = 0; 00147 virtual float x_min() const = 0; 00148 virtual float x_max() const = 0; 00149 virtual unsigned int y_steps() const = 0; 00150 virtual float y_min() const = 0; 00151 virtual float y_max() const = 0; 00152 //For "inside" functions : 00153 virtual unsigned int number_of_points() const = 0; 00154 virtual bool ith_point(int,float&,float&,bool&) const = 0; 00155 virtual bool set_ith_point(int,float,float) = 0; 00156 virtual bool dragger_update_points() const = 0; 00157 }; 00158 00159 class points2D : public virtual plottable { 00160 public: 00161 static const std::string& s_class() { 00162 static const std::string s_v("inlib::sg::points2D"); 00163 return s_v; 00164 } 00165 public: 00166 virtual void* cast(const std::string& a_class) const { 00167 if(void* p = inlib::cmp_cast<points2D>(this,a_class)) {return p;} 00168 return plottable::cast(a_class); 00169 } 00170 public: 00171 virtual ~points2D(){} 00172 public: 00173 virtual float x_axis_min() const = 0; 00174 virtual float x_axis_max() const = 0; 00175 virtual float y_axis_min() const = 0; 00176 virtual float y_axis_max() const = 0; 00177 00178 virtual unsigned int points() const = 0; 00179 virtual bool ith_point(unsigned int,float&,float&) const = 0; 00180 }; 00181 00182 class points3D : public virtual plottable { 00183 public: 00184 static const std::string& s_class() { 00185 static const std::string s_v("inlib::sg::points3D"); 00186 return s_v; 00187 } 00188 public: 00189 virtual void* cast(const std::string& a_class) const { 00190 if(void* p = inlib::cmp_cast<points3D>(this,a_class)) {return p;} 00191 return plottable::cast(a_class); 00192 } 00193 public: 00194 virtual ~points3D(){} 00195 public: 00196 virtual float x_axis_min() const = 0; 00197 virtual float x_axis_max() const = 0; 00198 virtual float y_axis_min() const = 0; 00199 virtual float y_axis_max() const = 0; 00200 virtual float z_axis_min() const = 0; 00201 virtual float z_axis_max() const = 0; 00202 00203 virtual unsigned int points() const = 0; 00204 virtual bool ith_point(unsigned int,float&,float&,float&) const = 0; 00205 }; 00206 00207 //class primitive { 00208 //public: 00209 // virtual ~primitive(){} 00210 //public: 00211 // virtual void* cast(const char*) const = 0; 00212 //}; 00213 00214 }} 00215 00216 #endif