Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

Rendering/vtkVolumeRayCastFunction.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkVolumeRayCastFunction.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00016 
00044 #ifndef __vtkVolumeRayCastFunction_h
00045 #define __vtkVolumeRayCastFunction_h
00046 
00047 #include "vtkObject.h"
00048 
00049 class vtkRenderer;
00050 class vtkVolume;
00051 class vtkVolumeRayCastMapper;
00052 
00053 // Define a couple of structures we need to hold all the important information
00054 // This first structure hold the dynamic information - stuff that changes per 
00055 // ray
00056 typedef struct 
00057 {
00058   // These are the return values - RGBA
00059   float Color[4];
00060   float ScalarValue;
00061 
00062   // Ray information transformed into local coordinates
00063   float                        TransformedStart[4];
00064   float                        TransformedEnd[4];
00065   float                        TransformedDirection[4];
00066   float                        TransformedIncrement[3];
00067   
00068   // The number of steps we want to take if this is
00069   // a ray caster that takes steps
00070   int                          NumberOfStepsToTake;
00071   
00072   // The number of steps we actually take if this is
00073   // a ray caster that takes steps
00074   int                          NumberOfStepsTaken;
00075 
00076 } vtkVolumeRayCastDynamicInfo;
00077 
00078 // This second structure hold the static information - things that don't
00079 // change over the whole image
00080 typedef struct 
00081 {
00082   // A pointer to the volume
00083   vtkVolume                   *Volume;
00084 
00085   // A pointer to the renderer
00086   vtkRenderer                 *Renderer;
00087   
00088   // Matrices for switching from view to volume coordinate, and back
00089   float                        WorldToVoxelsMatrix[16];
00090   float                        VoxelsToWorldMatrix[16];
00091   float                        ViewToVoxelsMatrix[16];
00092 
00093   float                       *ClippingPlane;
00094   int                          NumberOfClippingPlanes;
00095   
00096   // The camera thickness (distance between near and far) is necessary 
00097   // for computing sampling distance
00098   float                        CameraThickness;
00099 
00100   // The type of the data and a pointer to it, and the information
00101   // about its size, spacing, origin and precomputed increment
00102   int                          ScalarDataType;
00103   void                        *ScalarDataPointer;
00104   int                          DataIncrement[3];
00105   int                          DataSize[3];
00106   float                        DataSpacing[3];
00107   float                        DataOrigin[3];
00108 
00109   // Information from the vtkVolumeProperty
00110   int                          Shading;
00111   int                          ColorChannels;
00112   float                        Color[3];
00113   int                          InterpolationType;
00114 
00115   // The shading tables from the vtkEncodedGradientShader
00116   // that will be used for shading the volume.
00117   float                       *RedDiffuseShadingTable;
00118   float                       *GreenDiffuseShadingTable;
00119   float                       *BlueDiffuseShadingTable;
00120   float                       *RedSpecularShadingTable;
00121   float                       *GreenSpecularShadingTable;
00122   float                       *BlueSpecularShadingTable;
00123 
00124   // Info needed from the gradient estimator
00125   unsigned short               *EncodedNormals;
00126   unsigned char                *GradientMagnitudes;
00127 
00128   // Image information
00129   int                          ImageInUseSize[2];
00130   int                          ImageMemorySize[2];
00131   int                          ImageViewportSize[2];
00132   int                          ImageOrigin[2];
00133   unsigned char               *Image;
00134   
00135   int                         *RowBounds;
00136 
00137   // Is a MIP ray cast function in use? This will control
00138   // how subsegments of the ray are combined when non-subvolume 
00139   // cropping is used. If maximize opacity is used, the color[3] 
00140   // value is used to find the max othersize the dynamicInfo->ScalarValue
00141   // value is used
00142   int                          MIPFunction;
00143   int                          MaximizeOpacity;
00144 } vtkVolumeRayCastStaticInfo;
00145 
00146 class VTK_RENDERING_EXPORT vtkVolumeRayCastFunction : public vtkObject
00147 {
00148 public:
00149   vtkTypeRevisionMacro(vtkVolumeRayCastFunction,vtkObject);
00150   virtual void PrintSelf(ostream& os, vtkIndent indent);
00151 
00153 
00158   void FunctionInitialize( vtkRenderer *ren,
00159                            vtkVolume   *vol,
00160                            vtkVolumeRayCastStaticInfo *staticInfo );
00162 
00163   virtual void CastRay( vtkVolumeRayCastDynamicInfo *dynamicInfo,
00164                         vtkVolumeRayCastStaticInfo *staticInfo )=0;
00165 //ETX
00166 
00169   virtual float GetZeroOpacityThreshold( vtkVolume *vol )=0;
00170 
00171 protected:
00172   vtkVolumeRayCastFunction() {};
00173   ~vtkVolumeRayCastFunction() {};
00174 
00176 
00178   virtual void SpecificFunctionInitialize( vtkRenderer *ren,
00179                                            vtkVolume   *vol,
00180                                            vtkVolumeRayCastStaticInfo *staticInfo,
00181                                            vtkVolumeRayCastMapper *mapper )=0;
00183 //ETX
00184 private:
00185   vtkVolumeRayCastFunction(const vtkVolumeRayCastFunction&);  // Not implemented.
00186   void operator=(const vtkVolumeRayCastFunction&);  // Not implemented.
00187 };
00188 
00189 #endif