00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkVolume.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00051 #ifndef __vtkVolume_h 00052 #define __vtkVolume_h 00053 00054 #include "vtkProp3D.h" 00055 00056 class vtkRenderer; 00057 class vtkPropCollection; 00058 class vtkVolumeCollection; 00059 class vtkWindow; 00060 class vtkVolumeProperty; 00061 class vtkVolumeMapper; 00062 00063 class VTK_RENDERING_EXPORT vtkVolume : public vtkProp3D 00064 { 00065 public: 00066 vtkTypeRevisionMacro(vtkVolume,vtkProp3D); 00067 void PrintSelf(ostream& os, vtkIndent indent); 00068 00072 static vtkVolume *New(); 00073 00075 00076 void SetMapper(vtkVolumeMapper *mapper); 00077 vtkGetObjectMacro(Mapper, vtkVolumeMapper); 00079 00081 00082 void SetProperty(vtkVolumeProperty *property); 00083 vtkVolumeProperty *GetProperty(); 00085 00089 void GetVolumes(vtkPropCollection *vc); 00090 00092 void Update(); 00093 00095 00097 float *GetBounds(); 00098 void GetBounds(float bounds[6]) { this->vtkProp3D::GetBounds( bounds ); }; 00099 float GetMinXBound(); 00100 float GetMaxXBound(); 00101 float GetMinYBound(); 00102 float GetMaxYBound(); 00103 float GetMinZBound(); 00104 float GetMaxZBound(); 00106 00108 unsigned long int GetMTime(); 00109 00114 unsigned long GetRedrawMTime(); 00115 00117 void ShallowCopy(vtkProp *prop); 00118 00119 //BTX 00125 int RenderTranslucentGeometry(vtkViewport *viewport); 00126 00131 void ReleaseGraphicsResources(vtkWindow *); 00132 00134 00136 float *GetCorrectedScalarOpacityArray(int); 00137 float *GetCorrectedScalarOpacityArray() 00138 {return this->GetCorrectedScalarOpacityArray(0);}; 00140 00142 00144 float *GetScalarOpacityArray(int); 00145 float *GetScalarOpacityArray(){return this->GetScalarOpacityArray(0);}; 00147 00149 00151 float *GetGradientOpacityArray(int); 00152 float *GetGradientOpacityArray(){return this->GetGradientOpacityArray(0);}; 00154 00156 00158 float *GetGrayArray(int); 00159 float *GetGrayArray(){return this->GetGrayArray(0);}; 00161 00163 00165 float *GetRGBArray(int); 00166 float *GetRGBArray(){return this->GetRGBArray(0);}; 00168 00170 00172 float GetGradientOpacityConstant(int); 00173 float GetGradientOpacityConstant() 00174 {return this->GetGradientOpacityConstant(0);}; 00176 00179 float GetArraySize () { return static_cast<float>(this->ArraySize); }; 00180 00183 void UpdateTransferFunctions( vtkRenderer *ren ); 00184 00186 00188 void UpdateScalarOpacityforSampleSize( vtkRenderer *ren, 00189 float sample_distance ); 00191 00192 //ETX 00193 00194 protected: 00195 vtkVolume(); 00196 ~vtkVolume(); 00197 00198 vtkVolumeMapper *Mapper; 00199 vtkVolumeProperty *Property; 00200 00201 // The rgb transfer function array - for unsigned char data this 00202 // is 256 elements, for short or unsigned short it is 65536 elements 00203 // This is a sample at each scalar value of the rgb transfer 00204 // function. A time stamp is kept to know when it needs rebuilding 00205 float *RGBArray[VTK_MAX_VRCOMP]; 00206 vtkTimeStamp RGBArrayMTime[VTK_MAX_VRCOMP]; 00207 00208 // The gray transfer function array - for unsigned char data this 00209 // is 256 elements, for short or unsigned short it is 65536 elements 00210 // This is a sample at each scalar value of the gray transfer 00211 // function. A time stamp is kept to know when it needs rebuilding 00212 float *GrayArray[VTK_MAX_VRCOMP]; 00213 vtkTimeStamp GrayArrayMTime[VTK_MAX_VRCOMP]; 00214 00215 // The scalar opacity transfer function array - for unsigned char data this 00216 // is 256 elements, for short or unsigned short it is 65536 elements 00217 // This is a sample at each scalar value of the opacity transfer 00218 // function. A time stamp is kept to know when it needs rebuilding 00219 float *ScalarOpacityArray[VTK_MAX_VRCOMP]; 00220 vtkTimeStamp ScalarOpacityArrayMTime[VTK_MAX_VRCOMP]; 00221 00222 // The corrected scalar opacity transfer function array - this is identical 00223 // to the opacity transfer function array when the step size is 1. 00224 // In other cases, it is corrected to reflect the new material thickness 00225 // modeled by a step size different than 1. 00226 float *CorrectedScalarOpacityArray[VTK_MAX_VRCOMP]; 00227 vtkTimeStamp CorrectedScalarOpacityArrayMTime[VTK_MAX_VRCOMP]; 00228 00229 // CorrectedStepSize is the step size currently modeled by 00230 // CorrectedArray. It is used to determine when the 00231 // CorrectedArray needs to be updated to match SampleDistance 00232 // in the volume mapper. 00233 float CorrectedStepSize; 00234 00235 // Number of elements in the rgb, gray, and opacity transfer function arrays 00236 int ArraySize; 00237 00238 // The magnitude of gradient opacity transfer function array 00239 float GradientOpacityArray[VTK_MAX_VRCOMP][256]; 00240 float GradientOpacityConstant[VTK_MAX_VRCOMP]; 00241 vtkTimeStamp GradientOpacityArrayMTime[VTK_MAX_VRCOMP]; 00242 00243 // Function to compute screen coverage of this volume 00244 float ComputeScreenCoverage( vtkViewport *vp ); 00245 00246 private: 00247 vtkVolume(const vtkVolume&); // Not implemented. 00248 void operator=(const vtkVolume&); // Not implemented. 00249 }; 00250 00251 #endif 00252