Skip to content
bradb edited this page Aug 5, 2020 · 54 revisions

Qhull 8.0.1, prerelease of 2020.2

Qhull 8.0.1 (prerelease of 2020.2 2020/07/24) is available on github

6a000771811cf619167d15ce168cda4a *qhull-2020.2/qhull-2020.2-zip.md5sum
6d15e7f27392b031246701802f52866a *qhull-2020.2/qhull-2020-src-8.0.1-tgz.md5sum
4e7309375ef92b5cc38f6e58e0b29611 *qhull-2020.2.zip
de72c5e5ff243722be03d90af4ff1160 *qhull-2020-src-8.0.1.tgz

Qhull 8.0.1 is a prerelease of Qhull 2020.2 2020/07/24. Its C++ interface supports C++98. Its Java-style iterators use a copy constructor to avoid subtle errors due to memory management.

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

Please report issues and suggestions for Qhull 2020.2.

CMakeLists.txt for Qhull 2020.2 will probably drop the CMake build of libqhull.so and libqhull_p.so. Only libqhull_r.so should be deployed as a shared library. All new code should link to libqhull_r.so or libqhullstatic_r.a. The other build targets will remain for those who need backward compatibility.

Summary of changes for Qhull 8.0.1

C++ interface

  • QhullUser.h, user_eg3_r.cpp -- Removed C++11 dependencies [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.

Testing and example programs

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

Documentation

  • 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 with QhullUser and additional 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.

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 Barber