VTK  9.3.0
vtkAMRCutPlane.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
15#ifndef vtkAMRCutPlane_h
16#define vtkAMRCutPlane_h
17
18#include "vtkFiltersAMRModule.h" // For export macro
20
21#include <map> // For STL map
22#include <vector> // For STL vector
23
24VTK_ABI_NAMESPACE_BEGIN
28class vtkInformation;
30class vtkIndent;
31class vtkPlane;
32class vtkUniformGrid;
33class vtkCell;
34class vtkPoints;
35class vtkCellArray;
36class vtkPointData;
37class vtkCellData;
38
39class VTKFILTERSAMR_EXPORT vtkAMRCutPlane : public vtkMultiBlockDataSetAlgorithm
40{
41public:
44 void PrintSelf(ostream& oss, vtkIndent indent) override;
45
47
50 vtkSetVector3Macro(Center, double);
52
54
57 vtkSetVector3Macro(Normal, double);
59
61
64 vtkSetMacro(LevelOfResolution, int);
65 vtkGetMacro(LevelOfResolution, int);
67
69
74 vtkSetMacro(UseNativeCutter, bool);
75 vtkGetMacro(UseNativeCutter, bool);
76 vtkBooleanMacro(UseNativeCutter, bool);
78
80
85 vtkGetObjectMacro(Controller, vtkMultiProcessController);
87
88 // Standard pipeline routines
89
91 int FillInputPortInformation(int port, vtkInformation* info) override;
92 int FillOutputPortInformation(int port, vtkInformation* info) override;
93
99 vtkInformationVector* outputVector) override;
100
105
109 vtkSetMacro(InitialRequest, bool);
110
111protected:
113 ~vtkAMRCutPlane() override;
114
120
125 std::map<vtkIdType, vtkIdType>& gridPntMapping, vtkPoints* nodes, vtkCellArray* cells);
126
132 std::map<vtkIdType, vtkIdType>& gridPntMapping, vtkIdType NumNodes, vtkPointData* PD);
133
139 vtkUniformGrid* grid, std::vector<vtkIdType>& cellIdxList, vtkCellData* CD);
140
148
149 // Descriription:
150 // Initializes the cut-plane center given the min/max bounds.
151 void InitializeCenter(double min[3], double max[3]);
152
154
157 bool PlaneIntersectsAMRBox(vtkPlane* pl, double bounds[6]);
158 bool PlaneIntersectsAMRBox(double plane[4], double bounds[6]);
160
165
170
175 vtkPlane* cutPlane, unsigned int blockIdx, vtkUniformGrid* grid, vtkMultiBlockDataSet* dataSet);
176
178 double Center[3];
179 double Normal[3];
183
184 std::vector<int> BlocksToLoad;
185
186private:
187 vtkAMRCutPlane(const vtkAMRCutPlane&) = delete;
188 void operator=(const vtkAMRCutPlane&) = delete;
189};
190
191VTK_ABI_NAMESPACE_END
192#endif /* vtkAMRCutPlane_h */
A concrete instance of vtkMultiBlockDataSet that provides functionality for cutting an AMR dataset (a...
bool IsAMRData2D(vtkOverlappingAMR *input)
A utility function that checks if the input AMR data is 2-D.
vtkPlane * GetCutPlane(vtkOverlappingAMR *metadata)
Returns the cut-plane defined by a vtkCutPlane instance based on the user-supplied center and normal.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void ExtractCellFromGrid(vtkUniformGrid *grid, vtkCell *cell, std::map< vtkIdType, vtkIdType > &gridPntMapping, vtkPoints *nodes, vtkCellArray *cells)
Extracts cell.
std::vector< int > BlocksToLoad
void InitializeCenter(double min[3], double max[3])
virtual void SetController(vtkMultiProcessController *)
Set/Get a multiprocess controller for parallel processing.
void ComputeAMRBlocksToLoad(vtkPlane *p, vtkOverlappingAMR *m)
Given a cut-plane, p, and the metadata, m, this method computes which blocks need to be loaded.
static vtkAMRCutPlane * New()
~vtkAMRCutPlane() override
bool PlaneIntersectsAMRBox(double plane[4], double bounds[6])
Determines if a plane intersects with an AMR box.
int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Performs upstream requests to the reader.
void CutAMRBlock(vtkPlane *cutPlane, unsigned int blockIdx, vtkUniformGrid *grid, vtkMultiBlockDataSet *dataSet)
Applies cutting to an AMR block.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
vtkMultiProcessController * Controller
int RequestInformation(vtkInformation *rqst, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
Gets the metadata from upstream module and determines which blocks should be loaded by this instance.
void ExtractPointDataFromGrid(vtkUniformGrid *grid, std::map< vtkIdType, vtkIdType > &gridPntMapping, vtkIdType NumNodes, vtkPointData *PD)
Given the grid and a subset ID pair, grid IDs mapping to the extracted grid IDs, extract the point da...
void PrintSelf(ostream &oss, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool PlaneIntersectsAMRBox(vtkPlane *pl, double bounds[6])
Determines if a plane intersects with an AMR box.
bool PlaneIntersectsCell(vtkPlane *pl, vtkCell *cell)
Determines if a plane intersects with a grid cell.
void ExtractCellDataFromGrid(vtkUniformGrid *grid, std::vector< vtkIdType > &cellIdxList, vtkCellData *CD)
Given the grid and the list of cells that are extracted, extract the corresponding cell data.
object to represent cell connectivity
represent and manipulate cell attribute data
Definition vtkCellData.h:31
abstract class to specify cell behavior
Definition vtkCell.h:50
a simple class to control print indentation
Definition vtkIndent.h:29
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Superclass for algorithms that produce only vtkMultiBlockDataSet as output.
Composite dataset that organizes datasets into blocks.
Multiprocessing communication superclass.
hierarchical dataset of vtkUniformGrids
perform various plane computations
Definition vtkPlane.h:26
represent and manipulate point attribute data
represent and manipulate 3D points
Definition vtkPoints.h:29
image data with blanking
int vtkIdType
Definition vtkType.h:315
#define max(a, b)