VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkVolume16Reader.h,v $ 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 =========================================================================*/ 00050 #ifndef __vtkVolume16Reader_h 00051 #define __vtkVolume16Reader_h 00052 00053 #include "vtkVolumeReader.h" 00054 00055 class vtkTransform; 00056 class vtkUnsignedCharArray; 00057 class vtkUnsignedShortArray; 00058 00059 #define VTK_FILE_BYTE_ORDER_BIG_ENDIAN 0 00060 #define VTK_FILE_BYTE_ORDER_LITTLE_ENDIAN 1 00061 00062 class VTK_IO_EXPORT vtkVolume16Reader : public vtkVolumeReader 00063 { 00064 public: 00065 vtkTypeRevisionMacro(vtkVolume16Reader,vtkVolumeReader); 00066 void PrintSelf(ostream& os, vtkIndent indent); 00067 00071 static vtkVolume16Reader *New(); 00072 00074 00075 vtkSetVector2Macro(DataDimensions,int); 00076 vtkGetVectorMacro(DataDimensions,int,2); 00078 00080 00082 vtkSetMacro(DataMask,unsigned short); 00083 vtkGetMacro(DataMask,unsigned short); 00085 00087 00088 vtkSetMacro(HeaderSize,int); 00089 vtkGetMacro(HeaderSize,int); 00091 00093 00103 void SetDataByteOrderToBigEndian(); 00104 void SetDataByteOrderToLittleEndian(); 00105 int GetDataByteOrder(); 00106 void SetDataByteOrder(int); 00107 const char *GetDataByteOrderAsString(); 00109 00111 00112 vtkSetMacro(SwapBytes,int); 00113 vtkGetMacro(SwapBytes,int); 00114 vtkBooleanMacro(SwapBytes,int); 00116 00118 00121 virtual void SetTransform(vtkTransform*); 00122 vtkGetObjectMacro(Transform,vtkTransform); 00124 00126 vtkImageData *GetImage(int ImageNumber); 00127 00128 protected: 00129 vtkVolume16Reader(); 00130 ~vtkVolume16Reader(); 00131 00132 virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); 00133 virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *); 00134 int DataDimensions[2]; 00135 unsigned short DataMask; 00136 int SwapBytes; 00137 int HeaderSize; 00138 vtkTransform *Transform; 00139 00140 void TransformSlice (unsigned short *slice, unsigned short *pixels, int k, int dimensions[3], int bounds[3]); 00141 void ComputeTransformedDimensions(int dimensions[3]); 00142 void ComputeTransformedBounds(int bounds[6]); 00143 void ComputeTransformedSpacing(double Spacing[3]); 00144 void ComputeTransformedOrigin(double origin[3]); 00145 void AdjustSpacingAndOrigin(int dimensions[3], double Spacing[3], double origin[3]); 00146 void ReadImage(int ImageNumber, vtkUnsignedShortArray *); 00147 void ReadVolume(int FirstImage, int LastImage, vtkUnsignedShortArray *); 00148 int Read16BitImage(FILE *fp, unsigned short *pixels, int xsize, int ysize, 00149 int skip, int swapBytes); 00150 00151 private: 00152 vtkVolume16Reader(const vtkVolume16Reader&); // Not implemented. 00153 void operator=(const vtkVolume16Reader&); // Not implemented. 00154 }; 00155 00156 #endif 00157 00158