/*
* $Revision: 2583 $
*
* last checkin:
* $Author: gutwenger $
* $Date: 2012-07-12 01:02:21 +0200 (Do, 12. Jul 2012) $
***************************************************************/
/** \file
* \brief Declaration of Fast Multipole Multilevel Method (FM^3).
*
* \author Stefan Hachul
*
* \par License:
* This file is part of the Open Graph Drawing Framework (OGDF).
*
* \par
* Copyright (C)
* See README.txt in the root directory of the OGDF installation for details.
*
* \par
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* Version 2 or 3 as published by the Free Software Foundation;
* see the file LICENSE.txt included in the packaging of this file
* for details.
*
* \par
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* \par
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* \see http://www.gnu.org/copyleft/gpl.html
***************************************************************/
#ifdef _MSC_VER
#pragma once
#endif
#ifndef OGDF_FMMMLAYOUT_H
#define OGDF_FMMMLAYOUT_H
#include "../ogdf/basic/Graph.h"
#include "../ogdf/cluster/ClusterGraphAttributes.h"
#include "../ogdf/module/LayoutModule.h"
#include "../ogdf/basic/geometry.h"
#include "../ogdf/internal/energybased/FruchtermanReingold.h"
#include "../ogdf/internal/energybased/NMM.h"
namespace ogdf {
class Rectangle;
/**
* \brief The fast multipole multilevel layout algorithm.
*
* The class FMMMLayout implements a force-directed graph drawing
* method suited also for very large graphs. It is based on a
* combination of an efficient multilevel scheme and a strategy for
* approximating the repulsive forces in the system by rapidly
* evaluating potential fields.
*
* The implementation is based on the following publication:
*
* Stefan Hachul, Michael J�nger: Drawing Large Graphs with a
* Potential-Field-Based Multilevel Algorithm. 12th International
* Symposium on %Graph Drawing 1998, New York (GD '04), LNCS 3383,
* pp. 285-295, 2004.
*
*
*
* General
* |
* randSeed | int | 100
* | The seed of the random number generator.
* |
* edgeLengthMeasurement | #EdgeLengthMeasurement | #elmBoundingCircle
* | Indicates how the length of an edge is measured.
* |
* allowedPositions | #AllowedPositions | #apInteger
* | Defines which positions for a node are allowed.
* |
* maxIntPosExponent | int | 40
* | Defines the exponent used if allowedPositions == apExponent.
* |
* Divide et impera step
* |
* pageRatio | double | 1.0
* | The desired page ratio.
* |
* stepsForRotatingComponents | int | 10
* | The number of rotations per connected component.
* |
* tipOverCCs | #TipOver | #toNoGrowingRow
* | Specifies when it is allowed to tip over drawings.
* |
* minDistCC | double | 100
* | The minimal distance between connected components.
* |
* presortCCs | #PreSort | #psDecreasingHeight
* | Defines if the connected components are sorted before
* the packing algorithm is applied.
* |
* Multilevel step
* |
* minGraphSize | int | 50
* | Determines the number of nodes of a graph for which
* no more collapsing of galaxies is performed.
* |
* galaxyChoice | #GalaxyChoice | #gcNonUniformProbLowerMass
* | Defines how sun nodes of galaxies are selected.
* |
* randomTries | int | 20
* | Defines the number of tries to get a random node with
* minimal star mass.
* |
* maxIterChange | #MaxIterChange | #micLinearlyDecreasing
* | Defines how MaxIterations is changed in subsequent multilevels.
* |
* maxIterFactor | int | 10
* | Defines the factor used for decreasing MaxIterations.
* |
* initialPlacementMult | #InitialPlacementMult | #ipmAdvanced
* | Defines how the initial placement is generated.
* |
* Force calculation step
* |
* forceModel | #ForceModel | #fmNew
* | The used force model.
* |
* springStrength | double | 1.0
* | The strength of the springs.
* |
* repForcesStrength | double | 1.0
* | The strength of the repulsive forces.
* |
* repulsiveForcesCalculation | #RepulsiveForcesMethod | #rfcNMM
* | Defines how to calculate repulsive forces.
* |
* stopCriterion | #StopCriterion | #scFixedIterationsOrThreshold
* | The stop criterion.
* |
* threshold | double | 0.01
* | The threshold for the stop criterion.
* |
* fixedIterations | int | 30
* | The fixed number of iterations for the stop criterion.
* |
* forceScalingFactor | double | 0.05
* | The scaling factor for the forces.
* |
* coolTemperature | bool | false
* | Use coolValue for scaling forces.
* |
* coolValue | double | 0.99
* | The value by which forces are decreased.
* |
* initialPlacementForces | #InitialPlacementForces | #ipfRandomRandIterNr
* | Defines how the initial placement is done.
* |
* Force calculation step
* |
* resizeDrawing | bool | true
* | Specifies if the resulting drawing is resized.
* |
* resizingScalar | double | 1
* | Defines a parameter to scale the drawing if resizeDrawing is true.
* |
* fineTuningIterations | int | 20
* | The number of iterations for fine tuning.
* |
* fineTuneScalar | double | 0.2
* | Defines a parameter for scaling the forces in the fine-tuning iterations.
* |
* adjustPostRepStrengthDynamically | bool | true
* | If set to true, the strength of the repulsive force field is calculated.
* |
* postSpringStrength | double | 2.0
* | The strength of the springs in the postprocessing step.
* |
* postStrengthOfRepForces | double | 0.01
* | The strength of the repulsive forces in the postprocessing step.
* |
* Repulsive force approximation methods
* |
* frGridQuotient | int | 2
* | The grid quotient.
* |
* nmTreeConstruction | #ReducedTreeConstruction | #rtcSubtreeBySubtree
* | Defines how the reduced bucket quadtree is constructed.
* |
* nmSmallCell | #SmallestCellFinding | #scfIteratively
* | Defines how the smallest quadratic cell that surrounds
* the particles of a node in the reduced bucket quadtree is calculated.
* |
* nmParticlesInLeaves | int | 25
* | The maximal number of particles that are contained in
* a leaf of the reduced bucket quadtree.
* |
* nmPrecision | int | 4
* | The precision \a p for the p-term multipole expansions.
* |
*
*
*