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 "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