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.
196 lines
5.9 KiB
C++
196 lines
5.9 KiB
C++
#ifndef vtkScalarBarActorInternal_h
|
|
#define vtkScalarBarActorInternal_h
|
|
|
|
#ifndef __VTK_WRAP__
|
|
|
|
#include "vtkColor.h" // for AnnotationColors, LabelColorMap, and tuples
|
|
#include "vtkRenderingAnnotationModule.h" // For export macro
|
|
#include "vtkSmartPointer.h" // for "smart vectors"
|
|
#include "vtkStdString.h" // for LabelMap
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
class vtkActor2D;
|
|
class vtkCellArray;
|
|
class vtkTextActor;
|
|
class vtkPoints;
|
|
class vtkPolyData;
|
|
class vtkPolyDataMapper2D;
|
|
class vtkUnsignedCharArray;
|
|
class vtkViewport;
|
|
|
|
/// A vector of smart pointers.
|
|
template <class T>
|
|
class VTKRENDERINGANNOTATION_EXPORT vtkSmartVector : public std::vector<vtkSmartPointer<T> >
|
|
{
|
|
public:
|
|
/**\brief Convert to an array of "dumb" pointers for functions
|
|
* that need a contiguous array pointer as input.
|
|
*/
|
|
T** PointerArray()
|
|
{
|
|
// NB: This is relatively evil. But much cheaper than copying the array.
|
|
// It assumes the compiler won't pad the class.
|
|
return reinterpret_cast<T**>(&((*this)[0]));
|
|
}
|
|
};
|
|
|
|
/// A structure to represent pixel coordinates for text or swatch bounds.
|
|
struct vtkScalarBarBox
|
|
{
|
|
/// The position of the box in viewport (pixel) coordinates.
|
|
vtkTuple<int, 2> Posn;
|
|
|
|
/**\brief Size of the box, stored as (thickness, length) not (width, height).
|
|
*
|
|
* Thickness is a measure of the box size perpendicular to the long axis of the scalar bar.
|
|
* When the scalar bar orientation is horizontal, thickness measures height.
|
|
* Length is a measure of the box size parallel to the long axis of the scalar bar.
|
|
* When the scalar bar orientation is horizontal, length measures width.
|
|
*/
|
|
vtkTuple<int, 2> Size;
|
|
};
|
|
|
|
/// Internal state for the scalar bar actor shared with subclasses.
|
|
class VTKRENDERINGANNOTATION_EXPORT vtkScalarBarActorInternal
|
|
{
|
|
public:
|
|
vtkScalarBarActorInternal()
|
|
{
|
|
this->Viewport = nullptr;
|
|
this->SwatchColors = nullptr;
|
|
this->SwatchPts = nullptr;
|
|
this->Polys = nullptr;
|
|
this->AnnotationBoxes = nullptr;
|
|
this->AnnotationBoxesMapper = nullptr;
|
|
this->AnnotationBoxesActor = nullptr;
|
|
this->AnnotationLeaders = nullptr;
|
|
this->AnnotationLeadersMapper = nullptr;
|
|
this->AnnotationLeadersActor = nullptr;
|
|
this->NanSwatch = nullptr;
|
|
this->NanSwatchMapper = nullptr;
|
|
this->NanSwatchActor = nullptr;
|
|
|
|
this->BelowRangeSwatch = nullptr;
|
|
this->BelowRangeSwatchMapper = nullptr;
|
|
this->BelowRangeSwatchActor = nullptr;
|
|
|
|
this->AboveRangeSwatch = nullptr;
|
|
this->AboveRangeSwatchMapper = nullptr;
|
|
this->AboveRangeSwatchActor = nullptr;
|
|
}
|
|
|
|
// Define types for smart vectors containing various base classes.
|
|
typedef vtkSmartVector<vtkTextActor> ActorVector;
|
|
|
|
// Other vector container types.
|
|
typedef std::vector<double> DoubleVector;
|
|
typedef std::vector<vtkColor3ub> ColorVector;
|
|
|
|
/**\brief Cache of dimensions fixed during geometry assembly.
|
|
*
|
|
* Only valid within methods invoked by vtkScalarBarActor::RebuildLayout().
|
|
*/
|
|
//@{
|
|
vtkViewport* Viewport;
|
|
|
|
/// The thickness and length of the (square) NaN swatch.
|
|
double NanSwatchSize;
|
|
|
|
/// The thickness and length of the (square) Below Range swatch.
|
|
double BelowRangeSwatchSize;
|
|
|
|
/// The thickness and length of the (square) Above Range swatch.
|
|
double AboveRangeSwatchSize;
|
|
|
|
/// Space in pixels between swatches when in indexed lookup mode.
|
|
double SwatchPad;
|
|
|
|
/// Number of annotated values (at least
|
|
/// lut->GetNumberOfAnnotatedValues(), but maybe more)
|
|
int NumNotes;
|
|
|
|
/// Number of color swatches to draw for either the continuous or
|
|
/// categorical scalar bar, not including a NaN swatch.
|
|
int NumColors;
|
|
|
|
/// Either NumColors or NumColors + 1, depending on whether the NaN
|
|
/// swatch is to be drawn.
|
|
int NumSwatches;
|
|
|
|
/// Permutation of (0, 1) that transforms thickness,length into
|
|
/// width,height.
|
|
int TL[2]; // VERTICAL => TL={0,1}, HORIZONTAL => TL={1,0}, Size[TL[0]] == width, Size[TL[1]] ==
|
|
// height
|
|
|
|
/// Point coordinates for the scalar bar actor
|
|
vtkPoints* SwatchPts;
|
|
|
|
/// Cells representing color swatches (for the scalar bar actor)
|
|
vtkCellArray* Polys;
|
|
|
|
/// Colors of swatches in \a Polys
|
|
vtkUnsignedCharArray* SwatchColors;
|
|
|
|
/// The bounding box of the entire scalar bar frame.
|
|
vtkScalarBarBox Frame;
|
|
|
|
/// The bounding box of the scalar bar (excluding NaN swatch)
|
|
vtkScalarBarBox ScalarBarBox;
|
|
|
|
/// The bounding box of the NaN swatch
|
|
vtkScalarBarBox NanBox;
|
|
|
|
/// The bounding box of the Below Range
|
|
vtkScalarBarBox BelowRangeSwatchBox;
|
|
|
|
/// The bounding box of the Above Range
|
|
vtkScalarBarBox AboveRangeSwatchBox;
|
|
|
|
/// The bounding box of tick mark anchor points (tick labels are not
|
|
/// fully contained)
|
|
vtkScalarBarBox TickBox;
|
|
|
|
/// The bounding box of the scalar bar title text.
|
|
vtkScalarBarBox TitleBox;
|
|
|
|
/// Map from viewport coordinates to label text of each annotation.
|
|
std::map<double, vtkStdString> Labels;
|
|
|
|
/// Map from viewport coordinates to the leader line color of each
|
|
/// annotation.
|
|
std::map<double, vtkColor3ub> LabelColors;
|
|
//@}
|
|
|
|
/// Cache of classes holding geometry assembled and ready for rendering.
|
|
//@{
|
|
ActorVector TextActors;
|
|
vtkPolyData* AnnotationBoxes;
|
|
vtkPolyDataMapper2D* AnnotationBoxesMapper;
|
|
vtkActor2D* AnnotationBoxesActor;
|
|
vtkPolyData* AnnotationLeaders;
|
|
vtkPolyDataMapper2D* AnnotationLeadersMapper;
|
|
vtkActor2D* AnnotationLeadersActor;
|
|
ActorVector AnnotationLabels;
|
|
DoubleVector AnnotationAnchors;
|
|
ColorVector AnnotationColors;
|
|
vtkPolyData* NanSwatch;
|
|
vtkPolyDataMapper2D* NanSwatchMapper;
|
|
vtkActor2D* NanSwatchActor;
|
|
|
|
vtkPolyData* BelowRangeSwatch;
|
|
vtkPolyDataMapper2D* BelowRangeSwatchMapper;
|
|
vtkActor2D* BelowRangeSwatchActor;
|
|
|
|
vtkPolyData* AboveRangeSwatch;
|
|
vtkPolyDataMapper2D* AboveRangeSwatchMapper;
|
|
vtkActor2D* AboveRangeSwatchActor;
|
|
//@}
|
|
};
|
|
|
|
#endif
|
|
|
|
#endif // vtkScalarBarActorInternal_h
|
|
// VTK-HeaderTest-Exclude: vtkScalarBarActorInternal.h
|