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.
96 lines
3.2 KiB
C
96 lines
3.2 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkSMPMergePolyDataHelper.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 vtkSMPMergePolyDataHelper
|
||
|
* @brief Utility class for merging poly data in parallel
|
||
|
* This class is designed as a utility class to help merging of poly data
|
||
|
* generated by filters that generate multiple polydata outputs and the associated
|
||
|
* locators. It requires that the filter uses vtkSMPMergePoints which creates
|
||
|
* a number of necessary data structures.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkSMPMergePolyDataHelper_h
|
||
|
#define vtkSMPMergePolyDataHelper_h
|
||
|
|
||
|
#include "vtkConfigure.h"
|
||
|
#include "vtkFiltersSMPModule.h"
|
||
|
|
||
|
#include <vector>
|
||
|
|
||
|
class vtkPolyData;
|
||
|
class vtkSMPMergePoints;
|
||
|
class vtkIdList;
|
||
|
|
||
|
class VTKFILTERSSMP_EXPORT vtkSMPMergePolyDataHelper
|
||
|
{
|
||
|
public:
|
||
|
//@{
|
||
|
/**
|
||
|
* This is the data structure needed by the MergePolyData function.
|
||
|
* Each input is represented by a polydata (Input), a locator generated
|
||
|
* using identical binning structure (Locator) and offset structures
|
||
|
* for each vtkCellArray type. These offsets allow semi-random access
|
||
|
* to the cell arrays. They should store offsets to where cells start
|
||
|
* in the cell arrays. Each offset can be for 1 or more cells. The finer
|
||
|
* the granularity, the better the parallelism.
|
||
|
*/
|
||
|
struct InputData
|
||
|
{
|
||
|
vtkPolyData* Input;
|
||
|
vtkSMPMergePoints* Locator;
|
||
|
vtkIdList* VertCellOffsets;
|
||
|
vtkIdList* VertConnOffsets;
|
||
|
vtkIdList* LineCellOffsets;
|
||
|
vtkIdList* LineConnOffsets;
|
||
|
vtkIdList* PolyCellOffsets;
|
||
|
vtkIdList* PolyConnOffsets;
|
||
|
//@}
|
||
|
|
||
|
InputData(vtkPolyData* input, vtkSMPMergePoints* locator, vtkIdList* vertCellOffsets,
|
||
|
vtkIdList* vertConnOffsets, vtkIdList* lineCellOffsets, vtkIdList* lineConnOffsets,
|
||
|
vtkIdList* polyCellOffsets, vtkIdList* polyConnOffsets)
|
||
|
: Input(input)
|
||
|
, Locator(locator)
|
||
|
, VertCellOffsets(vertCellOffsets)
|
||
|
, VertConnOffsets(vertConnOffsets)
|
||
|
, LineCellOffsets(lineCellOffsets)
|
||
|
, LineConnOffsets(lineConnOffsets)
|
||
|
, PolyCellOffsets(polyCellOffsets)
|
||
|
, PolyConnOffsets(polyConnOffsets)
|
||
|
{
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Given a vector of vtkSMPMergePolyDataHelper::InputData, it merges
|
||
|
* them and returns a new vtkPolyData (which needs to be deleted by the
|
||
|
* caller). Note that this function uses the first input as a temporary
|
||
|
* merging target so it will be modified in place. If you need to preserve
|
||
|
* it, use DeepCopy before passing to MergePolyData.
|
||
|
*/
|
||
|
static vtkPolyData* MergePolyData(std::vector<InputData>& inputs);
|
||
|
|
||
|
protected:
|
||
|
vtkSMPMergePolyDataHelper();
|
||
|
~vtkSMPMergePolyDataHelper();
|
||
|
|
||
|
private:
|
||
|
vtkSMPMergePolyDataHelper(const vtkSMPMergePolyDataHelper&) = delete;
|
||
|
void operator=(const vtkSMPMergePolyDataHelper&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
// VTK-HeaderTest-Exclude: vtkSMPMergePolyDataHelper.h
|