casa
$Rev:20696$
|
00001 //# ColormapDefinition.h: wrapper for colormap function or look-up table 00002 //# Copyright (C) 1998,1999,2000,2001 00003 //# Associated Universities, Inc. Washington DC, USA. 00004 //# 00005 //# This library is free software; you can redistribute it and/or modify it 00006 //# under the terms of the GNU Library General Public License as published by 00007 //# the Free Software Foundation; either version 2 of the License, or (at your 00008 //# option) any later version. 00009 //# 00010 //# This library is distributed in the hope that it will be useful, but WITHOUT 00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00012 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00013 //# License for more details. 00014 //# 00015 //# You should have received a copy of the GNU Library General Public License 00016 //# along with this library; if not, write to the Free Software Foundation, 00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 00018 //# 00019 //# Correspondence concerning AIPS++ should be addressed as follows: 00020 //# Internet email: aips2-request@nrao.edu. 00021 //# Postal address: AIPS++ Project Office 00022 //# National Radio Astronomy Observatory 00023 //# 520 Edgemont Road 00024 //# Charlottesville, VA 22903-2475 USA 00025 //# 00026 //# $Id$ 00027 00028 #ifndef TRIALDISPLAY_COLORMAPDEFINITION_H 00029 #define TRIALDISPLAY_COLORMAPDEFINITION_H 00030 00031 #include <map> 00032 #include <casa/aips.h> 00033 #include <casa/Arrays/Vector.h> 00034 #include <casa/IO/AipsIO.h> 00035 #include <tables/Tables/Table.h> 00036 00037 namespace casa { //# NAMESPACE CASA - BEGIN 00038 00039 // <summary> 00040 // This class defines a wrapper for a color function or look-up table. 00041 // </summary> 00042 00043 // <use visibility=local> 00044 00045 // <reviewed reviewer="" date="yyyy/mm/dd" test="" demos=""> 00046 // </reviewed> 00047 00048 // <etymology> 00049 // "ColormapDefinition" is the thing one uses to define a colormap. 00050 // </etymology> 00051 00052 // <synopsis> 00053 // ColormapDefinition is a class whose principal purpose is, given an 00054 // input value in the range <src>[0.0, 1.0]</src>, to return an RGB 00055 // triplet corresponding to that position in the colormap. It can 00056 // read definitions from and write definitions to <linkto 00057 // class="Table"> Tables </linkto> on disk, thereby providing a 00058 // mechanism for using custom colormaps for display applications. 00059 // 00060 00061 // It supplies one built-in colormap <src>Greyscale 1</src>, which will 00062 // always be available. The other colormaps are stored in AIPS++ 00063 // tables. The standard colormaps ar in 00064 // <src>/aips++/data/colormaps/default.tbl</src>. These can be 00065 // deactivated by putting <src>display.colormaps.usedefault: no</src> in 00066 // the <src>.aipsrc</src> file. 00067 // It also supplies user defined colormaps. It looks for the complete 00068 // path to the user table in <src>.aipsrc</src> under 00069 // <src>display.colormaps.usertable:</src>. 00070 // 00071 // ColormapDefinition is used by the <linkto 00072 // class="Colormap">Colormap</linkto> class to generate color values 00073 // for the <linkto class="ColormapManager"> ColormapManager</linkto>. 00074 // </synopsis> 00075 00076 // <example> 00077 // A ColormapDefinition corresponding to the system "rainbow" Colormap 00078 // can be obtained and used as follows: 00079 // <srcblock> 00080 // ColormapDefinition rainbowDefinition(String("rainbow")); 00081 // Float red, green, blue; 00082 // for (uInt i = 0; i <= 100; i++) { 00083 // rainbowDefinition.getValues((Float)i/100.0, red, green, blue); 00084 // // ... do something with red, green, blue ... 00085 // } 00086 // </srcblock> 00087 // Or a new ColormapDefinition with a red ramp and green and blue fixed 00088 // at 0.5 could be constructed and saved for later use as follows: 00089 // <srcblock> 00090 // Vector<Float> reds(40), greens(40), blues(40); 00091 // greens = 0.5; 00092 // blues = 0.5; 00093 // for (uInt i = 0; i < 40; i++) { 00094 // reds(i) = (Float)i / 39.0; 00095 // } 00096 // ColormapDefinition simpleRamp("redRamp", reds, greens, blues); 00097 // Vector<String> synonyms(2); 00098 // synonyms(0) = "RedRamp";synonyms(1) = "redramp"; 00099 // simpleRamp.save("mytable.tbl,synonyms); 00100 // </srcblock> 00101 // </example> 00102 00103 // <motivation> 00104 // Needed to separate out ColormapDefinition from Colormap to give the 00105 // programmer a way to over-ride the definition without having to also 00106 // over-ride the shape function. 00107 // </motivation> 00108 00109 // <thrown> 00110 // <li> AipsError: unrecognized map name 00111 // <li> AipsError: incompatible colormap definition version 00112 // </thrown> 00113 00114 // <todo asof="1998/12/14"> 00115 // <li> add checks for red/green/blue componenets to have same number 00116 // of elements 00117 // </todo> 00118 00119 class RegEx; 00120 class String; 00121 00122 class ColormapDefinition { 00123 00124 public: 00125 00126 // Construct a single color (white) Colormap 00127 ColormapDefinition(); 00128 00129 // Construct the known Colormap <src>mapName</src>, first looking for 00130 // a saved Colormap having this name, then resorting to a built-in 00131 // Colormap, and if that doesn't exist, throw an error 00132 explicit ColormapDefinition(const String & mapName); 00133 00134 // Construct a new Colormap, using the supplied name and component 00135 // vectors 00136 ColormapDefinition(const String & mapName, 00137 const Vector<Float> & reds, 00138 const Vector<Float> & greens, 00139 const Vector<Float> & blues); 00140 00141 // Obtain the Colormap value for the "index" value <src>0 <= t <= 1</src> 00142 void getValue(const Float t, Float & red, Float & green, Float & blue) const; 00143 00144 // Change the Colormap values with the provided component vectors 00145 void setValues(const Vector<Float> & reds, 00146 const Vector<Float> & greens, 00147 const Vector<Float> & blues); 00148 00149 // Write this ColormapDefinition to the named Table in the named 00150 // directory (default values are obtained from the user's 00151 // <src>.aipsrc</src> file. If <src>overwrite</src> is 00152 // <src>True</src>, then an existing map of the same name in the 00153 // Table will be over-written. If the named Table does not exist, 00154 // it will be created. 00155 00156 // The table format has to conform with following scheme. 00157 // It must have five columns: 00158 // <src>CMAP_NAME</src> a String 00159 // <src>RED</src> a Float array of dim n 00160 // <src>GREEN</src> a Float array of dim n 00161 // <src>BLUE</src> a Float array of dim n 00162 // <src>SYNONYMS</src> a String array of dim m 00163 Bool save(const String &fullPathName, 00164 const Vector<String> &synonyms, 00165 const Bool &overwrite = True) const; 00166 00167 // Return the names of the built-in colormaps. If <src>uniqueonly</src> 00168 // is True (default), only the names of the unique colormaps 00169 // are returned, otherwise all colormap names are returned. 00170 typedef std::map<String,bool> colormapnamemap; 00171 static colormapnamemap builtinColormapNames(Bool uniqueonly = True); 00172 00173 // Load Colormap definitions for a specified colormap<src>name</src> 00174 Bool loadColormap(const String& name); 00175 Bool loadBuiltinColormap(const String& name); 00176 00177 // Write a ColormapDefinition to an ostream in a simple text form. 00178 friend ostream & operator << (ostream & os, 00179 const ColormapDefinition& pcreh); 00180 00181 private: 00182 00183 // The name of this ColormapDefinition 00184 String itsName; 00185 00186 // Utility function to look if a colormap name is in a Table 00187 Bool queryColormapTable(const Table& table, const String& name); 00188 00189 // load ColormapDefinitions from default location 00190 // aips++/data/colormaps/default.tbl 00191 // and/or location specified in <src>display.colormaps.usertable</src> 00192 static void loadColormapTable(); 00193 00194 //The loaded colormaps (a replacement for the builtins) 00195 //<group> 00196 static String ourDefaultColormap; 00197 static Table ourDefaultColormapTable; 00198 static Table ourUserColormapTable; 00199 static String ourTableVersion; 00200 //</group> 00201 00202 // The Color component vectors for this ColormapDefinition 00203 Vector<Float> itsReds; 00204 Vector<Float> itsGreens; 00205 Vector<Float> itsBlues; 00206 00207 }; 00208 00209 00210 } //# NAMESPACE CASA - END 00211 00212 #endif