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
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
|
|
|