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.
 
 
 
 
 
 

346 lines
14 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkVolumeProperty.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 vtkVolumeProperty - represents the common properties for rendering a volume.
//
// .SECTION Description
// vtkVolumeProperty is used to represent common properties associated
// with volume rendering. This includes properties for determining the type
// of interpolation to use when sampling a volume, the color of a volume,
// the scalar opacity of a volume, the gradient opacity of a volume, and the
// shading parameters of a volume.
//
// When the scalar opacity or the gradient opacity of a volume is not set,
// then the function is defined to be a constant value of 1.0. When a
// scalar and gradient opacity are both set simultaneously, then the opacity
// is defined to be the product of the scalar opacity and gradient opacity
// transfer functions.
//
// Most properties can be set per "component" for volume mappers that
// support multiple independent components. If you are using 2 component
// data as LV or 4 component data as RGBV (as specified in the mapper)
// only the first scalar opacity and gradient opacity transfer functions
// will be used (and all color functions will be ignored). Omitting the
// index parameter on the Set/Get methods will access index = 0.
// .SECTION see also
// vtkPiecewiseFunction vtkColorTransferFunction
#ifndef __vtkVolumeProperty_h
#define __vtkVolumeProperty_h
#include "vtkObject.h"
class vtkPiecewiseFunction;
class vtkTimeStamp;
class vtkColorTransferFunction;
class VTK_RENDERING_EXPORT vtkVolumeProperty : public vtkObject
{
public:
static vtkVolumeProperty *New();
vtkTypeRevisionMacro(vtkVolumeProperty,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Get the modified time for this object (or the properties registered
// with this object).
unsigned long GetMTime();
// Description:
// Does the data have independent components, or do some define color
// only? If IndependentComponents is On (the default) then each component
// will be independently passed through a lookup table to determine RGBA,
// shaded. Some volume Mappers can handle 1 to 4 component
// unsigned char or unsigned short data (see each mapper header file to
// determine functionality). If IndependentComponents is Off, then you
// must have either 2 or 4 component data. For 2 component data, the
// first is passed through the first color transfer function and the
// second component is passed through the first opacity transfer function.
// Normals will be generated off of the second component. For 4 component
// data, the first three will directly represent RGB (no lookup table).
// The fourth component will be passed through the first scalar opacity
// transfer function for opacity. Normals will be generated from the fourth
// component.
vtkSetClampMacro( IndependentComponents, int, 0, 1 );
vtkGetMacro( IndependentComponents, int );
vtkBooleanMacro( IndependentComponents, int );
// Description:
// Set/Get the scalar component weights
virtual void SetComponentWeight(int index, double value);
virtual double GetComponentWeight(int index);
// Description:
// Set the interpolation type for sampling a volume.
vtkSetClampMacro( InterpolationType, int,
VTK_NEAREST_INTERPOLATION, VTK_LINEAR_INTERPOLATION);
vtkGetMacro(InterpolationType,int);
void SetInterpolationTypeToNearest()
{this->SetInterpolationType(VTK_NEAREST_INTERPOLATION);};
void SetInterpolationTypeToLinear()
{this->SetInterpolationType(VTK_LINEAR_INTERPOLATION);};
const char *GetInterpolationTypeAsString(void);
// Description:
// Set the color of a volume to a gray level transfer function
// for the component indicated by index. This will set the
// color channels for this component to 1.
void SetColor( int index, vtkPiecewiseFunction *function );
void SetColor( vtkPiecewiseFunction *f ){this->SetColor(0,f);};
// Description:
// Set the color of a volume to an RGB transfer function
// for the component indicated by index. This will set the
// color channels for this component to 3.
// This will also recompute the color channels
void SetColor( int index, vtkColorTransferFunction *function );
void SetColor( vtkColorTransferFunction *f ){this->SetColor(0,f);};
// Description:
// Get the number of color channels in the transfer function
// for the given component.
int GetColorChannels( int index );
int GetColorChannels(){return this->GetColorChannels(0);};
// Description:
// Get the gray transfer function.
// If no transfer function has been set for this component, a default one
// is created and returned.
vtkPiecewiseFunction *GetGrayTransferFunction( int index );
vtkPiecewiseFunction *GetGrayTransferFunction()
{return this->GetGrayTransferFunction(0);};
// Description:
// Get the RGB transfer function for the given component.
// If no transfer function has been set for this component, a default one
// is created and returned.
vtkColorTransferFunction *GetRGBTransferFunction( int index );
vtkColorTransferFunction *GetRGBTransferFunction()
{return this->GetRGBTransferFunction(0);};
// Description:
// Set the opacity of a volume to an opacity transfer function based
// on scalar value for the component indicated by index.
void SetScalarOpacity( int index, vtkPiecewiseFunction *function );
void SetScalarOpacity( vtkPiecewiseFunction *f )
{this->SetScalarOpacity(0,f);};
// Description:
// Get the scalar opacity transfer function for the given component.
// If no transfer function has been set for this component, a default one
// is created and returned.
vtkPiecewiseFunction *GetScalarOpacity( int index );
vtkPiecewiseFunction *GetScalarOpacity()
{return this->GetScalarOpacity(0);};
// Description:
// Set/Get the unit distance on which the scalar opacity transfer function
// is defined. By default this is 1.0, meaning that over a distance of
// 1.0 units, a given opacity (from the transfer function) is accumulated.
// This is adjusted for the actual sampling distance during rendering.
void SetScalarOpacityUnitDistance( int index, double distance );
void SetScalarOpacityUnitDistance( double distance )
{this->SetScalarOpacityUnitDistance( 0, distance );}
double GetScalarOpacityUnitDistance( int index );
double GetScalarOpacityUnitDistance()
{return this->GetScalarOpacityUnitDistance(0);}
// Description:
// Set the opacity of a volume to an opacity transfer function based
// on gradient magnitude for the given component.
void SetGradientOpacity( int index, vtkPiecewiseFunction *function );
void SetGradientOpacity( vtkPiecewiseFunction *function )
{this->SetGradientOpacity(0,function);}
// Description:
// Get the gradient magnitude opacity transfer function for
// the given component.
// If no transfer function has been set for this component, a default one
// is created and returned.
// This default function is always returned if DisableGradientOpacity is On
// for that component.
vtkPiecewiseFunction *GetGradientOpacity( int index );
vtkPiecewiseFunction *GetGradientOpacity()
{return this->GetGradientOpacity( 0 );}
// Description:
// Enable/Disable the gradient opacity function for the given component.
// If set to true, any call to GetGradientOpacity() will return a default
// function for this component. Note that the gradient opacity function is
// still stored, it is not set or reset and can be retrieved using
// GetStoredGradientOpacity().
virtual void SetDisableGradientOpacity( int index, int value );
virtual void SetDisableGradientOpacity( int value )
{ this->SetDisableGradientOpacity(0, value); }
virtual void DisableGradientOpacityOn( int index )
{ this->SetDisableGradientOpacity(index, 1); }
virtual void DisableGradientOpacityOn()
{ this->DisableGradientOpacityOn(0); }
virtual void DisableGradientOpacityOff( int index )
{ this->SetDisableGradientOpacity(index, 0); }
virtual void DisableGradientOpacityOff()
{ this->DisableGradientOpacityOff(0); }
virtual int GetDisableGradientOpacity( int index );
virtual int GetDisableGradientOpacity()
{ return this->GetDisableGradientOpacity(0); }
vtkPiecewiseFunction *GetStoredGradientOpacity( int index );
vtkPiecewiseFunction *GetStoredGradientOpacity()
{return this->GetStoredGradientOpacity( 0 );}
// Description:
// Set/Get the shading of a volume. If shading is turned off, then
// the mapper for the volume will not perform shading calculations.
// If shading is turned on, the mapper may perform shading
// calculations - in some cases shading does not apply (for example,
// in a maximum intensity projection) and therefore shading will
// not be performed even if this flag is on. For a compositing type
// of mapper, turning shading off is generally the same as setting
// ambient=1, diffuse=0, specular=0. Shading can be independently
// turned on/off per component.
void SetShade( int index, int value );
void SetShade( int value ) {this->SetShade(0,value);}
int GetShade( int index );
int GetShade() {return this->GetShade(0);}
void ShadeOn( int index );
void ShadeOn() {this->ShadeOn(0);}
void ShadeOff( int index );
void ShadeOff() {this->ShadeOff(0);}
// Description:
// Set/Get the ambient lighting coefficient.
void SetAmbient( int index, double value );
void SetAmbient( double value ) {this->SetAmbient( 0, value );}
double GetAmbient( int index );
double GetAmbient() {return this->GetAmbient(0);}
// Description:
// Set/Get the diffuse lighting coefficient.
void SetDiffuse( int index, double value );
void SetDiffuse( double value ) {this->SetDiffuse( 0, value );}
double GetDiffuse( int index );
double GetDiffuse() {return this->GetDiffuse(0);}
// Description:
// Set/Get the specular lighting coefficient.
void SetSpecular( int index, double value );
void SetSpecular( double value ) {this->SetSpecular( 0, value );}
double GetSpecular( int index );
double GetSpecular() {return this->GetSpecular(0);}
// Description:
// Set/Get the specular power.
void SetSpecularPower( int index, double value );
void SetSpecularPower( double value ) {this->SetSpecularPower( 0, value );}
double GetSpecularPower( int index );
double GetSpecularPower() {return this->GetSpecularPower(0);}
//BTX
// Description:
// WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
// UpdateMTimes performs a Modified() on all TimeStamps.
// This is used by vtkVolume when the property is set, so
// that any other object that might have been caching
// information for the property will rebuild.
void UpdateMTimes();
// Description:
// WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
// Get the time that the gradient opacity transfer function was set
vtkTimeStamp GetGradientOpacityMTime( int index );
vtkTimeStamp GetGradientOpacityMTime()
{ return this->GetGradientOpacityMTime(0); }
// Description:
// WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
// Get the time that the scalar opacity transfer function was set.
vtkTimeStamp GetScalarOpacityMTime( int index );
vtkTimeStamp GetScalarOpacityMTime()
{ return this->GetScalarOpacityMTime(0); }
// Description:
// WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
// Get the time that the RGBTransferFunction was set
vtkTimeStamp GetRGBTransferFunctionMTime( int index );
vtkTimeStamp GetRGBTransferFunctionMTime()
{ return this->GetRGBTransferFunctionMTime(0); }
// Description:
// WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
// Get the time that the GrayTransferFunction was set
vtkTimeStamp GetGrayTransferFunctionMTime( int index );
vtkTimeStamp GetGrayTransferFunctionMTime()
{ return this->GetGrayTransferFunctionMTime(0); }
//ETX
protected:
vtkVolumeProperty();
~vtkVolumeProperty();
int IndependentComponents;
double ComponentWeight[VTK_MAX_VRCOMP];
int InterpolationType;
int ColorChannels[VTK_MAX_VRCOMP];
vtkPiecewiseFunction *GrayTransferFunction[VTK_MAX_VRCOMP];
vtkTimeStamp GrayTransferFunctionMTime[VTK_MAX_VRCOMP];
vtkColorTransferFunction *RGBTransferFunction[VTK_MAX_VRCOMP];
vtkTimeStamp RGBTransferFunctionMTime[VTK_MAX_VRCOMP];
vtkPiecewiseFunction *ScalarOpacity[VTK_MAX_VRCOMP];
vtkTimeStamp ScalarOpacityMTime[VTK_MAX_VRCOMP];
double ScalarOpacityUnitDistance[VTK_MAX_VRCOMP];
vtkPiecewiseFunction *GradientOpacity[VTK_MAX_VRCOMP];
vtkTimeStamp GradientOpacityMTime[VTK_MAX_VRCOMP];
vtkPiecewiseFunction *DefaultGradientOpacity[VTK_MAX_VRCOMP];
int DisableGradientOpacity[VTK_MAX_VRCOMP];
int Shade[VTK_MAX_VRCOMP];
double Ambient[VTK_MAX_VRCOMP];
double Diffuse[VTK_MAX_VRCOMP];
double Specular[VTK_MAX_VRCOMP];
double SpecularPower[VTK_MAX_VRCOMP];
virtual void CreateDefaultGradientOpacity(int index);
private:
vtkVolumeProperty(const vtkVolumeProperty&); // Not implemented.
void operator=(const vtkVolumeProperty&); // Not implemented.
};
// Description:
// Return the interpolation type as a descriptive character string.
inline const char *vtkVolumeProperty::GetInterpolationTypeAsString(void)
{
if( this->InterpolationType == VTK_NEAREST_INTERPOLATION )
{
return "Nearest Neighbor";
}
else if( this->InterpolationType == VTK_LINEAR_INTERPOLATION )
{
return "Linear";
}
else
{
return "Unknown";
}
}
#endif