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 =========================================================================*/ 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