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.
155 lines
6.1 KiB
C
155 lines
6.1 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkIntegrateAttributes.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 vtkIntegrateAttributes
|
||
|
* @brief Integrates lines, surfaces and volume.
|
||
|
*
|
||
|
* Integrates all point and cell data attributes while computing
|
||
|
* length, area or volume. Works for 1D, 2D or 3D. Only one dimensionality
|
||
|
* at a time. For volume, this filter ignores all but 3D cells. It
|
||
|
* will not compute the volume contained in a closed surface.
|
||
|
* The output of this filter is a single point and vertex. The attributes
|
||
|
* for this point and cell will contain the integration results
|
||
|
* for the corresponding input attributes.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkIntegrateAttributes_h
|
||
|
#define vtkIntegrateAttributes_h
|
||
|
|
||
|
#include "vtkFiltersParallelModule.h" // For export macro
|
||
|
#include "vtkUnstructuredGridAlgorithm.h"
|
||
|
|
||
|
class vtkDataSet;
|
||
|
class vtkIdList;
|
||
|
class vtkInformation;
|
||
|
class vtkInformationVector;
|
||
|
class vtkDataSetAttributes;
|
||
|
class vtkMultiProcessController;
|
||
|
|
||
|
class VTKFILTERSPARALLEL_EXPORT vtkIntegrateAttributes : public vtkUnstructuredGridAlgorithm
|
||
|
{
|
||
|
public:
|
||
|
static vtkIntegrateAttributes* New();
|
||
|
vtkTypeMacro(vtkIntegrateAttributes, vtkUnstructuredGridAlgorithm);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set the parallel controller to use. By default, set to.
|
||
|
* `vtkMultiProcessController::GlobalController`.
|
||
|
*/
|
||
|
void SetController(vtkMultiProcessController* controller);
|
||
|
vtkGetObjectMacro(Controller, vtkMultiProcessController);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* If set to true then the filter will divide all output cell data arrays (the integrated values)
|
||
|
* by the computed volume/area of the dataset. Defaults to false.
|
||
|
*/
|
||
|
vtkSetMacro(DivideAllCellDataByVolume, bool);
|
||
|
vtkGetMacro(DivideAllCellDataByVolume, bool);
|
||
|
//@}
|
||
|
|
||
|
protected:
|
||
|
vtkIntegrateAttributes();
|
||
|
~vtkIntegrateAttributes() override;
|
||
|
|
||
|
vtkMultiProcessController* Controller;
|
||
|
|
||
|
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
|
||
|
vtkInformationVector* outputVector) override;
|
||
|
|
||
|
// Create a default executive.
|
||
|
vtkExecutive* CreateDefaultExecutive() override;
|
||
|
|
||
|
int FillInputPortInformation(int, vtkInformation*) override;
|
||
|
|
||
|
int CompareIntegrationDimension(vtkDataSet* output, int dim);
|
||
|
int IntegrationDimension;
|
||
|
|
||
|
// The length, area or volume of the data set. Computed by Execute;
|
||
|
double Sum;
|
||
|
// ToCompute the location of the output point.
|
||
|
double SumCenter[3];
|
||
|
|
||
|
bool DivideAllCellDataByVolume;
|
||
|
|
||
|
void IntegratePolyLine(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegratePolygon(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateTriangleStrip(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateTriangle(vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId,
|
||
|
vtkIdType pt1Id, vtkIdType pt2Id, vtkIdType pt3Id);
|
||
|
void IntegrateTetrahedron(vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId,
|
||
|
vtkIdType pt1Id, vtkIdType pt2Id, vtkIdType pt3Id, vtkIdType pt4Id);
|
||
|
void IntegratePixel(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateVoxel(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateGeneral1DCell(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateGeneral2DCell(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateGeneral3DCell(
|
||
|
vtkDataSet* input, vtkUnstructuredGrid* output, vtkIdType cellId, vtkIdList* cellPtIds);
|
||
|
void IntegrateSatelliteData(vtkDataSetAttributes* inda, vtkDataSetAttributes* outda);
|
||
|
void ZeroAttributes(vtkDataSetAttributes* outda);
|
||
|
int PieceNodeMinToNode0(vtkUnstructuredGrid* data);
|
||
|
void SendPiece(vtkUnstructuredGrid* src);
|
||
|
void ReceivePiece(vtkUnstructuredGrid* mergeTo, int fromId);
|
||
|
|
||
|
// This function assumes the data is in the format of the output of this filter with one
|
||
|
// point/cell having the value computed as its only tuple. It divides each value by sum,
|
||
|
// skipping the last data array if requested (so the volume doesn't get divided by itself
|
||
|
// and set to 1).
|
||
|
static void DivideDataArraysByConstant(
|
||
|
vtkDataSetAttributes* data, bool skipLastArray, double sum);
|
||
|
|
||
|
private:
|
||
|
vtkIntegrateAttributes(const vtkIntegrateAttributes&) = delete;
|
||
|
void operator=(const vtkIntegrateAttributes&) = delete;
|
||
|
|
||
|
class vtkFieldList;
|
||
|
vtkFieldList* CellFieldList;
|
||
|
vtkFieldList* PointFieldList;
|
||
|
int FieldListIndex;
|
||
|
|
||
|
void AllocateAttributes(vtkFieldList& fieldList, vtkDataSetAttributes* outda);
|
||
|
void ExecuteBlock(vtkDataSet* input, vtkUnstructuredGrid* output, int fieldset_index,
|
||
|
vtkFieldList& pdList, vtkFieldList& cdList);
|
||
|
|
||
|
void IntegrateData1(vtkDataSetAttributes* inda, vtkDataSetAttributes* outda, vtkIdType pt1Id,
|
||
|
double k, vtkFieldList& fieldlist, int fieldlist_index);
|
||
|
void IntegrateData2(vtkDataSetAttributes* inda, vtkDataSetAttributes* outda, vtkIdType pt1Id,
|
||
|
vtkIdType pt2Id, double k, vtkFieldList& fieldlist, int fieldlist_index);
|
||
|
void IntegrateData3(vtkDataSetAttributes* inda, vtkDataSetAttributes* outda, vtkIdType pt1Id,
|
||
|
vtkIdType pt2Id, vtkIdType pt3Id, double k, vtkFieldList& fieldlist, int fieldlist_index);
|
||
|
void IntegrateData4(vtkDataSetAttributes* inda, vtkDataSetAttributes* outda, vtkIdType pt1Id,
|
||
|
vtkIdType pt2Id, vtkIdType pt3Id, vtkIdType pt4Id, double k, vtkFieldList& fieldlist,
|
||
|
int fieldlist_index);
|
||
|
|
||
|
public:
|
||
|
enum CommunicationIds
|
||
|
{
|
||
|
IntegrateAttrInfo = 2000,
|
||
|
IntegrateAttrData
|
||
|
};
|
||
|
};
|
||
|
|
||
|
#endif
|