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 

Generated on 18 Apr 2011 for IBSimu by  doxygen 1.6.1