VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkExtractCTHPart.h 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 =========================================================================*/ 00028 #ifndef __vtkExtractCTHPart_h 00029 #define __vtkExtractCTHPart_h 00030 00031 #include "vtkMultiBlockDataSetAlgorithm.h" 00032 00033 class vtkAppendPolyData; 00034 class vtkBoundingBox; 00035 class vtkClipPolyData; 00036 class vtkContourFilter; 00037 class vtkCutter; 00038 class vtkDataArray; 00039 class vtkDataSet; 00040 class vtkDataSetSurfaceFilter; 00041 class vtkDoubleArray; 00042 class vtkExtractCTHPartInternal; 00043 class vtkImageData; 00044 class vtkInformationDoubleVectorKey; 00045 class vtkCompositeDataSet; 00046 class vtkMultiProcessController; 00047 class vtkPlane; 00048 class vtkPolyData; 00049 class vtkRectilinearGrid; 00050 class vtkUniformGrid; 00051 class vtkUnsignedCharArray; 00052 00053 //#define EXTRACT_USE_IMAGE_DATA 1 00054 00055 class VTK_PARALLEL_EXPORT vtkExtractCTHPart : public vtkMultiBlockDataSetAlgorithm 00056 { 00057 public: 00058 vtkTypeMacro(vtkExtractCTHPart,vtkMultiBlockDataSetAlgorithm); 00059 void PrintSelf(ostream& os, vtkIndent indent); 00060 00062 static vtkInformationDoubleVectorKey *BOUNDS(); 00063 00066 static vtkExtractCTHPart *New(); 00067 00069 00070 void RemoveDoubleVolumeArrayNames(); 00071 void RemoveFloatVolumeArrayNames(); 00072 void RemoveUnsignedCharVolumeArrayNames(); 00073 int GetNumberOfVolumeArrayNames(); 00074 const char* GetVolumeArrayName(int idx); 00075 // for backwards compatibility 00076 void RemoveAllVolumeArrayNames(); 00078 00080 00084 void AddDoubleVolumeArrayName(char* arrayName); 00085 void AddFloatVolumeArrayName(char* arrayName); 00086 void AddUnsignedCharVolumeArrayName(char* arrayName); 00087 //for backwards compatibility 00088 void AddVolumeArrayName(char* arrayName); 00090 00092 00093 void SetClipPlane(vtkPlane *clipPlane); 00094 vtkGetObjectMacro(ClipPlane, vtkPlane); 00096 00098 unsigned long GetMTime(); 00099 00101 void SetController(vtkMultiProcessController* controller); 00102 00104 00106 vtkGetObjectMacro(Controller,vtkMultiProcessController); 00108 00110 00112 vtkSetClampMacro(VolumeFractionSurfaceValue, double, 0.0, 1.0); 00113 vtkGetMacro(VolumeFractionSurfaceValue, double); 00115 00116 protected: 00117 vtkExtractCTHPart(); 00118 ~vtkExtractCTHPart(); 00119 00120 virtual int RequestInformation(vtkInformation *request, 00121 vtkInformationVector **inputVector, 00122 vtkInformationVector *outputVector); 00123 00124 virtual int RequestData(vtkInformation *, vtkInformationVector **, 00125 vtkInformationVector *); 00126 00134 void ComputeBounds(vtkCompositeDataSet *input, 00135 int processNumber, 00136 int numProcessors); 00138 00139 void ExecutePart(const char *arrayName, 00140 vtkCompositeDataSet *input, 00141 vtkAppendPolyData *appendSurface, 00142 vtkAppendPolyData *append, 00143 float minProgress, 00144 float maxProgress); 00145 00146 void ExecutePartOnUniformGrid(const char *arrayName, 00147 #ifdef EXTRACT_USE_IMAGE_DATA 00148 vtkImageData *input, 00149 #else 00150 vtkUniformGrid *input, 00151 #endif 00152 vtkAppendPolyData *appendSurface, 00153 vtkAppendPolyData *append, 00154 float minProgress, 00155 float maxProgress); 00156 00157 void ExecutePartOnRectilinearGrid(const char *arrayName, 00158 vtkRectilinearGrid *input, 00159 vtkAppendPolyData *appendSurface, 00160 vtkAppendPolyData *append, 00161 float minProgress, 00162 float maxProgress); 00163 00164 void ExecuteCellDataToPointData(vtkDataArray *cellVolumeFraction, 00165 vtkDoubleArray *pointVolumeFraction, 00166 int *dims, 00167 float minProgress, 00168 float maxProgress, 00169 int reportProgress); 00170 00171 virtual int FillInputPortInformation(int port, 00172 vtkInformation *info); 00173 00174 void CreateInternalPipeline(); 00175 void DeleteInternalPipeline(); 00176 00178 00181 int ExtractUniformGridSurface( 00182 #ifdef EXTRACT_USE_IMAGE_DATA 00183 vtkImageData *input, 00184 #else 00185 vtkUniformGrid *input, 00186 #endif 00187 vtkPolyData *output); 00189 00191 00194 int ExtractRectilinearGridSurface(vtkRectilinearGrid *input, 00195 vtkPolyData *output); 00197 00198 void ExecuteFaceQuads(vtkDataSet *input, 00199 vtkPolyData *output, 00200 int maxFlag, 00201 int originExtents[3], 00202 int ext[6], 00203 int aAxis, 00204 int bAxis, 00205 int cAxis); 00206 00208 00210 int IsGhostFace(int axis0, 00211 int maxFlag, 00212 int dims[3], 00213 vtkUnsignedCharArray *ghostArray); 00215 00216 vtkPlane *ClipPlane; 00217 vtkExtractCTHPartInternal* Internals; 00218 00219 // Internal Pipeline elements 00220 vtkDoubleArray *PointVolumeFraction; 00221 00222 #ifdef EXTRACT_USE_IMAGE_DATA 00223 vtkImageData *Data; 00224 #else 00225 vtkUniformGrid *Data; 00226 #endif 00227 00228 vtkContourFilter *Contour; 00229 vtkAppendPolyData *Append2; 00230 vtkClipPolyData *Clip1; 00231 vtkCutter *Cut; 00232 vtkClipPolyData *Clip2; 00233 00234 vtkPolyData *PolyData; 00235 vtkPolyData *RPolyData; 00236 vtkPolyData *SurfacePolyData; 00237 00238 vtkRectilinearGrid *RData; 00239 vtkContourFilter *RContour; 00240 vtkAppendPolyData *RAppend2; 00241 vtkClipPolyData *RClip1; 00242 vtkCutter *RCut; 00243 vtkClipPolyData *RClip2; 00244 00245 void EvaluateVolumeFractionType(vtkRectilinearGrid* rg, 00246 vtkCompositeDataSet* input); 00247 int VolumeFractionType; 00248 double VolumeFractionSurfaceValue; 00249 double VolumeFractionSurfaceValueInternal; 00250 int OverwriteVolumeFractionSurfaceValue; 00251 00252 vtkBoundingBox *Bounds; // Whole bounds (dataset over all the processors) 00253 00254 vtkMultiProcessController *Controller; 00255 private: 00256 vtkExtractCTHPart(const vtkExtractCTHPart&); // Not implemented. 00257 void operator=(const vtkExtractCTHPart&); // Not implemented. 00258 }; 00259 #endif