VTK
dox/Common/vtkLookupTable.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkLookupTable.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00037 #ifndef __vtkLookupTable_h
00038 #define __vtkLookupTable_h
00039 
00040 #include "vtkScalarsToColors.h"
00041 
00042 #include "vtkUnsignedCharArray.h" // Needed for inline method
00043 
00044 #define VTK_RAMP_LINEAR 0
00045 #define VTK_RAMP_SCURVE 1
00046 #define VTK_RAMP_SQRT 2
00047 #define VTK_SCALE_LINEAR 0
00048 #define VTK_SCALE_LOG10 1
00049 
00050 class VTK_COMMON_EXPORT vtkLookupTable : public vtkScalarsToColors
00051 {
00052 public:
00055   static vtkLookupTable *New();
00056   
00057   vtkTypeMacro(vtkLookupTable,vtkScalarsToColors);
00058   void PrintSelf(ostream& os, vtkIndent indent);
00059   
00062   virtual int IsOpaque();
00063   
00065   int Allocate(int sz=256, int ext=256);
00066   
00069   virtual void Build();
00070 
00076   virtual void ForceBuild();
00077 
00079 
00086   vtkSetMacro(Ramp,int);
00087   void SetRampToLinear() { this->SetRamp(VTK_RAMP_LINEAR); };
00088   void SetRampToSCurve() { this->SetRamp(VTK_RAMP_SCURVE); };
00089   void SetRampToSQRT() { this->SetRamp(VTK_RAMP_SQRT); };
00090   vtkGetMacro(Ramp,int);
00092 
00094 
00097   void SetScale(int scale);
00098   void SetScaleToLinear() { this->SetScale(VTK_SCALE_LINEAR); };
00099   void SetScaleToLog10() { this->SetScale(VTK_SCALE_LOG10); };
00100   vtkGetMacro(Scale,int);
00102 
00104 
00108   void SetTableRange(double r[2]); 
00109   virtual void SetTableRange(double min, double max);
00110   vtkGetVectorMacro(TableRange,double,2);
00112 
00114 
00116   vtkSetVector2Macro(HueRange,double);
00117   vtkGetVector2Macro(HueRange,double);
00119 
00121 
00123   vtkSetVector2Macro(SaturationRange,double);
00124   vtkGetVector2Macro(SaturationRange,double);
00126 
00128 
00130   vtkSetVector2Macro(ValueRange,double);
00131   vtkGetVector2Macro(ValueRange,double);
00133 
00135 
00137   vtkSetVector2Macro(AlphaRange,double);
00138   vtkGetVector2Macro(AlphaRange,double);
00140 
00142 
00144   vtkSetVector4Macro(NanColor, double);
00145   vtkGetVector4Macro(NanColor, double);
00147 
00149   unsigned char *MapValue(double v);
00150 
00153   void GetColor(double x, double rgb[3]);
00154 
00157   double GetOpacity(double v);
00158 
00160   virtual vtkIdType GetIndex(double v);
00161 
00163 
00164   void SetNumberOfTableValues(vtkIdType number);
00165   vtkIdType GetNumberOfTableValues() { return this->NumberOfColors; };
00167 
00172   void SetTableValue(vtkIdType indx, double rgba[4]);
00173 
00176   void SetTableValue(vtkIdType indx, double r, double g, double b, double a=1.0);
00177 
00180   double *GetTableValue(vtkIdType id);
00181 
00184   void GetTableValue(vtkIdType id, double rgba[4]);
00185 
00187 
00189   unsigned char *GetPointer(const vtkIdType id) {
00190     return this->Table->GetPointer(4*id); };
00192 
00197   unsigned char *WritePointer(const vtkIdType id, const int number);
00198 
00200 
00202   double *GetRange() { return this->GetTableRange(); };
00203   void SetRange(double min, double max) { this->SetTableRange(min, max); };
00204   void SetRange(double rng[2]) { this->SetRange(rng[0], rng[1]); };
00206 
00207   //BTX
00212   static void GetLogRange(const double range[2], double log_range[2]);
00213 
00215 
00216   static double ApplyLogScale(double v, const double range[2],
00217     const double log_range[2]);
00218   //ETX
00220 
00222 
00226   vtkSetClampMacro(NumberOfColors,vtkIdType,2,VTK_LARGE_ID);
00227   vtkGetMacro(NumberOfColors,vtkIdType);
00229 
00231 
00234   void SetTable(vtkUnsignedCharArray *);
00235   vtkGetObjectMacro(Table,vtkUnsignedCharArray);
00237 
00239 
00240   void MapScalarsThroughTable2(void *input, unsigned char *output,
00241                                int inputDataType, int numberOfValues,
00242                                int inputIncrement, int outputIncrement);
00244 
00246   void DeepCopy(vtkScalarsToColors *lut);
00247 
00249 
00251   virtual int UsingLogScale()
00252     {
00253     return (this->GetScale() == VTK_SCALE_LOG10)? 1 : 0;
00254     }
00256 
00258   virtual vtkIdType GetNumberOfAvailableColors();
00259 
00260 protected:
00261   vtkLookupTable(int sze=256, int ext=256);
00262   ~vtkLookupTable();
00263 
00264   vtkIdType NumberOfColors;
00265   vtkUnsignedCharArray *Table;
00266   double TableRange[2];
00267   double HueRange[2];
00268   double SaturationRange[2];
00269   double ValueRange[2];
00270   double AlphaRange[2];
00271   double NanColor[4];
00272   int Scale;
00273   int Ramp;
00274   vtkTimeStamp InsertTime;
00275   vtkTimeStamp BuildTime;
00276   double RGBA[4]; //used during conversion process
00277 
00278   int OpaqueFlag;
00279   vtkTimeStamp OpaqueFlagBuildTime;
00280   
00281 private:
00282   vtkLookupTable(const vtkLookupTable&);  // Not implemented.
00283   void operator=(const vtkLookupTable&);  // Not implemented.
00284 };
00285 
00286 //----------------------------------------------------------------------------
00287 inline unsigned char *vtkLookupTable::WritePointer(const vtkIdType id, 
00288                                                    const int number)
00289 {
00290   this->InsertTime.Modified();
00291   return this->Table->WritePointer(4*id,4*number);
00292 }
00293 
00294 #endif
00295 
00296 
00297