//Copyright 2017 Ryan Wick
//This file is part of Bandage
//Bandage is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//Bandage 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.
//You should have received a copy of the GNU General Public License
//along with Bandage. If not, see .
#include "graphlayoutworker.h"
#include
#include "ogdf/basic/geometry.h"
#include
GraphLayoutWorker::GraphLayoutWorker(ogdf::FMMMLayout * fmmm, ogdf::GraphAttributes * graphAttributes,
ogdf::EdgeArray * edgeArray, int graphLayoutQuality, bool linearLayout,
double graphLayoutComponentSeparation, double aspectRatio) :
m_fmmm(fmmm), m_graphAttributes(graphAttributes), m_edgeArray(edgeArray), m_graphLayoutQuality(graphLayoutQuality),
m_linearLayout(linearLayout), m_graphLayoutComponentSeparation(graphLayoutComponentSeparation),
m_aspectRatio(aspectRatio)
{
}
void GraphLayoutWorker::layoutGraph()
{
m_fmmm->randSeed(clock());
m_fmmm->useHighLevelOptions(false);
m_fmmm->initialPlacementForces(ogdf::FMMMLayout::ipfRandomRandIterNr);
m_fmmm->unitEdgeLength(1.0);
m_fmmm->allowedPositions(ogdf::FMMMLayout::apAll);
m_fmmm->pageRatio(m_aspectRatio);
m_fmmm->minDistCC(m_graphLayoutComponentSeparation);
m_fmmm->stepsForRotatingComponents(50); // Helps to make linear graph components more horizontal.
if (m_linearLayout)
m_fmmm->initialPlacementForces(ogdf::FMMMLayout::ipfKeepPositions);
else
m_fmmm->initialPlacementForces(ogdf::FMMMLayout::ipfRandomTime);
switch (m_graphLayoutQuality)
{
case 0:
m_fmmm->fixedIterations(3);
m_fmmm->fineTuningIterations(1);
m_fmmm->nmPrecision(2);
break;
case 1:
m_fmmm->fixedIterations(12);
m_fmmm->fineTuningIterations(8);
m_fmmm->nmPrecision(2);
break;
case 2:
m_fmmm->fixedIterations(30);
m_fmmm->fineTuningIterations(20);
m_fmmm->nmPrecision(4);
break;
case 3:
m_fmmm->fixedIterations(60);
m_fmmm->fineTuningIterations(20);
m_fmmm->nmPrecision(6);
break;
case 4:
m_fmmm->fixedIterations(120);
m_fmmm->fineTuningIterations(20);
m_fmmm->nmPrecision(8);
break;
}
m_fmmm->call(*m_graphAttributes, *m_edgeArray);
emit finishedLayout();
}