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:
- 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 correctlymoveAdj()handles self-loops correctly
- new
- embeddings and dual graph:
- new
operator<<()forfaces CombinatorialEmbedding::splitFace()can create self-loopsCombinatorialEmbedding::joinFaces()accepts a bridge as an argumentEmbedderMaxFacenow 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 terminationSTNumberingno 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 extensionGraphIO::read(G, "input.graphml", GraphIO::read)for old behavior
- new
GraphIO::readTsplibXml()for reading tsplib instances in XML format drawSVG()now draws cluster labelsdrawSVG()now draws arrows heads correctlyreadDOT()now recognizes numeric literals correctlyreadGML()/writeGML()now respectsidNode()attribute- various fixes for
ClusterGraphwriting
- layouts:
FFPLayoutandComponentSplitterLayoutrespect a given embedding if possibleFMMMLayout: high-level options no longer reset low-level options- new
FMMMLayout::resetOptions()allows for manual option reset
- new
HierarchyLayoutModuleno longer resets node attributesPivotMDScomputes 3D coordinates whenGraphAttributes::threeDis setSugiyamaLayoutno longer reverses bend pointsSugiyamaLayoutcan 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!