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.
237 lines
7.8 KiB
C++
237 lines
7.8 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkGlyphSource2D.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 vtkGlyphSource2D
|
|
* @brief create 2D glyphs represented by vtkPolyData
|
|
*
|
|
* vtkGlyphSource2D can generate a family of 2D glyphs each of which lies
|
|
* in the x-y plane (i.e., the z-coordinate is zero). The class is a helper
|
|
* class to be used with vtkGlyph2D and vtkXYPlotActor.
|
|
*
|
|
* To use this class, specify the glyph type to use and its
|
|
* attributes. Attributes include its position (i.e., center point), scale,
|
|
* color, and whether the symbol is filled or not (a polygon or closed line
|
|
* sequence). You can also put a short line through the glyph running from -x
|
|
* to +x (the glyph looks like it's on a line), or a cross.
|
|
*/
|
|
|
|
#ifndef vtkGlyphSource2D_h
|
|
#define vtkGlyphSource2D_h
|
|
|
|
#include "vtkFiltersSourcesModule.h" // For export macro
|
|
#include "vtkPolyDataAlgorithm.h"
|
|
|
|
#define VTK_NO_GLYPH 0
|
|
#define VTK_VERTEX_GLYPH 1
|
|
#define VTK_DASH_GLYPH 2
|
|
#define VTK_CROSS_GLYPH 3
|
|
#define VTK_THICKCROSS_GLYPH 4
|
|
#define VTK_TRIANGLE_GLYPH 5
|
|
#define VTK_SQUARE_GLYPH 6
|
|
#define VTK_CIRCLE_GLYPH 7
|
|
#define VTK_DIAMOND_GLYPH 8
|
|
#define VTK_ARROW_GLYPH 9
|
|
#define VTK_THICKARROW_GLYPH 10
|
|
#define VTK_HOOKEDARROW_GLYPH 11
|
|
#define VTK_EDGEARROW_GLYPH 12
|
|
|
|
#define VTK_MAX_CIRCLE_RESOLUTION 1024
|
|
|
|
class vtkPoints;
|
|
class vtkUnsignedCharArray;
|
|
class vtkCellArray;
|
|
|
|
class VTKFILTERSSOURCES_EXPORT vtkGlyphSource2D : public vtkPolyDataAlgorithm
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkGlyphSource2D,vtkPolyDataAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
|
|
|
|
/**
|
|
* Construct a vertex glyph centered at the origin, scale 1.0, white in
|
|
* color, filled, with line segment passing through the point.
|
|
*/
|
|
static vtkGlyphSource2D *New();
|
|
|
|
//@{
|
|
/**
|
|
* Set the center of the glyph. By default the center is (0,0,0).
|
|
*/
|
|
vtkSetVector3Macro(Center,double);
|
|
vtkGetVectorMacro(Center,double,3);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the scale of the glyph. Note that the glyphs are designed
|
|
* to fit in the (1,1) rectangle.
|
|
*/
|
|
vtkSetClampMacro(Scale,double,0.0,VTK_DOUBLE_MAX);
|
|
vtkGetMacro(Scale,double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the scale of optional portions of the glyph (e.g., the
|
|
* dash and cross is DashOn() and CrossOn()).
|
|
*/
|
|
vtkSetClampMacro(Scale2,double,0.0,VTK_DOUBLE_MAX);
|
|
vtkGetMacro(Scale2,double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the color of the glyph. The default color is white.
|
|
*/
|
|
vtkSetVector3Macro(Color,double);
|
|
vtkGetVectorMacro(Color,double,3);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify whether the glyph is filled (a polygon) or not (a
|
|
* closed polygon defined by line segments). This only applies
|
|
* to 2D closed glyphs.
|
|
*/
|
|
vtkSetMacro(Filled,int);
|
|
vtkGetMacro(Filled,int);
|
|
vtkBooleanMacro(Filled,int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify whether a short line segment is drawn through the
|
|
* glyph. (This is in addition to the glyph. If the glyph type
|
|
* is set to "Dash" there is no need to enable this flag.)
|
|
*/
|
|
vtkSetMacro(Dash,int);
|
|
vtkGetMacro(Dash,int);
|
|
vtkBooleanMacro(Dash,int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify whether a cross is drawn as part of the glyph. (This
|
|
* is in addition to the glyph. If the glyph type is set to
|
|
* "Cross" there is no need to enable this flag.)
|
|
*/
|
|
vtkSetMacro(Cross,int);
|
|
vtkGetMacro(Cross,int);
|
|
vtkBooleanMacro(Cross,int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify an angle (in degrees) to rotate the glyph around
|
|
* the z-axis. Using this ivar, it is possible to generate
|
|
* rotated glyphs (e.g., crosses, arrows, etc.)
|
|
*/
|
|
vtkSetMacro(RotationAngle,double);
|
|
vtkGetMacro(RotationAngle,double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify the number of points that form the circular glyph.
|
|
*/
|
|
vtkSetClampMacro(Resolution,int,3,VTK_MAX_CIRCLE_RESOLUTION);
|
|
vtkGetMacro(Resolution,int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify the type of glyph to generate.
|
|
*/
|
|
vtkSetClampMacro(GlyphType,int,VTK_NO_GLYPH,VTK_EDGEARROW_GLYPH);
|
|
vtkGetMacro(GlyphType,int);
|
|
void SetGlyphTypeToNone() {this->SetGlyphType(VTK_NO_GLYPH);}
|
|
void SetGlyphTypeToVertex() {this->SetGlyphType(VTK_VERTEX_GLYPH);}
|
|
void SetGlyphTypeToDash() {this->SetGlyphType(VTK_DASH_GLYPH);}
|
|
void SetGlyphTypeToCross() {this->SetGlyphType(VTK_CROSS_GLYPH);}
|
|
void SetGlyphTypeToThickCross() {this->SetGlyphType(VTK_THICKCROSS_GLYPH);}
|
|
void SetGlyphTypeToTriangle() {this->SetGlyphType(VTK_TRIANGLE_GLYPH);}
|
|
void SetGlyphTypeToSquare() {this->SetGlyphType(VTK_SQUARE_GLYPH);}
|
|
void SetGlyphTypeToCircle() {this->SetGlyphType(VTK_CIRCLE_GLYPH);}
|
|
void SetGlyphTypeToDiamond() {this->SetGlyphType(VTK_DIAMOND_GLYPH);}
|
|
void SetGlyphTypeToArrow() {this->SetGlyphType(VTK_ARROW_GLYPH);}
|
|
void SetGlyphTypeToThickArrow() {this->SetGlyphType(VTK_THICKARROW_GLYPH);}
|
|
void SetGlyphTypeToHookedArrow() {this->SetGlyphType(VTK_HOOKEDARROW_GLYPH);}
|
|
void SetGlyphTypeToEdgeArrow() {this->SetGlyphType(VTK_EDGEARROW_GLYPH);}
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/get the desired precision for the output points.
|
|
* vtkAlgorithm::SINGLE_PRECISION - Output single-precision floating point.
|
|
* vtkAlgorithm::DOUBLE_PRECISION - Output double-precision floating point.
|
|
*/
|
|
vtkSetMacro(OutputPointsPrecision,int);
|
|
vtkGetMacro(OutputPointsPrecision,int);
|
|
//@}
|
|
|
|
protected:
|
|
vtkGlyphSource2D();
|
|
~vtkGlyphSource2D() VTK_OVERRIDE {}
|
|
|
|
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;
|
|
|
|
double Center[3];
|
|
double Scale;
|
|
double Scale2;
|
|
double Color[3];
|
|
int Filled;
|
|
int Dash;
|
|
int Cross;
|
|
int GlyphType;
|
|
double RotationAngle;
|
|
int Resolution;
|
|
int OutputPointsPrecision;
|
|
|
|
void TransformGlyph(vtkPoints *pts);
|
|
void ConvertColor();
|
|
unsigned char RGB[3];
|
|
|
|
void CreateVertex(vtkPoints *pts, vtkCellArray *verts,
|
|
vtkUnsignedCharArray *colors);
|
|
void CreateDash(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors, double scale);
|
|
void CreateCross(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors, double scale);
|
|
void CreateThickCross(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateTriangle(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateSquare(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateCircle(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateDiamond(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateArrow(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateThickArrow(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateHookedArrow(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
void CreateEdgeArrow(vtkPoints *pts, vtkCellArray *lines,
|
|
vtkCellArray *polys, vtkUnsignedCharArray *colors);
|
|
|
|
private:
|
|
vtkGlyphSource2D(const vtkGlyphSource2D&) VTK_DELETE_FUNCTION;
|
|
void operator=(const vtkGlyphSource2D&) VTK_DELETE_FUNCTION;
|
|
};
|
|
|
|
#endif
|