From 9d2ee5f5200b0febb5b383e822870364a860d0b2 Mon Sep 17 00:00:00 2001 From: Brad Barber <bradb@shore.net> Date: Tue, 5 Jan 2010 22:12:17 -0500 Subject: [PATCH] qhull 2010.0.3 Fix rbox t, bug. Remove extra 't' argument. Setup download and news page for 2010.1. Add Ta to qhull.man. Fix printcoplanar test. --- Announce.txt | 2 +- README.txt | 2 +- html/qh-get.htm | 50 +++++++++++++++++++++++++++++++----------------- html/qhull.man | 4 ++++ html/qhull.txt | 3 +++ src/Changes.txt | 29 ++++++++++------------------ src/global.c | 22 +++++++++++---------- src/libqhull.c | 15 ++++++++------- src/libqhull.h | 14 ++++++++------ src/qhull_a.h | 6 ++++-- src/rboxlib.c | 27 +++++++++++++++----------- src/stat.h | 6 +++--- src/user.h | 2 +- src/userprintf.c | 3 +++ 14 files changed, 106 insertions(+), 79 deletions(-) diff --git a/Announce.txt b/Announce.txt index 5df7618..86a692b 100644 --- a/Announce.txt +++ b/Announce.txt @@ -1,5 +1,5 @@ - Qhull 2010.0.2 2010/01/04 + Qhull 2010.0.3 2010/01/05 http://www.qhull.org git@gitorious.org:qhull/qhull.git diff --git a/README.txt b/README.txt index 2ce2ecf..8637e94 100644 --- a/README.txt +++ b/README.txt @@ -1,6 +1,6 @@ Name - qhull, rbox 2010.0.2 2010/01/04 + qhull, rbox 2010.0.3 2010/01/05 Convex hull, Delaunay triangulation, Voronoi diagrams, Halfspace intersection diff --git a/html/qh-get.htm b/html/qh-get.htm index 5d76064..7bc03ee 100644 --- a/html/qh-get.htm +++ b/html/qh-get.htm @@ -29,24 +29,47 @@ width="100" height="100"></a> Qhull Downloads</h1> <p>Visit <a href="http://www.qhull.org/news">Qhull News</a> for news, bug reports, change history, and users.</p> + + <p>A serious bug was found in Qhull 2003.1. Please upgrade to 2010.1.</p> </li> <li><a - href="http://www.qhull.org/download/qhull-2003.1.zip">Download: - Qhull 2003.1 for Windows</a> (1.2 Mbytes) <p>Type: console programs for + href="http://www.qhull.org/download/qhull-2010.1.zip">Download: + Qhull 2010.1 for Windows</a> (1.2 Mbytes) <p>Type: console programs for Windows 95, 98, ME, 2000, NT, XP</p> <p>Includes executables, documentation, sources files, and a cygwin Makefile. It runs in a DOS window.</p> </li> - <li><a href="http://www.qhull.org/download/qhull-2003.1.tar.gz">Download: Qhull 2003.1 for Unix</a> (725K) - <p>Type: C source code for Unix systems</b> + <li><a href="http://www.qhull.org/download/qhull-2010.1-src.tgz">Download: Qhull 2010.1 for Unix</a> (725K) + <p>Type: C source code for 32-bit and 64-bit architectures</p> + <p>Includes documentation, source files, a simple Makefile, DevStudio project files, and Qt project files. + Includes preliminary C++ support. + The C++ interface may change without notice. + If using gcc 4.1, 4.2, or 4.3, please compile qset.s with + -fno-strict-aliasing (otherwise qhull segfaults) [Karas, Krishnaswami]. + See <a href=http://www.qhull.org/news/#bugs>Bugs</a> [Apr 2008] for a patch. + </p> + <p>Debian, rpm, and Autoconf distributions will appear later</p> + </li> + <li><a href="http://gitorious.org/qhull">Gitorious Qhull</a> (git://gitorious.org/qhull/qhull.git) + <p>Type: git repository for Qhull</b> + <p>Includes documentation, source files, C++ interface, + and test programs. The C++ interface may change without notice. + If using gcc 4.1, 4.2, or 4.3, please compile qset.s with + -fno-strict-aliasing (otherwise qhull segfaults) [Karas, Krishnaswami]. + See <a href=http://www.qhull.org/news/#bugs>Bugs</a> [Apr 2008] for a patch. + </p> + </li> + <!--- + <li><a href="http://www.qhull.org/download/qhull-2010.1.tgz">Download: Qhull 2010.1 for Unix</a> (725K) + <p>Type: C source code for Unix systems</p> <p>Includes documentation, source files, and Autoconf/Automake/Libtool - support [R. Laboissiere]. - If using gcc-4 or later, please compile qset.s with + support [R. Laboissiere]. Includes preliminary C++ support. + If using gcc 4.1, 4.2, or 4.3, please compile qset.s with -fno-strict-aliasing (otherwise qhull segfaults) [Karas, Krishnaswami]. See <a href=http://www.qhull.org/news/#bugs>Bugs</a> [Apr 2008] for a patch. </p> + </li> -<!--- <li><a href=http://savannah.nongnu.org/files/?group=qhull>Download: Qhull 2002.1 for Unix</a> <p>Includes documentation, source files, and a configure Makefile. @@ -56,16 +79,6 @@ width="100" height="100"></a> Qhull Downloads</h1> <p>B. Pearlmutter created a <a href=http://packages.debian.org/stable/math/qhull-bin.html>Debian build</a> of Qhull 3.1 and upgraded it to 2002.1. - --> - </li> - <li><a href="http://www.qhull.org/download/qhull-2003.1-src.tgz">Download: - Qhull 2003.1 source code</a> (450K) <p>Type: C source code for - 32-bit and 64-bit architectures </p> - <p>Includes documentation, source files, and a simple Makefile. - If using gcc-4 or later, please compile qset.s with - -fno-strict-aliasing (otherwise qhull segfaults) [Karas, Krishnaswami]. - See <a href=http://www.qhull.org/news/#bugs>Bugs</a> [Apr 2008] for a patch. - </p> </li> <li><a href="http://www.qhull.org/download/qhull-2003.1-1mdk.i686.rpm">Download: @@ -81,11 +94,12 @@ and upgraded it to 2002.1. <p>Type: Debian packages <p>Includes documentation, source files, and previous distributions [R. Laboissiere].</p> </li> + --> <li><a href=http://savannah.nongnu.org/projects/qhull/>Qhull@Savannah</a> <p>Type: CVS repository</b> - <p>CVS repositiory of Qhull sources, documentation, and Makefiles. + <p>CVS repositiory of Qhull sources, documentation, and Makefiles. No longer active. Use gitorious instead. </p> </li> <li><a href=http://www6.uniovi.es/ftp/pub/mirrors/geom.umn.edu/software/ghindex.html>Spanish diff --git a/html/qhull.man b/html/qhull.man index 7f6bd65..908782b 100644 --- a/html/qhull.man +++ b/html/qhull.man @@ -856,6 +856,10 @@ execution and geometric and topological events. 'T4' traces the algorithm. 'T5' includes information about memory allocation and Gaussian elimination. .TP +Ta +Annotate output with codes that identify the +corresponding qh_fprintf() statement. +.TP Tc Check frequently during execution. This will catch most inconsistency errors. diff --git a/html/qhull.txt b/html/qhull.txt index 3a39962..3250d6d 100644 --- a/html/qhull.txt +++ b/html/qhull.txt @@ -1025,6 +1025,9 @@ qhull(1) qhull(1) includes information about memory allocation and Gaussian elimination. + Ta Annotate output with codes that identify the + corresponding qh_fprintf() statement. + Tc Check frequently during execution. This will catch most inconsistency errors. diff --git a/src/Changes.txt b/src/Changes.txt index be9f9ad..c2dcd06 100644 --- a/src/Changes.txt +++ b/src/Changes.txt @@ -22,7 +22,7 @@ To do for documentation - Better documentation for qhmem totshort, freesize, etc. - Clean up qhull-news.html XML - how to change .h, .c, and .cpp to text/html. OK in Opera - - need a page with all QHnnnn for web lookups + - Set up wiki for Qhull. Include error and warning codes (QHnnnn). - QhullVertex.dimension() is not quite correct, epensive - Check globalAngleEpsilon - Deprecate save_qhull() @@ -97,25 +97,16 @@ To do libqhull.h: qhstatT *old_qhstat; /* for saving qh_qhstat in save_qhull() and UsingLibQhull. Free with qh_free() */ mem.h: setT *tempstack; /* stack of temporary memory, managed by users */ - - Ran qhull regression tests (eg/q_test) Review the following problems + - Add library dependencies to .pro files. For now, rebuild on changes. - Output warning Qc - rbox d D2 | qhull FQ n | qhalf s H0 Fc FP Fn FN FQ Fv Fx - - Failed. Premature exit - rbox 1000 W0 | qhull QR2 QJ s Fs Tv - - t not printed - Statistics for: rbox 1000 W1e-20 t | qhull Tcv Qc - - 6668,7x outer plane - Statistics for: rbox 1000 L100000 s G1e-6 t | qhull Tv Q10 - - 5135.7x outer plane - Statistics for: rbox 1000 s W1e-13 t | qhull d Tv +qhull 2010.0.3 2010/01/05 +Fixed bugs +- 'QJn' (joggle): Fix qh.STOPcone in qh_build_withrestart(). It was not cleared. +- qh_initqhull_outputflags [global.c]: warn about Qc only if QHULLfinished, otherwise set if needed -qhull 2010.0.2 2010/01/04 +qhull 2010.0.2 2010/01/04 +- Reviewed output of q_test and compared to results from 2003.1 Fixed bugs - qh_gethash [poly.c]: fix sign conversion. Previously, the result may be negative, leading to a segfault. @@ -132,7 +123,7 @@ Code changes - Makefile.txt corrected for libqhull build [amorilia] - Renamed index to idx to avoid shadowing BSD strings.h [kwilliams] -qhull 2010.0.1 2010/01/03 +qhull 2010.0.1 2010/01/03 New Features: - Added option 'Ta' to annotate output with message codes @@ -146,7 +137,7 @@ Preliminary C++ support: Changes to qhull options and results - Allow 'd' and 'v' as the filename for 'TO ..' and 'TI ...' in qdelaunay [M. Jambon] - Allow quoted filenames for 'TO ...' and 'TI ...' - - Preceed error messages and warnings with a message code (e.g., QH6012) + - Prefix error messages and warnings with a message code (e.g., QH6012) - Fixed rbox ignoring flags that were not separated by spaces - Report all hidden options before exiting in qh_checkflags() - Defined qh_OPTIONline [user.h] as max length of option line ('FO') diff --git a/src/global.c b/src/global.c index 7bbfb04..6abb9fd 100644 --- a/src/global.c +++ b/src/global.c @@ -12,8 +12,8 @@ see qhull_a.h for internal functions copyright (c) 1993-2010 The Geometry Center. - $Id: //product/qhull/main/rel/src/global.c#53 $$Change: 1150 $ - $DateTime: 2010/01/04 22:43:14 $$Author: bbarber $ + $Id: //product/qhull/main/rel/src/global.c#55 $$Change: 1152 $ + $DateTime: 2010/01/05 22:11:10 $$Author: bbarber $ */ #include "qhull_a.h" @@ -47,7 +47,7 @@ qhT qh_qh; /* all global variables. recompile user_eg.c, rbox.c, libqhull.c, qconvex.c, qdelaun.c qvoronoi.c, qhalf.c */ -const char *qh_version = "2010.0.2 2010/01/04"; +const char *qh_version = "2010.0.3 2010/01/05"; /*-<a href="qh-globa.htm#TOC" >-------------------------------</a><a name="appendprint">-</a> @@ -1405,6 +1405,8 @@ void qh_initflags(char *command) { s++; } } + if (qh STOPcone && qh JOGGLEmax < REALmax/2) + qh_fprintf(qh ferr, 7078, "qhull warning: 'TCn' (stopCone) ignored when used with 'QJn' (joggle)\n"); if (isgeom && !qh FORCEoutput && qh PRINTout[1]) qh_fprintf(qh ferr, 7037, "qhull warning: additional output formats are not compatible with Geomview\n"); /* set derived values in qh_initqhull_globals */ @@ -1749,10 +1751,6 @@ void qh_initqhull_outputflags(void) { if (qh PRINTprecision) qh_fprintf(qh ferr, 7041, "qhull input warning: 'QJ' (joggle) will usually prevent coincident input sites for options 'Fc' and 'FP'\n"); } - if (!qh KEEPcoplanar && !qh KEEPinside && !qh ONLYgood - && ((qh PRINTcoplanar && qh PRINTspheres) || printcoplanar)) { - qh_fprintf(qh ferr, 7072, "qhull output warning: ignoring coplanar points, option 'Qc' not set for qhull.\n"); - } if (printmath && (qh hull_dim > 3 || qh VORONOI)) { qh_fprintf(qh ferr, 6056, "qhull input error: Mathematica and Maple output is only available for 2-d and 3-d convex hulls and 2-d Delaunay triangulations\n"); qh_errexit(qh_ERRinput, NULL, NULL); @@ -1780,10 +1778,14 @@ available for 4-d output(ignored). Could use 'GDn' instead.\n"); } } if (!qh KEEPcoplanar && !qh KEEPinside && !qh ONLYgood) { - if ((qh PRINTcoplanar && qh PRINTspheres) || printcoplanar) { - qh KEEPcoplanar = True; - qh_option("Qcoplanar", NULL, NULL); + if ((qh PRINTcoplanar && qh PRINTspheres) || printcoplanar) { + if (qh QHULLfinished) { + qh_fprintf(qh ferr, 7072, "qhull output warning: ignoring coplanar points, option 'Qc' was not set for the first run of qhull.\n"); + }else { + qh KEEPcoplanar = True; + qh_option("Qcoplanar", NULL, NULL); } + } } qh PRINTdim= qh hull_dim; if (qh DROPdim >=0) { /* after Geomview checks */ diff --git a/src/libqhull.c b/src/libqhull.c index b2a5a42..47c5b06 100644 --- a/src/libqhull.c +++ b/src/libqhull.c @@ -11,8 +11,8 @@ see qhull_a.h for internal functions copyright (c) 1993-2010 The Geometry Center. - $Id: //product/qhull/main/rel/src/libqhull.c#5 $$Change: 1150 $ - $DateTime: 2010/01/04 22:43:14 $$Author: bbarber $ + $Id: //product/qhull/main/rel/src/libqhull.c#6 $$Change: 1151 $ + $DateTime: 2010/01/05 19:34:31 $$Author: bbarber $ */ #include "qhull_a.h" @@ -108,7 +108,7 @@ void qh_qhull(void) { } qh hulltime= qh_CPUclock - qh hulltime; qh QHULLfinished= True; - trace1((qh ferr, 1036, "qh_qhull: algorithm completed\n")); + trace1((qh ferr, 1036, "Qhull: algorithm completed\n")); } /* qhull */ /*-<a href="qh-qhull.htm#TOC" @@ -295,12 +295,12 @@ void qh_build_withrestart(void) { if (restart) { /* only from qh_precision() */ zzinc_(Zretry); wmax_(Wretrymax, qh JOGGLEmax); - qh STOPcone= True; /* if break, prevents normal output */ + /* QH7078 warns about using 'TCn' with 'QJn' */ + qh STOPcone= -1; /* if break from joggle, prevents normal output */ } if (!qh RERUN && qh JOGGLEmax < REALmax/2) { if (qh build_cnt > qh_JOGGLEmaxretry) { - qh_fprintf(qh ferr, 6229, "\n\ -qhull precision error: %d attempts to construct a convex hull\n\ + qh_fprintf(qh ferr, 6229, "qhull precision error: %d attempts to construct a convex hull\n\ with joggled input. Increase joggle above 'QJ%2.2g'\n\ or modify qh_JOGGLE... parameters in user.h\n", qh build_cnt, qh JOGGLEmax); @@ -310,6 +310,7 @@ qhull precision error: %d attempts to construct a convex hull\n\ break; }else if (qh build_cnt && qh build_cnt >= qh RERUN) break; + qh STOPcone= 0; qh_freebuild(True); /* first call is a nop */ qh build_cnt++; if (!qh qhull_optionsiz) @@ -1226,7 +1227,7 @@ void qh_printsummary(FILE *fp) { if (id >=0 && qh STOPcone-1 != id && -qh STOPpoint-1 != id) size--; if (qh STOPcone || qh STOPpoint) - qh_fprintf(fp, 9288, "\nAt a premature exit due to 'TVn', 'TCn', 'TRn', or precision error."); + qh_fprintf(fp, 9288, "\nAt a premature exit due to 'TVn', 'TCn', 'TRn', or precision error with 'QJn'."); if (qh UPPERdelaunay) goodused= qh GOODvertex + qh GOODpoint + qh SPLITthresholds; else if (qh DELAUNAY) diff --git a/src/libqhull.h b/src/libqhull.h index 43f0e95..e620031 100644 --- a/src/libqhull.h +++ b/src/libqhull.h @@ -7,8 +7,8 @@ see qh-qhull.htm, qhull_a.h copyright (c) 1993-2010 The Geometry Center. - $Id: //product/qhull/main/rel/src/libqhull.h#4 $$Change: 1137 $ - $DateTime: 2010/01/02 21:58:11 $$Author: bbarber $ + $Id: //product/qhull/main/rel/src/libqhull.h#5 $$Change: 1151 $ + $DateTime: 2010/01/05 19:34:31 $$Author: bbarber $ NOTE: access to qh_qh is via the 'qh' macro. This allows qh_qh to be either a pointer or a structure. An example @@ -516,7 +516,7 @@ struct qhT { boolT SKIPconvex; /* true 'Q6' if skip convexity testing during pre-merge */ boolT SPLITthresholds; /* true if upper_/lower_threshold defines a region used only for printing (!for qh ONLYgood) */ - int STOPcone; /* 'TCn' 1+n for stopping after cone for point n*/ + int STOPcone; /* 'TCn' 1+n for stopping after cone for point n */ /* also used by qh_build_withresart for err exit*/ int STOPpoint; /* 'TVn' 'TV-n' 1+n for stopping after/before(-) adding point n */ @@ -999,13 +999,15 @@ void qh_printhelp_narrowhull(FILE *fp, realT minangle); void qh_printhelp_singular(FILE *fp); void qh_user_memsizes(void); -/********* -user2.c prototypes (alphabetical) **********************/ +/********* -usermem.c prototypes (alphabetical) **********************/ void qh_exit(int exitcode); -void qh_fprintf(FILE *fp, int msgcode, const char *fmt, ... ); -void qh_fprintf_rbox(FILE *fp, int msgcode, const char *fmt, ... ); void qh_free(void *mem); void *qh_malloc(size_t size); +/********* -userprintf.c prototypes (alphabetical) **********************/ +void qh_fprintf(FILE *fp, int msgcode, const char *fmt, ... ); +void qh_fprintf_rbox(FILE *fp, int msgcode, const char *fmt, ... ); + /***** -geom.c/geom2.c/random.c prototypes (duplicated from geom.h, random.h) ****************/ facetT *qh_findbest(pointT *point, facetT *startfacet, diff --git a/src/qhull_a.h b/src/qhull_a.h index ad35036..d5c6089 100644 --- a/src/qhull_a.h +++ b/src/qhull_a.h @@ -13,8 +13,8 @@ defines internal functions for libqhull.c global.c copyright (c) 1993-2010 The Geometry Center. - $Id: //product/qhull/main/rel/src/qhull_a.h#25 $$Change: 1137 $ - $DateTime: 2010/01/02 21:58:11 $$Author: bbarber $ + $Id: //product/qhull/main/rel/src/qhull_a.h#26 $$Change: 1151 $ + $DateTime: 2010/01/05 19:34:31 $$Author: bbarber $ Notes: grep for ((" and (" to catch fprintf("lkasdjf"); full parens around (x?y:z) @@ -70,6 +70,8 @@ traceN((qh ferr, 0Nnnn, "format\n", vars)); calls qh_fprintf if qh.IStracing >= N + Add debugging traps to the end of qh_fprintf + notes: removing tracing reduces code size but doesn't change execution speed */ diff --git a/src/rboxlib.c b/src/rboxlib.c index 02fd60b..8442d7e 100644 --- a/src/rboxlib.c +++ b/src/rboxlib.c @@ -336,16 +336,6 @@ int qh_rboxpoints(FILE* fout, FILE* ferr, char* rbox_command) { totpoints= numpoints + isaxis; totpoints += cubesize + diamondsize + addpoints; - if (iscdd) - qh_fprintf_rbox(rbox.fout, 9391, "%s\nbegin\n %d %d %s\n", - NOcommand ? "" : command, - totpoints, dim+1, - rbox.isinteger ? "integer" : "real"); - else if (NOcommand) - qh_fprintf_rbox(rbox.fout, 9392, "%d\n%d\n", dim, totpoints); - else - qh_fprintf_rbox(rbox.fout, 9393, "%d %s\n%d\n", dim, command, totpoints); - /* ============= seed randoms =============== */ if (istime == 0) { for (s=command; *s; s++) { @@ -357,11 +347,26 @@ int qh_rboxpoints(FILE* fout, FILE* ferr, char* rbox_command) { } }else if (israndom) { seed= time(&timedata); - sprintf(seedbuf, " t%d", seed); + sprintf(seedbuf, " t%d", seed); /* appends an extra t, not worth removing */ strncat(command, seedbuf, sizeof(command)); + t= strstr(command, " t "); + if (t) + strcpy(t+1, t+3); /* remove " t " */ } /* else, seed explicitly set to n */ qh_RANDOMseed_(seed); + /* ============= print header =============== */ + + if (iscdd) + qh_fprintf_rbox(rbox.fout, 9391, "%s\nbegin\n %d %d %s\n", + NOcommand ? "" : command, + totpoints, dim+1, + rbox.isinteger ? "integer" : "real"); + else if (NOcommand) + qh_fprintf_rbox(rbox.fout, 9392, "%d\n%d\n", dim, totpoints); + else + qh_fprintf_rbox(rbox.fout, 9393, "%d %s\n%d\n", dim, command, totpoints); + /* ============= explicit points =============== */ if ((s= first_point)) { while (s && *s) { /* 'P' */ diff --git a/src/stat.h b/src/stat.h index 22e0027..4c15ae1 100644 --- a/src/stat.h +++ b/src/stat.h @@ -7,8 +7,8 @@ see qh-stat.htm and stat.c copyright (c) 1993-2010 The Geometry Center. - $Id: //product/qhull/main/rel/src/stat.h#26 $$Change: 1150 $ - $DateTime: 2010/01/04 22:43:14 $$Author: bbarber $ + $Id: //product/qhull/main/rel/src/stat.h#27 $$Change: 1151 $ + $DateTime: 2010/01/05 19:34:31 $$Author: bbarber $ recompile qhull if you change this file @@ -352,7 +352,7 @@ enum ztypes {zdoc,zinc,zadd,zmax,zmin,ZTYPEreal,wadd,wmax,wmin,ZTYPEend}; MAYdebugx define as maydebug() to be called frequently for error trapping */ -#define MAYdebugx +#define MAYdebugx /*-<a href="qh-stat.htm#TOC" >--------------------------------</a><a name="zdef_">-</a> diff --git a/src/user.h b/src/user.h index 03c16a7..868faef 100644 --- a/src/user.h +++ b/src/user.h @@ -47,7 +47,7 @@ Code flags -- If add new messages, assign these values and increment. - def counters = [27, 1047, 2059, 3025, 4068, 5003, 6233, 7078, 8143, 9410] + def counters = [27, 1047, 2059, 3025, 4068, 5003, 6233, 7079, 8143, 9410] See: qh_ERR* [libqhull.h] */ diff --git a/src/userprintf.c b/src/userprintf.c index 0a295c3..4183061 100644 --- a/src/userprintf.c +++ b/src/userprintf.c @@ -58,6 +58,9 @@ void qh_fprintf(FILE *fp, int msgcode, const char *fmt, ... ) { } vfprintf(fp, fmt, args); va_end(args); + + /* Place debugging traps here. Use with option 'Tn' */ + } /* qh_fprintf */ void qh_fprintf_rbox(FILE *fp, int msgcode, const char *fmt, ... ) { -- GitLab