Today, we released the new version v2022.02 (Dogwood) of OGDF.
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
- compilation:
- fixes for compilation with gcc 11, clang 11, AppleClang 12, and ClangCL on MSVC
- fixes for compilation on ARM architectures
- installation of shared libraries now possible
- new cmake option
OGDF_FULL_DOCto include {test/,src/} doc in doxygen output - new cmake option
OGDF_ENABLE_CLANG_TIDYto enable static analysis via clang-tidy -
OGDF_prepended to all commented out OGDF-macros (in case you enable them…)
- basic graph functionality:
- new
GraphObjectContainer<E>::permute(), allows e.g.G.nodes.permute() - new
GraphList::empty() - new optional parameter for
contract()to keep self-loops -
splitNode(a, a)is handled correctly -
moveAdj()handles self-loops correctly
- new
- embeddings and dual graph:
- new
operator<<()forfaces -
CombinatorialEmbedding::splitFace()can create self-loops -
CombinatorialEmbedding::joinFaces()accepts a bridge as an argument -
EmbedderMaxFacenow works correctly - new
DynamicDualGraphallowing dynamic changes of a dual graph
- new
-
GraphCopy:-
GraphCopy::removeEdgePathEmbedded()now removes degree-1-nodes - new overloads of
GraphCopy::{insert,remove}EdgePathEmbedded()can change aDynamicDualGraph - new
GraphCopymethods to detect and remove non-simple crossings -
GraphCopy[Simple]::init()now actually clears the graph first - empty
GraphCopySimplecan be constructed, similar toGraphCopy -
GraphCopyof an emptyGraphis now initialized correctly
-
-
GraphAttributes:-
idNode()now returnsv->index()if no user id is set
-
-
CoinManager:-
updateLogging()replaceslogging(), propagates log level to COIN
-
- (graph) algorithms:
- new
findCutVertices()to extract the cut vertices of a graph -
triangulate()now runs in linear time (previously: quadratic) -
Dijkstra: new optional parameters for early termination -
STNumberingno longer uses recursion, large instances do not cause a stack overflow - new
BCTree::initNotConnected()for a given subset of graph nodes/components - new
DisjointSets::init()allows reinitialization - new crossing minimization heuristics employing star insertion:
PlanarizerStarReinsertionPlanarizerMixedInsertionPlanarizerChordlessCycle
-
SubgraphPlanarizerremoves non-simple crossings
- new
-
GraphIO:-
GraphIO::read()now determines format via file extension-
GraphIO::read(G, "input.graphml", GraphIO::read)for old behavior
-
- new
GraphIO::readTsplibXml()for reading tsplib instances in XML format -
drawSVG()now draws cluster labels -
drawSVG()now draws arrows heads correctly -
readDOT()now recognizes numeric literals correctly -
readGML()/writeGML()now respectsidNode()attribute - various fixes for
ClusterGraphwriting
-
- layouts:
-
FFPLayoutandComponentSplitterLayoutrespect a given embedding if possible -
FMMMLayout: high-level options no longer reset low-level options- new
FMMMLayout::resetOptions()allows for manual option reset
- new
-
HierarchyLayoutModuleno longer resets node attributes -
PivotMDScomputes 3D coordinates whenGraphAttributes::threeDis set -
SugiyamaLayoutno longer reverses bend points -
SugiyamaLayoutcan handleClusteredGraphAttributes
-
This 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!

