VTK
vtkHeatmapItem.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkHeatmapItem.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
26 #ifndef vtkHeatmapItem_h
27 #define vtkHeatmapItem_h
28 
29 #include "vtkViewsInfovisModule.h" // For export macro
30 #include "vtkContextItem.h"
31 
32 #include "vtkNew.h" // For vtkNew ivars
33 #include "vtkSmartPointer.h" // For vtkSmartPointer ivars
34 #include "vtkStdString.h" // For get/set ivars
35 #include "vtkVector.h" // For vtkVector2f ivar
36 #include <map> // For column ranges
37 #include <set> // For blank row support
38 #include <vector> // For row mapping
39 
40 class vtkBitArray;
41 class vtkCategoryLegend;
42 class vtkColorLegend;
43 class vtkLookupTable;
44 class vtkStringArray;
45 class vtkTable;
46 class vtkTooltipItem;
47 class vtkVariantArray;
48 
49 class VTKVIEWSINFOVIS_EXPORT vtkHeatmapItem : public vtkContextItem
50 {
51 public:
52  static vtkHeatmapItem *New();
54  void PrintSelf(ostream &os, vtkIndent indent) override;
55 
60  virtual void SetTable(vtkTable *table);
61 
65  vtkTable * GetTable();
66 
70  vtkStringArray * GetRowNames();
71 
73 
80  vtkGetMacro(NameColumn, vtkStdString);
81  vtkSetMacro(NameColumn, vtkStdString);
83 
87  void SetOrientation(int orientation);
88 
92  int GetOrientation();
93 
99  double GetTextAngleForOrientation(int orientation);
100 
102 
105  vtkSetVector2Macro(Position, float);
106  void SetPosition(const vtkVector2f &pos);
108 
110 
113  vtkGetVector2Macro(Position, float);
114  vtkVector2f GetPositionVector();
116 
118 
122  vtkGetMacro(CellHeight, double);
123  vtkSetMacro(CellHeight, double);
125 
127 
131  vtkGetMacro(CellWidth, double);
132  vtkSetMacro(CellWidth, double);
134 
138  virtual void GetBounds(double bounds[4]);
139 
144  void MarkRowAsBlank(const std::string& rowName);
145 
149  bool Paint(vtkContext2D *painter) override;
150 
152 
156  vtkGetMacro(RowLabelWidth, float);
157  vtkGetMacro(ColumnLabelWidth, float);
159 
163  enum
164  {
168  DOWN_TO_UP
169  };
170 
174  bool Hit(const vtkContextMouseEvent &mouse) override;
175 
179  bool MouseMoveEvent(const vtkContextMouseEvent &event) override;
180 
184  bool MouseDoubleClickEvent(const vtkContextMouseEvent &event) override;
185 
186 protected:
187  vtkHeatmapItem();
188  ~vtkHeatmapItem() override;
189 
191  float* Position;
192 
197  virtual void RebuildBuffers();
198 
202  virtual void PaintBuffers(vtkContext2D *painter);
203 
208  virtual bool IsDirty();
209 
213  void InitializeLookupTables();
214 
221  void AccumulateProminentCategoricalDataValues(vtkIdType column);
222 
227  void GenerateContinuousDataLookupTable();
228 
233  void GenerateCategoricalDataLookupTable();
234 
240  std::string GetTooltipText(float x, float y);
241 
248  void UpdateVisibleSceneExtent(vtkContext2D *painter);
249 
255  bool LineIsVisible(double x0, double y0, double x1, double y1);
256 
261  void ComputeBounds();
262 
267  void ComputeLabelWidth(vtkContext2D *painter);
268 
269  // Setup the position, size, and orientation of this heatmap's color
270  // legend based on the heatmap's current orientation.
271  void PositionColorLegend(int orientation);
272 
273  // Setup the position, size, and orientation of this heatmap's
274  // legends based on the heatmap's current orientation.
275  void PositionLegends(int orientation);
276 
280 
281 private:
282  vtkHeatmapItem(const vtkHeatmapItem&) = delete;
283  void operator=(const vtkHeatmapItem&) = delete;
284 
285  unsigned long HeatmapBuildTime;
286  vtkNew<vtkCategoryLegend> CategoryLegend;
287  vtkNew<vtkColorLegend> ColorLegend;
288  vtkNew<vtkTooltipItem> Tooltip;
289  vtkNew<vtkLookupTable> ContinuousDataLookupTable;
290  vtkNew<vtkLookupTable> CategoricalDataLookupTable;
291  vtkNew<vtkLookupTable> ColorLegendLookupTable;
292  vtkNew<vtkStringArray> CategoricalDataValues;
293  vtkNew<vtkVariantArray> CategoryLegendValues;
294  double CellWidth;
295  double CellHeight;
296 
297  std::map< vtkIdType, std::pair< double, double > > ColumnRanges;
298  std::vector< vtkIdType > SceneRowToTableRowMap;
299  std::vector< vtkIdType > SceneColumnToTableColumnMap;
300  std::set<std::string> BlankRows;
301 
302  double MinX;
303  double MinY;
304  double MaxX;
305  double MaxY;
306  double SceneBottomLeft[3];
307  double SceneTopRight[3];
308  float RowLabelWidth;
309  float ColumnLabelWidth;
310 
311  vtkBitArray* CollapsedRowsArray;
312  vtkBitArray* CollapsedColumnsArray;
313  bool LegendPositionSet;
314 };
315 
316 #endif
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:34
An array holding vtkVariants.
base class for items that are part of a vtkContextScene.
virtual bool Paint(vtkContext2D *painter)
Paint event for the item, called whenever the item needs to be drawn.
map scalar values into colors via a lookup table
Legend item to display vtkScalarsToColors.
a vtkAbstractArray subclass for strings
A 2D graphics item for rendering a heatmap.
int vtkIdType
Definition: vtkType.h:345
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:52
data structure to represent mouse events.
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkVector2f PositionVector
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkStringArray * RowNames
Legend item to display categorical data.
vtkSmartPointer< vtkTable > Table
A table, which contains similar-typed columns of data.
Definition: vtkTable.h:62
dynamic, self-adjusting array of bits
Definition: vtkBitArray.h:33
virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse)
Mouse move event.
virtual bool Hit(const vtkContextMouseEvent &mouse)
Return true if the supplied x, y coordinate is inside the item.
vtkStdString NameColumn
takes care of drawing 2D axes
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
virtual bool MouseDoubleClickEvent(const vtkContextMouseEvent &mouse)
Mouse button double click event.