00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00029 #ifndef __vtkGPUVolumeRayCastMapper_h
00030 #define __vtkGPUVolumeRayCastMapper_h
00031
00032 #include "vtkVolumeMapper.h"
00033
00034 class vtkVolumeProperty;
00035 class vtkRenderWindow;
00036
00037
00038
00039 class VTK_VOLUMERENDERING_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
00040 {
00041 public:
00042 static vtkGPUVolumeRayCastMapper *New();
00043 vtkTypeRevisionMacro(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
00144 void SetMaskInput(vtkImageData *mask);
00145 vtkGetObjectMacro(MaskInput, vtkImageData);
00146
00148
00152 vtkSetClampMacro(MaskBlendFactor,float,0.0f,1.0f);
00153 vtkGetMacro(MaskBlendFactor,float);
00155
00156
00159 void Render( vtkRenderer *, vtkVolume * );
00160
00163 virtual void GPURender( vtkRenderer *, vtkVolume *) {}
00164
00169 void ReleaseGraphicsResources(vtkWindow *) {};
00170
00179 virtual void GetReductionRatio(double ratio[3])=0;
00180
00181
00182
00183 protected:
00184 vtkGPUVolumeRayCastMapper();
00185 ~vtkGPUVolumeRayCastMapper();
00186
00187
00188 int ValidateRender( vtkRenderer *, vtkVolume * );
00189
00190
00191
00192
00193 void CanonicalViewRender( vtkRenderer *, vtkVolume * );
00194
00195
00196 virtual void PreRender(vtkRenderer *ren,
00197 vtkVolume *vol,
00198 double datasetBounds[6],
00199 double scalarRange[2],
00200 int numberOfScalarComponents,
00201 unsigned int numberOfLevels)=0;
00202
00203
00204 virtual void RenderBlock(vtkRenderer *ren,
00205 vtkVolume *vol,
00206 unsigned int level)=0;
00207
00208 virtual void PostRender(vtkRenderer *ren,
00209 int numberOfScalarComponents)=0;
00210
00213 void SetCellFlag(int cellFlag);
00214
00215
00216 float SampleDistance;
00217
00218
00219 float ImageSampleDistance;
00220 float MinimumImageSampleDistance;
00221 float MaximumImageSampleDistance;
00222 int AutoAdjustSampleDistances;
00223
00224 int SmallVolumeRender;
00225 double BigTimeToDraw;
00226 double SmallTimeToDraw;
00227
00228 float FinalColorWindow;
00229 float FinalColorLevel;
00230
00231 vtkIdType MaxMemoryInBytes;
00232 float MaxMemoryFraction;
00233
00234
00235
00236 int GeneratingCanonicalView;
00237 vtkImageData *CanonicalViewImageData;
00238
00240
00242 vtkSetClampMacro(AMRMode,int,0,1);
00243 vtkGetMacro(AMRMode,int);
00244 vtkBooleanMacro(AMRMode,int);
00246
00247 int AMRMode;
00248 int CellFlag;
00249
00259 virtual void ClipCroppingRegionPlanes();
00260
00261 double ClippedCroppingRegionPlanes[6];
00262
00263 bool ReportProgress;
00264
00265 vtkImageData *MaskInput;
00266
00267 float MaskBlendFactor;
00268
00269 vtkGetObjectMacro(TransformedInput, vtkImageData);
00270 void SetTransformedInput(vtkImageData*);
00271
00272 vtkImageData* TransformedInput;
00273
00276 vtkImageData* LastInput;
00277
00278 private:
00279 vtkGPUVolumeRayCastMapper(const vtkGPUVolumeRayCastMapper&);
00280 void operator=(const vtkGPUVolumeRayCastMapper&);
00281 };
00282
00283 #endif
00284