Skip to content
bradb edited this page Jun 7, 2020 · 54 revisions

Qhull 2020.1 (8.0.0)

Qhull 2020.1 2020/05/29 is available on github

21526ab21a654899aeceab85a9e55391 *qhull-2020.1/qhull-2020.1-zip.md5sum
5b97fdbad110936638c7c7578f367e44 *qhull-2020.1/qhull-2020-src-8.0.0-tgz.md5sum
cd2c4632e0c8820351f609c2ce1dc2aa *qhull-2020.1.zip
d74284d803e6ef6624e4a413d3ec05ab *qhull-2020-src-8.0.0.tgz

Qhull 2020.1 enhances the C++ interface with QhullUser and support for Voronoi diagrams. See user_eg3 for C++ examples. Qhull builds support pkg-config, SONAME, DESTDIR for staged installs, PREFIX, QhullExport, and CMAKE_CURRENT_SOURCE_DIR.

A special thanks to T. Roehling for his help with the builds and I. Voutchkov for asking how to display Voronoi diagrams with the C++ interface.

"To do" in Changes.txt includes a top-level design for constructing the Voronoi diagram is C++.

  • QhullLinkedList::const_iterator fixed operator->().

  • RoadError::stringGlobalLog returns std::string instead of const char *

  • QhullUser is a user-modifiable interface to Qhull using a custom qh_fprintf.
    Option 'Ta' displays the message codes for Qhull output. qh_fprintf can trap these codes and transfer the data to QhullUser.

  • user_eg3 adds examples for convex hulls, Delaunay triangulations, and Voronoi diagrams. The examples can take their input from rbox or qhull. 'user_eg3 rbox' preserves the dimension for multiple options.

  • The new C++ methods are Qhull::isDelaunay, Qhull::prepareVoronoi, QhullFacet::visitId, QhullFacet::nextFacet2d, QhullFacet::setFacetT, QhullRidge::qh, QhullRidge::setRidgeT, and QhullVertex::setVertexT.

  • qh_order_vertexneighbors [io_r.c] orders facet neighbors of a vertex by 2-d (orientation), 3-d (adjacency), or n-d (f.visitid,id).

  • qh_nextfacet2d [poly2_r.c] returns 2-d facets and vertices in counter-clockwise order.

  • Qhull install adds pkg-config support via CMakeLists.txt and Makefile. The template is qhull.pc.in.

  • CMakeLists.txt increases SOVERSION to 8.0. Makefile reads SOVERSION from CMakeLists and creates a symbolic link for SONAME. Qhull 2019.1 had ABI breakage that was not indicated by its SOVERSION 7.

  • CMakeLists.txt creates QhullExport/ for QhullConfig. CMakeLists sets POSITION_INDEPENDENT_CODE for libqhullcpp.

  • Makefile supports GNU Makefile standards for DESTDIR and PREFIX. Previous Qhull Makefiles used DESTDIR instead of PREFIX.

  • By default, Makefile compiles without -m32 and with -fpic. Use variables M32 and FPIC for 32-bit builds without -fpic on 64-bit hosts. This reduces memory requirements and may be faster on older processors.

  • The -lm linker flag moved to the end of the linker command.

  • C source files on www.qhull.org link to function documentation (Functions)

  • 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 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 libqhullp. 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