VTK
dox/VolumeRendering/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 =========================================================================*/
00032 #ifndef __vtkGPUVolumeRayCastMapper_h
00033 #define __vtkGPUVolumeRayCastMapper_h
00034 
00035 #include "vtkVolumeMapper.h"
00036 
00037 class vtkVolumeProperty;
00038 class vtkRenderWindow;
00039 
00040 //class vtkKWAMRVolumeMapper; // friend class.
00041 
00042 class VTK_VOLUMERENDERING_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
00043 {
00044 public:
00045   static vtkGPUVolumeRayCastMapper *New();
00046   vtkTypeMacro(vtkGPUVolumeRayCastMapper,vtkVolumeMapper);
00047   void PrintSelf( ostream& os, vtkIndent indent );
00048 
00050 
00053   vtkSetClampMacro( AutoAdjustSampleDistances, int, 0, 1 );
00054   vtkGetMacro( AutoAdjustSampleDistances, int );
00055   vtkBooleanMacro( AutoAdjustSampleDistances, int );
00057 
00059 
00062   vtkSetMacro( SampleDistance, float );
00063   vtkGetMacro( SampleDistance, float );
00065 
00067 
00072   vtkSetClampMacro( ImageSampleDistance, float, 0.1f, 100.0f );
00073   vtkGetMacro( ImageSampleDistance, float );
00075 
00077 
00079   vtkSetClampMacro( MinimumImageSampleDistance, float, 0.1f, 100.0f );
00080   vtkGetMacro( MinimumImageSampleDistance, float );
00082 
00084 
00086   vtkSetClampMacro( MaximumImageSampleDistance, float, 0.1f, 100.0f );
00087   vtkGetMacro( MaximumImageSampleDistance, float );
00089 
00090 
00092 
00098   vtkSetMacro( FinalColorWindow, float );
00099   vtkGetMacro( FinalColorWindow, float );
00100   vtkSetMacro( FinalColorLevel,  float );
00101   vtkGetMacro( FinalColorLevel,  float );
00103 
00105 
00107   vtkSetMacro( MaxMemoryInBytes, vtkIdType );
00108   vtkGetMacro( MaxMemoryInBytes, vtkIdType );
00110 
00112 
00114   vtkSetClampMacro( MaxMemoryFraction, float, 0.1f, 1.0f );
00115   vtkGetMacro( MaxMemoryFraction, float );
00117 
00119 
00124   vtkSetMacro(ReportProgress,bool);
00125   vtkGetMacro(ReportProgress,bool);
00127 
00129 
00133   virtual int IsRenderSupported(vtkRenderWindow *vtkNotUsed(window),
00134                                 vtkVolumeProperty *vtkNotUsed(property))
00135     {
00136       return 0;
00137     }
00139 
00140   void CreateCanonicalView( vtkRenderer *ren,
00141                             vtkVolume *volume,
00142                             vtkImageData *image,
00143                             int blend_mode,
00144                             double viewDirection[3],
00145                             double viewUp[3] );
00146 
00147   void SetMaskInput(vtkImageData *mask);
00148   vtkGetObjectMacro(MaskInput, vtkImageData);
00149 
00151 
00155   vtkSetClampMacro(MaskBlendFactor,float,0.0f,1.0f);
00156   vtkGetMacro(MaskBlendFactor,float);
00158 
00159 //BTX
00162   void Render( vtkRenderer *, vtkVolume * );
00163 
00166   virtual void GPURender( vtkRenderer *, vtkVolume *) {}
00167 
00172   void ReleaseGraphicsResources(vtkWindow *) {};
00173 
00182   virtual void GetReductionRatio(double ratio[3])=0;
00183 
00184 //ETX
00185 
00186 protected:
00187   vtkGPUVolumeRayCastMapper();
00188   ~vtkGPUVolumeRayCastMapper();
00189 
00190   // Check to see that the render will be OK
00191   int ValidateRender( vtkRenderer *, vtkVolume * );
00192 
00193 
00194   // Special version of render called during the creation
00195   // of a canonical view.
00196   void CanonicalViewRender( vtkRenderer *, vtkVolume * );
00197 
00198   // Methods called by the AMR Volume Mapper.
00199   virtual void PreRender(vtkRenderer *ren,
00200                          vtkVolume *vol,
00201                          double datasetBounds[6],
00202                          double scalarRange[2],
00203                          int numberOfScalarComponents,
00204                          unsigned int numberOfLevels)=0;
00205 
00206   // \pre input is up-to-date
00207   virtual void RenderBlock(vtkRenderer *ren,
00208                            vtkVolume *vol,
00209                            unsigned int level)=0;
00210 
00211   virtual void PostRender(vtkRenderer *ren,
00212                           int numberOfScalarComponents)=0;
00213 
00216   void SetCellFlag(int cellFlag);
00217 
00218   // The distance between sample points along the ray
00219   float  SampleDistance;
00220 
00221 
00222   float  ImageSampleDistance;
00223   float  MinimumImageSampleDistance;
00224   float  MaximumImageSampleDistance;
00225   int    AutoAdjustSampleDistances;
00226 
00227   int    SmallVolumeRender;
00228   double BigTimeToDraw;
00229   double SmallTimeToDraw;
00230 
00231   float FinalColorWindow;
00232   float FinalColorLevel;
00233 
00234   vtkIdType MaxMemoryInBytes;
00235   float MaxMemoryFraction;
00236 
00237 
00238   // 1 if we are generating the canonical image, 0 otherwise
00239   int   GeneratingCanonicalView;
00240   vtkImageData *CanonicalViewImageData;
00241 
00243 
00245   vtkSetClampMacro(AMRMode,int,0,1);
00246   vtkGetMacro(AMRMode,int);
00247   vtkBooleanMacro(AMRMode,int);
00249 
00250   int AMRMode;
00251   int CellFlag; // point data or cell data (or field data, not handled) ?
00252 
00262   virtual void ClipCroppingRegionPlanes();
00263 
00264   double ClippedCroppingRegionPlanes[6];
00265 
00266   bool ReportProgress;
00267 
00268   vtkImageData *MaskInput;
00269 
00270   float MaskBlendFactor;
00271 
00272   vtkGetObjectMacro(TransformedInput, vtkImageData);
00273   void SetTransformedInput(vtkImageData*);
00274 
00275   vtkImageData* TransformedInput;
00276 
00279   vtkImageData* LastInput;
00280 
00281 private:
00282   vtkGPUVolumeRayCastMapper(const vtkGPUVolumeRayCastMapper&);  // Not implemented.
00283   void operator=(const vtkGPUVolumeRayCastMapper&);  // Not implemented.
00284 };
00285 
00286 #endif
00287