libavoid is a cross-platform C++ library providing fast, object-avoiding orthogonal and polyline connector routing for use in interactive diagram editors.
libavoid is part of the Adaptagrams project. There are no official releases yet, though the code is stable and available from the Adaptagrams github repository.
The API is documented using Doxygen. The documentation you are currently reading can be obtained by running doxygen in the cola or libavoid directory. There is also a simple documented example to help you get started.
libavoid is written and maintained by Michael Wybrow, a member of MArVL: the Monash Adaptive Visualisation Lab at Monash University, Australia.
The algorithms used for the connector routing are described in the following papers. If you use libavoid, please cite the relevant paper.
- M. Wybrow, K. Marriott, and P.J. Stuckey. Orthogonal connector routing.
In Proceedings of 17th International Symposium on Graph Drawing (GD '09),
LNCS 5849, pages 219–231. Spring-Verlag, 2010. [DOI] [PDF]
- M. Wybrow, K. Marriott, and P.J. Stuckey. Incremental connector routing.
In Proceedings of 13th International Symposium on Graph Drawing (GD '05),
LNCS 3843, pages 446—457. Springer-Verlag, 2006. [DOI] [PDF]
- M. Wybrow, K. Marriott and P.J. Stuckey. Orthogonal hyperedge routing.
In Proceedings of 7th International Conference on the Theory and Application of Diagrams (Diagrams 2012),
LNCS (LNAI) 7352, pages 51–64. Springer-Verlag, 2012. [DOI] [PDF]
- K. Marriott, P.J. Stuckey, and M. Wybrow. Seeing Around Corners: Fast Orthogonal Connector Routing.
In Proceedings of the 8th International Conference on the Theory and Application of Diagrams (Diagrams 2014),
LNCS 8578, pages 31–37. Springer-Verlag, 2014. [DOI] [PDF]
libavoid is currently used in the following software:
- A commercial circuit diagram editor;
- Dunnart, a prototype research constraint-based diagram editor;
- Inkscape, the popular Open Source vector graphics editor;
- Arcadia, a visualisation tool for metabolic pathways;
- Gaphas, an open source diagramming widget for GTK+, written in Python;
- BRL-CAD, Constructive Solid Geometry (CSG) solid modeling system;
- QxOrm, a C++ library designed to provide Object Relational Mapping (ORM) feature to C++ users; and
- QxEntityEditor, a graphic editor for QxOrm library, providing a graphic way to manage a data model.