Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00045 #ifndef __vtkKWERepresentativeVolumeImageCreator_h
00046 #define __vtkKWERepresentativeVolumeImageCreator_h
00047
00048 #include "vtkObject.h"
00049 #include "VTKEdgeConfigure.h"
00050
00051 #include "vtkVolumeMapper.h"
00052
00053 class vtkImageData;
00054 class vtkMultiThreader;
00055 class vtkMutexLock;
00056 class vtkRenderWindow;
00057 class vtkRenderWindowInteractor;
00058 class vtkVolumeProperty;
00059
00060
00061
00062
00063 VTK_THREAD_RETURN_TYPE vtkKWERVICGenerateImage(void *arg);
00064 class vtkKWERVICFriend;
00065
00066
00067 class VTKEdge_VOLUMERENDERING_EXPORT vtkKWERepresentativeVolumeImageCreator : public vtkObject
00068 {
00069 public:
00070 static vtkKWERepresentativeVolumeImageCreator *New();
00071 vtkTypeRevisionMacro(vtkKWERepresentativeVolumeImageCreator,vtkObject);
00072 void PrintSelf( ostream& os, vtkIndent indent );
00073
00076 void SetProperty(vtkVolumeProperty *p);
00077
00079
00080 vtkGetObjectMacro( Property, vtkVolumeProperty );
00082
00084
00085 vtkSetMacro( BlendMode, int );
00086 void SetBlendModeToComposite()
00087 { this->SetBlendMode( vtkVolumeMapper::COMPOSITE_BLEND ); }
00088 void SetBlendModeToMaximumIntensity()
00089 { this->SetBlendMode( vtkVolumeMapper::MAXIMUM_INTENSITY_BLEND ); }
00090 void SetBlendModeToMinimumIntensity()
00091 { this->SetBlendMode( vtkVolumeMapper::MINIMUM_INTENSITY_BLEND ); }
00092 vtkGetMacro( BlendMode, int );
00094
00096 void SetInput(vtkImageData *volume);
00097
00099
00100 vtkGetObjectMacro( Input, vtkImageData );
00102
00106 void Start();
00107
00109 void Stop();
00110
00114 int IsProcessing();
00115
00120 int IsValid();
00121
00123
00126 void SetRepresentativeImageSize( int w, int h );
00127 void SetRepresentativeImageSize( int size[2] )
00128 {this->SetRepresentativeImageSize(size[0], size[1]);}
00130
00132
00134 vtkGetVectorMacro( RepresentativeImageSize, int, 3 );
00136
00137
00143 vtkImageData *GetRepresentativeImage();
00144
00146
00151 vtkSetClampMacro( VisibleSide, int,
00152 vtkKWERepresentativeVolumeImageCreator::XSideView,
00153 vtkKWERepresentativeVolumeImageCreator::MinusZSideView );
00155
00157
00159 vtkGetMacro( VisibleSide, int );
00161
00162
00163 enum
00164 {
00165 XSideView=0,
00166 MinusXSideView,
00167 YSideView,
00168 MinusYSideView,
00169 ZSideView,
00170 MinusZSideView
00171 };
00172
00173 enum
00174 {
00175 LeftSideView=0,
00176 RightSideView,
00177 PosteriorSideView,
00178 AnteriorSideView,
00179 SuperiorSideView,
00180 InferiorSideView
00181 };
00182
00183
00184 protected:
00185 vtkKWERepresentativeVolumeImageCreator();
00186 ~vtkKWERepresentativeVolumeImageCreator();
00187
00188 friend VTK_THREAD_RETURN_TYPE vtkKWERVICGenerateImage(void *arg);
00189 friend class vtkKWERVICFriend;
00190
00191 void GenerateImage( int *flag,
00192 vtkMutexLock *lock );
00193
00194 void ClearInternalParameters();
00195
00196 vtkVolumeProperty *Property;
00197 int BlendMode;
00198 vtkImageData *Input;
00199
00200 vtkVolumeProperty *InternalProperty;
00201 int InternalBlendMode;
00202 vtkImageData *InternalInput;
00203
00204 vtkImageData *RepresentativeImage;
00205 vtkMutexLock *RepresentativeImageIsValidLock;
00206 int RepresentativeImageIsValid;
00207 int RepresentativeImageSize[2];
00208
00209 int VisibleSide;
00210
00211 vtkMultiThreader *Threader;
00212
00213 int SpawnedThreadID;
00214
00215 void ComputeFirstVoxel( int i, int j, float voxel[3] );
00216 void ComputeRayIncrement( float increment[3] );
00217 void CastRay( float voxel[3],
00218 float increment[3],
00219 unsigned char color[3] );
00220
00221 void UpdateTransferFunctions(double sampleDistance);
00222 double ComputeSampleDistance(float rayIncrement[3]);
00223
00224 float TableOffset[4];
00225 float TableScale[4];
00226 float ColorTable[4][1024*3];
00227 float OpacityTable[4][1024];
00228 int TableComponents;
00229 int TableIndependentComponents;
00230
00231 private:
00232 vtkKWERepresentativeVolumeImageCreator(const vtkKWERepresentativeVolumeImageCreator&);
00233 void operator=(const vtkKWERepresentativeVolumeImageCreator&);
00234 };
00235
00236 #endif