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.
 
 
 
 
 
 

174 lines
6.4 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkVolumeRayCastFunction.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 vtkVolumeRayCastFunction - a superclass for ray casting functions
// .SECTION Description
// vtkVolumeRayCastFunction is a superclass for ray casting functions that
// can be used within a vtkVolumeRayCastMapper. This includes for example,
// vtkVolumeRayCastCompositeFunction, vtkVolumeRayCastMIPFunction, and
// vtkVolumeRayCastIsosurfaceFunction.
// .SECTION See Also
// vtkVolumeRayCastCompositeFunction vtkVolumeRayCastMIPFunction
// vtkVolumeRayCastIsosurfaceFunction vtkVolumeRayCastMapper
#ifndef __vtkVolumeRayCastFunction_h
#define __vtkVolumeRayCastFunction_h
#include "vtkObject.h"
class vtkRenderer;
class vtkVolume;
class vtkVolumeRayCastMapper;
// Define a couple of structures we need to hold all the important information
// This first structure hold the dynamic information - stuff that changes per
// ray
typedef struct
{
// These are the return values - RGBA
float Color[4];
float ScalarValue;
// Ray information transformed into local coordinates
float TransformedStart[4];
float TransformedEnd[4];
float TransformedDirection[4];
float TransformedIncrement[3];
// The number of steps we want to take if this is
// a ray caster that takes steps
int NumberOfStepsToTake;
// The number of steps we actually take if this is
// a ray caster that takes steps
int NumberOfStepsTaken;
} vtkVolumeRayCastDynamicInfo;
// This second structure hold the static information - things that don't
// change over the whole image
typedef struct
{
// A pointer to the volume
vtkVolume *Volume;
// A pointer to the renderer
vtkRenderer *Renderer;
// Matrices for switching from view to volume coordinate, and back
float WorldToVoxelsMatrix[16];
float VoxelsToWorldMatrix[16];
float ViewToVoxelsMatrix[16];
float *ClippingPlane;
int NumberOfClippingPlanes;
// The camera thickness (distance between near and far) is necessary
// for computing sampling distance
float CameraThickness;
// The type of the data and a pointer to it, and the information
// about its size, spacing, origin and precomputed increment
int ScalarDataType;
void *ScalarDataPointer;
int DataIncrement[3];
int DataSize[3];
double DataSpacing[3];
double DataOrigin[3];
// Information from the vtkVolumeProperty
int Shading;
int ColorChannels;
float Color[3];
int InterpolationType;
// The shading tables from the vtkEncodedGradientShader
// that will be used for shading the volume.
float *RedDiffuseShadingTable;
float *GreenDiffuseShadingTable;
float *BlueDiffuseShadingTable;
float *RedSpecularShadingTable;
float *GreenSpecularShadingTable;
float *BlueSpecularShadingTable;
// Info needed from the gradient estimator
unsigned short *EncodedNormals;
unsigned char *GradientMagnitudes;
// Image information
int ImageInUseSize[2];
int ImageMemorySize[2];
int ImageViewportSize[2];
int ImageOrigin[2];
unsigned char *Image;
int *RowBounds;
// Is a MIP ray cast function in use? This will control
// how subsegments of the ray are combined when non-subvolume
// cropping is used. If maximize opacity is used, the color[3]
// value is used to find the max othersize the dynamicInfo->ScalarValue
// value is used
int MIPFunction;
int MaximizeOpacity;
} vtkVolumeRayCastStaticInfo;
class VTK_VOLUMERENDERING_EXPORT vtkVolumeRayCastFunction : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkVolumeRayCastFunction,vtkObject);
virtual void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Do the basic initialization. This includes saving the parameters
// passed in into local variables, as well as grabbing some useful
// info from the volume property and normal encoder. This initialize
// routine is called once per render. It also calls the
// SpecificFunctionInitialize of the subclass function.
//BTX
void FunctionInitialize( vtkRenderer *ren,
vtkVolume *vol,
vtkVolumeRayCastStaticInfo *staticInfo );
virtual void CastRay( vtkVolumeRayCastDynamicInfo *dynamicInfo,
vtkVolumeRayCastStaticInfo *staticInfo )=0;
//ETX
// Description:
// Get the value below which all scalar values are considered to
// have 0 opacity.
virtual float GetZeroOpacityThreshold( vtkVolume *vol )=0;
protected:
vtkVolumeRayCastFunction() {};
~vtkVolumeRayCastFunction() {};
// Description:
// This method gives the subclass a chance to do any special
// initialization that it may need to do
//BTX
virtual void SpecificFunctionInitialize( vtkRenderer *ren,
vtkVolume *vol,
vtkVolumeRayCastStaticInfo *staticInfo,
vtkVolumeRayCastMapper *mapper )=0;
//ETX
private:
vtkVolumeRayCastFunction(const vtkVolumeRayCastFunction&); // Not implemented.
void operator=(const vtkVolumeRayCastFunction&); // Not implemented.
};
#endif