IBSimu 1.0.4

color.hpp

Go to the documentation of this file.
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 COLOR_HPP
00044 #define COLOR_HPP 1
00045 
00046 
00047 #include <iostream>
00048 #include "error.hpp"
00049 
00050 
00053 class Color {
00054 
00055     double _comp[4]; 
00057 public:
00058 
00061     Color() {
00062         _comp[0] = 0.0;
00063         _comp[1] = 0.0;
00064         _comp[2] = 0.0;
00065         _comp[3] = 1.0;
00066     }
00067 
00068     Color( double r, double g, double b ) {
00069         _comp[0] = r;
00070         _comp[1] = g;
00071         _comp[2] = b;
00072         _comp[3] = 1.0;
00073     }
00074     
00075     Color( double r, double g, double b, double a ) {
00076         _comp[0] = r;
00077         _comp[1] = g;
00078         _comp[2] = b;
00079         _comp[3] = a;
00080     }
00081     
00082     const double &operator[]( int i ) const {
00083         return( _comp[i] );
00084     }
00085 
00086     double &operator[]( int i ) {
00087         return( _comp[i] );
00088     }
00089 
00090     Color operator-( const Color &c ) const {
00091         return( Color( _comp[0]-c[0],
00092                        _comp[1]-c[1],
00093                        _comp[2]-c[2],
00094                        _comp[3]-c[3] ) );
00095     }
00096 
00097     Color operator+( const Color &c ) const {
00098         return( Color( _comp[0]+c[0],
00099                        _comp[1]+c[1],
00100                        _comp[2]+c[2],
00101                        _comp[3]+c[3] ) );
00102     }
00103     
00104     Color operator*( double x ) const {
00105         return( Color( x*_comp[0],
00106                        x*_comp[1],
00107                        x*_comp[2],
00108                        x*_comp[3] ) );
00109     }
00110 
00111     friend Color operator*( double x, const Color &c );
00112     friend std::ostream &operator<<( std::ostream &os, const Color &c );
00113 };
00114 
00115 
00116 inline Color operator*( double x, const Color &c )
00117 {
00118     return( Color( x*c[0], x*c[1], x*c[2], x*c[3] ) );
00119 }
00120 
00121 
00122 inline std::ostream &operator<<( std::ostream &os, const Color &c ) 
00123 {
00124     os << to_string(c[0]) << " "
00125        << to_string(c[1]) << " "
00126        << to_string(c[2]) << " "
00127        << to_string(c[3]);
00128     return( os );
00129 }
00130 
00131 
00132 #endif
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 
00142 
00143 
00144 
00145 
00146 
00147 
00148 
00149 
00150 
00151 
00152