VTK  9.3.1
vtkDendrogramItem.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
27 #ifndef vtkDendrogramItem_h
28 #define vtkDendrogramItem_h
29 
30 #include "vtkContextItem.h"
31 #include "vtkViewsInfovisModule.h" // For export macro
32 
33 #include "vtkNew.h" // For vtkNew ivars
34 #include "vtkSmartPointer.h" // For vtkSmartPointer ivars
35 #include "vtkStdString.h" // For SetGet ivars
36 #include "vtkVector.h" // For vtkVector2f ivar
37 
38 VTK_ABI_NAMESPACE_BEGIN
39 class vtkColorLegend;
40 class vtkDoubleArray;
41 class vtkGraphLayout;
42 class vtkLookupTable;
43 class vtkPruneTreeFilter;
44 class vtkTree;
45 
46 class VTKVIEWSINFOVIS_EXPORT vtkDendrogramItem : public vtkContextItem
47 {
48 public:
49  static vtkDendrogramItem* New();
51  void PrintSelf(ostream& os, vtkIndent indent) override;
52 
58  virtual void SetTree(vtkTree* tree);
59 
63  vtkTree* GetTree();
64 
71  void CollapseToNumberOfLeafNodes(unsigned int n);
72 
76  vtkTree* GetPrunedTree();
77 
83  void SetColorArray(const char* arrayName);
84 
86 
92  vtkSetMacro(ExtendLeafNodes, bool);
93  vtkGetMacro(ExtendLeafNodes, bool);
94  vtkBooleanMacro(ExtendLeafNodes, bool);
96 
101  void SetOrientation(int orientation);
102 
106  int GetOrientation();
107 
113  double GetAngleForOrientation(int orientation);
114 
120  double GetTextAngleForOrientation(int orientation);
121 
123 
127  vtkSetMacro(DrawLabels, bool);
128  vtkGetMacro(DrawLabels, bool);
129  vtkBooleanMacro(DrawLabels, bool);
131 
133 
136  vtkSetVector2Macro(Position, float);
137  void SetPosition(const vtkVector2f& pos);
139 
141 
144  vtkGetVector2Macro(Position, float);
145  vtkVector2f GetPositionVector();
147 
149 
153  vtkGetMacro(LeafSpacing, double);
154  vtkSetMacro(LeafSpacing, double);
156 
162  void PrepareToPaint(vtkContext2D* painter);
163 
169  virtual void GetBounds(double bounds[4]);
170 
174  void ComputeLabelWidth(vtkContext2D* painter);
175 
179  float GetLabelWidth();
180 
186  bool GetPositionOfVertex(const std::string& vertexName, double position[2]);
187 
191  bool Paint(vtkContext2D* painter) override;
192 
194 
197  vtkGetMacro(LineWidth, float);
198  vtkSetMacro(LineWidth, float);
200 
202 
206  vtkSetMacro(DisplayNumberOfCollapsedLeafNodes, bool);
207  vtkGetMacro(DisplayNumberOfCollapsedLeafNodes, bool);
208  vtkBooleanMacro(DisplayNumberOfCollapsedLeafNodes, bool);
210 
212 
218  vtkGetMacro(DistanceArrayName, vtkStdString);
219  vtkSetMacro(DistanceArrayName, vtkStdString);
221 
223 
229  vtkGetMacro(VertexNameArrayName, vtkStdString);
230  vtkSetMacro(VertexNameArrayName, vtkStdString);
232 
233  // this struct & class allow us to generate a priority queue of vertices.
235  {
237  double weight;
238  };
240  {
241  public:
242  // Returns true if v2 is higher priority than v1
244  {
245  if (v1.weight <= v2.weight)
246  {
247  return false;
248  }
249  return true;
250  }
251  };
252 
256  enum
257  {
261  DOWN_TO_UP
262  };
263 
267  bool Hit(const vtkContextMouseEvent& mouse) override;
268 
273  bool MouseDoubleClickEvent(const vtkContextMouseEvent& event) override;
274 
275 protected:
277  ~vtkDendrogramItem() override;
278 
280  float* Position;
281 
286  virtual void RebuildBuffers();
287 
291  virtual void PaintBuffers(vtkContext2D* painter);
292 
297  virtual bool IsDirty();
298 
303  void ComputeMultipliers();
304 
308  void ComputeBounds();
309 
313  void CountLeafNodes();
314 
318  int CountLeafNodes(vtkIdType vertex);
319 
323  vtkIdType GetClosestVertex(double x, double y);
324 
328  void CollapseSubTree(vtkIdType vertex);
329 
333  void ExpandSubTree(vtkIdType vertex);
334 
338  vtkIdType GetOriginalId(vtkIdType vertex);
339 
344  vtkIdType GetPrunedIdForOriginalId(vtkIdType originalId);
345 
351  vtkIdType GetClickedCollapsedSubTree(double x, double y);
352 
359  void UpdateVisibleSceneExtent(vtkContext2D* painter);
360 
366  bool LineIsVisible(double x0, double y0, double x1, double y1);
367 
371  void SetOrientation(vtkTree* tree, int orientation);
372 
373  // Setup the position, size, and orientation of this dendrogram's color
374  // legend based on the dendrogram's current orientation.
375  void PositionColorLegend();
376 
379 
380 private:
381  vtkDendrogramItem(const vtkDendrogramItem&) = delete;
382  void operator=(const vtkDendrogramItem&) = delete;
383 
384  vtkSmartPointer<vtkTree> PrunedTree;
385  vtkMTimeType DendrogramBuildTime;
386  vtkNew<vtkGraphLayout> Layout;
387  vtkNew<vtkPruneTreeFilter> PruneFilter;
388  vtkNew<vtkLookupTable> TriangleLookupTable;
389  vtkNew<vtkLookupTable> TreeLookupTable;
390  vtkNew<vtkColorLegend> ColorLegend;
391  vtkDoubleArray* ColorArray;
392  double MultiplierX;
393  double MultiplierY;
394  int NumberOfLeafNodes;
395  double LeafSpacing;
396 
397  double MinX;
398  double MinY;
399  double MaxX;
400  double MaxY;
401  double SceneBottomLeft[3];
402  double SceneTopRight[3];
403  float LabelWidth;
404  float LineWidth;
405  bool ColorTree;
406  bool ExtendLeafNodes;
407  bool DrawLabels;
408  bool DisplayNumberOfCollapsedLeafNodes;
409  bool LegendPositionSet;
410  vtkStdString DistanceArrayName;
411  vtkStdString VertexNameArrayName;
412 };
413 
414 VTK_ABI_NAMESPACE_END
415 #endif
vtkSmartPointer< vtkTree > LayoutTree
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:28
void GetBounds(T a, double bds[6])
A 2D graphics item for rendering a tree as a dendrogram.
vtkSmartPointer< vtkTree > Tree
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
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.
int vtkIdType
Definition: vtkType.h:315
dynamic, self-adjusting array of double
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:49
data structure to represent mouse events.
a simple class to control print indentation
Definition: vtkIndent.h:28
layout a graph in 2 or 3 dimensions
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool operator()(WeightedVertex &v1, WeightedVertex &v2)
vtkVector2f PositionVector
virtual bool Hit(const vtkContextMouseEvent &mouse)
Return true if the supplied x, y coordinate is inside the item.
prune a subtree out of a vtkTree
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
A rooted tree data structure.
Definition: vtkTree.h:45
virtual bool MouseDoubleClickEvent(const vtkContextMouseEvent &mouse)
Mouse button double click event.