Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

221 lines
7.0 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkExtractCTHPart.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkExtractCTHPart - Generates surface of an CTH volume fraction.
// .SECTION Description
// vtkExtractCTHPart is a filter that is specialized for creating
// visualization of a CTH simulation. First it converts the cell data
// to point data. It contours the selected volume fraction at a value
// of 0.5. The user has the option of clipping the part with a plane.
// Clipped surfaces of the part are generated.
#ifndef __vtkExtractCTHPart_h
#define __vtkExtractCTHPart_h
#include "vtkPolyDataAlgorithm.h"
class vtkPlane;
class vtkDataArray;
class vtkDoubleArray;
class vtkRectilinearGrid;
class vtkExtractCTHPartInternal;
class vtkHierarchicalDataSet;
class vtkPolyData;
class vtkUniformGrid;
class vtkImageData;
class vtkDataSet;
class vtkContourFilter;
class vtkAppendPolyData;
class vtkDataSetSurfaceFilter;
class vtkClipPolyData;
class vtkCutter;
class vtkMultiProcessController;
//#define EXTRACT_USE_IMAGE_DATA 1
class VTK_PARALLEL_EXPORT vtkExtractCTHPart : public vtkPolyDataAlgorithm
{
public:
vtkTypeRevisionMacro(vtkExtractCTHPart,vtkPolyDataAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// key to record the bounds of the hierarchical dataset.
static vtkInformationDoubleVectorKey *BOUNDS();
// Description:
// Construct object with initial range (0,1) and single contour value
// of 0.0.
static vtkExtractCTHPart *New();
// Description:
// Names of cell volume fraction arrays to extract.
void RemoveAllVolumeArrayNames();
void AddVolumeArrayName(char* arrayName);
int GetNumberOfVolumeArrayNames();
const char* GetVolumeArrayName(int idx);
// Description:
// Set, get or maninpulate the implicit clipping plane.
void SetClipPlane(vtkPlane *clipPlane);
vtkGetObjectMacro(ClipPlane, vtkPlane);
// Description:
// Look at clip plane to compute MTime.
unsigned long GetMTime();
// Description:
// Set the controller used to coordinate parallel processing.
void SetController(vtkMultiProcessController* controller);
// Return the controller used to coordinate parallel processing. By default,
// it is the global controller.
vtkGetObjectMacro(Controller,vtkMultiProcessController);
protected:
vtkExtractCTHPart();
~vtkExtractCTHPart();
void SetOutputData(int idx, vtkPolyData* d);
int RequestInformation(vtkInformation *request,
vtkInformationVector **inputVector,
vtkInformationVector *outputVector);
int RequestData(vtkInformation *, vtkInformationVector **,
vtkInformationVector *);
// Description:
// the input is a hierarchy of vtkUniformGrid or one level of
// vtkRectilinearGrid. The output is a hierarchy of vtkPolyData.
// Description:
// Compute the bounds over the composite dataset, some sub-dataset
// can be on other processors.
void ComputeBounds(vtkHierarchicalDataSet *input,
int processNumber,
int numProcessors);
// Description:
// The processors are views as a heap tree. The root is the processor of
// id 0.
int GetParentProcessor(int proc);
int GetLeftChildProcessor(int proc);
void ExecutePart(const char *arrayName,
vtkHierarchicalDataSet *input,
vtkAppendPolyData *appendSurface,
vtkAppendPolyData *append);
void ExecutePartOnUniformGrid(const char *arrayName,
#ifdef EXTRACT_USE_IMAGE_DATA
vtkImageData *input,
#else
vtkUniformGrid *input,
#endif
vtkAppendPolyData *appendSurface,
vtkAppendPolyData *append);
void ExecutePartOnRectilinearGrid( const char *arrayName,
vtkRectilinearGrid *input,
vtkAppendPolyData *appendSurface,
vtkAppendPolyData *append);
void ExecuteCellDataToPointData(vtkDataArray *cellVolumeFraction,
vtkDoubleArray *pointVolumeFraction,
int *dims);
int FillInputPortInformation(int port,
vtkInformation *info);
void CreateInternalPipeline();
void DeleteInternalPipeline();
// Description:
// Append quads for faces of the block that actually on the bounds
// of the hierarchical dataset. Deals with ghost cells.
// Return true if the output is not empty.
int ExtractUniformGridSurface(
#ifdef EXTRACT_USE_IMAGE_DATA
vtkImageData *input,
#else
vtkUniformGrid *input,
#endif
vtkPolyData *output);
// Description:
// Append quads for faces of the block that actually on the bounds
// of the hierarchical dataset. Deals with ghost cells.
// Return true if the output is not empty.
int ExtractRectilinearGridSurface(vtkRectilinearGrid *input,
vtkPolyData *output);
void ExecuteFaceQuads(vtkDataSet *input,
vtkPolyData *output,
int maxFlag,
int originExtents[3],
int ext[6],
int aAxis,
int bAxis,
int cAxis);
// Description:
// Is block face on axis0 (either min or max depending on the maxFlag)
// composed of only ghost cells?
// \pre valid_axis0: axis0>=0 && axis0<=2
int IsGhostFace(int axis0,
int maxFlag,
int dims[3],
vtkUnsignedCharArray *ghostArray);
vtkPlane *ClipPlane;
vtkExtractCTHPartInternal* Internals;
// Internal Pipeline elements
vtkDoubleArray *PointVolumeFraction;
#ifdef EXTRACT_USE_IMAGE_DATA
vtkImageData *Data;
#else
vtkUniformGrid *Data;
#endif
vtkContourFilter *Contour;
vtkAppendPolyData *Append2;
vtkClipPolyData *Clip1;
vtkCutter *Cut;
vtkClipPolyData *Clip2;
vtkPolyData *PolyData;
vtkPolyData *RPolyData;
vtkPolyData *SurfacePolyData;
vtkRectilinearGrid *RData;
vtkContourFilter *RContour;
vtkAppendPolyData *RAppend2;
vtkClipPolyData *RClip1;
vtkCutter *RCut;
vtkClipPolyData *RClip2;
double Bounds[6]; // Whole bounds (dataset over all the processors)
vtkMultiProcessController *Controller;
private:
vtkExtractCTHPart(const vtkExtractCTHPart&); // Not implemented.
void operator=(const vtkExtractCTHPart&); // Not implemented.
};
#endif