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 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