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.

112 lines
3.4 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkRandomLayoutStrategy.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 vtkRandomLayoutStrategy
* @brief randomly places vertices in 2 or 3 dimensions
*
*
* Assigns points to the vertices of a graph randomly within a bounded range.
*
* .SECTION Thanks
* Thanks to Brian Wylie from Sandia National Laboratories for adding incremental
* layout capabilities.
*/
#ifndef vtkRandomLayoutStrategy_h
#define vtkRandomLayoutStrategy_h
#include "vtkGraphLayoutStrategy.h"
#include "vtkInfovisLayoutModule.h" // For export macro
class VTKINFOVISLAYOUT_EXPORT vtkRandomLayoutStrategy : public vtkGraphLayoutStrategy
{
public:
static vtkRandomLayoutStrategy* New();
vtkTypeMacro(vtkRandomLayoutStrategy, vtkGraphLayoutStrategy);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* Seed the random number generator used to compute point positions.
* This has a significant effect on their final positions when
* the layout is complete.
*/
vtkSetClampMacro(RandomSeed, int, 0, VTK_INT_MAX);
vtkGetMacro(RandomSeed, int);
//@}
//@{
/**
* Set / get the region in space in which to place the final graph.
* The GraphBounds only affects the results if AutomaticBoundsComputation
* is off.
*/
vtkSetVector6Macro(GraphBounds, double);
vtkGetVectorMacro(GraphBounds, double, 6);
//@}
//@{
/**
* Turn on/off automatic graph bounds calculation. If this
* boolean is off, then the manually specified GraphBounds is used.
* If on, then the input's bounds us used as the graph bounds.
*/
vtkSetMacro(AutomaticBoundsComputation, vtkTypeBool);
vtkGetMacro(AutomaticBoundsComputation, vtkTypeBool);
vtkBooleanMacro(AutomaticBoundsComputation, vtkTypeBool);
//@}
//@{
/**
* Turn on/off layout of graph in three dimensions. If off, graph
* layout occurs in two dimensions. By default, three dimensional
* layout is on.
*/
vtkSetMacro(ThreeDimensionalLayout, vtkTypeBool);
vtkGetMacro(ThreeDimensionalLayout, vtkTypeBool);
vtkBooleanMacro(ThreeDimensionalLayout, vtkTypeBool);
//@}
/**
* Set the graph to layout.
*/
void SetGraph(vtkGraph* graph) override;
/**
* Perform the random layout.
*/
void Layout() override;
protected:
vtkRandomLayoutStrategy();
~vtkRandomLayoutStrategy() override;
int RandomSeed;
double GraphBounds[6];
vtkTypeBool AutomaticBoundsComputation;
vtkTypeBool ThreeDimensionalLayout; // Boolean for a third dimension.
private:
vtkRandomLayoutStrategy(const vtkRandomLayoutStrategy&) = delete;
void operator=(const vtkRandomLayoutStrategy&) = delete;
};
#endif