/*========================================================================= 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