The second public release of OGDF has been released today. This release focuses on improved usability, but also contains new functionality.
Highlights
- New algorithm for planar augmentation with fixed embedding.
- The planar drawing algorithms Planar-Straight, Planar-Draw, and Mixed-Model can now be called with a given planar embedding.
- New class
DualGraphrepresenting the geometric dual graph of a combinatorial embedding. - Consistent interface for planarization layout that allows to call with
GraphAttributes. - Sugiyama layout now produces drawings with given node ranks that are also respected across different connected components.
- Hashing functions can now be passed as template parameters; the implementation of two-dimensional hash-arrays has been revised and allows now using different types for each index.
- Optional template parameter for index type of array-based classes.
- Unified naming conventions and interfaces.
- Improved build system for Visual Studio, including support for compiling with Osi Coin and creating projects for Visual Studio 2003.
- Significantly improved documentation.
Detailed Changelog
New Features
- Additional (optional) template parameter for used size/index type in
Array,ArrayBuffer,BoundedQueue,BoundedStack,MinHeap, andTop10Heap. - Specification of hash function as (optional) template parameter in
HashingandHashArray.- The default hash function is implemented by
DefHashFunc<K>(instead of functionhash()); this can be extended to further types by specializingDefHashFunc.
- The default hash function is implemented by
- Revised implementation of HashArray2D.
- Supports now different types for each index.
- The hash-function can be passed as (optional) template parameter.
entry(const I&,const I&)→operator()(const I1&,const I2&)- Iterators:
key(I&,I&)→key1()andkey2()
- The new class
DualGraphrepresents the geometric dual graph of a combinatorial embedding. - New augmentation algorithm for planar biconnected augmentation with fixed embedding (class
PlanarAugmentationFix). - Planar drawing algorithms now implement a call for drawing with a given planar embedding.
- The base class
PlanarGridLayoutModuledefines this interface. PlanarStraightLayout,PlanarDrawLayout, andMixedModelLayoutimplement this interface.
- The base class
- The planarization layout can now be called with
GraphAttributeslike other layout algorithms; setting/getting of options made consistent with ogdf naming style. The following changes were done:UMLPlanarizationLayout→PlanarizationLayoutUMLLayoutModuleinherits fromLayoutModulePlanarizationLayouthas now acall(GraphAttributes&)setCliqueSize(int)→minCliqueSize(int)- added
int minCliqueSize() preProcessCliques(bool)→preprocessCliques(bool)- added
bool preprocessCliques()
SugiyamaLayouthas a new optionarrangeCCs(deciding whether components are laid out separately and arranged afterwards) and a new module optionpacker(for arranging connected components). SettingarrangeCCsto false and passing node ranks directly allows to get a layout which truly respects the layering across all connected components.LongestPathRankinghas a new optionoptimizeEdgeLength; setting this option to false gives a longest-path ranking as known from the literature; default is true which is same behavior as before (performs additional optimization for reducing edge lengths).
Minor Modifications
- Unified interface for containers (
ArrayBuffer,BinaryHeap,BoundedQueue,BoundedStack,MinHeap,Top10Heap).size()returns the current number of elements in the container.capacity()returns the maximal number of elements that can be stored in the container (if applicable).empty()returns true if the container contains no elements.full()returns true if the current number of elements has reached the capacity (if applicable).clear()removes all elements from the container.
- Unified naming conventions for array classes:
Array2→Array2DHashingArray→HashArrayTwoDHashArray→HashArray2DTwoDHashIterator→HashConstIterator2D
- Usage of
size_tinstead ofintin:BendString::BendString(char,size_t)BendString::operator[](size_t)BendString::size()BendString::set(char,size_t)BendString::init(char,size_t)String::String(size_t,const char *)String::length()String::operator[](size_t)
- Removed
String::operator const char *(); use the new methodString::cstr()instead. - Usage of
const String&instead ofconst char*in:CliqueFinder::writeGraph(Graph &, NodeArray<int> &, const String &)GraphAttributes::readGML(Graph &, const String &)GraphAttributes::writeGML(const String &)GraphAttributes::readXML(Graph &G, const String &fileName)GraphAttributes::writeXML(const String &, const char*, const char*)GraphAttributes::readRudy(Graph &, const String &)GraphAttributes::writeRudy(const String &)String::compare(const String &,const String &)
GraphAttributesreturn now default values fortype(node)andtype(edge)even if the respective arrays are not initialized.- Renamed
GraphStructure→GraphObserver. - The Methods
assignNode(),unassignNode(), andremoveNodeAssignment()inClusterGraphare now private (not meant for public use). - Added constructor
PlanRepUML(const GraphAttributes&). - Changed default augmenter of
PlanarStraightLayoutandPlanarDrawLayouttoPlanarAugmentation. - Removed
OrthoFormerUML(obsolete); renamedOrthoFormerGENERIC→OrthoShaper. - Renamed
UMLOrthoLayout→OrthoLayoutandUMLPlanarLayoutModule→LayoutPlanRepModule. - Revised design of
ClusterPlanarizationLayout:ClusterPlanarizationLayoutdoes not inherit fromUMLLayoutModuleanymore.- Removed unsupported call methods.
- Removed (unused) module options
subgraphandinserter. - Changed type of
planarLayouterto new module typeLayoutClusterPlanRepModule. - Changed base class of
ClusterOrthoLayouttoLayoutClusterPlanRepModule. - Renamed
ClusterOrthoFormertoClusterOrthoShaper
- Renamed
ClustererBase→ClustererModuleand moved headerClustererModule.htoogdf/module/. - Logging output of Coin Osi solver turned off by default (previous version produced some output in debug builds).
Bug Fixes
- Fixed possible rounding error in
LPSolver::checkFeasibility(). - Fixed C++ template syntax for
print()function ofBoundedQueue. - Removed ”
LPSolver::” in declaration ofLPSolver::checkFeasibility()(did not compile with some g++ versions).
Build System
- Visual Studio project file: Added configuration file
makeVCProj.configfor specifying project template and optional settings for LP-solver. - Support for Visual Studio 2003 (Visual C++ 7.1) by selecting
ogdf.vcproj.vs2003.templateas project template. - Linux/g++ makefile: Build targets renamed to
release,cleanrelease, etc. (instead ofrelease_all,release_clean).
Available make targets are nowdebug,saferelease(-O0), andrelease(-O1); default isreleasewhich yields a typical performance gain over the previousrelease(with -O0) by a factor of 2.5−12. We discourage using -O2 or -O3 with g++, since this is not stable.

