/
vtkConeLayoutStrategy.h
128 lines (103 loc) · 4.55 KB
/
vtkConeLayoutStrategy.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*=========================================================================
Program: Visualization Toolkit
Module: vtkConeLayoutStrategy.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.
//-------------------------------------------------------------------------
// .NAME vtkConeLayoutStrategy - produce a cone-tree layout for a forest
// .SECTION Description
// vtkConeLayoutStrategy positions the nodes of a tree(forest) in 3D
// space based on the cone-tree approach first described by
// Robertson, Mackinlay and Card in Proc. CHI'91. This
// implementation incorporates refinements to the layout
// developed by Carriere and Kazman, and by Auber.
//
// The input graph must be a forest (i.e. a set of trees, or a
// single tree); in the case of a forest, the input will be
// converted to a single tree by introducing a new root node,
// and connecting each root in the input forest to the meta-root.
// The tree is then laid out, after which the meta-root is removed.
//
// The cones are positioned so that children lie in planes parallel
// to the X-Y plane, with the axis of cones parallel to Z, and
// with Z coordinate increasing with distance of nodes from the root.
//
// .SECTION Thanks
// Thanks to David Duke from the University of Leeds for providing this
// implementation.
#ifndef __vtkConeLayoutStrategy_h
#define __vtkConeLayoutStrategy_h
#include "vtkGraphLayoutStrategy.h"
class vtkPoints;
class VTK_INFOVIS_EXPORT vtkConeLayoutStrategy : public vtkGraphLayoutStrategy
{
public:
static vtkConeLayoutStrategy *New();
vtkTypeMacro(vtkConeLayoutStrategy, vtkGraphLayoutStrategy);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Determine the compactness, the ratio between the
// average width of a cone in the tree, and the
// height of the cone. The default setting is 0.75
// which (empirically) seems reasonable, but this
// will need adapting depending on the data.
vtkSetMacro(Compactness, float);
vtkGetMacro(Compactness, float);
// Description:
// Determine if layout should be compressed, i.e. the
// layout puts children closer together, possibly allowing
// sub-trees to overlap. This is useful if the tree is
// actually the spanning tree of a graph. For "real" trees,
// non-compressed layout is best, and is the default.
vtkSetMacro(Compression, int);
vtkGetMacro(Compression, int);
vtkBooleanMacro(Compression, int);
// Description:
// Set the spacing parameter that affects space between
// layers of the tree. If compression is on, Spacing is the
// actual distance between layers. If compression is off,
// actual distance also includes a factor of the compactness
// and maximum cone radius.
vtkSetMacro(Spacing, float);
vtkGetMacro(Spacing, float);
// Description:
// Perform the layout.
void Layout();
protected:
vtkConeLayoutStrategy();
~vtkConeLayoutStrategy();
// Description:
// Helper operations for tree layout. Layout is performed
// in two traversals of the tree. The first traversal finds
// the position of child nodes relative to their parent. The
// second traversal positions each node absolutely, working
// from the initial position of the root node.
double LocalPlacement(vtkIdType root, vtkPoints *points);
void GlobalPlacement(
vtkIdType root,
vtkPoints *points,
double refX, // absolute x-y coordinate of
double refY, // parent node; z coordinate
double level ); // derived from level.
float Compactness; // factor used in mapping layer to Z
int Compression; // force a compact layout?
float Spacing; // Scale vertical spacing of cones.
// Values accumulated for possible statistical use
double MinRadius;
double MaxRadius;
int NrCones;
double SumOfRadii;
private:
vtkConeLayoutStrategy(const vtkConeLayoutStrategy&); // Not implemented.
void operator=(const vtkConeLayoutStrategy&); // Not implemented.
};
#endif