Skip to content
bradb edited this page Sep 28, 2021 · 49 revisions

Qhull 8.1_alpha1 2021/09/27

Tag Qhull #head for the github additions to Qhull [S.J. Johnson #97]

Testing is postponed to the next release of Qhull (hopefully 2022.1).

These changes to v8.0.2 (Qhull 2020.2.r) should not adversely affect v8.0.2 code.

  • global_r.c, global.c: update qh_version2 and new date for qh_version
  • CMakeLists.txt: update qhull_VERSION and qhull_SOVERSION
  • Change MSVC to WIN32 for dllimport attribute [B. Nath #80]
  • Add BUNDLE DESTINATION to install(QhullTargets) for iOS [#90]
  • Define CMAKE_INSTALL_NAME_DIR enabling default set_target_properties [B. Boeckel #94]

Additions to

  • accessors_r.h/.c -- Accessor functions for qhull integration [S. Johnson, B. Legat #89]
  • qhull_r-exports.def -- Add some missing symbols: qh_memcheck and qh_setendpointer [F. Facioni #93]

Documentation changes

  • user_r.c,user_eg2_r.c: Replace -REALmin with -REALmax in two error messages [S. Hutter #87]
  • Fixed various spelling errors in code comments and Changes.txt [luzpaz #84]
  • user_r.h: Replace qh_REALmax,qh_REALmin,qh_REALepsilon with REALmax,REALmin,REALepsilon in header comment

Qhull 2020.2 2020/08/31 (8.0.2)

Qhull 2020.2 2020/08/31 (8.0.2) is available on github and

Qhull 2020.2 2020/08/31 (8.0.2) updates Qhull's builds and Qhull's C++ interface.

Qhull's builds produce a shared library, (qhull_r.dll), several static libraries, and several applications using these libraries. They do not produce deprecated libraries:, qhull.dll,, and qhull_p.dll. Users of these libraries should convert their code to reentrant Qhull ( or link to libqhullstatic.a.

Qhull's Java-style iterators use a copy constructor to avoid subtle errors due to memory management. Its C++ interface is compatible with C++98.

Many thanks to G. Romualdi, S. Grein, Spacelm, M. Konecny, and T. Roehling for their suggestions and push requests. Qhull 8.0.1 removed an unnecessary dependency by the C++ interface on C++11. Without these changes to user_eg3.cpp, the old "gotchas" of Qhull's Java-style iterators would have remained in Qhull indefinitely.

Please report issues and suggestions for Qhull 2020.2.

Summary of changes for Qhull 2020.2

All builds

  • Install of Qhull builds produce nearly the same results -- see Qhull build systems
  • Qhull builds do not produce deprecated libraries (, qhull.dll,, and qhull_p.dll). These targets and project files remain available (build/README-build.txt)
  • Install the documentation tree (index.htm, README.txt, Changes.txt, html/*, etc.)
  • Do not install function documentation. Instead use It includes html links to source files.

CMake builds

  • Use the same target name for Debug and non-Debug builds [Spacelm #76]
  • If "MSYS Makefiles", change the default CMAKE_INSTALL_PREFIX to "/usr/local"
  • Add 'uninstall' to delete the files listed in install_manifest.txt
  • Moved into the build/ directory [T. Roehling #63]
  • Moved CMakeModules into the build/ directory

C++ interface

  • QhullUser.h, user_eg3_r.cpp -- Removed C++11 dependencies [G. Romualdi, S. Grein, Spacelm #66,#67,#68]
  • Coordinates, PointCoordinates -- Removed the Java-style iterators due to an expensive copy constructor for std::vector.
  • QhullLinkedListIterator, QhullHyperplaneIterator, QhullPointIterator, QhullPointsIterator -- These Java-style iterators copy the container instead of pointing to the container. This avoids subtle memory errors if passed a temporary value.
  • libqhullcpp/QhullSet.h -- For Qt, declare 'QList toQList() const' to avoid a prototype error

Testing and example programs

  • user_eg3_r.cpp: Replaced C++11's range-based-for-loops with Qhull's Qt/Java-style iterators.


  • Add Qhull build systems to the GitHub wiki

  • Update the qhullcpp code example in qh-code.html [M. Konecny #71]

  • Various changes to README.txt

  • See Changes.txt for updates to documentation and other changes.

  • For programmers using qh_findbestfacet to locate a Delaunay triangle:

    qh_findbestfacet may return an adjacent triangle [F. Drielsma]

Previous Qhull releases

Qhull 2020.1 enhanced the C++ interface (QhullUser.cpp with additional support for Voronoi diagrams). See user_eg3 for C++ examples. The build systems provide support for pkg-config, SONAME, DESTDIR (staged installs), PREFIX, QhullExport, and CMAKE_CURRENT_SOURCE_DIR.

Qhull 2019.1 contained numerous bug fixes and improvements to logging, error reporting, and merging. These changes were motivated by new test cases. Most of the troublesome inputs consist of many points approximately 1.0e-13 (scaled to the unit cube) from either nearby points or hyperplanes. Such inputs lead to many merges that eventually fail. These inputs are unlikely to occur in practice. Points substantially closer or further apart are OK. A future version of Qhull will include per-vertex joggle (like option 'QJ').

Qhull 2015.2 fixed memory leaks reported by Marcos Sandim; the CMake build reported by Niclas Rosenvik; and the DevStudio 2012 build. It fixes the return type of QhullLinkedList::last() and back() and includes 'iterator' as requested by Ben Boeckel.

Qhull 2015.1 was the first release of Qhull's reentrant library, libqhull_r. If you call Qhull from a program, you should use libqhull_r instead of libqhull or libqhull_p. The C++ interface uses libqhull_r.

libqhull_r does not use global variables. Instead, a qhT pointer is the first argument to each procedure. This approach was pioneered by Pete Klosterman in 2010.

Qhull 2015.1 fixed error QH6228 "all neighbors ... are flipped or upper Delaunay". This error occurred rarely with nine reports. J. Metz provided input that triggered this error.

Qhull 2015.1 includes rbox option 'Cn,r,m' to generate nearly coincident points. This is a newly understood, bad case for Qhull. It will be fixed in a later version of Qhull by merging facets before adding a new point. A bounding box for Delaunay triangulations and Voronoi diagrams may alleviate the problem. For more information, see "Nearly coincident points on an edge" in Nearly coincident points on an edge.

Version 2015.0.7 cleans up Qhull's collection classes and iterators, with thanks to Filip Jares for reporting these problems.

Version 2015.0.6 makes it easier to remove references to exit(), stderr, and stdout from libqhull, libqhull_r, and libqhullcpp. By redefining usermem_r.c, all references are removed except for two instances of stderr (to initialize a null FILE* parameter) [D. Sterratt].

Version 2015.0.1 increased the maximum vertex ID and ridge ID from 16M to 4G [H. Strandenes, C. Cantwell]

Comments, errors, suggestions are welcome.

                            --Brad Barber