OGDF » Release Notes » Dogwood
Released 2022-02-02.
As always, this release includes many new features, bug fixes and documentation improvements. The most important changes are listed below. Note that we are dropping the official support of some older compilers and are aiming to make use of C++17 features in the future. For more details, take a look at the porting guide.
Noteworthy changes:
OGDF_FULL_DOC to include {test/,src/} doc in doxygen outputOGDF_ENABLE_CLANG_TIDY to enable static analysis via clang-tidyOGDF_ prepended to all commented out OGDF-macros (in case you enable them...)GraphObjectContainer<E>::permute(), allows e.g. G.nodes.permute()GraphList::empty()contract() to keep self-loopssplitNode(a, a) is handled correctlymoveAdj() handles self-loops correctlyoperator<<() for facesCombinatorialEmbedding::splitFace() can create self-loopsCombinatorialEmbedding::joinFaces() accepts a bridge as an argumentEmbedderMaxFace now works correctlyDynamicDualGraph allowing dynamic changes of a dual graphGraphCopy:GraphCopy::removeEdgePathEmbedded() now removes degree-1-nodesGraphCopy::{insert,remove}EdgePathEmbedded() can change a DynamicDualGraphGraphCopy methods to detect and remove non-simple crossingsGraphCopy[Simple]::init() now actually clears the graph firstGraphCopySimple can be constructed, similar to GraphCopyGraphCopy of an empty Graph is now initialized correctlyGraphAttributes:idNode() now returns v->index() if no user id is setCoinManager:updateLogging() replaces logging(), propagates log level to COINfindCutVertices() to extract the cut vertices of a graphtriangulate() now runs in linear time (previously: quadratic)Dijkstra: new optional parameters for early terminationSTNumbering no longer uses recursion, large instances do not cause a stack overflowBCTree::initNotConnected() for a given subset of graph nodes/componentsDisjointSets::init() allows reinitializationPlanarizerStarReinsertionPlanarizerMixedInsertionPlanarizerChordlessCycleSubgraphPlanarizer removes non-simple crossingsGraphIO:GraphIO::read() now determines format via file extensionGraphIO::read(G, "input.graphml", GraphIO::read) for old behaviorGraphIO::readTsplibXml() for reading tsplib instances in XML formatdrawSVG() now draws cluster labelsdrawSVG() now draws arrows heads correctlyreadDOT() now recognizes numeric literals correctlyreadGML()/writeGML() now respects idNode() attributeClusterGraph writingFFPLayout and ComponentSplitterLayout respect a given embedding if possibleFMMMLayout: high-level options no longer reset low-level optionsFMMMLayout::resetOptions() allows for manual option resetHierarchyLayoutModule no longer resets node attributesPivotMDS computes 3D coordinates when GraphAttributes::threeD is setSugiyamaLayout no longer reverses bend pointsSugiyamaLayout can handle ClusteredGraphAttributesThis release contains (big and small) contributions by Antoine Lambert, Finn Stutzenstein, Hendrik Brückler, Ivo Hedtke, Jöran Schierbaum, Mario Emmenlauer, Matthias Pfretzschner, Max Ilsen, Simon Dominik "Niko" Fink, Stephan Beyer, Thomas Klein, Thomas Roehr, Vadim Zabermakh, neotechllc and xuanjueheshang on GitHub. Thanks a lot to all contributors!