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.

120 lines
4.0 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkTextureMapToCylinder.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 vtkTextureMapToCylinder
* @brief generate texture coordinates by mapping points to cylinder
*
* vtkTextureMapToCylinder is a filter that generates 2D texture coordinates
* by mapping input dataset points onto a cylinder. The cylinder can either be
* user specified or generated automatically. (The cylinder is generated
* automatically by computing the axis of the cylinder.) Note that the
* generated texture coordinates for the s-coordinate ranges from (0-1)
* (corresponding to angle of 0->360 around axis), while the mapping of
* the t-coordinate is controlled by the projection of points along the axis.
*
* To specify a cylinder manually, you must provide two points that
* define the axis of the cylinder. The length of the axis will affect the
* t-coordinates.
*
* A special ivar controls how the s-coordinate is generated. If PreventSeam
* is set to true, the s-texture varies from 0->1 and then 1->0 (corresponding
* to angles of 0->180 and 180->360).
*
* @warning
* Since the resulting texture s-coordinate will lie between (0,1), and the
* origin of the texture coordinates is not user-controllable, you may want
* to use the class vtkTransformTexture to linearly scale and shift the origin
* of the texture coordinates.
*
* @sa
* vtkTextureMapToPlane vtkTextureMapToSphere
* vtkTransformTexture vtkThresholdTextureCoords
*/
#ifndef vtkTextureMapToCylinder_h
#define vtkTextureMapToCylinder_h
#include "vtkDataSetAlgorithm.h"
#include "vtkFiltersTextureModule.h" // For export macro
class VTKFILTERSTEXTURE_EXPORT vtkTextureMapToCylinder : public vtkDataSetAlgorithm
{
public:
vtkTypeMacro(vtkTextureMapToCylinder, vtkDataSetAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Create object with cylinder axis parallel to z-axis (points (0,0,-0.5)
* and (0,0,0.5)). The PreventSeam ivar is set to true. The cylinder is
* automatically generated.
*/
static vtkTextureMapToCylinder* New();
//@{
/**
* Specify the first point defining the cylinder axis,
*/
vtkSetVector3Macro(Point1, double);
vtkGetVectorMacro(Point1, double, 3);
//@}
//@{
/**
* Specify the second point defining the cylinder axis,
*/
vtkSetVector3Macro(Point2, double);
vtkGetVectorMacro(Point2, double, 3);
//@}
//@{
/**
* Turn on/off automatic cylinder generation. This means it automatically
* finds the cylinder center and axis.
*/
vtkSetMacro(AutomaticCylinderGeneration, vtkTypeBool);
vtkGetMacro(AutomaticCylinderGeneration, vtkTypeBool);
vtkBooleanMacro(AutomaticCylinderGeneration, vtkTypeBool);
//@}
//@{
/**
* Control how the texture coordinates are generated. If PreventSeam is
* set, the s-coordinate ranges from 0->1 and 1->0 corresponding to the
* angle variation from 0->180 and 180->0. Otherwise, the s-coordinate
* ranges from 0->1 from 0->360 degrees.
*/
vtkSetMacro(PreventSeam, vtkTypeBool);
vtkGetMacro(PreventSeam, vtkTypeBool);
vtkBooleanMacro(PreventSeam, vtkTypeBool);
//@}
protected:
vtkTextureMapToCylinder();
~vtkTextureMapToCylinder() override {}
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
double Point1[3];
double Point2[3];
vtkTypeBool AutomaticCylinderGeneration;
vtkTypeBool PreventSeam;
private:
vtkTextureMapToCylinder(const vtkTextureMapToCylinder&) = delete;
void operator=(const vtkTextureMapToCylinder&) = delete;
};
#endif