File: vtkConeLayoutStrategy.h

package info (click to toggle)
vtk6 6.3.0%2Bdfsg2-8.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 118,972 kB
  • sloc: cpp: 1,442,790; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,119; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 154; makefile: 68; objc: 17
file content (129 lines) | stat: -rw-r--r-- 4,687 bytes parent folder | download | duplicates (5)
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
128
129
/*=========================================================================

  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 "vtkInfovisLayoutModule.h" // For export macro
#include "vtkGraphLayoutStrategy.h"

class vtkPoints;

class VTKINFOVISLAYOUT_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