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.
176 lines
5.4 KiB
C++
176 lines
5.4 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkLabeledTreeMapDataMapper.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.
|
|
|
|
=========================================================================*/
|
|
/*-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------*/
|
|
/**
|
|
* @class vtkLabeledTreeMapDataMapper
|
|
* @brief draw text labels on a tree map
|
|
*
|
|
*
|
|
* vtkLabeledTreeMapDataMapper is a mapper that renders text on a tree map.
|
|
* A tree map is a vtkTree with an associated 4-tuple array
|
|
* used for storing the boundary rectangle for each vertex in the tree.
|
|
* The user must specify the array name used for storing the rectangles.
|
|
*
|
|
* The mapper iterates through the tree and attempts and renders a label
|
|
* inside the vertex's rectangle as long as the following conditions hold:
|
|
* 1. The vertex level is within the range of levels specified for labeling.
|
|
* 2. The label can fully fit inside its box.
|
|
* 3. The label does not overlap an ancestor's label.
|
|
*
|
|
* @sa
|
|
* vtkLabeledDataMapper
|
|
*
|
|
* @par Thanks:
|
|
* Thanks to Patricia Crossno, Ken Moreland, Andrew Wilson and Brian Wylie from
|
|
* Sandia National Laboratories for their help in developing this class.
|
|
*/
|
|
|
|
#ifndef vtkLabeledTreeMapDataMapper_h
|
|
#define vtkLabeledTreeMapDataMapper_h
|
|
|
|
#include "vtkLabeledDataMapper.h"
|
|
#include "vtkRenderingLabelModule.h" // For export macro
|
|
|
|
class vtkTree;
|
|
class vtkPoints;
|
|
class vtkCoordinate;
|
|
class vtkFloatArray;
|
|
class vtkStringArray;
|
|
class vtkIdList;
|
|
|
|
class VTKRENDERINGLABEL_EXPORT vtkLabeledTreeMapDataMapper : public vtkLabeledDataMapper
|
|
{
|
|
public:
|
|
static vtkLabeledTreeMapDataMapper* New();
|
|
vtkTypeMacro(vtkLabeledTreeMapDataMapper, vtkLabeledDataMapper);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
//@{
|
|
/**
|
|
* Draw the text to the screen at each input point.
|
|
*/
|
|
void RenderOpaqueGeometry(vtkViewport* viewport, vtkActor2D* actor) override;
|
|
void RenderOverlay(vtkViewport* viewport, vtkActor2D* actor) override;
|
|
//@}
|
|
|
|
/**
|
|
* The input to this filter.
|
|
*/
|
|
virtual vtkTree* GetInputTree();
|
|
|
|
/**
|
|
* The name of the 4-tuple array used for
|
|
*/
|
|
virtual void SetRectanglesArrayName(const char* name);
|
|
|
|
//@{
|
|
/**
|
|
* Indicates if the label can be displayed clipped by the Window
|
|
* mode = 0 - ok to clip labels
|
|
* 1 - auto center labels w/r to the area of the vertex's clipped region
|
|
*/
|
|
vtkGetMacro(ClipTextMode, int);
|
|
vtkSetMacro(ClipTextMode, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Indicates if the label can be moved by its ancestors
|
|
*/
|
|
vtkGetMacro(ChildMotion, int);
|
|
vtkSetMacro(ChildMotion, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Indicates at which level labeling should be dynamic
|
|
*/
|
|
vtkGetMacro(DynamicLevel, int);
|
|
vtkSetMacro(DynamicLevel, int);
|
|
//@}
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by this actor.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
//@{
|
|
/**
|
|
* The range of font sizes to use when rendering the labels.
|
|
*/
|
|
void SetFontSizeRange(int maxSize, int minSize, int delta = 4);
|
|
void GetFontSizeRange(int range[3]);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* The range of levels to attempt to label.
|
|
* The level of a vertex is the length of the path to the root
|
|
* (the root has level 0).
|
|
*/
|
|
void SetLevelRange(int startLevel, int endLevel);
|
|
void GetLevelRange(int range[2]);
|
|
//@}
|
|
|
|
protected:
|
|
vtkLabeledTreeMapDataMapper();
|
|
~vtkLabeledTreeMapDataMapper() override;
|
|
void LabelTree(vtkTree* tree, vtkFloatArray* boxInfo, vtkDataArray* numericData,
|
|
vtkStringArray* stringData, int activeComp, int numComps);
|
|
void GetVertexLabel(vtkIdType vertex, vtkDataArray* numericData, vtkStringArray* stringData,
|
|
int activeComp, int numComps, char* string, size_t stringSize);
|
|
void UpdateFontSizes();
|
|
int UpdateWindowInfo(vtkViewport* viewport);
|
|
int GetStringSize(char* string, int level);
|
|
// Returns 1 if the transformed box is off screen
|
|
int ConvertToDC(float* origBoxInfo, float* newBoxInfo);
|
|
// Returns 1 if the label will not fit in box - 2 if the text could
|
|
// not be placed due to other labels
|
|
int AnalyseLabel(
|
|
char* string, int level, float* blimitsDC, float* textPosWC, vtkTextProperty** tprop);
|
|
int ApplyMasks(int level, float flimits[4], float blimits[4]);
|
|
vtkViewport* CurrentViewPort;
|
|
int* FontHeights;
|
|
int** FontWidths;
|
|
int MaxFontLevel;
|
|
int* ChildrenCount;
|
|
int MaxTreeLevels;
|
|
double BoxTrans[2][2];
|
|
double WindowLimits[2][2];
|
|
|
|
float (*LabelMasks)[4];
|
|
|
|
vtkIdList* VertexList;
|
|
vtkPoints* TextPoints;
|
|
vtkCoordinate* VCoord;
|
|
int ClipTextMode;
|
|
int ChildMotion;
|
|
int StartLevel;
|
|
int EndLevel;
|
|
int DynamicLevel;
|
|
vtkTextProperty* VerticalLabelProperty;
|
|
vtkTextProperty** HLabelProperties;
|
|
|
|
private:
|
|
vtkLabeledTreeMapDataMapper(const vtkLabeledTreeMapDataMapper&) = delete;
|
|
void operator=(const vtkLabeledTreeMapDataMapper&) = delete;
|
|
};
|
|
|
|
#endif
|