You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.4 KiB
C
153 lines
5.4 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkAppendDataSets.h
|
||
|
|
||
|
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.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkAppendDataSets
|
||
|
* @brief Appends one or more datasets together into a single output vtkPointSet.
|
||
|
*
|
||
|
* vtkAppendDataSets is a filter that appends one of more datasets into a single output
|
||
|
* point set. The type of the output is set with the OutputDataSetType option. Only inputs
|
||
|
* that can be converted to the selected output dataset type are appended to the output.
|
||
|
* By default, the output is vtkUnstructuredGrid, and all input types can be appended to it.
|
||
|
* If the OutputDataSetType is set to produce vtkPolyData, then only datasets that can be
|
||
|
* converted to vtkPolyData (i.e., vtkPolyData) are appended to the output.
|
||
|
*
|
||
|
* All cells are extracted and appended, but point and cell attributes (i.e., scalars,
|
||
|
* vectors, normals, field data, etc.) are extracted and appended only if all datasets
|
||
|
* have the same point and/or cell attributes available. (For example, if one dataset
|
||
|
* has scalars but another does not, scalars will not be appended.)
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkAppendFilter vtkAppendPolyData
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkAppendDataSets_h
|
||
|
#define vtkAppendDataSets_h
|
||
|
|
||
|
#include "vtkFiltersCoreModule.h" // For export macro
|
||
|
#include "vtkPointSetAlgorithm.h"
|
||
|
|
||
|
class vtkDataSet;
|
||
|
class vtkDataSetCollection;
|
||
|
|
||
|
class VTKFILTERSCORE_EXPORT vtkAppendDataSets : public vtkPointSetAlgorithm
|
||
|
{
|
||
|
public:
|
||
|
static vtkAppendDataSets* New();
|
||
|
vtkTypeMacro(vtkAppendDataSets, vtkPointSetAlgorithm);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set if the filter should merge coincidental points
|
||
|
* Note: The filter will only merge points if the ghost cell array doesn't exist
|
||
|
* Defaults to Off
|
||
|
*/
|
||
|
vtkGetMacro(MergePoints, bool);
|
||
|
vtkSetMacro(MergePoints, bool);
|
||
|
vtkBooleanMacro(MergePoints, bool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the tolerance to use to find coincident points when `MergePoints`
|
||
|
* is `true`. Default is 0.0.
|
||
|
*
|
||
|
* This is simply passed on to the internal vtkLocator used to merge points.
|
||
|
* @sa `vtkLocator::SetTolerance`.
|
||
|
*/
|
||
|
vtkSetClampMacro(Tolerance, double, 0.0, VTK_DOUBLE_MAX);
|
||
|
vtkGetMacro(Tolerance, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set whether Tolerance is treated as an absolute or relative tolerance.
|
||
|
* The default is to treat it as an absolute tolerance. When off, the
|
||
|
* tolerance is multiplied by the diagonal of the bounding box of the input.
|
||
|
*/
|
||
|
vtkSetMacro(ToleranceIsAbsolute, bool);
|
||
|
vtkGetMacro(ToleranceIsAbsolute, bool);
|
||
|
vtkBooleanMacro(ToleranceIsAbsolute, bool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the output type produced by this filter. Only input datasets compatible with the
|
||
|
* output type will be merged in the output. For example, if the output type is vtkPolyData, then
|
||
|
* blocks of type vtkImageData, vtkStructuredGrid, etc. will not be merged - only vtkPolyData
|
||
|
* can be merged into a vtkPolyData. On the other hand, if the output type is
|
||
|
* vtkUnstructuredGrid, then blocks of almost any type will be merged in the output.
|
||
|
* Valid values are VTK_POLY_DATA and VTK_UNSTRUCTURED_GRID defined in vtkType.h.
|
||
|
* Defaults to VTK_UNSTRUCTURED_GRID.
|
||
|
*/
|
||
|
vtkSetMacro(OutputDataSetType, int);
|
||
|
vtkGetMacro(OutputDataSetType, int);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/get the desired precision for the output types. See the documentation
|
||
|
* for the vtkAlgorithm::Precision enum for an explanation of the available
|
||
|
* precision settings.
|
||
|
*/
|
||
|
vtkSetClampMacro(OutputPointsPrecision, int, SINGLE_PRECISION, DEFAULT_PRECISION);
|
||
|
vtkGetMacro(OutputPointsPrecision, int);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* see vtkAlgorithm for details
|
||
|
*/
|
||
|
vtkTypeBool ProcessRequest(
|
||
|
vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
|
||
|
protected:
|
||
|
vtkAppendDataSets();
|
||
|
~vtkAppendDataSets() override;
|
||
|
|
||
|
// Usual data generation method
|
||
|
int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
|
||
|
vtkInformationVector* outputVector) override;
|
||
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
virtual int RequestUpdateExtent(vtkInformation*, vtkInformationVector**, vtkInformationVector*);
|
||
|
int FillInputPortInformation(int port, vtkInformation* info) override;
|
||
|
|
||
|
// If true we will attempt to merge points. Must also not have
|
||
|
// ghost cells defined.
|
||
|
bool MergePoints;
|
||
|
|
||
|
// Tolerance used for point merging
|
||
|
double Tolerance;
|
||
|
|
||
|
// If true, tolerance is used as is. If false, tolerance is multiplied by
|
||
|
// the diagonal of the bounding box of the input.
|
||
|
bool ToleranceIsAbsolute;
|
||
|
|
||
|
// Output data set type.
|
||
|
int OutputDataSetType;
|
||
|
|
||
|
// Precision of output points.
|
||
|
int OutputPointsPrecision;
|
||
|
|
||
|
private:
|
||
|
vtkAppendDataSets(const vtkAppendDataSets&) = delete;
|
||
|
void operator=(const vtkAppendDataSets&) = delete;
|
||
|
|
||
|
// Get all input data sets that have points, cells, or both.
|
||
|
// Caller must delete the returned vtkDataSetCollection.
|
||
|
vtkDataSetCollection* GetNonEmptyInputs(vtkInformationVector** inputVector);
|
||
|
};
|
||
|
|
||
|
#endif
|