1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkProjectSphereFilter.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 vtkProjectSphereFilter
* @brief A filter to 'unroll' a sphere. The
* unroll longitude is -180.
*
*
*/
#ifndef vtkProjectSphereFilter_h
#define vtkProjectSphereFilter_h
#include "vtkFiltersGeometryModule.h" // For export macro
#include "vtkPointSetAlgorithm.h"
class vtkCell;
class vtkCellArray;
class vtkDataSetAttributes;
class vtkIdList;
class vtkIncrementalPointLocator;
class vtkUnstructuredGrid;
class VTKFILTERSGEOMETRY_EXPORT vtkProjectSphereFilter :
public vtkPointSetAlgorithm
{
public:
vtkTypeMacro(vtkProjectSphereFilter, vtkPointSetAlgorithm);
void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE;
static vtkProjectSphereFilter *New();
//@{
/**
* Set the center of the sphere to be split. Default is 0,0,0.
*/
vtkSetVector3Macro(Center,double);
vtkGetVectorMacro(Center,double,3);
//@}
//@{
/**
* Specify whether or not to keep the cells using a point at
* a pole. The default is false.
*/
vtkGetMacro(KeepPolePoints, bool);
vtkSetMacro(KeepPolePoints, bool);
vtkBooleanMacro(KeepPolePoints, bool);
//@}
//@{
/**
* Specify whether (true) or not to translate the points in the projected
* transformation such that the input point with the smallest
* radius is at 0. The default is false.
*/
vtkGetMacro(TranslateZ, bool);
vtkSetMacro(TranslateZ, bool);
vtkBooleanMacro(TranslateZ, bool);
//@}
protected:
vtkProjectSphereFilter();
~vtkProjectSphereFilter() VTK_OVERRIDE;
int FillInputPortInformation(int port, vtkInformation *info) VTK_OVERRIDE;
int RequestData(vtkInformation *, vtkInformationVector **,
vtkInformationVector *) VTK_OVERRIDE;
void TransformPointInformation(vtkPointSet* input, vtkPointSet* output, vtkIdList*);
void TransformCellInformation(vtkPointSet* input, vtkPointSet* output, vtkIdList*);
void TransformTensors(vtkIdType id, double* coord, vtkDataSetAttributes* arrays);
/**
* Parallel part of the algorithm to figure out the closest point
* to the centerline (i.e. line connecting -90 latitude to 90 latitude)
* if we don't build cells using points at the poles.
*/
virtual void ComputePointsClosestToCenterLine(double, vtkIdList*)
{}
/**
* If TranslateZ is true then this is the method that computes
* the amount to translate.
*/
virtual double GetZTranslation(vtkPointSet* input);
/**
* Split a cell into multiple cells because it stretches across the
* SplitLongitude. splitSide is 1 for left side and 0 for sight side.
*/
void SplitCell( vtkPointSet* input, vtkPointSet* output, vtkIdType inputCellId,
vtkIncrementalPointLocator* locator, vtkCellArray* connectivity,
int splitSide);
void SetCellInformation(
vtkUnstructuredGrid* output, vtkCell* cell, vtkIdType numberOfNewCells);
private:
vtkProjectSphereFilter(const vtkProjectSphereFilter &) VTK_DELETE_FUNCTION;
void operator=(const vtkProjectSphereFilter &) VTK_DELETE_FUNCTION;
double Center[3];
const double SplitLongitude;
bool KeepPolePoints;
bool TranslateZ;
};
#endif // vtkProjectSphereFilter_h
|