Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

178 lines
6.3 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkScalarsToColors.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkScalarsToColors - map scalar values into colors
// .SECTION Description
// vtkScalarsToColors is a general purpose superclass for objects that
// convert scalars to colors. This include vtkLookupTable classes and
// color transfer functions.
//
// The scalars to color mapping can be augmented with an additional
// uniform alpha blend. This is used, for example, to blend a vtkActor's
// opacity with the lookup table values.
//
// .SECTION See Also
// vtkLookupTable vtkColorTransferFunction
#ifndef __vtkScalarsToColors_h
#define __vtkScalarsToColors_h
#include "vtkObject.h"
class vtkDataArray;
class vtkUnsignedCharArray;
class VTK_COMMON_EXPORT vtkScalarsToColors : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkScalarsToColors,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Perform any processing required (if any) before processing
// scalars.
virtual void Build() {};
// Description:
// Sets/Gets the range of scalars which will be mapped.
virtual double *GetRange() = 0;
virtual void SetRange(double min, double max) = 0;
void SetRange(double rng[2])
{this->SetRange(rng[0],rng[1]);}
// Description:
// Map one value through the lookup table and return a color defined
// as a RGBA unsigned char tuple (4 bytes).
virtual unsigned char *MapValue(double v) = 0;
// Description:
// Map one value through the lookup table and return the color as
// an RGB array of doubles between 0 and 1.
virtual void GetColor(double v, double rgb[3]) = 0;
// Description:
// Map one value through the lookup table and return the color as
// an RGB array of doubles between 0 and 1.
double *GetColor(double v)
{this->GetColor(v,this->RGB); return this->RGB;}
// Description:
// Map one value through the lookup table and return the alpha value
// (the opacity) as a double between 0 and 1.
virtual double GetOpacity(double vtkNotUsed(v))
{return 1.0;}
// Description:
// Map one value through the lookup table and return the luminance
// 0.3*red + 0.59*green + 0.11*blue as a double between 0 and 1.
// Returns the luminance value for the specified scalar value.
double GetLuminance(double x)
{double rgb[3]; this->GetColor(x,rgb);
return static_cast<double>(rgb[0]*0.30 + rgb[1]*0.59 + rgb[2]*0.11);}
// Description:
// Specify an additional opacity (alpha) value to blend with. Values
// != 1 modify the resulting color consistent with the requested
// form of the output. This is typically used by an actor in order to
// blend its opacity.
void SetAlpha(double alpha);
vtkGetMacro(Alpha,double);
// Description:
// An internal method maps a data array into a 4-component, unsigned char
// RGBA array. The color mode determines the behavior of mapping. If
// VTK_COLOR_MODE_DEFAULT is set, then unsigned char data arrays are
// treated as colors (and converted to RGBA if necessary); otherwise,
// the data is mapped through this instance of ScalarsToColors. The offset
// is used for data arrays with more than one component; it indicates
// which component to use to do the blending.
// When the component argument is -1, then the this object uses its
// own selected technique to change a vector into a scalar to map.
vtkUnsignedCharArray *MapScalars(vtkDataArray *scalars, int colorMode,
int component);
// Description:
// Change mode that maps vectors by magnitude vs. component.
vtkSetMacro(VectorMode, int);
vtkGetMacro(VectorMode, int);
void SetVectorModeToMagnitude();
void SetVectorModeToComponent();
//BTX
enum VectorModes {
MAGNITUDE=0,
COMPONENT=1
};
//ETX
// Description:
// If the mapper does not select which component of a vector
// to map to colors, you can specify it here.
vtkSetMacro(VectorComponent, int);
vtkGetMacro(VectorComponent, int);
// Description:
// Map a set of scalars through the lookup table in a single operation.
// The output format can be set to VTK_RGBA (4 components),
// VTK_RGB (3 components), VTK_LUMINANCE (1 component, greyscale),
// or VTK_LUMINANCE_ALPHA (2 components)
// If not supplied, the output format defaults to RGBA.
void MapScalarsThroughTable(vtkDataArray *scalars,
unsigned char *output,
int outputFormat);
void MapScalarsThroughTable(vtkDataArray *scalars,
unsigned char *output)
{this->MapScalarsThroughTable(scalars,output,VTK_RGBA);}
// Description:
// An internal method typically not used in applications.
virtual void MapScalarsThroughTable2(void *input, unsigned char *output,
int inputDataType, int numberOfValues,
int inputIncrement,
int outputFormat) = 0;
// Description:
// An internal method used to convert a color array to RGBA. The
// method instantiates a vtkUnsignedCharArray and returns it. The user is
// responsible for managing the memory.
virtual vtkUnsignedCharArray *ConvertUnsignedCharToRGBA(
vtkUnsignedCharArray *colors, int numComp, int numTuples);
protected:
vtkScalarsToColors();
~vtkScalarsToColors() {}
double Alpha;
// How to map arrays with multiple components.
int VectorMode;
// Internal flag used to togle between vector and component mode.
// We need this flag because the mapper can override our mode, and
// I do not want to change the interface to the map scalars methods.
int UseMagnitude;
int VectorComponent;
private:
double RGB[3];
vtkScalarsToColors(const vtkScalarsToColors&); // Not implemented.
void operator=(const vtkScalarsToColors&); // Not implemented.
};
#endif