VTK
dox/Rendering/Volume/vtkGPUVolumeRayCastMapper.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkGPUVolumeRayCastMapper.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 =========================================================================*/
00029 #ifndef __vtkGPUVolumeRayCastMapper_h
00030 #define __vtkGPUVolumeRayCastMapper_h
00031 
00032 #include "vtkRenderingVolumeModule.h" // For export macro
00033 #include "vtkVolumeMapper.h"
00034 
00035 class vtkVolumeProperty;
00036 class vtkRenderWindow;
00037 
00038 //class vtkKWAMRVolumeMapper; // friend class.
00039 
00040 class VTKRENDERINGVOLUME_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
00041 {
00042 public:
00043   static vtkGPUVolumeRayCastMapper *New();
00044   vtkTypeMacro(vtkGPUVolumeRayCastMapper,vtkVolumeMapper);
00045   void PrintSelf( ostream& os, vtkIndent indent );
00046 
00048 
00051   vtkSetClampMacro( AutoAdjustSampleDistances, int, 0, 1 );
00052   vtkGetMacro( AutoAdjustSampleDistances, int );
00053   vtkBooleanMacro( AutoAdjustSampleDistances, int );
00055 
00057 
00060   vtkSetMacro( SampleDistance, float );
00061   vtkGetMacro( SampleDistance, float );
00063 
00065 
00070   vtkSetClampMacro( ImageSampleDistance, float, 0.1f, 100.0f );
00071   vtkGetMacro( ImageSampleDistance, float );
00073 
00075 
00077   vtkSetClampMacro( MinimumImageSampleDistance, float, 0.1f, 100.0f );
00078   vtkGetMacro( MinimumImageSampleDistance, float );
00080 
00082 
00084   vtkSetClampMacro( MaximumImageSampleDistance, float, 0.1f, 100.0f );
00085   vtkGetMacro( MaximumImageSampleDistance, float );
00087 
00088 
00090 
00096   vtkSetMacro( FinalColorWindow, float );
00097   vtkGetMacro( FinalColorWindow, float );
00098   vtkSetMacro( FinalColorLevel,  float );
00099   vtkGetMacro( FinalColorLevel,  float );
00101 
00103 
00105   vtkSetMacro( MaxMemoryInBytes, vtkIdType );
00106   vtkGetMacro( MaxMemoryInBytes, vtkIdType );
00108 
00110 
00112   vtkSetClampMacro( MaxMemoryFraction, float, 0.1f, 1.0f );
00113   vtkGetMacro( MaxMemoryFraction, float );
00115 
00117 
00122   vtkSetMacro(ReportProgress,bool);
00123   vtkGetMacro(ReportProgress,bool);
00125 
00127 
00131   virtual int IsRenderSupported(vtkRenderWindow *vtkNotUsed(window),
00132                                 vtkVolumeProperty *vtkNotUsed(property))
00133     {
00134       return 0;
00135     }
00137 
00138   void CreateCanonicalView( vtkRenderer *ren,
00139                             vtkVolume *volume,
00140                             vtkImageData *image,
00141                             int blend_mode,
00142                             double viewDirection[3],
00143                             double viewUp[3] );
00144 
00146 
00161   void SetMaskInput(vtkImageData *mask);
00162   vtkGetObjectMacro(MaskInput, vtkImageData);
00164 
00165   //BTX
00166   enum { BinaryMaskType = 0, LabelMapMaskType };
00167   //ETX
00168 
00170 
00172   vtkSetMacro( MaskType, int );
00173   vtkGetMacro( MaskType, int );
00174   void SetMaskTypeToBinary();
00175   void SetMaskTypeToLabelMap();
00177 
00179 
00184   vtkSetClampMacro(MaskBlendFactor,float,0.0f,1.0f);
00185   vtkGetMacro(MaskBlendFactor,float);
00187 
00188 //BTX
00191   void Render( vtkRenderer *, vtkVolume * );
00192 
00195   virtual void GPURender( vtkRenderer *, vtkVolume *) {}
00196 
00201   void ReleaseGraphicsResources(vtkWindow *) {}
00202 
00211   virtual void GetReductionRatio(double ratio[3])=0;
00212 
00213 //ETX
00214 
00215 protected:
00216   vtkGPUVolumeRayCastMapper();
00217   ~vtkGPUVolumeRayCastMapper();
00218 
00219   // Check to see that the render will be OK
00220   int ValidateRender( vtkRenderer *, vtkVolume * );
00221 
00222 
00223   // Special version of render called during the creation
00224   // of a canonical view.
00225   void CanonicalViewRender( vtkRenderer *, vtkVolume * );
00226 
00227   // Methods called by the AMR Volume Mapper.
00228   virtual void PreRender(vtkRenderer *ren,
00229                          vtkVolume *vol,
00230                          double datasetBounds[6],
00231                          double scalarRange[2],
00232                          int numberOfScalarComponents,
00233                          unsigned int numberOfLevels)=0;
00234 
00235   // \pre input is up-to-date
00236   virtual void RenderBlock(vtkRenderer *ren,
00237                            vtkVolume *vol,
00238                            unsigned int level)=0;
00239 
00240   virtual void PostRender(vtkRenderer *ren,
00241                           int numberOfScalarComponents)=0;
00242 
00245   void SetCellFlag(int cellFlag);
00246 
00247   // The distance between sample points along the ray
00248   float  SampleDistance;
00249 
00250 
00251   float  ImageSampleDistance;
00252   float  MinimumImageSampleDistance;
00253   float  MaximumImageSampleDistance;
00254   int    AutoAdjustSampleDistances;
00255 
00256   int    SmallVolumeRender;
00257   double BigTimeToDraw;
00258   double SmallTimeToDraw;
00259 
00260   float FinalColorWindow;
00261   float FinalColorLevel;
00262 
00263   vtkIdType MaxMemoryInBytes;
00264   float MaxMemoryFraction;
00265 
00266 
00267   // 1 if we are generating the canonical image, 0 otherwise
00268   int   GeneratingCanonicalView;
00269   vtkImageData *CanonicalViewImageData;
00270 
00272 
00274   vtkSetClampMacro(AMRMode,int,0,1);
00275   vtkGetMacro(AMRMode,int);
00276   vtkBooleanMacro(AMRMode,int);
00278 
00279   int AMRMode;
00280   int CellFlag; // point data or cell data (or field data, not handled) ?
00281 
00291   virtual void ClipCroppingRegionPlanes();
00292 
00293   double         ClippedCroppingRegionPlanes[6];
00294   bool           ReportProgress;
00295   vtkImageData * MaskInput;
00296   float          MaskBlendFactor;
00297   int            MaskType;
00298   vtkImageData * TransformedInput;
00299 
00300   vtkGetObjectMacro(TransformedInput, vtkImageData);
00301   void SetTransformedInput(vtkImageData*);
00302 
00305   vtkImageData* LastInput;
00306 
00307 private:
00308   vtkGPUVolumeRayCastMapper(const vtkGPUVolumeRayCastMapper&);  // Not implemented.
00309   void operator=(const vtkGPUVolumeRayCastMapper&);  // Not implemented.
00310 };
00311 
00312 #endif
00313