00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
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
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
00076 void RemoveAllVolumeArrayNames();
00078
00080
00084 void AddDoubleVolumeArrayName(char* arrayName);
00085 void AddFloatVolumeArrayName(char* arrayName);
00086 void AddUnsignedCharVolumeArrayName(char* arrayName);
00087
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,
00185 #else
00186 vtkUniformGrid *input,
00187 #endif
00188 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
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;
00253
00254 vtkMultiProcessController *Controller;
00255 private:
00256 vtkExtractCTHPart(const vtkExtractCTHPart&);
00257 void operator=(const vtkExtractCTHPart&);
00258 };
00259 #endif