Skip to content
Snippets Groups Projects
  1. Oct 25, 2019
  2. Oct 21, 2019
  3. Sep 20, 2019
  4. Jul 01, 2019
  5. Jun 30, 2019
  6. Jun 29, 2019
    • Brad Barber's avatar
      Add config.cmake.in to README and qhull-zip.sh · 7cca9583
      Brad Barber authored
      Uploaded a new tarball to www.qhull.org
      7cca9583
    • Brad Barber's avatar
      Ignore Cmake files · b94cff07
      Brad Barber authored
    • Brad Barber's avatar
      Update CMake config file pull request #43 · e319aff0
      Brad Barber authored
      e319aff0
    • Brad Barber's avatar
      Qhull 2019.1 2019/06/21 (7.3.2) released · 15d90235
      Brad Barber authored
      Qhull 2019.1 contains bug fixes and improvements to logging, error reporting, and merging.
      - Fixed fifty bugs, including initialization bugs and memory corruption bugs
        in qh_readpoints and qh_option. See Bugs and Changes.txt.
      
      - New option 'TAn' stops Qhull after adding n points.
      - New option 'Tf' flushes qh_fprintf. Use 'Tf' when debugging segfaults.
      - New options '--help', '-?', and '--' display a short help message.
        Under Git for Windows or MSYS2, 'qhull' waits for stdin.
      
      - Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge complete.
        It traces qh_check_maxout, qh_prepare_output, qh_triangulate, and qh_voronoi_center
      - Options 'TI' and 'TO' do not require a space before the filename.
      
      - An unknown Qhull option is an error. It was a warning. Override with option 'Qw'.
      - Short or long input to Qhull is an error. It was a warning. Override with option 'Qa'.
      
      - Documentation encourages the use of joggled input. Joggled input is less precise than facet merging, but it cannot incur merge errors for degenerate input.
      - Documentation refers to 'dupridge' instead of 'duplicate ridge'. A dupridge is an erroneous ridge between four or more facets.
      - Fixed documentation for qh_findbestfacet.
        Delaunay triangulations may return an adjacent triangle [F. Drielsma].
      
      - The C++ interface includes new methods, hasNext() and hasPrevious(), for QhullFacet and QhullVertex.
      - Test scripts qtest.sh and q_benchmark help with logging and optimizing Qhull,
        particularly for intermittent errors and bad cases for Qhull.
      
      Fixed bugs in Qhull 2015.2 (see Changes.txt for the full list)
      - qh_buildcone_onlygood ('Qg') corrupted memory if it called qh_delfacet.
      - qh_check_maxout did not include qh.DISTround when checking f.maxoutside
      - qh_distround did not acount for 'Rn' (random roundoff) in option 'QJn'
      - qh_findbestfacet should document that it may return an adjacent triangle for Delaunay triangulations [F. Drielsma]
      - qh_findfacet_all should not search visible facets or f.upperdelaunay facets [P. Virtanen, S. Dominguez, J.Arkin]
      - qh_findgood may report a bad facet for qh.GOODvertex ('QVn'). Restrict the search to good facets.
      - qh_freebuild deleted unattached ridges, leading to a double delete
      - qh_initial_hull tested 'maybe flipped' instead of 'clearly flipped'. As a result facets could be incorrectly oriented, leading immediately to 'Only 4 facets remain' [S. Caron, P. Virtanen, D. Sterratt, others]
      - qh_initstatistics was missing initialization. As a result, the final qh_checkoutput may be skipped.
      - qh_initstatistics cannot use qh_fprintf to report errors. Use qh_fprintf_stderr
      - qh_maxsimplex did not detect nearly flat simplices except for the last vertex. It assumed the max coordinate was approximately 1. As a result, Qhull reported false narrow hulls or false low dimensional inputs. [J.R. Roussel, D. Sterratt]
      - qh_option could overflow the qh.qhull_options buffer
      - qh_partitionpoint could leave an outside point before qh.next_facet, leading to a skipped point.
      - qh_stddev was incorrect. It should be sqrt of absolute value.
      
      - 'Qbb' scaled the last coordinate to qh.MAXwidth causing loss of precision. It should be qh.MAXabs_coord.
      - 'rbox' and 'user_eg3' returned non-zero exit status for their help prompt. Should be 0.
      - 'rbox Cn,r,m' does not produce points for 'rbox r'
      - An error in qh_initqhull_start2 could loop forever. Need to set qh.NOerrexit
      - Do not call qh_check_points ('Tv') if reporting an error and qh.FORCEoutput ('Po')
      - If 'd' or 'v' was used with 'H', memory corruption occurred. Should be disallowed.
      - Improved searching of coplanar facets by qh_findbesthorizon.
      - Options 'Pdk' and 'Pdk' always returned the closest facet. This should only occur with option 'Pg'.
      - PointCoordinates::appendPoints should not require whitespace after a point
      - Setting qh.MINoutside could lead to verification ('Tv') failures. Fixed by setting qh.KEEPnearinside and calling qh_partitionpoint in qh_partitionall
      15d90235
    • Brad Barber's avatar
      Qhull 2019.1 2019/06/21 (7.3.2) released · 10886624
      Brad Barber authored
      Qhull 2019.1 contains bug fixes and improvements to logging, error reporting, and merging.
      - Fixed fifty bugs, including initialization bugs and memory corruption bugs
        in qh_readpoints and qh_option. See Bugs and Changes.txt.
      
      - New option 'TAn' stops Qhull after adding n points.
      - New option 'Tf' flushes qh_fprintf. Use 'Tf' when debugging segfaults.
      - New options '--help', '-?', and '--' display a short help message.
        Under Git for Windows or MSYS2, 'qhull' waits for stdin.
      
      - Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge complete.
        It traces qh_check_maxout, qh_prepare_output, qh_triangulate, and qh_voronoi_center
      - Options 'TI' and 'TO' do not require a space before the filename.
      
      - An unknown Qhull option is an error. It was a warning. Override with option 'Qw'.
      - Short or long input to Qhull is an error. It was a warning. Override with option 'Qa'.
      
      - Documentation encourages the use of joggled input. Joggled input is less precise than facet merging, but it cannot incur merge errors for degenerate input.
      - Documentation refers to 'dupridge' instead of 'duplicate ridge'. A dupridge is an erroneous ridge between four or more facets.
      - Fixed documentation for qh_findbestfacet.
        Delaunay triangulations may return an adjacent triangle [F. Drielsma].
      
      - The C++ interface includes new methods, hasNext() and hasPrevious(), for QhullFacet and QhullVertex.
      - Test scripts qtest.sh and q_benchmark help with logging and optimizing Qhull,
        particularly for intermittent errors and bad cases for Qhull.
      
      Fixed bugs in Qhull 2015.2 (see Changes.txt for the full list)
      - qh_buildcone_onlygood ('Qg') corrupted memory if it called qh_delfacet.
      - qh_check_maxout did not include qh.DISTround when checking f.maxoutside
      - qh_distround did not acount for 'Rn' (random roundoff) in option 'QJn'
      - qh_findbestfacet should document that it may return an adjacent triangle for Delaunay triangulations [F. Drielsma]
      - qh_findfacet_all should not search visible facets or f.upperdelaunay facets [P. Virtanen, S. Dominguez, J.Arkin]
      - qh_findgood may report a bad facet for qh.GOODvertex ('QVn'). Restrict the search to good facets.
      - qh_freebuild deleted unattached ridges, leading to a double delete
      - qh_initial_hull tested 'maybe flipped' instead of 'clearly flipped'. As a result facets could be incorrectly oriented, leading immediately to 'Only 4 facets remain' [S. Caron, P. Virtanen, D. Sterratt, others]
      - qh_initstatistics was missing initialization. As a result, the final qh_checkoutput may be skipped.
      - qh_initstatistics cannot use qh_fprintf to report errors. Use qh_fprintf_stderr
      - qh_maxsimplex did not detect nearly flat simplices except for the last vertex. It assumed the max coordinate was approximately 1. As a result, Qhull reported false narrow hulls or false low dimensional inputs. [J.R. Roussel, D. Sterratt]
      - qh_option could overflow the qh.qhull_options buffer
      - qh_partitionpoint could leave an outside point before qh.next_facet, leading to a skipped point.
      - qh_stddev was incorrect. It should be sqrt of absolute value.
      
      - 'Qbb' scaled the last coordinate to qh.MAXwidth causing loss of precision. It should be qh.MAXabs_coord.
      - 'rbox' and 'user_eg3' returned non-zero exit status for their help prompt. Should be 0.
      - 'rbox Cn,r,m' does not produce points for 'rbox r'
      - An error in qh_initqhull_start2 could loop forever. Need to set qh.NOerrexit
      - Do not call qh_check_points ('Tv') if reporting an error and qh.FORCEoutput ('Po')
      - If 'd' or 'v' was used with 'H', memory corruption occurred. Should be disallowed.
      - Improved searching of coplanar facets by qh_findbesthorizon.
      - Options 'Pdk' and 'Pdk' always returned the closest facet. This should only occur with option 'Pg'.
      - PointCoordinates::appendPoints should not require whitespace after a point
      - Setting qh.MINoutside could lead to verification ('Tv') failures. Fixed by setting qh.KEEPnearinside and calling qh_partitionpoint in qh_partitionall
      10886624
  7. Jun 19, 2019
  8. Jun 17, 2019
  9. Jun 14, 2019
  10. Jun 06, 2019
  11. May 25, 2019
    • Brad Barber's avatar
      Fix text for 'Qa' · 30ef8b0c
      Brad Barber authored
      Fix download links for qh-get.htm
      Mark as QH110nn FIX:
    • Brad Barber's avatar
      Relese candidate Qhull 2019.0.1 2019/05/24 (7.3.1) with improved logging,... · c580cb03
      Brad Barber authored
      Relese candidate Qhull 2019.0.1 2019/05/24 (7.3.1) with improved logging, error reporting, and merging.
      
      * Unknown options report an error instead of a warning.  Override with option '[Qw](https://github.com/qhull/qhull/blob/master/html/qh-optq.htm#Qw)'
      * Short or long inputs report an error instead of a warning.  Override with option '[Qa](https://github.com/qhull/qhull/blob/master/html/qh-optq.htm#Qa)'
      * Option '[TAn](https://github.com/qhull/qhull/blob/master/html/qh-optt.htm#TAn)' stops Qhull after adding n points
      * Option '[Tf](https://github.com/qhull/qhull/blob/master/html/qh-optt.htm#Tf)' flushes each qh_fprintf for debugging segfaults
      * Options '--help', '-?', and '--' display a short help message.
      * Fix almost 50 bugs (including memory corruption bugs in qh_readpoints and qh_option)
      * Add C++ methods hasNext() and hasPrevious() to QhullFacet and QhullVertex
      * Encourage the use of joggled input ('[QJ](https://github.com/qhull/qhull/blob/master/html/qh-optq.htm#QJ)').
      Joggled input is less precise than facet merging, but cannot incur topological and wide merge errors.
      * In documentation, use 'dupridge' instead of 'duplicate ridge' for ridges with more than two neighbors.
      Reserve 'duplicate ridge' for two ridges with the same vertices.
      * [eg/q_benchmark](https://github.com/qhull/qhull/blob/master/eg/q_benchmark) and [eg/qtest.sh](https://github.com/qhull/qhull/blob/master/eg/qtest.sh) make multiple runs for testing,
      benchmarking, and debugging Qhull.   It helps analyze intermittent errors such as seen with pinched vertices.
      See [eg/q_benchmark-ok.txt](https://github.com/qhull/qhull/blob/master/eg/q_benchmark-ok.txt).
      * See [Changes.txt](https://github.com/qhull/qhull/blob/master/src/Changes.txt) for additional changes.
      
      An experimental option, '[Q14](https://github.com/qhull/qhull/blob/master/html/qh-optq.htm#Q14)', merges
      pinched vertices.  *Pinched vertices* are
      nearly adjacent vertices (ca. 1.0E-13 apart on the unit cube).  They are far enough
      apart to avoid geometric errors, but not far enough apart to avoid topological errors.  An example
      of a topological error is four facets that share the same ridge; a ridge should only have two neighboring facets.
      Qhull 2015.2 merges facets to repair these errors, but it may fail, especially for multiple pinched vertices.
      
      Qhull options
      - Error if option warning (e.g., rbox 10 | qhull Qy), override error with 'Qw'
      - Error if 'd', 'v', or 'Hn,n,n' are used together
      - New option 'Qallow-short': allow short input with fewer points than coordinates
      - New option 'Qwarn-allow': allow option warnings
      - New option 'TAn': stop after adding n vertices
      - New option 'Tf': flush after qh_fprintf for debugging segfaults
      - New experimental option 'Q14-merge-pinched-vertices': merge pinched vertices due to dupridge
        Excessive merging leads to additional topological and wide facet errors
      - New experimental option 'Q15-check-duplicates': check for duplicate ridges with the same vertices
      - Option 'Q1' merges by mergetype/angle instead of mergetype/distance, coplanar merges first
        In 2015.2 by default, Qhull merged by mergetype/angle with lower angles first
      - Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge
        It traces qh_check_maxout, qh_prepare_output, qh_triangulate, qh_voronoi_center
      - Allow '-?' and "--help" (or "--") as alternatives for short prompts
        Qhull does not support '--' options
        Git for Windows v2.21.0 does not support isatty ('winpty qhull' is OK)
      - Allow Qhull extra options Q12 and Q14 for qconvex/qdelaunay/qhalf/qvoronoi
      - Allow option 'QRn' (random rotate) for qdelaunay/qhalf/qvoronoi
      - Alphabetize short prompts (qhull .)
      - Alphabetize long prompts w/ normal options first (qhull -)
      - Alphabetize option help by option code
      - Add 'Number of merged pinched vertices' to summary ('s')
      - Add 'TI file' to help message for qconvex/qdelaunay/qhalf/qvoronoi
      - Dropped experimental option 'Q16-simplex-merge'.   Centrums are required for convexity
      - Ignore missing space after 'TI' or 'TO'.  Allow 'TIinputfile' and 'TOoutputfile'
      - Prefix option errors and warnings with 'qhull option error:' or 'qhull option warning:'
      - Remove hidden option 'normals' from help prompts for qdelaunay, qhalf, qvoronoi
      - Reword short prompts to 'Pdrop-d0:0D0', 'QbBound-0:0.5', and 'off_format'
      - Updated qh-quick.htm, 'qhull -', and 'qhull .' for 'T...' and 'Q...' options.
        Separate help prompts for 'T options' and 'Trace options'
      - Use '-' instead of '_' for word delimiter in option names
      
      Qhull builds, scripts, and debugging
      - Add qh.traceridge, qh.traceridge_id, and qh_delridge for debugging by ridge in qh_fprintf
      - Check for qhull with 'which qhull' instead of 'qhull', avoids hangs in git bash
      - Makefile/CC_WARNINGS: Add instructions for collecting and testing gcc warnings
      - Makefile/benchmark: Add q_benchmark, 10 runs of each
      - Makefile/clean: Delete linked files from src/libqhull and src/libqhull_r, as in their Makefiles
      - Makefile/help: Add 'make all' to 'make help' prompts
      - Makefile/libqhull_r.so: Add target for creating symbolic link
      - Makefile/qhullx: Add test of testqset and testqset_r
      - Makefile/qhullx: Create bin/ directory if missing
      - Makefile/test: Add user_eg3 help prompt
      - Makefile/testall: Add q_benchmark, 1 run of each
      - eg/make-vcproj.sh/qhullx: Build bin/qhullx from src/qhullx/ for comparison
      - eg/q_benchmark: new script for measuring Qhull precision and performance with qtest.sh
      - eg/q_test: update error messages for missing bin/ and bin/libqhull_r.dll
      - eg/q_test: tests of Tf and TAn
      - eg/qhull-zip.sh: add note that it requires road-script.sh from http://www.qhull.org/road/
      - eg/qhull-zip.sh: check source depencencies for prompts
      - eg/qtest.sh: new script for testing Qhull and summarizing its trace files
      - libqhull_r/Makefile: install target creates $INCDIR/libqhull_r and $LIBDIR
      - libqhull_r.h/qh_ERRdebug: define error status for debugging exits
      
      Qhull fixed bugs
      - html/qh-optp.htm: options 'PDk' and 'Pdk' require option 'Pg' to return the closest facet
      - Makefile/qhullx: fixed qhullx compile of testqset and testqset_r
      - PointCoordinates.cpp/appendPoints: read 'in >> p' instead of 'in >> p >> ws'
        otherwise istream fails if file does not end with whitespace
      - geom_r.c/qh_findbesthorizon: fix test for Zfindjump (bestdist jumps by searchdist)
      - geom_r.c/qh_findbesthorizon: increased minsearch of coplanar facets if ischeckmax and more than 100 neighbors
      - geom_r.c/qh_sethyperplane_det: dropped precision statistic Znearlysingular (it's Zminnorm)
      - geom2_r.c/qh_detjoggle: use 'En' (roundoff) if specified by options
      - geom2_r.c/qh_distround: move adjustment for 'Rn' into qh_distround.  'QJn' did not account for 'Rn'
      - global_r.c/qh_checkflags: handle two-digit Q options in hiddenflags
      - global_r.c/qh_freebuild: do not delete unattached ridges, otherwise a double delete.  Should not occur
      - global_r.c/qh_option: fix potential overflow of qh.qhull_options
      - global_r.c/qh_initflags: fixed incorrect indentation for option 'TO file'
      - global_r.c/qh_initqhull_start2: set qh.NOerrexit True
      - io_r.c/qh_eachvoronoi: allow fp==NULL for QhullQh::qh_fprintf to appendQhullMessage
      - io_r.c/qh_readpoints: error if 'd' or 'v' with 'H', otherwise memory corruption
      - libqhull_r.h/qh.MERGEvertices: fixed comment, 'Q3' disables this feature
      - libqhull_r.c/qh_buildcone_onlygood: cannot qh_delfacet inside FORALLnew_facets
      - libqhull_r.c/qh_partitionpoint: if qh.NARROWhull and bestdist>qh.MINoutside and isnewoutside,
        may need to move facet to qh.newfacet_list for qh.next_facet
      - libqhull_r.c/qh_printsummary: Zdistconvex is for checking convexity instead of testing convexity
      - libqhull_r.c/qh_findhorizon: coplanar horizon if apex >= -qh.MAXcoplanar, instead of > -qh.MAXcoplanar
      - mem_r.c/qh_memcheck: define null qh_memcheck if qh_NOmem
      - merge_r.c/qh_mergecycle_all: turn on tracing, 'TMn', for coplanar horizon merge of one facet
      - merge_r.c/qh_mergefacet2d: do not create ridges for neighborB.  The opposite neighbor may be tested
      - merge_r.c/qh_test_centrum_merge: coplanar if centrum >= -qh.centrum_radius, instead of > -qh.centrum_radius
      - merge_r.c/qh_test_nonsimplicial_merge: coplanar if centrum >= -qh.centrum_radius, instead of > -qh.centrum_radius
      - merge_r.c/qh_tracemerging: fixed "qhull has merged" prompt
      - merge_r.c/qh_willdelete: empty f.neighbors and f.ridges, references are no longer valid, will be deleted
      - poly_r.c/qh_checkflipped: flipped if qh.interior_point >= -qh.DISTround, instead of > -qh.DISTround
      - poly2_r.c/qh_addfacetvertex: initialize vertex_i in case f.vertices is empty
      - poly2_r.c/qh_check_maxout: need to include qh.DISTround when checking f.maxoutside with qh.maxoutside
      - poly2_r.c/qh_checkconvex: fix documentation for qh_DATAfault.  It is restricted to qh_initialhull with qh.ZEROcentrum
      - poly2_r.c/qh_checkconvex: coplanar if >= -qh.DISTround, instead of > -qh.DISTround
      - poly2_r.c/qh_checkconvex: check simplicial ridges if !qh.MERGING && qh.ZEROcentrum (unlikely or not-possible)
      - poly2_r.c/qh_findgood: restrict qh.GOODvertex ('QVn') to good facets
      - poly2_r.c/qh_findgood_all: unless 'Pg', ignore qh.GOODclosest for nearest facet to thresholds.
           'PdD' reports 0 good facets
      - poly2_r.c/qh_replacefacetvertex: initialize vertex_n in case f.vertices is empty
      - qconvex.c,qdelaunay.c,etc.: remove automatic 'Qx' for 5-d and higher.  Set by default in qh_initqhull_globals
      - qvoronoi_r.c/qh_prompt: remove disabled option 'TRn' from help prompt
      - random_r.c/qh_argv_to_command: fixed missing braces, same behavior as before
      - rbox_r.c: return 0 exit status on prompt
      - rboxlib.c/qh_rboxpoints: use qh_fprintf_stderr instead of qh_fprintf_rbox.  Avoid qh_errexit_rbox
      - rboxlib.c/qh_rboxpoints2: clear rbox_inuse on exit, as in error exit
      - rboxlib_r.c/qh_rboxpoints2: incorrect string arg to 'rbox error: unknown flag'
      - rboxlib_r.c/qh_rboxpoints2: remove superfluous qh_free(*simplex)
      - stat_r.c/qh_initstatistics: due to NOerrors cannot use qh_fprintf, use qh_fprintf_stderr instead
      - stat_r.c/qh_stddev: return sqrt of absolute value
      - testqset_r.c: if qh_NOmem, do not call qh_memfreeshort
      - user_eg_r.c,user_eg2_r.c: if qh_NOmem, call qh_freeqhull(qh, qh_ALL) instead of qh_memfreeshort
      - user_eg3_r.cpp: return 0 exit status on prompt
      
      Qhull fixed bugs introduced by 2018.0
      - libqhull_r.c/qh_addpoint: clear qh.retry_addpoint on success
      - libqhull_r.c/qh_buildcone_mergepinched: cannot qh_delfacet inside FORALLnew_facets
      - libqhull_r.c/qh_partitioncoplanar: clear qh.repart_id on exit for infinite recursion detect
      - geom2_4.c/qh_detmaxoutside: move qh_option call to qh_errexit
      - merge_r.c/mergetypes[]: fixed order by mergeT
      - merge_r.c/qh_all_vertexmerges: fix retryfacet for repeated calls
      - merge_r.c/qh_forcedmerge: f.dupridge retained after MRGdupridge
        hides MRGdegenerate in qh_test_degen_neighbors and qh_test_redundant_neighbors
      - merge_r.c/qh_postmerge: call qh_freemergesets
      - merge_r.c/qh_test_nonsimplicial_merge: clear iscoplanar if isconcave and any vertex is not coplanar
      - poly2_r.c/qh_triangulate: move reset of f.degenerate into delete facet loop
      
      Qhull C++
      - QhullFacet.cpp: add hasNext() and hasPrevious()
      - QhullVertex.cpp: add hasNext() and hasPrevious()
      - qhulltest-64/QhullFacet_test.cpp,QhullVertex_test.cpp: test hasNext, hasPrevious, and hasPrevious iterator
      - user_eg3.cpp: use 'qhull-cout' for option 'Tz' (trace to cout)
      
      Qhull errors, warnings, and tracing
      - Error messages rewritten and error codes changed (see qh_fprintf)
        Renumbered Qhull warnings as 'QH7xxx' if needed (e.g., QH9375)
        Reused unused error and message codes ("def counters" in user_r.h/msgcode)
        Please check your code if it depends on error and message codes
      - Initialize variables to avoid potential uninitialized warnings
      - Use qh_ERRqhull for Qhull internal errors, "qhull internal error (qh_...): ..."
      - Use 'defined()' for qh_QHpointer_dllimport and qh_dllimport (-Wundef)
      - Use 'defined()' for __cplusplus, _MSC_VER, __MWERKS__, and __POWERPC__ (-Wundef)
      - Use 'Early exit' instead of 'At a premature exit'
      - libqhull_r.h/qh_ERRother: define error status for non-internal errors
      - libqhull_r.h/qh_ERRtopology: define error status for qhull topology errors
      - libqhull_r.h/qh_ERRwide: define error status for wide facets due to qhull precision error
      - geom_r.c/qh_setfacetplane: add qh_printfacet if qh.tracefacet for qh.tracefacet_id
      - global_r.c/qh_freebuild: record previousfacet/ridge/vertex in case a memory fault occurs
      - global_r.c/qh_init_flags: improved error message for 'cannot open file' for 'TO f'
      - global_r.c/qh_init_flags: improved warning message for 'unknown option'
      - global_r.c/qh_initbuild: add trace options to "Trace level ..."
      - global_r.c/qh_initqhull_globals: error if qh.VORONOI without qh.DELAUNAY
      - global_r.c/qh_initqhull_globals: error if numpoints is <1 or >qh_POINTSmax (INT_MAX-16)
      - global_r.c/qh_lib_check: use C-style comment for _CrtSetBreakAlloc
      - io_r.c/qh_printfacetheader: add "max" if f.merges==qh_MAXnummerge (511)
      - io_r.c/qh_readpoints: error if numinput is <1 or >qh_POINTSmax (INT_MAX-16)
      - io_r.c/qh_readpoints: moved up 'chop' of qh.rbox_command to report short input errors
      - io_r.c/qh_readpoints: replace warning QH7073 with error message. Override with Qallow-short
      - libqhull_r.c/qh_addpoint: if 'T4', check qh.visible_list before qh_partitionvisible
      - libqhull_r.c/qh_buildtracing: add delta cpu/facets/hyperplanes to QH1049 'qh_addpoint: add p%d...'
      - merge_r.c/qh_findbest_pinchedvertex: replaced assert with a 'qhull internal error'
      - merge_r.c/qh_check_dupridge: drop advice about reporting wide merges for error QH6271
      - merge_r.c/qh_mark_dupridges: topological error if multiple dupridges for one facet, not handled
      - merge_r.c/qh_test_nonsimplicial_merge: if Qx and many merges, replace centrum_radius with maxoutside
      - poly_r.c/qh_matchneighbor: drop extra warnings for duplicate facet (QH7084)
      - poly_r.c/qh_matchnewfacets: check for simplicial facets on qh.newfacet_list, otherwise memory overwrite by qh_matchneighbor
      - poly2_r.c/qh_checkconvex: identify simplicial checking of vertices (qh.ZEROcentrum, default)
      - poly2_r.c/qh_checkconvex: distinguish above from coplanar for non-convex initial simplex
      - poly2_r.c/qh_checkconvex: "non-convex initial simplex" for qh_joggle_restart
      - poly2_r.c/qh_checkfacet: check f.id and f.vertex_visit
      - poly2_r.c/qh_checklists: check and repair facet and vertex lists for infinite loops or overwritten facets/vertices
      - poly2_r.c/qh_checkpolygon: if qh.NEWfacets, check visible facets for empty f.neighbors and f.ridges
      - poly2_r.c/qh_checkpolygon: add qh_checkvertex
      - poly2_r.c/qh_checkpolygon: check f.previous and v.previous links (for C++)
      - poly2_r.c/qh_checkvertex: add parameters for allchecks and waserror (like qh_checkfacet)
      - poly2_r.c/qh_checkvertex: check v.id and v.vertex_visit
      - qvoronoi.c/hidden_options: hide option 'FM'. Maple output is not available
      - rboxlib_r.c/qh_rboxpoints: use QH6... for error codes instead of QH7070 and QH7071
      - stat_r.c/qh_stddev: check for division by 0
      - testqset_r.c: send all messages, except 'OK' to stderr
      - testqset_r.c: reassign unique QH8nnn codes, 8001/etc in use by libqhull_r
      - user_r.c/qh_printhelp_internal: add descriptive message for a Qhull internal error
      - user_r.c/qh_printhelp_narrowhull: add option 'Qs' (search all points)
      - user_r.c/qh_printhelp_topology: add descriptive message for a Qhull topology error
      - user_r.c/qh_printhelp_wide: add descriptive message for a wide merge error
      - user_eg_r.c: add fflush and '=======' markers to interleave stdout with stderr (MSYS2)
      - user_eg2_r.c: add fflush and '=======' markers to interleave stdout with stderr (MSYS2)
      - user_eg2_r.c: add warning about calling qh_addpoint after qh_qhull with 'QJ' (joggle)
      
      Qhull documentation and statistics
      - Add Index to README.txt
      - Add links to Wiki, http://github.com/qhull/qhull/wiki
      - Add links to local home page (index.htm)
      - Add GitHub, Scholar, and Code to navigation bar on home page
      - Change numbered fixups to 'QH11... FIXUP: '
      - Chrome and Internet Explorer load '.c' and '.h' files as text/html from the Web
        These browsers along with Firefox do not read disk files as text/html
        Changed 'Functions' link from a local link to "http://www.qhull.org/src/libqhull_r/index.htm"
      - Document implicit parameters at end of parameter list with '/* qh. ... */'
      - Limit maximum length of literals to 1800 characters
      - Move 'called by' comments to start of 'notes:'
      - Option 'QRn' appends the actual QRn to the summary line ('s')
      - Remove references to 'Qx' in 5-d and higher.  It is automatically set by default.
      - Replace references to 'src/libqhull/*.htm' with reentrant 'src/libqhull_r/*_r.htm'
      - Retitle 'Qhull internals' as 'Qhull code'
      - Use 'nearly adjacent vertices' instead of 'nearly coincident points'
      - Use 'dupridge' instead of 'duplicate ridge' for ridges with more than two neighbors.
        Reserve 'duplicate ridge' for two ridges with the same vertices.
      - Various edits to documentation (*.htm)
      - Update copyright to 2019
      - eg/q_test: Add examples to q_test "front ends"
      - html/index.htm: Add 'Limitations of merged facets' to the Qhull manual
      - html/index.htm: Add links to qdelaun_f.htm and qvoroin_f.htm (furthest-site)
      - html/qconvex.htm,etc: update synopsis and options
      - html/qh-code.htm: Add 'qh_addpoint' trace to 'Performance of Qhull'
      - html/qh-code.htm: Add a section on 'Debugging Qhull' with subsections for error codes,
        infinite loops, trace options, core dumps, segfaults, qtest.sh, and memory errors.
      - html/qh-impre.htm: Add 'Topological error' to 'Precision problems'
      - html/qh-impre.htm: Add 'Topological errors' to 'Limitations of merged facets'
      - html/qh-impre.htm: Add "narrow range of values" to 'Uneven dimensions'
      - html/qh-optq.htm: Add note to 'QJ' (joggle) about calls to qh_addpoint
      - html/qh-optt.htm#'Tc': 'T4' makes additional checks beyond check-frequently
      - html/qhalf.htm: Split the first example to clarify the "feasible point" for qhalf
      - html/qhalf.htm: Use 'feasible point' instead of 'interior point' for halfspace intersection
        Same as Qhull::feasiblePoint and distinguished from qh.interior_point
      - html/qhull.man,qhull.txt: updated man page
      - libqhull_r.h: update documentation for PRINTgood, GOODpoint, GOODvertex
      - qhull_ra.h: include '<limits.h>'.  Used for INT_MAX,etc.
      - stat.h: add zretryadd stats for qh_merge_pinchedvertices
      - stat.h: add zvertextests for distance tests of vertices for merging
      - libqhull_r/*: document global variables as 'qh.'
      - libqhull_r/*: fix libqhull/... links
      - libqhull_r.c/qh_partitioncoplanar: reword Zpartflip as Zpartcorner with updated messages
      - merge_r.c/qh_merge_degenredundant: rename statistic Zneighbor to Zredundant
      - stat_r.c: new or reworded statistics for Zpartcorner, Zparthidden, Zparttwisted, Zpinchduplicate, Zpinchedvertex
      - stat_r.c: rename 'renamed vertex statistics' to 'statistics for vertex merges'
      - stat_r.c: add merge statistics for MRGconcavecoplanar
      - stat_r.c/qh_allstat: add ' ' before parens in statistics
      - user_eg_r.c,user_eg2_r.c: rewrote prompt
      
      Qhull changes
      - For simple initializers, remove spaces (e.g., 'for (i=0; ...')
      - Normalize spacing for libqhull
      - Normalize spacing as 'for (i=0; ...' for simple initializers
      - Review use of '>' for comparison to negative quantities.  Usually should be '>=', e.g., for coplanar tests
      - Reassigned 8xxx and 9xxx codes as trace codes if traced at T3 or lower
      - Remove unused variables
      - Test floating point values with 0.0 instead of 0 (qh.premerge_centrum,lower_bound,upper_bound)
      - Use SETsecondt_() and SETelemt_() instead of SETelem_() when assigning to a specific type
      - Use '(type *)' for pointer casts.  It makes the cast more visible.
      - Use void for empty parameter lists
      - geom_r.c/qh_findbesthorizon: mark startfacet visited, avoids unnecessary visit
      - geom2_r.c/qh_detmaxoutside: determine precision target qh.MAXoutside (option _maxoutside at error exit)
        replaces 'maxoutside' computation
      - geom2_r.c/qh_maxsimplex: add ratio test for false narrow hull with search for prevdet
      - global_r.c/qh_freebuild: free global sets first instead of last, otherwise dangling references
      - io_r.c/qh_compare_nummerge: renamed qh_compare_facetmerge due to conflict with merge_r.h
      - io_r.c/qh_compare_vertexpoint: remove this routine.  Not usable in libqhull_r due to 'qh'
      - io_r.c/qh_printfacetridges: do not print ridge if already printed (e.g., duplicate neighbors for merge of simplicial facets)
      - io_r.c/qh_produce_output2: fflush of qh.fout to show statistics and verification after output (MSYS2)
      - libqhull_r.h/qh.ALLOWwide: rename qh.NOwide to qh.ALLOWwide for 'Q12-allow-wide'
      - libqhull_r.h/qh.IGNOREpinched: replaced qh.MERGEpinched with reversed meaning
      - libqhull_r.c/qh_addpoint: 'TVn' stops after qh_all_vertexmerges, not before qh_resetlists.  Matches documentation
      - merge_r.h/MRGdupridge: renamed MRGridge
      - merge_r.h/qh_ANGLEconcave,etc.: replace mergetype indicators with qh_ANGLEnone and m.mergetype
      - merge_r.c/qh_all_vertexmerges: replace qh_getmergeset_initial with qh_getmergeset.  No facets created
      - merge_r.c/qh_all_vertexmerges: move while loop into qh_all_vertexmerges
      - merge_r.c/qh_append_mergeset: ignore merges into a MRGdegen facet (f.degenerate)
      - merge_r.c/qh_buildcone_mergepinched: clean up code and design documentation
      - merge_r.c/qh_compare_anglemerge: renamed qh_compareangle and sort by mergetype as well as angle
      - merge_r.c/qh_compare_facetmerge: merge MRGcoplanar before MRGconcave, opposite order from 2015.2
                                         sort MRGanglecoplanar by angle
      - merge_r.c/qh_degen_redundant_facet,qh_test_degen_neighbors: moved into qh_mergefacet due to qh_willdelete
      - merge_r.c/qh_getmergeset,qh_getmergeset_initial: set f.tested after testing ridges, not before
      - merge_r.c/qh_next_facetmerge: split out next merge from qh_all_merges and replace qsort
      - merge_r.c/qh_findbest_pinchedvertex,qh_findbest_ridgevertex: dropped selecting merge direction via qh_vertex_isbelow.  Expensive and evidence mixed
      - merge_r.c/qh_freemergesets,qh_initmergesets: pair qh_initmergesets with qh_freemergesets
      - merge_r.c/qh_freemergesets,qh_initmergesets: drop the 'all' parameter
      - merge_r.c/qh_mergecycle_all: move qh_merge_degenredundant, etc. to end from qh_premerge
      - merge_r.c/qh_mergesimplex: delete facet1 from facet2.neighbors at end, not at ridge
      - merge_r.c/qh_post_merges,qh_all_merges: remove setting of v.delridge on all vertices, not needed
      - merge_r.c/qh_premerge: replace parameter 'apex' with 'apexpointid'.  Only used for logging
      - merge_r.c/qh_premerge: add qh.newfacet_list as an implicit parameter
      - merge_r.c/qh_test_degen_neighbors: split from qh_degen_redundant_neighbors and qh_mergefacet
      - merge_r.c/qh_test_redundant_neighbors: split from qh_degen_redundant_neighbors and qh_mergefacet
      - poly_r.c/qh_attachnewfacets: clear f.neighbors and f.ridges for visible facets, will be deleted
      - poly_r.c/qh_matchnewfacets: remove call to qh_checkflipped_all for qh.FORCEoutput, checked by qh_setfacetplane
      - poly_r.c/qh_update_vertexneighbors: renamed qh_updatevertices. A future version will optimize
        qh_update_vertexneighbors_cone: optimization for cone of new facets
      - poly2_r.c/qh_checkconvex: immediate skip of f.tricoplanar facets.  Tricoplanar facets not tested.  Called before qh_triangulate
      - poly2_r.c/qh_initbuild: move 'create sentinels' before qh_createsimplex so that qh.vertex_tail is v0 like f0
      - poly2_r.c/qh_initialvertices: cleaned up code for qh_INITIALmax (8-d)
      - poly2_r.c/qh_makenewfacets: clear f.neighbors and f.ridges for visible facets, will be deleted
      - poly2_r.c/qh_matchdupridge: optimize dupridge for flipped->!flipped, good merge, not !flipped->flipped
      - poly2_r.c/qh_matchdupridge_coplanarhorizon: dropped routine.  Results same or slightly worse.  Complex addition, rarely used
      - poly2_r.c/qh_triangulate: rename facet and vertex lists as triangulated_facet_list,etc.
        qh_triangulate does not maintain qh.newfacet_list or qh.visible_list
      - poly2_r.c/qh_triangulate: ignore qh.NEWfacets. qh_checkpolygon is not valid inside qh_triangulate
      - rboxlib_r.c/qh_rboxpoints2: split function from qh_rboxpoints to avoid -Wclobbered
      - stat_r.c/qh_printstatlevel: remove unused NULLfield
      
      Qhull C++ changes
      - Use NULL instead of 0 for pointers
      - Remove old style casts such as '(size_t)...'
      - Define initializers for default constructors even if explicitly assigned
      - Update static initializer list for s_empty_facet, s_empty_ridge, s_empty_vertex
      - Coordinates.h: default constructor clears coordinate_array
      - Coordinates.h: default iterator constructor clears i
      - RboxPoints.cpp/qh_fprintf_rbox: add empty default to switch statement
      c580cb03
    • Brad Barber's avatar
      Add q_benchmark and qtest.sh for benchmarks of Qhull performance · 6a86df9e
      Brad Barber authored
      and for testing intermittent failures.
      
      Add q_benchmark-ok.txt for the results of q_benchmark on Qhull 2015.2
      
      Add make-qhull_qh.sh to convert reentrant Qhull code into
      non-reentrant Qhull code.  A directory diff can than check for
      discrepancies.
      
      Add exports.def files for building Qhull with qh_NOmerge code.
      6a86df9e
  12. Dec 29, 2018
    • Brad Barber's avatar
      Qhull 2018.0.1 2018/12/28 (7.3.0) · 6ebf10e2
      Brad Barber authored
      merge branch 'next' into master
    • Brad Barber's avatar
    • Brad Barber's avatar
      Qhull 2018.0.1 2018/12/28 (7.3.0) · a0e0374a
      Brad Barber authored
      Qhull options
       - Add option 'Tf' to flush each qh_fprintf for debugging segfaults
       - Add Q14-no-merge-pinched: do not merge pinched vertices for duplicate ridge
         Default if post-merge only ('Cn'), 'Qgood-only', or 2-d convex hulls
       - Add Q15-allow-wide-maxout: do not error on qh_check_maxout failures
       - Add Q16-simplex-merge: test opposite vertex instead of centrum for merges
       - option 'f' (print facets): updated flags for facets
         'seen' and 'seen2' flags not listed (listed if tracing)
         Renamed 'new' to 'newfacet'
         'isarea' if area is listed for the facet
         'cycledone' if qh_mergefacet completed
         Renamed 'MERGE' to 'MERGEridge' in the facet neighors (for merging)
         Renamed 'DUP' to 'DUPLICATEridge' in the facet neighors (for merging)
         Comment '- horizon ridge to visible facet' added for tentative new facets
       - option 'f' (print facets): updated flags for ridges
         'mergevertex' and 'mergevertex2' if a ridge vertex will be merged
         'simplicialtop' and 'simplicialbot' if the top/bottom facet is simplicial
       - option 'f' (print facets): updated flags for vertices
         Renamed 'ridgedeleted' to 'delridge'
         'newfacet' if the vertex belongs to a new facet on qh.newfacet_list
         'seen' and 'seen2' listed if tracing
       - Option 'T3' prepend message number for trace levels 0-3
         e.g., "[QH1040]qh_findhorizon: find horizon..."
       - Option 'TCone_stop' stops before vertex merge due to duplicate ridges (unlikely)
       - Option 'Ts' (qh_initbuild): print command prompt at start of run for segfaults
       - Rename option 'U-coplanar-distance' to 'U-max-coplanar' (qh.MAXcoplanar)
      
      Qhull documentation
       - Explanation of clobbered warning for Qhull::runQhull and qh_new_qhull
       - html/index.htm: Add "Nearly coincident points" to "When to use Qhull"
       - html/index.htm: Add Tomilov's qhullhull.hpp for general position input.
       - html/qh-eg.htm: Add 'Q0' link to eg.14.sphere.corner
       - html/qh-faq.htm,qh-code.htm: merge slivers in a Delaunay triangulation [M. Treacy]
       - html/qh-optq.htm: Update documentation for 'Qx' and its default behavior
       - html/qh-impre.htm: Rewrote notes on 'Nearly coincident points within 1e-13'
       - geom_r.c/qh_distplane: nearly coplanar points may return the same distance for different points
       - Update copyright to 2018
      
      Qhull builds
       - Move 'extern "C" {}' logic from C++ to C headers [C. Atkins, github]
       - build/*-64.vcxproj Updated for tool set 8.1
       - CMakeLists.txt: Add note for "dynamic linking" of qhull executables [M. Atzeri]
      
      Bugs fixed
       - libqulll_r.c/qh_findbest: search from newfacet_list instead of f.next if !bestfacet
       - merge_r.c/qh_find_newvertex: use v.seen to avoid maxvisit > qh.vertex_visit
       - merge_r.c/qh_merge_simplex: repeat with next ridge after qh_delridge_merge
       - merge_r.c/qh_vertexridges: 'qh.visit_id += 2' to avoid visit_id collision
       - poly_r.c/qh_appendfacet: update qh.visible_list if qh.newfacet_list/visible_list are empty
       - poly2_r.c/qh_check_maxout: check qh.min_vertex if qh.VERIFYoutput/CHECKfrequently
       - poly2_r.c/qh_checkpolygon: do not report qh.visible_list error if visible_list and newfacet_list are defined but empty
       - stat_r.c/qh_printallstatistics,qh_printstatistics: 'const char *string' instead of 'char *string' for !qh_KEEPstatistics
      
      Qhull error reporting
       - libqulll_r.c/qh_findhorizon: error if no neighbors for a visible facet
       - libqulll_r.c/qh_findbestnew: error if facet sentinel (!facet->next)
       - libqhull_r.c/qh_nextfurthest: error if infinite loop
       - libqhull_r.c/qh_partitioncoplanar: error if partition into a visible facet
       - libqhull_r.c/qh_partitionpoint: error if partition into a visible facet
       - libqhull_r.c/qh_partitionvisible: error if deleted vertex with an empty qh.newfacet_list
       - merge_r.c/qh_checkdelfacet: check that mergeset does not reference facet
       - merge_r.c/qh_checkdelridge: check that qh_delridge_merge is not needed for deleted ridges
                   Call from qh_mergecycle, qh_makenewfacets, qh_attachnewfacets
       - merge_r.c/qh_maydropneighbor: error if simplicial facet or neighbor
       - merge_r.c/qh_merge_facet: error if wide merge (disabled with 'Q15')
       - merge_r.c/qh_merge_nonconvex: error if unexected mergetype
       - poly_r.c/qh_matchneighbor: convert error QH6106 (two facets with same vertices) to a warning (QH7084) and automatic fix
       - poly2_r.c/qh_check_maxout: error if wide qh.max_outside/min_vertex (disabled with 'Q15')
       - poly2_r.c/qh_check_maxout: warn if wide maxout for vertices (for diagnosing errors)
       - poly2_r.c/qh_check_maxout: warn if point is outside f.outside (for diagnosing errors)
       - poly2_r.c/qh_check_maxout: warn if 'f.maxoutside > qh.max_outside'
       - poly2_r.c/qh_check_maxout: changed comparison from 'dist == maxoutside' to 'dist >= maxoutside' (allow multiple warnings)
       - poly2_r.c/qh_checkfacet: error if 'redundant' or 'degenerate', but neither 'visible' nor qh.degen_mergeset
       - poly2_r.c/qh_checkfacet: error if 'dupridge' or 'newmerge', but not 'newfacet'
       - poly2_r.c/qh_checkfacet: error if neighbor of facet is 'visible' (i.e., deleted)
       - poly2_r.c/qh_checkfacet: report 'OK due to merging' as trace4 (QH4073) instead of error QH6134
       - poly2_r.c/qh_checkpolygon: error if qh.visible_list is after qh.newfacet_list
       - poly2_r.c/qh_checkpolygon: error if f.newfacet before qh.visible_list or qh.newfacet_list
       - poly2_r.c/qh_checkpolygon: error qh.newfacet_list without f.newfacet
       - poly2_r.c/qh_checkpolygon: error if f.visible not on qh.visible_list
       - poly2_r.c/qh_checkpolygon: error if qh.visible_list without f.visible
       - poly2_r.c/qh_checkpolygon: error if qh.newfacet_list is not on qh.facet_list
       - poly2_r.c/qh_checkpolygon: error if v.newfacet not on qh.newvertex_list
       - poly2_r.c/qh_checkpolygon: error if qh.newvertex_list is not on qh.vertex_list
       - poly2_r.c/qh_checkpolygon: error if a facet occurs twice in v.neighbors
       - poly2_r.c/qh_checkpolygon: error if vertex not in f.vertices for facets in v.neighbors
       - poly2_r.c/qh_checkpolygon: error if facet not in v.neighbors for vertices in f.vertices
       - poly2_r.c/qh_delvertex: error if vertex previously deleted but not partitioned as a coplanar point
       - user_r.c/qh_errexit: clear printed flags on statistics (qh_allstatistics)
       - user_r.c/qh_errprint: print vertex and ridge before facets
       - user_r.c/qh_errprint: print vertex and ridge before facets
       - user_r.c/qh_printfacetlist: add 'qh_printfacetlist:' for rapid navigation
      
      Source code additions
       - mergeT: expanded for vertices and ridges
       - mergeType: add MRGconcavecoplanar, MRGtwisted, MRGsubridge, MRGvertices, and MRGcoplanarhorizon
       - qtT.ALLOWwidemaxout: true if 'Q15', allow qh.WIDEmaxoutside increases in qh_check_maxout
       - qtT.FLUSHprint: true if 'Tf', flush output on qh_fprintf
       - qtT.MERGEpinched: false if 'Q14', merge pinched vertex due to duplicate ridge
       - qtT.SIMPLEXmerge: true if 'Q16', test_appendmerge tests opposite vertex instead of centrum
       - qtT.first_newfacet: id of first new facet in qh_buildcone, other new facets were merged
       - qtT.isRenameVertex: true during qh_merge_pinchedvertices
       - qtT.NEWtentative: true while new facets are tentative due to qh.MERGEpinched or ONLYgood
       - qtT.repart_facetid: previous facetid to prevent recursive qh_partitioncoplanar
       - qtT.retry_addpoint: number of retries of qh_addpoint due to qh.MERGEpinched
       - qtT.vertex_mergeset: set of vertex merges for qh_next_vertexmerge
       - ridgeT.mergevertex and mergevertex2 if a ridge vertex will be merged
       - ridgeT.simplicialtop and simplicialbot if the top/bottom facet is simplicial
       - vertexT.partitioned: true if deleted vertex partitioned by qh_partitionvisible
       - geom2_r.c/qh_furthestnewvertex: return furthest unvisited, new vertex to a facet
       - geom2_r.c/qh_furthestvertex: return furthest unvisited vertex to a facet
       - geom2_r.c/qh_vertex_bestdist: return nearest distance between vertices
       - geom2_r.c/qh_vertex_bestdist2: return nearest vertex pair between vertices
       - geom2_r.c/qh_vertex_isbelow: test vertexA distance to vertexB's simplicial facets and vice versa
       - libqhull_r.c/qh_buildcone: split out qh_makenewfacets,etc. from qh_addpoint
       - merge_r.c/qh_all_vertexmerges: perform vertex merges in qh.vertex_mergeset
       - merge_r.c/qh_appendvertexmerge: append vertex merge to qh.vertex_mergeset
       - merge_r.c/qh_delridge_merge: split out ridge maintenance from qh_renameridgevertex and qh_merge_simplex
       - merge_r.c/qh_hasmerge: True if mergeset has mergetype for facetA and facetB
       - merge_r.c/qh_initmergesets,qh_freemergesets: init/free of qh.*_mergeset with error reporting
       - merge_r.c/qh_maybe_duplicateridge: add MRGvertices if neighboring facet has another ridge with the same vertices
       - merge_r.c/qh_maybe_duplicateridges: add MRGvertices if ridges with the same vertices
       - merge_r.c/qh_merge_dupridges: split out conversion of dupridges to MRGridge merges from qh_makeridges
       - merge_r.c/qh_merge_pinchedvertices- merge pinched vertices in qh.vertex_mergeset to avoid qh_forcedmerges of duplicated ridges
       - merge_r.c/qh_merge_twisted: merge twisted facets that are above and below their neighbors (4D+ and non-simplicial)
       - merge_r.c/qh_neighbor_vertices,qh_neighbor_vertices_facet: return neighboring vertices for a vertex (not in subridge)
       - merge_r.c/qh_next_facetmerge: split out next merge from qh_all_merges and replace qsort
       - merge_r.c/qh_next_vertexmerge: select next vertex merge by distance, allow one MRGsubridge merge
       - merge_r.c/qh_opposite_horizonfacet: return horizon facet for a merge facet and its opposite vertex
       - merge_r.c/qh_reducevertices: qh_merge_degenredundant if qh_remove_extravertices or qh_rename_sharedvertex
       - merge_r.c/qh_remove_mergetype: remove mergetype merges from mergeset
       - merge_r.c/qh_rename_adjacentvertex: rename oldvertex as newvertex, must be adjacent (i.e., in the same subridge)
       - merge_r.c/qh_test_cemtrum_merge: split out test centrum convexity from qh_test_appendmerge
       - merge_r.c/qh_test_simplex_merge: test simplex convexity and append non-convex facets to qh.facet_mergeset
       - merge_r.c/qh_test_nonsimplicial_merge: test nonsimplicial convexity and append non-convex facets to qh.facet_mergeset
       - merge_r.h/FOREACHmergeA_,FOREACHmerge_i_: add macros for mergeset iteration
       - poly_r.c/qh_getreplacement: split out new facet for visible facet from qh_partitionvisible and qh_merge_degenredunant
       - poly2_r.c/qh_addfacetvertex: split out add newvertex to f.vertices if not already there from qh_merge_simplex
       - poly2_r.c/qh_matchdupridge_coplanarhorizon: match duplicate ridges with the same coplanar horizon, instead of qh_matchdupridge
       - poly2_r.c/qh_opposite_vertex: return the opposite vertex in facetA to neighbor
       - poly2_r.c/qh_replacefacetvertex: replace oldvertex with newvertex in f.vertices
       - user_r.h/qh_RATIOconcavehorizon: ratio of horizon vertex distance to qh.max_outside for concave, twisted new facets in qh_test_nonsimplicial_merge
       - user_r.h/qh_RATIOconvexmerge: ratio of vertex distance to qh.min_vertex for clearly convex new facets in qh_test_nonsimplicial_merge
       - user_r.h/qh_RATIOcoplanarapex: ratio of best distance for coplanar apex vs. vertex merge in qh_getpinchedmerges
       - user_r.h/qh_RATIOcoplanaroutside: ratio to repartition a coplanar point as an outside point in qh_partitioncoplanar and qh_check_maxout
       - user_r.h/qh_RATIOpinchedsubridge: ratio to qh.ONEmerge to accept vertices in qh_findbest_pinchedvertex
       - user_r.h/qh_RATIOtrypinched: ratio to qh.ONEmerge to merge twisted facets in qh_merge_twisted
       - user_r.h/qh_RATIOtwisted: maximum ratio to qh.ONEmerge to merge twisted facets in qh_merge_twisted
       - user_r.h/qh_WIDEmaxoutside: precision ratio for maximum increase for qh.max_outside in qh_check_maxout
       - user_r.h/qh_WIDEmaxoutside2: precision ratio for maximum qh.max_outside in qh_check_maxout
       - user_r.h/qh_WIDEpinched: merge ratio for distance between pinched vertices compared to current facet width for qh_getpinchedmerges and qh_next_vertexmerge
      
      Source code changes
       - Change " = " to "= " (avoid confusion with " == ")
       - Improved error messages, tracing, and code comments throughout
       - Moved qh_check_dupridge from poly2_r.c to merge_r.c.  It is used for merging
       - Moved qh_printlists from poly2_r.c to io_r.c.  Useful for debugging
       - Removed qh_compareangle and qh_comparemerge.  Replaced by qh_next_facetmerge
       - Renamed 'qh_precision' to 'qh_joggle_restart'.  It restarts qhull to avoid a precision error.
       - Renamed 'Qhull internal error' to 'qhull internal error' for consistency
       - Renamed mergeT.type to mergetype.  Same as parameters and local variables
       - Renamed vertexT.newlist to newfacet. True if on a new facet
       - Renamed qh_matchduplicates to qh_matchdupridge (poly2_r.c).  A 'duplicates' is ridges with duplicate vertices
       - Use coordT for distances instead of realT.  Needs further review.
       - qh_NOmerge: include comments in #ifndef
       - global_r.c/qh_freebuffers: use the same order as qh_initbuffers
       - global_r.c/qh_freebuild: free the global sets, qh.degen_mergeset,etc.
       - io_r.c/qh_printfacetheader: print 'MERGEridge' instead of 'MERGE' to match name of flag
       - io_r.c/qh_printfacetheader: print 'DUPLICATEridge' instead of 'DUP' to match name of flag
       - libqhull_r.c/qh_partitioncoplanar: change qh.findbestnew to a parameter (search all new facets)
       - libqhull_r.c/qh_partitioncoplanar: repartition a coplanar point if far outside
                      typically due to a twisted facet in D4+ with almost coincident vertices
       - libqhull_r.c/qh_partitionpoint: if outside set is empty, set f.newfacet and adjust qh.facet_next
       - libqhull_r.c/qh_partitionvisible: prevent duplicate partitions of deleted vertices
       - libqhull_r.c/qh_partitionvisible: test against !f.next instead of qh.facet_tail.  Both indicate sentinel
       - mrege_r.h/mergeType: reordered mergetypes is preference order
       - merge_r.c: identify MRGconcavecoplanar facets that are above and coplanar with their neighbors
       - merge_r.c/mergetypes: string names for mergeType
       - merge_r.c/qh_all_merges: clear wasmerge and othermerge on qh_reducevertices.  Avoids extra calls
       - merge_r.c/qh_appendmergeset: add parameters for m.dist and m.angle
       - merge_r.c/qh_appendmergeset: initialize all fields of mergeT
       - merge_r.c/qh_copynonconvex: clear old r.nonconvex for consistency.  Ridge will be deleted soon
       - merge_r.c/qh_degen_redundant_neighbors: check neighbors of delfacet instead of facet.  Faster and it matches definition
       - merge_r.c/qh_mark_dupridges: add 'allmerges' parameter for dupridges vs. pinched vertices
       - merge_r.c/qh_mark_dupridges: test for duplicate vertices to avoid duplicate MRGridge
       - merge_r.c/qh_merge_cycle_all: test for duplicate ridges at end of merge_cycle_all (qh_maybe_duplicateridges)
       - merge_r.c/qh_merge_dupridges: clear mergeridge/mergeridge2 flags (not needed on first call)
       - merge_r.c/qh_merge_facet: test for qh_degen_redundant_facet and qh_maybe_duplicateridges
       - merge_r.c/qh_merge_facet: add mergeType parameter for logging
       - merge_r.c/qh_merge_facet: rename 'apex' to 'opposite' (not always apex)
       - merge_r.c/qh_merge_simplex: identify 'isnew' instead of 'issame' (more accurate)
       - merge_r.c/qh_remove_extravertices: skip for simplicial facets
       - merge_r.c/qh_renamevertex: test qh_maybe_duplicateridge if qh_renameridgevertex
       - merge_r.c/qh_renamevertex: test qh_degen_redundant_facet for oldvertex neighbors
       - merge_r.c/qh_renamevertex: test qh_degen_redundant_neighbors for oldvertex nonsimplicial neighbors
       - merge_r.c/qh_renamevertex: test qh_maybe_duplicateridge if qh_renameridgevertex
       - merge_r.c/qh_renamevertex: test qh_degen_redundant_facet oldfacet
       - merge_r.c/qh_tracemerge: add mergeType parameter for logging
       - merge_r.c/qh_test_appendmerge: calls qh_test_simplex_merge, qh_test_centrum_merge, or qh_test_nonsimplicial_merge as needed
       - merge_r.c/qh_vertexridges: add 'allneighbors' parameter to test all neighbors of a vertex
       - merge_r.c/qh_vertexridges_facet: optimize qh_setin by common cases
       - poly_r.c/qh_checkflipped: move call from qh_matchnewfacets to qh_setfacetplane.  Allow call of qh_setfacetplane from qh_initialhull to reverse orientation
       - poly_r.c/qh_matchneighbor: call qh_setfacetplane/qh_checkflipped on-demand to support qh.NEWtentative
       - poly_r.c/qh_matchnewfacets: returns maxdupdist for duplicate ridges
       - poly_r.c/qh_matchnewfacets: move qh_joggle_restart from qh_matchduplicates ("ridge with multiple neighbors")
       - poly_r.c/qh_matchnewfacets: try to match ridges with coplanar horizon (qh_matchdupridge_coplanarhorizon)
       - poly_r.c/qh_updatevertices: use qh_setunique to pdate vertex neighbors (due to pinched vertex merge)
       - poly2_r.c/qh_checkfacet: optimize qh_setequal of ridges with the same vertices
       - poly2_r.c/qh_checkpolygon: do not include visible facets in totvertices
       - poly2_r.c/qh_initialhull: use f.flipped instead of qh_distplane/qh_checkflipped (qh_checkflipped called from qh_setfacetplane)
       - poly2_r.c/qh_matchdupridge: was qh_matchduplicates in qhull 2015.2
       - poly2_r.c/qh_matchdupridge: detect duplicate facets/ridges and force vertex merge
       - poly2_r.c/qh_matchdupridge: separate code for qh_DUPLICATEridge/f.tricoplanar for improved logging
       - poly2_r.c/qh_matchdupridge: if !makematch, collect best match via flipped and qh_getdistance between facets
       - poly2_r.c/qh_resetlists: clear f.dupridge
       - poly2_r.c/qh_triangulate: clear f.degenerate at end (degenerate tricoplanar facets)
       - poly2_r.c/qh_triangulate_link: skip duplicate MRGmirror merges
       - poly2_r.c/qh_triangulate_mirror: skip duplicate MRGmirror merges and previously deleted MRGmirror facets
      a0e0374a
  13. Dec 28, 2018
  14. Sep 26, 2018
    • Antony Lee's avatar
      Fix some apparently missing braces. · 33ace207
      Antony Lee authored
      Caught by gcc's -Wmisleading-indentation.
      
      Note: Technically this changes the execution flow at that point; I
      haven't checked whether this is desired but it looks like the previous
      version was a incorrect...
      33ace207
  15. Jan 21, 2017
  16. Jan 18, 2017
  17. Jun 17, 2016
  18. Jun 15, 2016
  19. Feb 07, 2016
  20. Jan 23, 2016
  21. Jan 20, 2016
    • Chuck Atkins's avatar
      Make C headers safe for C++ inclusion. · 2681baa6
      Chuck Atkins authored
      This commit moves the extern "C" { ... } logic into headers themselves.
      This way, it's the headers responsibility to define it's linkage
      appropriately and the consuming C and C++ code can both use "#include"
      without ifdef guards.
      2681baa6
  22. Jan 19, 2016
    • Brad Barber's avatar
      Qhull 2015.2 2016/01/18 (7.2.0) · 5a79a000
      Brad Barber authored
       - Fixed memory leak in ~QhullQh [M. Sandim]
         QhullQh.cpp: call checkAndFreeQhullMemory() in the destructor.  Otherwise memT is not freed.
         Remove checkAndFreeQhullMemory() from Qhull.h.  It is not needed.
         Remove calls to checkAndFreeQhullMemory in qhulltest.  It is called by ~QhullQh()
         libqhull_r.h: Document qh_ASvornoi and facetT.center
         qh_freeqhull: if qh_NOmem, use qh_ALL
         qh_memalloc: short memory is freed by qh_memfreeshort unless qh_NOmem
         qh_memstatistics (mem.c): call qh_memcheck() as done in mem_r.c
         qh_new_qhull calls qh_memcheck
         qh_newvertex: free vertex on error
         qh_projectinput: Free memory allocations on error
         qh_rboxpoints: free simplex on error
         qh_sethalfspace_all: Fixed memory leak on error QH8032 feasible not inside halfspace
         qh_triangulate_facet: For TRInormals ('Q11') replace qh_copypoints with qh_memalloc
         qh_triangulate_facet: Document qh.TRInormals
         qh_voronoi_center: Free center on error
         qhulltest: Fixed memory leak of s_testcases by calling RoadTest::deleteTests()
         qhulltest: The 'add_*_test' functions append the test object to RoadTest::s_testcases
         ~RoadTest: declare virtual for Q_OBJECT, removeAll not needed
         user_eg2: Check memory at end of each run
         user_r.h: Add QHULL_CRTDBG for invoking Microsoft's memory leak detector
         use _MSC_VER instead of QHULL_OS_WIN for QHULL_CRTDBG
         Call qh_freeqhull with qh_ALL/!qh_ALL instead of 'True/False'
         Include user_r.h with RoadError,h for QHULL_CRTDBG
         Invoke _CrtSetDbgFlag... at beginning of program
         Moved user_r.h/libqhull_r.h/qhull_ra.h as first include (for QHULL_CRTDBG)
         Moved QHULL_OS_WIN from qhull_ra.h to user_r.h
         Removed __CYGWIN__ from QHULL_OS_WIN (same as Qt's qglobal.h)
      
       - check_dupridge: A bounding box is not sufficient to avoid dupridge errors
       - qh_findbestneighor: Error if qh.CENTERtype is qh_ASvoronoi (i.e., no merging now)
       - qh_printstatlevel: Remove unused parameter, 'start'
       - QhullLinkedList::last() and back(): Return T instead of T& (T is computed)
      
       - qh-code.htm: "How to convert code to reentrant Qhull"
         Update "Nearly coincident points on an edge"
         Add 2012 size of data structures to "Qhull on 64-bit computers"
       - html/index.htm: Add CGAL to "When to use"
       - qh-optq.htm: Add documentation for option 'Q12'
       - Move suggestions from Changes.txt to qh-code.htm#enhance
       - user_r.h: Fixed qh-us_r.html links
       - Fixed links in html pages
      
       - QhullIterator and QhullLinkedList: Include <iterator> [B. Boeckel]
       - Moved include file for each C++ source file to the top of the includes
       - Prepend cpp includes with "libqhullcpp/"
       - RoadLogEvent includes RoadLogEvent.h
       - QhullIterator.h: Only QHULL_DECLARE_SEQUENTIAL_ITERATOR is used.
      
       - Compared src/libqhull/* to src/libqhull_r/* and resolved differences
       - qh_printpoint in io.c skips qh_IDnone like io_r.c
       - qhull_p-exports.def: Added three missing exports
       - set_r.h: Removed countT. Too many issues
      
       - libqhull_r/Makefile: Add help prompts to 'make qtest'
       - libqhull.pro: Add '../libqhull/' to sources and headers
       - libqhull/Makefile: Fixed -I,./,,/src
      
       - qhull-zip.sh: Add CMakeModules to tarball [C. Rosenvik]
       - CMakeLists.txt: Add targets qhullp and user_egp for qh_QHpointer and libqhull_p
       - Reorganized 'make help'
       - Makefile cleanall: Delete testqset and qhulltest from bin/
       - Fix filetype of Unix-only files
       - Fix Unix line endings for Makefile and check in qhull-zip.sh
       - Fix Windows line-endings and check in qhull-zip.sh
       - qhull-zip.sh: Check for Unix text files
  23. Jan 09, 2016
  24. Jan 07, 2016
    • Brad Barber's avatar
    • Brad Barber's avatar
      Qhull 2015.1 2016/01/03 (7.1.0) · 41cb4fc8
      Brad Barber authored
       - Add Rbox option 'Cn,r,m' to add nearly coincident points.  Trigger for duplicate ridges
       - Add Qhull option 'Q12' to ignore error on wide merge due to duplicate ridge
      
       - qh_findbestlower: Call qh_findfacet_all to fix rare "flipped or upper Delaunay" error QH6228.
         QH6228 input provided by J. Metz.  Reported (date order): L. Fiaschi, N. Bowler, A. Liebscher, V. Vieira, N. Rhinehart, N. Vance, P. Shafer
       - qh_check_dupridge: Check if wide merge due to duplicate ridge from nearly coincident points
       - qh_initialhull: Fix error messages for initial simplex is flat
       - qh_determinant: increased 2-d and 3-d nearzero by 10x due to a counter-example
       - rbox: Add qh_outcoord() to output coordinates w/ or w/o iscdd
       - qh_meminit (mem.c): Add call to qh_memcheck
       - Compare libqhull/... to libqhull_r/... and resolve differences
      
       - Update builds for DevStudio (qhull.sln for msdev 2005..2009, qhull-32.sln and qhull-64.sln for recent releases)
      
       - qh-impre.htm: Add a section about precision errors for 'Nearly coincident points on an edge'
       - html/index.htm#geomview: Document how to install, build, and use Geomview.
       - html/index.htm: Emphasize program links and move related urls to end
       - qhull/index.htm: Emphasize manual, geomview, and imprecision
       - Fix documentation links in libqhull_r/index.htm
       - Add 'Functions' link to documentation headers
       - Change '<A>...</A>' to '<a>...</a>'
       - libqhull_r/index.htm -- Add instructions for configuring web browsers for source links.
       - libqhull_r/ -- Fix source links for ..._r.htm files
      41cb4fc8
  25. Jan 02, 2016
    • Brad Barber's avatar
      Add rbox option 'Cn,r,m'. It may trigger wide facets due to nearly coincident points. · 0b7fda5b
      Brad Barber authored
      If this occurs, Qhull 2015.1 will report an error.  For Delaunay triangulations a
      workaround is to add a bounding box to the input set.
      
      html/qh-impre.htm
        Add a section about precision errors for 'Nearly coincident points on an edge'
      
      html/index.htm#geomview
        Add instructions for building Geomview on Windows.
        Add instructions for using Geomview to view Qhull examples.
      0b7fda5b
Loading