00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00032 #ifndef __vtkGPUVolumeRayCastMapper_h
00033 #define __vtkGPUVolumeRayCastMapper_h
00034
00035 #include "vtkVolumeMapper.h"
00036
00037 class vtkVolumeProperty;
00038 class vtkRenderWindow;
00039
00040
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
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
00185
00186 protected:
00187 vtkGPUVolumeRayCastMapper();
00188 ~vtkGPUVolumeRayCastMapper();
00189
00190
00191 int ValidateRender( vtkRenderer *, vtkVolume * );
00192
00193
00194
00195
00196 void CanonicalViewRender( vtkRenderer *, vtkVolume * );
00197
00198
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
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
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
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;
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&);
00283 void operator=(const vtkGPUVolumeRayCastMapper&);
00284 };
00285
00286 #endif
00287