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_DOC
to include {test/
,src/
} doc in doxygen output - new cmake option
OGDF_ENABLE_CLANG_TIDY
to 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<<()
forface
s -
CombinatorialEmbedding::splitFace()
can create self-loops -
CombinatorialEmbedding::joinFaces()
accepts a bridge as an argument -
EmbedderMaxFace
now works correctly - new
DynamicDualGraph
allowing 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
GraphCopy
methods to detect and remove non-simple crossings -
GraphCopy[Simple]::init()
now actually clears the graph first - empty
GraphCopySimple
can be constructed, similar toGraphCopy
-
GraphCopy
of an emptyGraph
is 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 -
STNumbering
no 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:
PlanarizerStarReinsertion
PlanarizerMixedInsertion
PlanarizerChordlessCycle
-
SubgraphPlanarizer
removes 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
ClusterGraph
writing
-
- layouts:
-
FFPLayout
andComponentSplitterLayout
respect a given embedding if possible -
FMMMLayout
: high-level options no longer reset low-level options- new
FMMMLayout::resetOptions()
allows for manual option reset
- new
-
HierarchyLayoutModule
no longer resets node attributes -
PivotMDS
computes 3D coordinates whenGraphAttributes::threeD
is set -
SugiyamaLayout
no longer reverses bend points -
SugiyamaLayout
can 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!