OGDF » Release Notes » Foxglove
Released 2025-10-27.
This release contains many significant improvements to core functionality, including a unified Graph::insert and NodeArrays/EdgeArrays that store their data in std::vectors. Moreover, we enhanced the build process by, e.g., properly enabling multi-config builds and packaging via CPack. However, as a result, this release also comes with several notable breaking changes. For example, OGDF now requires C++17. Thus, we strongly suggest to read the porting guide.
Note that to simplify access to the OGDF, we also plan to publish an OGDF docker image and to improve support of C++ package managers in the future.
Noteworthy changes:
-debugGraph::insert implementation:Graph::copy(), Graph::construct*(), Graph::assign(), and GraphCopy(Simple)::init*()RegisteredArray:NodeArray, EdgeArray, FaceArray etc.std::vector instead of ogdf::Array for data storageNodeArrayP etc. to wrap non-movable objects in std::unique_ptrinvertRegisteredArray to transfer XArray<Y> into YArray<X>RegisteredSet:NodeSet, FaceSet, ClusterSetsize()EdgeSet and AdjEntrySetObserver and Observable:GraphObserver, RegisteredSets etc.Graph)Observer::registrationChanged()ClusterGraphObserver::clustersCleared()GraphCopy and GraphCopySimple:GraphCopyBaseGraphCopyBase::setOriginalGraph() replacing createEmpty()GraphCopySimple::copyEmbeddingToOriginal()copyEmbedding()ClusterGraph:ClusterGraph::representsConnectedCombEmbedding()ClusterGraph::planarizeClusterBorderCrossings()ClusterGraph::adjAvailable()cluster->isDescendant()MatchingModuleMatchingBlossomMatchingBlossomVMatchingImplementation as the current best OGDF MWPM algorithmNodeColoringModuleNodeColoringBergerRompelNodeColoringBoppanaHalldorssonNodeColoringHalldorssonNodeColoringJohnsonNodeColoringRecursiveLargestFirstNodeColoringSequentialNodeColoringSimpleNodeColoringWigdersonPCTree for planarity testingSyncPlan for modeling and solving SyncPlan instancesClusterPlanarityModule for computing cluster-planar embeddingsSyncPlanClusterPlanarityModulerandomSyncPlanInstance() generatorrandomSEFEInstanceBy...() generatorsFourBlockTree for construction and traversal of 4-block treesconnectedComponents() to get comp representativesCCsInfo::nodes(int cc) and CCsInfo::edges(int cc)BCTree and DynamicSPQRForestoperator<< for nodes of BCTree and DynamicSPQRForestrandomProperMaximalLevelPlaneGraph()pruneEdges() to enforce a maximum edge numberjoin(), intersection(), and complement()randomClusterPlanarGraph renamed randomCConnectedClustering()randomClusterGraph renamed randomClustering()randomClusterPlanarGraphrandomPlanarClusteringTreeLayout now works on non-arborescence forestsSimpleCCPacker now correctly preserves edge bendsComponentSplitterLayout now correctly preserves edge bendsPoolMemoryAllocator::defrag() renamed defragGlobal()PoolMemoryAllocator::defragThread()PoolMemoryAllocator::get{Global,Thread}FreeListSizes()OGDFAllocator for use with containers of the C++ standard libHiddenEdgeSet now has begin(), end(), and empty()Graph::sort(node v, ITER begin, ITER end) to adapt rotation systemsLogger::lout()Logger::setIndent(), Logger::indent(), Logger::dedent()SvgPrinter now correctly connects arrow heads to the edge's targetCODE_OF_CONDUCT.mdOGDF_-macros for declaring c'tors and assignment operatorsOGDF_IF_DBG macro for single-line statements in debug modeindent_comments.py for formatting commentsstyle/test_all.sh for unified style checkmake_release.sh for easier release managementThis release contains (big and small) contributions by Antoine Lambert, Dominik Potulski, Felix F Xu, Gregor Diatzko, Jan-Niklas Buckow, Joshua Sangmeister, Lily Wang, Max Ilsen, Simon Dominik "Niko" Fink, and Sven Strickroth. Thanks a lot to all contributors!