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.

151 lines
4.6 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkTreeLayoutStrategy.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 vtkTreeLayoutStrategy
* @brief hierarchical layout
*
*
* Assigns points to the nodes of a tree in either a standard or radial layout.
* The standard layout places each level on a horizontal line, while the
* radial layout places each level on a concentric circle.
* You may specify the sweep angle of the tree which constrains the tree
* to be contained within a wedge. Also, you may indicate the log scale of
* the tree, which diminishes the length of arcs at lower levels of the tree.
* Values near zero give a large proportion of the space to the tree levels
* near the root, while values near one give nearly equal proportions of space
* to all tree levels.
*
* The user may also specify an array to use to indicate the distance from the
* root, either vertically (for standard layout) or radially
* (for radial layout). You specify this with SetDistanceArrayName().
*
* If the input is not a tree but a general graph, this strategy first extracts
* a tree from the graph using a breadth-first search starting at vertex ID 0.
*/
#ifndef vtkTreeLayoutStrategy_h
#define vtkTreeLayoutStrategy_h
#include "vtkGraphLayoutStrategy.h"
#include "vtkInfovisLayoutModule.h" // For export macro
class VTKINFOVISLAYOUT_EXPORT vtkTreeLayoutStrategy : public vtkGraphLayoutStrategy
{
public:
static vtkTreeLayoutStrategy* New();
vtkTypeMacro(vtkTreeLayoutStrategy, vtkGraphLayoutStrategy);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Perform the tree layout.
*/
void Layout() override;
//@{
/**
* The sweep angle of the tree.
* For a standard tree layout, this should be between 0 and 180.
* For a radial tree layout, this can be between 0 and 360.
*/
vtkSetClampMacro(Angle, double, 0, 360);
vtkGetMacro(Angle, double);
//@}
//@{
/**
* If set, the tree is laid out with levels on concentric circles
* around the root. If unset (default), the tree is laid out with
* levels on horizontal lines.
*/
vtkSetMacro(Radial, bool);
vtkGetMacro(Radial, bool);
vtkBooleanMacro(Radial, bool);
//@}
//@{
/**
* The spacing of tree levels. Levels near zero give more space
* to levels near the root, while levels near one (the default)
* create evenly-spaced levels. Levels above one give more space
* to levels near the leaves.
*/
vtkSetMacro(LogSpacingValue, double);
vtkGetMacro(LogSpacingValue, double);
//@}
//@{
/**
* The spacing of leaves. Levels near one evenly space leaves
* with no gaps between subtrees. Levels near zero creates
* large gaps between subtrees.
*/
vtkSetClampMacro(LeafSpacing, double, 0.0, 1.0);
vtkGetMacro(LeafSpacing, double);
//@}
//@{
/**
* Get/Set the array to use to determine the distance from the
* root.
*/
vtkSetStringMacro(DistanceArrayName);
vtkGetStringMacro(DistanceArrayName);
//@}
//@{
/**
* The amount of counter-clockwise rotation to apply after the
* layout.
*/
vtkSetMacro(Rotation, double);
vtkGetMacro(Rotation, double);
//@}
//@{
/**
* If set and the input is not a tree but a general graph, the filter
* will reverse the edges on the graph before extracting a tree using
* breadth first search.
*/
vtkSetMacro(ReverseEdges, bool);
vtkGetMacro(ReverseEdges, bool);
vtkBooleanMacro(ReverseEdges, bool);
//@}
protected:
vtkTreeLayoutStrategy();
~vtkTreeLayoutStrategy() override;
double Angle;
bool Radial;
double LogSpacingValue;
double LeafSpacing;
char* DistanceArrayName;
double Rotation;
bool ReverseEdges;
private:
vtkTreeLayoutStrategy(const vtkTreeLayoutStrategy&) = delete;
void operator=(const vtkTreeLayoutStrategy&) = delete;
};
#endif