IBSimu 1.0.4
|
00001 00005 /* Copyright (c) 2005-2010 Taneli Kalvas. All rights reserved. 00006 * 00007 * You can redistribute this software and/or modify it under the terms 00008 * of the GNU General Public License as published by the Free Software 00009 * Foundation; either version 2 of the License, or (at your option) 00010 * any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, but 00013 * WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this library (file "COPYING" included in the package); 00019 * if not, write to the Free Software Foundation, Inc., 51 Franklin 00020 * Street, Fifth Floor, Boston, MA 02110-1301 USA 00021 * 00022 * If you have questions about your rights to use or distribute this 00023 * software, please contact Berkeley Lab's Technology Transfer 00024 * Department at TTD@lbl.gov. Other questions, comments and bug 00025 * reports should be sent directly to the author via email at 00026 * taneli.kalvas@jyu.fi. 00027 * 00028 * NOTICE. This software was developed under partial funding from the 00029 * U.S. Department of Energy. As such, the U.S. Government has been 00030 * granted for itself and others acting on its behalf a paid-up, 00031 * nonexclusive, irrevocable, worldwide license in the Software to 00032 * reproduce, prepare derivative works, and perform publicly and 00033 * display publicly. Beginning five (5) years after the date 00034 * permission to assert copyright is obtained from the U.S. Department 00035 * of Energy, and subject to any subsequent five (5) year renewals, 00036 * the U.S. Government is granted for itself and others acting on its 00037 * behalf a paid-up, nonexclusive, irrevocable, worldwide license in 00038 * the Software to reproduce, prepare derivative works, distribute 00039 * copies to the public, perform publicly and display publicly, and to 00040 * permit others to do so. 00041 */ 00042 00043 #ifndef EQPOTGRAPH_HPP 00044 #define EQPOTGRAPH_HPP 1 00045 00046 00047 #include <vector> 00048 #include "geometry.hpp" 00049 #include "scalarfield.hpp" 00050 #include "graph3d.hpp" 00051 #include "color.hpp" 00052 00053 00058 class EqPotGraph : public Graph3D { 00059 00060 struct Line { 00061 double x[4]; /* Coordinates of line segment (x1,y1,x2,y2) */ 00062 00063 Line( double _x1, double _y1, double _x2, double _y2 ) { 00064 x[0] = _x1; 00065 x[1] = _y1; 00066 x[2] = _x2; 00067 x[3] = _y2; 00068 } 00069 00070 double &operator[]( int i ) { return( x[i] ); } 00071 const double &operator[]( int i ) const { return( x[i] ); } 00072 }; 00073 00074 struct EqPotLines { 00075 double pot; /* Potential value for equipotential line. */ 00076 std::vector<Line> x; /* Line segment coordinates. */ 00077 00078 EqPotLines( double pot ) : pot(pot) {} 00079 }; 00080 00081 Color _color; 00082 const ScalarField _epot; 00083 const Geometry &_g; 00084 bool _data_built; 00085 00086 std::vector<double> _eqlines_manual; 00087 size_t _eqlines_auto; 00088 std::vector<EqPotLines *> _lines; 00089 00090 view_e _oview; 00091 double _olevel; 00092 00093 bool _cache; 00094 00095 00096 bool eqline_exists( double pot1, signed char sol1, 00097 double pot2, signed char sol2, 00098 double pot ) const; 00099 void build_data( void ); 00100 00101 public: 00102 00108 EqPotGraph( const ScalarField &epot, const Geometry &g ); 00109 00112 virtual ~EqPotGraph(); 00113 00118 void disable_cache( void ); 00119 00123 void set_eqlines_manual( const std::vector<double> &pot ); 00124 00128 void set_eqlines_auto( size_t N ); 00129 00136 virtual void plot( cairo_t *cairo, const Coordmapper *cm, const double range[4] ); 00137 00143 virtual void get_bbox( double bbox[4] ); 00144 }; 00145 00146 00147 #endif 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160 00161 00162 00163 00164 00165