VTK
|
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 "vtkVolumeMapper.h" 00033 00034 class vtkVolumeProperty; 00035 class vtkRenderWindow; 00036 00037 //class vtkKWAMRVolumeMapper; // friend class. 00038 00039 class VTK_VOLUMERENDERING_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper 00040 { 00041 public: 00042 static vtkGPUVolumeRayCastMapper *New(); 00043 vtkTypeMacro(vtkGPUVolumeRayCastMapper,vtkVolumeMapper); 00044 void PrintSelf( ostream& os, vtkIndent indent ); 00045 00047 00050 vtkSetClampMacro( AutoAdjustSampleDistances, int, 0, 1 ); 00051 vtkGetMacro( AutoAdjustSampleDistances, int ); 00052 vtkBooleanMacro( AutoAdjustSampleDistances, int ); 00054 00056 00059 vtkSetMacro( SampleDistance, float ); 00060 vtkGetMacro( SampleDistance, float ); 00062 00064 00069 vtkSetClampMacro( ImageSampleDistance, float, 0.1f, 100.0f ); 00070 vtkGetMacro( ImageSampleDistance, float ); 00072 00074 00076 vtkSetClampMacro( MinimumImageSampleDistance, float, 0.1f, 100.0f ); 00077 vtkGetMacro( MinimumImageSampleDistance, float ); 00079 00081 00083 vtkSetClampMacro( MaximumImageSampleDistance, float, 0.1f, 100.0f ); 00084 vtkGetMacro( MaximumImageSampleDistance, float ); 00086 00087 00089 00095 vtkSetMacro( FinalColorWindow, float ); 00096 vtkGetMacro( FinalColorWindow, float ); 00097 vtkSetMacro( FinalColorLevel, float ); 00098 vtkGetMacro( FinalColorLevel, float ); 00100 00102 00104 vtkSetMacro( MaxMemoryInBytes, vtkIdType ); 00105 vtkGetMacro( MaxMemoryInBytes, vtkIdType ); 00107 00109 00111 vtkSetClampMacro( MaxMemoryFraction, float, 0.1f, 1.0f ); 00112 vtkGetMacro( MaxMemoryFraction, float ); 00114 00116 00121 vtkSetMacro(ReportProgress,bool); 00122 vtkGetMacro(ReportProgress,bool); 00124 00126 00130 virtual int IsRenderSupported(vtkRenderWindow *vtkNotUsed(window), 00131 vtkVolumeProperty *vtkNotUsed(property)) 00132 { 00133 return 0; 00134 } 00136 00137 void CreateCanonicalView( vtkRenderer *ren, 00138 vtkVolume *volume, 00139 vtkImageData *image, 00140 int blend_mode, 00141 double viewDirection[3], 00142 double viewUp[3] ); 00143 00145 00160 void SetMaskInput(vtkImageData *mask); 00161 vtkGetObjectMacro(MaskInput, vtkImageData); 00163 00164 //BTX 00165 enum { BinaryMaskType = 0, LabelMapMaskType }; 00166 //ETX 00167 00169 00171 vtkSetMacro( MaskType, int ); 00172 vtkGetMacro( MaskType, int ); 00173 void SetMaskTypeToBinary(); 00174 void SetMaskTypeToLabelMap(); 00176 00178 00183 vtkSetClampMacro(MaskBlendFactor,float,0.0f,1.0f); 00184 vtkGetMacro(MaskBlendFactor,float); 00186 00187 //BTX 00190 void Render( vtkRenderer *, vtkVolume * ); 00191 00194 virtual void GPURender( vtkRenderer *, vtkVolume *) {} 00195 00200 void ReleaseGraphicsResources(vtkWindow *) {}; 00201 00210 virtual void GetReductionRatio(double ratio[3])=0; 00211 00212 //ETX 00213 00214 protected: 00215 vtkGPUVolumeRayCastMapper(); 00216 ~vtkGPUVolumeRayCastMapper(); 00217 00218 // Check to see that the render will be OK 00219 int ValidateRender( vtkRenderer *, vtkVolume * ); 00220 00221 00222 // Special version of render called during the creation 00223 // of a canonical view. 00224 void CanonicalViewRender( vtkRenderer *, vtkVolume * ); 00225 00226 // Methods called by the AMR Volume Mapper. 00227 virtual void PreRender(vtkRenderer *ren, 00228 vtkVolume *vol, 00229 double datasetBounds[6], 00230 double scalarRange[2], 00231 int numberOfScalarComponents, 00232 unsigned int numberOfLevels)=0; 00233 00234 // \pre input is up-to-date 00235 virtual void RenderBlock(vtkRenderer *ren, 00236 vtkVolume *vol, 00237 unsigned int level)=0; 00238 00239 virtual void PostRender(vtkRenderer *ren, 00240 int numberOfScalarComponents)=0; 00241 00244 void SetCellFlag(int cellFlag); 00245 00246 // The distance between sample points along the ray 00247 float SampleDistance; 00248 00249 00250 float ImageSampleDistance; 00251 float MinimumImageSampleDistance; 00252 float MaximumImageSampleDistance; 00253 int AutoAdjustSampleDistances; 00254 00255 int SmallVolumeRender; 00256 double BigTimeToDraw; 00257 double SmallTimeToDraw; 00258 00259 float FinalColorWindow; 00260 float FinalColorLevel; 00261 00262 vtkIdType MaxMemoryInBytes; 00263 float MaxMemoryFraction; 00264 00265 00266 // 1 if we are generating the canonical image, 0 otherwise 00267 int GeneratingCanonicalView; 00268 vtkImageData *CanonicalViewImageData; 00269 00271 00273 vtkSetClampMacro(AMRMode,int,0,1); 00274 vtkGetMacro(AMRMode,int); 00275 vtkBooleanMacro(AMRMode,int); 00277 00278 int AMRMode; 00279 int CellFlag; // point data or cell data (or field data, not handled) ? 00280 00290 virtual void ClipCroppingRegionPlanes(); 00291 00292 double ClippedCroppingRegionPlanes[6]; 00293 bool ReportProgress; 00294 vtkImageData * MaskInput; 00295 float MaskBlendFactor; 00296 int MaskType; 00297 vtkImageData * TransformedInput; 00298 00299 vtkGetObjectMacro(TransformedInput, vtkImageData); 00300 void SetTransformedInput(vtkImageData*); 00301 00304 vtkImageData* LastInput; 00305 00306 private: 00307 vtkGPUVolumeRayCastMapper(const vtkGPUVolumeRayCastMapper&); // Not implemented. 00308 void operator=(const vtkGPUVolumeRayCastMapper&); // Not implemented. 00309 }; 00310 00311 #endif 00312