void FMMMLayout :: update_low_level_options_due_to_high_level_options_settings() { PageFormatType pf = pageFormat(); double uel = unitEdgeLength(); bool nip = newInitialPlacement(); QualityVsSpeed qvs = qualityVersusSpeed(); //update initialize_all_options(); useHighLevelOptions(true); pageFormat(pf); unitEdgeLength(uel); newInitialPlacement(nip); qualityVersusSpeed(qvs); if(pageFormat() == pfSquare) pageRatio(1.0); else if(pageFormat() ==pfLandscape) pageRatio(1.4142); else //pageFormat() == pfPortrait pageRatio(0.7071); if(newInitialPlacement()) initialPlacementForces(ipfRandomTime); else initialPlacementForces(ipfRandomRandIterNr); if(qualityVersusSpeed() == qvsGorgeousAndEfficient) { fixedIterations(60); fineTuningIterations(40); nmPrecision(6); } else if(qualityVersusSpeed() == qvsBeautifulAndFast) { fixedIterations(30); fineTuningIterations(20); nmPrecision(4); } else //qualityVersusSpeed() == qvsNiceAndIncredibleSpeed { fixedIterations(15); fineTuningIterations(10); nmPrecision(2); } }
inline void FMMMLayout :: call_POSTPROCESSING_step(Graph& G,NodeArray<NodeAttributes>& A, EdgeArray<EdgeAttributes>& E,NodeArray <DPoint>& F,NodeArray<DPoint>& F_attr, NodeArray<DPoint>& F_rep,NodeArray<DPoint> & last_node_movement) { int i; for(i = 1; i<= 10; i++) calculate_forces(G,A,E,F,F_attr,F_rep,last_node_movement,i,1); if((resizeDrawing() == true)) { adapt_drawing_to_ideal_average_edgelength(G,A,E); update_boxlength_and_cornercoordinate(G,A); } for(i = 1; i<= fineTuningIterations(); i++) calculate_forces(G,A,E,F,F_attr,F_rep,last_node_movement,i,2); if((resizeDrawing() == true)) adapt_drawing_to_ideal_average_edgelength(G,A,E); }
void FMMMLayout :: initialize_all_options() { //setting high level options useHighLevelOptions(false); pageFormat(pfSquare); unitEdgeLength(100); newInitialPlacement(false); qualityVersusSpeed(qvsBeautifulAndFast); //setting low level options //setting general options randSeed(100);edgeLengthMeasurement(elmBoundingCircle); allowedPositions(apInteger);maxIntPosExponent(40); //setting options for the divide et impera step pageRatio(1.0);stepsForRotatingComponents(10); tipOverCCs(toNoGrowingRow);minDistCC(100); presortCCs(psDecreasingHeight); //setting options for the multilevel step minGraphSize(50);galaxyChoice(gcNonUniformProbLowerMass);randomTries(20); maxIterChange(micLinearlyDecreasing);maxIterFactor(10); initialPlacementMult(ipmAdvanced); //setting options for the force calculation step forceModel(fmNew);springStrength(1);repForcesStrength(1); repulsiveForcesCalculation(rfcNMM);stopCriterion(scFixedIterationsOrThreshold); threshold(0.01);fixedIterations(30);forceScalingFactor(0.05); coolTemperature(false);coolValue(0.99);initialPlacementForces(ipfRandomRandIterNr); //setting options for postprocessing resizeDrawing(true);resizingScalar(1);fineTuningIterations(20); fineTuneScalar(0.2);adjustPostRepStrengthDynamically(true); postSpringStrength(2.0);postStrengthOfRepForces(0.01); //setting options for different repulsive force calculation methods frGridQuotient(2); nmTreeConstruction(rtcSubtreeBySubtree);nmSmallCell(scfIteratively); nmParticlesInLeaves(25); nmPrecision(4); }