SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS} ")
#TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LIB} ${PYTHON_LINKFLAGS} ${JPEG_LIB} ${PNG_LIB} ${ZLIB_LIB} ${SDL_LIB} ${LLIBS})
- TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LINKFLAGS} ${JPEG_LIB} ${PNG_LIB} ${ZLIB_LIB} ${SDL_LIB} ${LLIBS})
+ TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LINKFLAGS} ${JPEG_LIBRARY} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${SDL_LIB} ${LLIBS})
# since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions
IF(UNIX)
IF(WITH_OPENAL)
- INCLUDE(${CMAKE_ROOT}/Modules/FindOpenAL.cmake)
+ FIND_PACKAGE(OpenAL)
IF(OPENAL_FOUND)
SET(WITH_OPENAL ON)
SET(OPENAL_LIB ${OPENAL_LIBRARY})
FIND_LIBRARY(INTL_LIBRARY
NAMES intl
PATHS
- /usr/local/lib
- /usr/lib
/sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
)
FIND_LIBRARY(ICONV_LIBRARY
NAMES iconv
PATHS
- /usr/local/lib
- /usr/lib
/sw/lib
- /opt/local/lib
- /opt/csw/lib
- /opt/lib
)
IF(INTL_LIBRARY AND ICONV_LIBRARY)
SET(GETTEXT_LIB ${INTL_LIBRARY} ${ICONV_LIBRARY})
)
SET(FREETYPE_LIB freetype)
- INCLUDE(${CMAKE_ROOT}/Modules/FindPythonLibs.cmake)
+ FIND_PACKAGE(PythonLibs)
SET(PYTHON_INC "${PYTHON_INCLUDE_PATH}" CACHE STRING "")
SET(PYTHON_LIB "${PYTHON_LIBRARIES}" CACHE STRING "")
- INCLUDE(${CMAKE_ROOT}/Modules/FindPythonInterp.cmake)
+ FIND_PACKAGE(PythonInterp)
SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic")
- INCLUDE(${CMAKE_ROOT}/Modules/FindSDL.cmake)
+ FIND_PACKAGE(SDL)
SET(SDL_INC ${SDL_INCLUDE_DIR})
SET(SDL_LIB ${SDL_LIBRARY})
SET(FFMPEG_LIB avformat avcodec avutil avdevice swscale)
SET(FFMPEG_LIBPATH ${FFMPEG}/lib)
- SET(JPEG_LIB jpeg)
+ FIND_PACKAGE(JPEG REQUIRED)
- SET(PNG_LIB png)
+ FIND_PACKAGE(PNG REQUIRED)
- SET(ZLIB_LIB z)
+ FIND_PACKAGE(ZLIB REQUIRED)
SET(LLIBS "-lXi -lutil -lc -lm -lpthread -lstdc++ -lX11 -ldl")
# Better warnings
SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wnested-externs -Wdeclaration-after-statement")
- INCLUDE_DIRECTORIES(/usr/include /usr/local/include)
+ INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
ENDIF(UNIX)
IF(WIN32)
- INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake)
+ # this file is included anyway when building under Windows with cl.exe
+ # INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake)
SET(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/windows)
ENDIF(CMAKE_CL_64)
SET(PYTHON ${LIBDIR}/python)
- SET(PYTHON_VERSION 2.5)
+ SET(PYTHON_VERSION 2.6)
SET(PYTHON_INC "${PYTHON}/include/python${PYTHON_VERSION}")
SET(PYTHON_BINARY python)
- SET(PYTHON_LIB python25)
+ SET(PYTHON_LIB python26)
SET(PYTHON_LIBPATH ${PYTHON}/lib)
IF(CMAKE_CL_64)
ENDIF(CMAKE_CL_64)
IF(CMAKE_CL_64)
- SET(PNG_LIB libpng)
+ SET(PNG_LIBRARIES libpng)
ELSE(CMAKE_CL_64)
- SET(PNG_LIB libpng_st)
+ SET(PNG_LIBRARIES libpng_st)
ENDIF(CMAKE_CL_64)
- SET(JPEG_LIB libjpeg)
+ SET(JPEG_LIBRARY libjpeg)
SET(ZLIB ${LIBDIR}/zlib)
SET(ZLIB_INC ${ZLIB}/include)
- SET(ZLIB_LIB libz)
+ SET(ZLIB_LIBRARIES zlib)
SET(ZLIB_LIBPATH ${ZLIB}/lib)
SET(PTHREADS ${LIBDIR}/pthreads)
ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES i386)
IF(WITH_OPENAL)
- INCLUDE(${CMAKE_ROOT}/Modules/FindOpenAL.cmake)
+ FIND_PACKAGE(OpenAL)
IF(OPENAL_FOUND)
SET(WITH_OPENAL ON)
SET(OPENAL_LIB ${OPENAL_LIBRARY})
SET(GETTEXT_LIB intl iconv)
SET(GETTEXT_LIBPATH ${GETTEXT}/lib)
- SET(PNG_LIB png)
- SET(JPEG_LIB jpeg)
+ SET(PNG_LIBRARIES png)
+ SET(JPEG_LIBRARY jpeg)
SET(ZLIB /usr)
SET(ZLIB_INC "${ZLIB}/include")
- SET(ZLIB_LIB z)
+ SET(ZLIB_LIBRARIES z)
SET(FREETYPE ${LIBDIR}/freetype)
SET(FREETYPE_INC ${FREETYPE}/include ${FREETYPE}/include/freetype2)
#-----------------------------------------------------------------------------
# Configure OpenGL.
-INCLUDE(${CMAKE_ROOT}/Modules/FindOpenGL.cmake)
+FIND_PACKAGE(OpenGL)
INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
#-----------------------------------------------------------------------------
# Extra compile flags
target_env_defs['WITH_BF_SDL'] = False
target_env_defs['WITH_BF_JPEG'] = False
target_env_defs['WITH_BF_PNG'] = False
- target_env_defs['WITH_BF_ODE'] = False
target_env_defs['WITH_BF_BULLET'] = False
- target_env_defs['WITH_BF_SOLID'] = False
target_env_defs['WITH_BF_BINRELOC'] = False
target_env_defs['BF_BUILDINFO'] = False
target_env_defs['BF_NO_ELBEEM'] = True
WITH_BF_GAMEENGINE=True
WITH_BF_PLAYER=True
-WITH_BF_ODE = False
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = '${BF_ODE}/include'
-BF_ODE_LIB = '${BF_ODE}/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
#WITH_BF_NSPR = True
#BF_NSPR = $(LIBDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
WITH_BF_GAMEENGINE='false'
-WITH_BF_ODE = 'false'
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = 'true'
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
#WITH_BF_NSPR = 'true'
#BF_NSPR = $(LIBDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
WITH_BF_GAMEENGINE = True
WITH_BF_PLAYER = True
-WITH_BF_ODE = False
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
#WITH_BF_NSPR = True
#BF_NSPR = $(LIBDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
WITH_BF_GAMEENGINE = False
-WITH_BF_ODE = True
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
BF_WINTAB = LIBDIR + '/wintab'
BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
WITH_BF_GAMEENGINE=False
-WITH_BF_ODE = False
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = '${BF_ODE}/include'
-BF_ODE_LIB = '${BF_ODE}/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
#WITH_BF_NSPR = True
#BF_NSPR = $(LIBDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
WITH_BF_GAMEENGINE=False
-WITH_BF_ODE = False
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
#WITH_BF_NSPR = True
#BF_NSPR = $(LIBDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
WITH_BF_GAMEENGINE = False
-WITH_BF_ODE = True
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
BF_WINTAB = LIBDIR + '/wintab'
BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
WITH_BF_GAMEENGINE = True
WITH_BF_PLAYER = True
-WITH_BF_ODE = True
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
BF_WINTAB = LIBDIR + '/wintab'
BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
WITH_BF_GAMEENGINE = True
WITH_BF_PLAYER = False
-WITH_BF_ODE = True
-BF_ODE = LIBDIR + '/ode'
-BF_ODE_INC = BF_ODE + '/include'
-BF_ODE_LIB = BF_ODE + '/lib/libode.a'
-
WITH_BF_BULLET = True
BF_BULLET = '#extern/bullet2/src'
BF_BULLET_INC = '${BF_BULLET}'
BF_BULLET_LIB = 'extern_bullet'
-BF_SOLID = '#extern/solid'
-BF_SOLID_INC = '${BF_SOLID}'
-BF_SOLID_LIB = 'extern_solid'
-
BF_WINTAB = LIBDIR + '/wintab'
BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
#
# ***** END GPL LICENSE BLOCK *****
-IF(WITH_GAMEENGINE)
- ADD_SUBDIRECTORY(qhull)
- ADD_SUBDIRECTORY(solid)
-ENDIF(WITH_GAMEENGINE)
-
IF(WITH_BULLET)
ADD_SUBDIRECTORY(bullet2)
ENDIF(WITH_BULLET)
SOURCEDIR = extern
DIR = $(OCGDIR)/extern
-DIRS = qhull/src solid glew/src
+DIRS = glew/src
ifeq ($(WITH_FFMPEG), true)
ifeq ($(NAN_FFMPEG), $(LCGDIR)/ffmpeg)
SConscript(['glew/SConscript'])
-if env['WITH_BF_GAMEENGINE']:
- if env['WITH_BF_SOLID']:
- SConscript(['qhull/SConscript', 'solid/SConscript'])
-
if env['WITH_BF_BULLET']:
SConscript(['bullet2/src/SConscript'])
+++ /dev/null
-# $Id$
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2006, Blender Foundation
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): Jacques Beaurain.
-#
-# ***** END GPL LICENSE BLOCK *****
-
-SET(INC include src)
-
-SET(SRC
- src/geom.c
- src/geom2.c
- src/global.c
- src/io.c
- src/mem.c
- src/merge.c
- src/poly.c
- src/poly2.c
- src/qhull.c
- src/qset.c
- src/stat.c
- src/user.c
-)
-
-BLENDERLIB(extern_qhull "${SRC}" "${INC}")
-#, libtype=['game2','player'], priority=[50, 85]
+++ /dev/null
- Qhull, Copyright (c) 1993-2002
-
- The National Science and Technology Research Center for
- Computation and Visualization of Geometric Structures
- (The Geometry Center)
- University of Minnesota
- 400 Lind Hall
- 207 Church Street S.E.
- Minneapolis, MN 55455 USA
-
- email: qhull@geom.umn.edu
-
-This software includes Qhull from The Geometry Center. Qhull is
-copyrighted as noted above. Qhull is free software and may be obtained
-via http from www.geom.umn.edu. It may be freely copied, modified,
-and redistributed under the following conditions:
-
-1. All copyright notices must remain intact in all files.
-
-2. A copy of this text file must be distributed along with any copies
- of Qhull that you redistribute; this includes copies that you have
- modified, or copies of programs or other software products that
- include Qhull.
-
-3. If you modify Qhull, you must include a notice giving the
- name of the person performing the modification, the date of
- modification, and the reason for such modification.
-
-4. When distributing modified versions of Qhull, or other software
- products that include Qhull, you must provide notice that the original
- source code may be obtained as noted above.
-
-5. There is no warranty or other guarantee of fitness for Qhull, it is
- provided solely "as is". Bug reports or fixes may be sent to
- qhull_bug@geom.umn.edu; the authors may or may not act on them as
- they desire.
-
+++ /dev/null
-Name
-
- qhull, rbox 2002.1 August 20, 2002
-
-Convex hull, Delaunay triangulation, Voronoi diagrams, Halfspace intersection
-
- Documentation:
- html/index.htm
-
- Available from:
- <http://www.geom.umn.edu/software/qhull>
- <http://savannah.gnu.org/projects/qhull>
- <http://www.thesa.com/software/qhull>
-
- Version 1 (simplicial only):
- <http://www.geom.umn.edu/software/qhull/qhull-1.0.tar.gz>
- <http://www.geom.umn.edu/software/qhull/qhull.sit.hqx>
-
- News and a paper:
- <http://www.geom.umn.edu/~bradb/qhull-news.html>
- <http://www.geom.umn.edu/software/qhull/qhull-96.ps>
-
-Purpose
-
- Qhull is a general dimension convex hull program that reads a set
- of points from stdin, and outputs the smallest convex set that contains
- the points to stdout. It also generates Delaunay triangulations, Voronoi
- diagrams, furthest-site Voronoi diagrams, and halfspace intersections
- about a point.
-
- Rbox is a useful tool in generating input for Qhull; it generates
- hypercubes, diamonds, cones, circles, simplices, spirals,
- lattices, and random points.
-
- Qhull produces graphical output for Geomview. This helps with
- understanding the output. <http://www.geomview.org>
-
-
-Environment requirements
-
- Qhull and rbox should run on all 32-bit and 64-bit computers. Use
- an ANSI C or C++ compiler to compile the program. The software is
- self-contained.
-
- Qhull is copyrighted software. Please read COPYING.txt and REGISTER.txt
- before using or distributing Qhull.
-
-To contribute to Qhull
-
- Qhull is on Savannah, http://savannah.gnu.org/projects/qhull/
-
-Qhull on Windows 95, 98, ME, NT, 2000, XP
-
- The zip file contains rbox.exe, qhull.exe, qconvex.exe, qdelaunay.exe,
- qhalf.exe, qvoronoi.exe, documentation files, and source files.
-
- To install Qhull:
- - Unzip the files into a directory. You may use WinZip32 <www.hotfiles.com>
- - Open a DOS window for the directory.
- - In Windows 95, the DOS window needs improvement.
- - Double-click on qhull\eg\qhull-go.bat to call doskey (arrow keys).
- - Increase the size of the screen font to 8x12.
- - If the text is too dim, fix the screen colors with shareware (e.g., crt.exe)
- - If you use qhull a lot, consider using the Cygwin Unix shell,
- Cygwin tools (http://sources.redhat.com/cygwin/)
- - Execute 'qconvex' for a synopsis and examples.
- - Execute 'rbox 10 | qconvex' to compute the convex hull of 10 random points.
- - Execute 'rbox 10 | qconvex i TO file' to write results to 'file'.
- - If an error occurs, Windows 95 sends the error to stdout instead of stderr
- - use 'TO xxx' to send normal output to xxx and error output to stdout
- - Browse the documentation: qhull\html\index.htm
-
-Compiling for Unix
-
- The gzip file, qhull.tgz, contains documentation and source files for
- qhull and rbox.
-
- To unpack the gzip file
- - tar zxf qhull.tgz
- - cd qhull
-
- Compiling with the Debian Make:[R. Laboissiere]
- - cd src
- - ./Make-config.sh
- - cd ..
- - configure
- - make
-
- Compiling with Makefile (i.e., Makefile.txt)
- - cd src
- - in Makefile, check the CC, CCOPTS1, PRINTMAN, and PRINTC defines
- - the defaults are gcc and enscript
- - CCOPTS1 should include the ANSI flag. It defines __STDC__
- - in user.h, check the definitions of qh_SECticks and qh_CPUclock.
- - use '#define qh_CLOCKtype 2' for timing runs longer than 1 hour
- - type: make
- - this builds: qhull qconvex qdelaunay qhalf qvoronoi rbox libqhull.a
- - type: make doc
- - this prints the man page
- - See also qhull/html/index.htm
- - if your compiler reports many errors, it is probably not a ANSI C compiler
- - you will need to set the -ansi switch or find another compiler
- - if your compiler warns about missing prototypes for fprintf() etc.
- - this is ok, your compiler should have these in stdio.h
- - if your compiler warns about missing prototypes for memset() etc.
- - include memory.h in qhull_a.h
- - if your compiler is gcc-2.95.1, you need to set flag -fno-strict-aliasing.
- - This flag is set by default for other versions [Karas, Krishnaswami]
- - if your compiler reports "global.c: storage size of 'qh_qh' isn't known"
- - delete the initializer "={0}" in global.c, stat.c and mem.c
- - if your compiler warns about "stat.c: improper initializer"
- - this is ok, the initializer is not used
- - if you have trouble building libqhull.a with 'ar'
- - try 'make -f Makefile.txt qhullx'
- - if the code compiles, the qhull test case will automatically execute
- - if an error occurs, there's an incompatibility between machines
- - For gcc-2.95.1, you need to set flag -fno-strict-aliasing.
- It is set by default for other versions of gcc [Karas, Krishnaswami]
- - If you can, try a different compiler
- - You can turn off the Qhull memory manager with qh_NOmem in mem.h
- - You can turn off compiler optimization (-O2 in Makefile)
- - If you find the source of the problem, please let us know
- - if you have Geomview (www.geomview.org)
- - try 'rbox 100 | qconvex G >a' and load 'a' into Geomview
- - run 'q_eg' for Geomview examples of Qhull output (see qh-eg.htm)
- - to install the programs and their man pages:
- - define MANDIR and BINDIR
- - type 'make install'
-
-Compiling for Windows NT, 2000, XP with cygwin (www.cygwin.com)
-
- - install cygwin with gcc, make, ar, and ln
- - cd qhull/src
- - make -f Makefile.txt
-
-Compiling for Windows 95, 98, NT, 2000, XP
-
- Qhull compiles as a console application in Visual C++ 5.0 at warning
- level 3.
-
- Visual C++ quickstart for qhull.exe:
- - create a "Win32 console application" called "qhull"
- - add the following files:
- geom.c geom2.c global.c io.c mem.c merge.c poly.c poly2.c qhull.c
- qset.c stat.c unix.c user.c
- - create a "Win32 console application" called "rbox"
- - add rbox.c
-
- Visual C++ quickstart for qhull library, qconvex.exe, etc.
- - To simplify setting up lots of projects,
- - create a temporary "Win32 console application" called "source"
- - add all .c files from .../src/...
- - In Tools::Options::Tab
- Set tab size to 8 and indent size to 2
-
- - create a "Win32 console application" called "rbox"
- - move rbox.c from "qhull source"
- - for Project:Settings..., Link
- you only need the default libraries
- - build the project
-
- - create a "Win32 static library" called "library"
- - move these files from "qhull source"
- geom.c geom2.c global.c io.c mem.c merge.c poly.c poly2.c qhull.c
- qset.c stat.c user.c
- - set the library file (use the same for debug and release)
- - build the project
-
- - create a "Win32 console application" called "qhull"
- - move unix.c from "qhull source"
- - Set the library file in Project:Settings..., Link
- - Qhull does not use other libraries
-
- - create a "Win32 console application" called "qconvex"
- - move qconvex.c from "qhull source"
- - Set the library file in Project:Settings..., Link
-
- - do the same for qdelaun.c, qhalf, qvoronoi.c, user_eg.c, user_eg2.c
- - delete "qhull sources" since it is no longer needed
- - Set the library file in Project:Settings..., Link
- - use Project:Settings to make any changes
- - use batch build to rebuild everything
-
- Qhull compiles with Borland C++ 5.0 bcc32. A Makefile is included.
- Execute 'make -f MBorland'. If you use the Borland IDE, set the ANSI
- option in Options:Project:Compiler:Source:Language-compliance.
-
- Qhull compiles with Borland C++ 4.02 for Win32 and DOS Power Pack.
- Use 'make -f MBorland -D_DPMI'. Qhull 1.0 compiles with Borland
- C++ 4.02. For rbox 1.0, use "bcc32 -WX -w- -O2-e -erbox -lc rbox.c".
- Use the same options for Qhull 1.0. [D. Zwick]
-
- Qhull compiles with Metrowerks C++ 1.7 with the ANSI option.
-
- If you turn on full warnings, the compiler will report a number of
- unused variables, variables set but not used, and dead code. These are
- intentional. For example, variables may be initialized (unnecessarily)
- to prevent warnings about possible use of uninitialized variables.
-
-Compiling for the Power Macintosh
-
- Qhull compiles for the Power Macintosh with Metrowerk's C compiler.
- It uses the SIOUX interface to read point coordinates and return output.
- There is no graphical output. For project files, see 'Compiling for
- Windows 95'. Instead of using SIOUX, Qhull may be embedded within an
- application.
-
- Version 1 is available for Macintosh computers by download of qhull.sit.hqx
- It reads point coordinates from a standard file and returns output
- to a standard file. There is no graphical output.
-
-
-Compiling for other machines
-
- Some users have reported problems with compiling Qhull under Irix 5.1. It
- compiles under other versions of Irix.
-
- If you have troubles with the memory manager, you can turn it off by
- defining qh_NOmem in mem.h.
-
- You may compile Qhull with a C++ compiler.
-
-
-Distributed files
-
- README.txt // instructions for installing Qhull
- REGISTER.txt // Qhull registration
- COPYING.txt // copyright notice
- Announce.txt // announcement
- Changes.txt // change history for Qhull and rbox
- qh-faq.htm // Frequently asked questions
- qh-home.htm // Home page
- qh-get.htm // Download page
- html/index.htm // Manual
- Makefile.txt // Makefile for Unix or cygwin 'make'
- MBorland // Makefile for Borland C++/Win32
- Make-config.sh // Create Debian configure and automake
-
-src/
- rbox consists of:
- rbox.exe // Win32 executable (.zip only)
- rbox.htm // html manual
- rbox.man // Unix man page
- rbox.txt
- rbox.c // source program
-
- qhull consists of:
- qhull.exe // Win32 executables (.zip only)
- qconvex.exe
- qdelaunay.exe
- qhalf.exe
- qvoronoi.exe
- qhull-go.bat // DOS window
- qconvex.htm // html manuals
- qdelaun.htm
- qdelau_f.htm
- qhalf.htm
- qvoronoi.htm
- qvoron_f.htm
- qh-eg.htm
- qh-impre.htm
- qh-in.htm
- index.htm
- qh-opt*.htm
- qh-quick.htm
- qh--4d.gif,etc. // images for manual
- qhull.man // Unix man page
- qhull.txt
- q_eg // shell script for Geomview examples
- q_egtest // shell script for Geomview test examples
- q_test // shell script to test qhull
-
- top-level source files:
- src/index.htm // index to source files
- qh-...htm // specific files
- user.h // header file of user definable constants
- qhull.h // header file for qhull
- unix.c // Unix front end to qhull
- qhull.c // Quickhull algorithm with partitioning
- user.c // user re-definable functions
- user_eg.c // example of incorporating qhull into a user program
- user_eg2.c // more complex example
- qhull_interface.cpp // call Qhull from C++
-
- other source files:
- qhull_a.h // include file for *.c
- geom.c // geometric routines
- geom2.c
- geom.h
- global.c // global variables
- io.c // input-output routines
- io.h
- mem.c // memory routines, this is stand-alone code
- mem.h
- merge.c // merging of non-convex facets
- merge.h
- poly.c // polyhedron routines
- poly2.c
- poly.h
- qset.c // set routines, this only depends on mem.c
- qset.h
- stat.c // statistics
- stat.h
-
-Authors:
-
- C. Bradford Barber Hannu Huhdanpaa
- bradb@geom.umn.edu hannu@geom.umn.edu
-
- c/o The Geometry Center
- University of Minnesota
- 400 Lind Hall
- 207 Church Street S.E.
- Minneapolis, MN 55455
-
- This software was developed under NSF grants NSF/DMS-8920161 and
- NSF-CCR-91-15793 750-7504 at the Geometry Center and Harvard
- University. If you find Qhull useful, please let us know.
+++ /dev/null
-Dear User of Geometry Center Software:
-
-We would like to find out how you are using our software. Think of
-Geometry Center software as a new kind of shareware: you share your
-science and successes with us, and we share our software and support
-with you.
-
-If you use Geometry Center software, please send us a note telling
-us what you are doing with it.
-
-We need to know:
-
- (1) What you are working on - an abstract of your work would be
- fine.
-
- (2) What Geometry Center software you use.
-
- (3) How that software has helped you, for example, by increasing
- your productivity or allowing you to do things you could not do
- before. In particular, if you feel that Geometry Center
- software has had a direct bearing on your work, please tell us
- about this.
-
-We encourage you to cite the use of any Geometry Center software you
-have used in your publications.
-
-To cite Qhull, use
-
- Barber, C.B., Dobkin, D.P., and Huhdanpaa, H.T., "The Quickhull
- algorithm for convex hulls," ACM Trans. on Mathematical Software,
- Dec 1996. http://www.geom.umn.edu/software/qhull
-
-Please send e-mail to
-
- qhull@geom.umn.edu
-
-Thank you!
+++ /dev/null
-#!/usr/bin/python
-import sys
-import os
-
-Import('env')
-defs = ''
-cflags = []
-if sys.platform=='linux2' or sys.platform=='linux-i386':
- cflags += ['-O2','-ansi']
-elif env['OURPLATFORM']=='win32-vc':
- cflags += ['/O2']
-elif env['OURPLATFORM']=='win32-mingw':
- cflags += ['-O2']
-elif sys.platform=='sunos5':
- cflags += ['-O2', '-ansi']
-elif sys.platform=='darwin':
- cflags += ['-O2', '-pipe', '-fPIC', '-funsigned-char', '-ffast-math']
-
-sources = ['src/geom.c',
- 'src/geom2.c',
- 'src/global.c',
- 'src/io.c',
- 'src/mem.c',
- 'src/merge.c',
- 'src/poly.c',
- 'src/poly2.c',
- 'src/qhull.c',
- 'src/qset.c',
- 'src/stat.c',
- 'src/user.c']
-
-
-incs = 'include src'
-
-env.BlenderLib ( 'extern_qhull', sources, Split(incs), Split(defs), libtype=['extern'], priority=[50], compileflags = cflags)
+++ /dev/null
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "qhull"=".\qhull\qhull.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+++ /dev/null
-# Microsoft Developer Studio Project File - Name="qhull" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=qhull - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "qhull.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "qhull.mak" CFG="qhull - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "qhull - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "qhull - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "qhull - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-LINK32=cwlink.exe
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=XCOPY /Y ..\..\include\qhull\*.h ..\..\..\..\..\lib\windows\qhull\include\qhull\ XCOPY /Y Release\*.lib ..\..\..\..\..\lib\windows\qhull\lib\
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "qhull - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-LINK32=cwlink.exe
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MT /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=XCOPY /Y ..\..\include\qhull\*.h ..\..\..\..\..\lib\windows\qhull\include\qhull\ XCOPY /Y Debug\*.lib ..\..\..\..\..\lib\windows\qhull\lib\Debug\
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "qhull - Win32 Release"
-# Name "qhull - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\src\geom.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\geom2.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\global.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\io.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\mem.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\merge.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\poly.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\poly2.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\qhull.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\qset.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\stat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\user.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\src\geom.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\io.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\mem.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\merge.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\poly.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\qhull.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\qhull_a.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\qset.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\stat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\user.h
-# End Source File
-# End Group
-# End Target
-# End Project
+++ /dev/null
-/*<html><pre> -<a href="qh-geom.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- geom.h
- header file for geometric routines
-
- see qh-geom.htm and geom.c
-
- copyright (c) 1993-2002 The Geometry Center
-*/
-
-#ifndef qhDEFgeom
-#define qhDEFgeom 1
-
-/* ============ -macros- ======================== */
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="fabs_">-</a>
-
- fabs_(a)
- returns the absolute value of a
-*/
-#define fabs_( a ) ((( a ) < 0 ) ? -( a ):( a ))
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="fmax_">-</a>
-
- fmax_(a,b)
- returns the maximum value of a and b
-*/
-#define fmax_( a,b ) ( ( a ) < ( b ) ? ( b ) : ( a ) )
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="fmin_">-</a>
-
- fmin_(a,b)
- returns the minimum value of a and b
-*/
-#define fmin_( a,b ) ( ( a ) > ( b ) ? ( b ) : ( a ) )
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="maximize_">-</a>
-
- maximize_(maxval, val)
- set maxval to val if val is greater than maxval
-*/
-#define maximize_( maxval, val ) {if (( maxval ) < ( val )) ( maxval )= ( val );}
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="minimize_">-</a>
-
- minimize_(minval, val)
- set minval to val if val is less than minval
-*/
-#define minimize_( minval, val ) {if (( minval ) > ( val )) ( minval )= ( val );}
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="det2_">-</a>
-
- det2_(a1, a2,
- b1, b2)
-
- compute a 2-d determinate
-*/
-#define det2_( a1,a2,b1,b2 ) (( a1 )*( b2 ) - ( a2 )*( b1 ))
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="det3_">-</a>
-
- det3_(a1, a2, a3,
- b1, b2, b3,
- c1, c2, c3)
-
- compute a 3-d determinate
-*/
-#define det3_( a1,a2,a3,b1,b2,b3,c1,c2,c3 ) ( ( a1 )*det2_( b2,b3,c2,c3 ) \
- - ( b1 )*det2_( a2,a3,c2,c3 ) + ( c1 )*det2_( a2,a3,b2,b3 ) )
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="dX">-</a>
-
- dX( p1, p2 )
- dY( p1, p2 )
- dZ( p1, p2 )
-
- given two indices into rows[],
-
- compute the difference between X, Y, or Z coordinates
-*/
-#define dX( p1,p2 ) ( *( rows[p1] ) - *( rows[p2] ))
-#define dY( p1,p2 ) ( *( rows[p1]+1 ) - *( rows[p2]+1 ))
-#define dZ( p1,p2 ) ( *( rows[p1]+2 ) - *( rows[p2]+2 ))
-#define dW( p1,p2 ) ( *( rows[p1]+3 ) - *( rows[p2]+3 ))
-
-/*============= prototypes in alphabetical order, infrequent at end ======= */
-
-void qh_backnormal (realT **rows, int numrow, int numcol, boolT sign, coordT *normal, boolT *nearzero);
-void qh_distplane (pointT *point, facetT *facet, realT *dist);
-facetT *qh_findbest (pointT *point, facetT *startfacet,
- boolT bestoutside, boolT isnewfacets, boolT noupper,
- realT *dist, boolT *isoutside, int *numpart);
-facetT *qh_findbesthorizon (boolT ischeckmax, pointT *point,
- facetT *startfacet, boolT noupper, realT *bestdist, int *numpart);
-facetT *qh_findbestnew (pointT *point, facetT *startfacet, realT *dist,
- boolT bestoutside, boolT *isoutside, int *numpart);
-void qh_gausselim(realT **rows, int numrow, int numcol, boolT *sign, boolT *nearzero);
-realT qh_getangle(pointT *vect1, pointT *vect2);
-pointT *qh_getcenter(setT *vertices);
-pointT *qh_getcentrum(facetT *facet);
-realT qh_getdistance(facetT *facet, facetT *neighbor, realT *mindist, realT *maxdist);
-void qh_normalize (coordT *normal, int dim, boolT toporient);
-void qh_normalize2 (coordT *normal, int dim, boolT toporient,
- realT *minnorm, boolT *ismin);
-pointT *qh_projectpoint(pointT *point, facetT *facet, realT dist);
-
-void qh_setfacetplane(facetT *newfacets);
-void qh_sethyperplane_det (int dim, coordT **rows, coordT *point0,
- boolT toporient, coordT *normal, realT *offset, boolT *nearzero);
-void qh_sethyperplane_gauss (int dim, coordT **rows, pointT *point0,
- boolT toporient, coordT *normal, coordT *offset, boolT *nearzero);
-boolT qh_sharpnewfacets (void);
-
-/*========= infrequently used code in geom2.c =============*/
-
-
-coordT *qh_copypoints (coordT *points, int numpoints, int dimension);
-void qh_crossproduct (int dim, realT vecA[3], realT vecB[3], realT vecC[3]);
-realT qh_determinant (realT **rows, int dim, boolT *nearzero);
-realT qh_detjoggle (pointT *points, int numpoints, int dimension);
-void qh_detroundoff (void);
-realT qh_detsimplex(pointT *apex, setT *points, int dim, boolT *nearzero);
-realT qh_distnorm (int dim, pointT *point, pointT *normal, realT *offsetp);
-realT qh_distround (int dimension, realT maxabs, realT maxsumabs);
-realT qh_divzero(realT numer, realT denom, realT mindenom1, boolT *zerodiv);
-realT qh_facetarea (facetT *facet);
-realT qh_facetarea_simplex (int dim, coordT *apex, setT *vertices,
- vertexT *notvertex, boolT toporient, coordT *normal, realT *offset);
-pointT *qh_facetcenter (setT *vertices);
-facetT *qh_findgooddist (pointT *point, facetT *facetA, realT *distp, facetT **facetlist);
-void qh_getarea (facetT *facetlist);
-boolT qh_gram_schmidt(int dim, realT **rows);
-boolT qh_inthresholds (coordT *normal, realT *angle);
-void qh_joggleinput (void);
-realT *qh_maxabsval (realT *normal, int dim);
-setT *qh_maxmin(pointT *points, int numpoints, int dimension);
-realT qh_maxouter (void);
-void qh_maxsimplex (int dim, setT *maxpoints, pointT *points, int numpoints, setT **simplex);
-realT qh_minabsval (realT *normal, int dim);
-int qh_mindiff (realT *vecA, realT *vecB, int dim);
-boolT qh_orientoutside (facetT *facet);
-void qh_outerinner (facetT *facet, realT *outerplane, realT *innerplane);
-coordT qh_pointdist(pointT *point1, pointT *point2, int dim);
-void qh_printmatrix (FILE *fp, char *string, realT **rows, int numrow, int numcol);
-void qh_printpoints (FILE *fp, char *string, setT *points);
-void qh_projectinput (void);
-void qh_projectpoints (signed char *project, int n, realT *points,
- int numpoints, int dim, realT *newpoints, int newdim);
-int qh_rand( void);
-void qh_srand( int seed);
-realT qh_randomfactor (void);
-void qh_randommatrix (realT *buffer, int dim, realT **row);
-void qh_rotateinput (realT **rows);
-void qh_rotatepoints (realT *points, int numpoints, int dim, realT **rows);
-void qh_scaleinput (void);
-void qh_scalelast (coordT *points, int numpoints, int dim, coordT low,
- coordT high, coordT newhigh);
-void qh_scalepoints (pointT *points, int numpoints, int dim,
- realT *newlows, realT *newhighs);
-boolT qh_sethalfspace (int dim, coordT *coords, coordT **nextp,
- coordT *normal, coordT *offset, coordT *feasible);
-coordT *qh_sethalfspace_all (int dim, int count, coordT *halfspaces, pointT *feasible);
-pointT *qh_voronoi_center (int dim, setT *points);
-
-#endif /* qhDEFgeom */
-
-
-
+++ /dev/null
-/*<html><pre> -<a href="qh-io.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- io.h
- declarations of Input/Output functions
-
- see README, qhull.h and io.c
-
- copyright (c) 1993-2002, The Geometry Center
-*/
-
-#ifndef qhDEFio
-#define qhDEFio 1
-
-/*============ constants and flags ==================*/
-
-/*-<a href="qh-io.htm#TOC"
- >--------------------------------</a><a name="qh_MAXfirst">-</a>
-
- qh_MAXfirst
- maximum length of first two lines of stdin
-*/
-#define qh_MAXfirst 200
-
-/*-<a href="qh-io.htm#TOC"
- >--------------------------------</a><a name="qh_MINradius">-</a>
-
- qh_MINradius
- min radius for Gp and Gv, fraction of maxcoord
-*/
-#define qh_MINradius 0.02
-
-/*-<a href="qh-io.htm#TOC"
- >--------------------------------</a><a name="qh_GEOMepsilon">-</a>
-
- qh_GEOMepsilon
- adjust outer planes for 'lines closer' and geomview roundoff.
- This prevents bleed through.
-*/
-#define qh_GEOMepsilon 2e-3
-
-/*-<a href="qh-io.htm#TOC"
- >--------------------------------</a><a name="qh_WHITESPACE">-</a>
-
- qh_WHITESPACE
- possible values of white space
-*/
-#define qh_WHITESPACE " \n\t\v\r\f"
-
-
-/*-<a href="qh-io.htm#TOC"
- >--------------------------------</a><a name="RIDGE">-</a>
-
- qh_RIDGE
- to select which ridges to print in qh_eachvoronoi
-*/
-typedef enum
-{
- qh_RIDGEall = 0, qh_RIDGEinner, qh_RIDGEouter
-}
-qh_RIDGE;
-
-/*-<a href="qh-io.htm#TOC"
- >--------------------------------</a><a name="printvridgeT">-</a>
-
- printvridgeT
- prints results of qh_printvdiagram
-
- see:
- <a href="io.c#printvridge">qh_printvridge</a> for an example
-*/
-typedef void (*printvridgeT)(FILE *fp, vertexT *vertex, vertexT *vertexA, setT *centers, boolT unbounded);
-
-/*============== -prototypes in alphabetical order =========*/
-
-void dfacet( unsigned id);
-void dvertex( unsigned id);
-void qh_countfacets (facetT *facetlist, setT *facets, boolT printall,
- int *numfacetsp, int *numsimplicialp, int *totneighborsp,
- int *numridgesp, int *numcoplanarsp, int *numnumtricoplanarsp);
-pointT *qh_detvnorm (vertexT *vertex, vertexT *vertexA, setT *centers, realT *offsetp);
-setT *qh_detvridge (vertexT *vertex);
-setT *qh_detvridge3 (vertexT *atvertex, vertexT *vertex);
-int qh_eachvoronoi (FILE *fp, printvridgeT printvridge, vertexT *atvertex, boolT visitall, qh_RIDGE innerouter, boolT inorder);
-int qh_eachvoronoi_all (FILE *fp, printvridgeT printvridge, boolT isupper, qh_RIDGE innerouter, boolT inorder);
-void qh_facet2point(facetT *facet, pointT **point0, pointT **point1, realT *mindist);
-setT *qh_facetvertices (facetT *facetlist, setT *facets, boolT allfacets);
-void qh_geomplanes (facetT *facet, realT *outerplane, realT *innerplane);
-void qh_markkeep (facetT *facetlist);
-setT *qh_markvoronoi (facetT *facetlist, setT *facets, boolT printall, boolT *islowerp, int *numcentersp);
-void qh_order_vertexneighbors(vertexT *vertex);
-void qh_printafacet(FILE *fp, int format, facetT *facet, boolT printall);
-void qh_printbegin (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall);
-void qh_printcenter (FILE *fp, int format, char *string, facetT *facet);
-void qh_printcentrum (FILE *fp, facetT *facet, realT radius);
-void qh_printend (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall);
-void qh_printend4geom (FILE *fp, facetT *facet, int *num, boolT printall);
-void qh_printextremes (FILE *fp, facetT *facetlist, setT *facets, int printall);
-void qh_printextremes_2d (FILE *fp, facetT *facetlist, setT *facets, int printall);
-void qh_printextremes_d (FILE *fp, facetT *facetlist, setT *facets, int printall);
-void qh_printfacet(FILE *fp, facetT *facet);
-void qh_printfacet2math(FILE *fp, facetT *facet, int notfirst);
-void qh_printfacet2geom(FILE *fp, facetT *facet, realT color[3]);
-void qh_printfacet2geom_points(FILE *fp, pointT *point1, pointT *point2,
- facetT *facet, realT offset, realT color[3]);
-void qh_printfacet3math (FILE *fp, facetT *facet, int notfirst);
-void qh_printfacet3geom_nonsimplicial(FILE *fp, facetT *facet, realT color[3]);
-void qh_printfacet3geom_points(FILE *fp, setT *points, facetT *facet, realT offset, realT color[3]);
-void qh_printfacet3geom_simplicial(FILE *fp, facetT *facet, realT color[3]);
-void qh_printfacet3vertex(FILE *fp, facetT *facet, int format);
-void qh_printfacet4geom_nonsimplicial(FILE *fp, facetT *facet, realT color[3]);
-void qh_printfacet4geom_simplicial(FILE *fp, facetT *facet, realT color[3]);
-void qh_printfacetNvertex_nonsimplicial(FILE *fp, facetT *facet, int id, int format);
-void qh_printfacetNvertex_simplicial(FILE *fp, facetT *facet, int format);
-void qh_printfacetheader(FILE *fp, facetT *facet);
-void qh_printfacetridges(FILE *fp, facetT *facet);
-void qh_printfacets(FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall);
-void qh_printhelp_degenerate(FILE *fp);
-void qh_printhelp_singular(FILE *fp);
-void qh_printhyperplaneintersection(FILE *fp, facetT *facet1, facetT *facet2,
- setT *vertices, realT color[3]);
-void qh_printneighborhood (FILE *fp, int format, facetT *facetA, facetT *facetB, boolT printall);
-void qh_printline3geom (FILE *fp, pointT *pointA, pointT *pointB, realT color[3]);
-void qh_printpoint(FILE *fp, char *string, pointT *point);
-void qh_printpointid(FILE *fp, char *string, int dim, pointT *point, int id);
-void qh_printpoint3 (FILE *fp, pointT *point);
-void qh_printpoints_out (FILE *fp, facetT *facetlist, setT *facets, int printall);
-void qh_printpointvect (FILE *fp, pointT *point, coordT *normal, pointT *center, realT radius, realT color[3]);
-void qh_printpointvect2 (FILE *fp, pointT *point, coordT *normal, pointT *center, realT radius);
-void qh_printridge(FILE *fp, ridgeT *ridge);
-void qh_printspheres(FILE *fp, setT *vertices, realT radius);
-void qh_printvdiagram (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall);
-int qh_printvdiagram2 (FILE *fp, printvridgeT printvridge, setT *vertices, qh_RIDGE innerouter, boolT inorder);
-void qh_printvertex(FILE *fp, vertexT *vertex);
-void qh_printvertexlist (FILE *fp, char* string, facetT *facetlist,
- setT *facets, boolT printall);
-void qh_printvertices (FILE *fp, char* string, setT *vertices);
-void qh_printvneighbors (FILE *fp, facetT* facetlist, setT *facets, boolT printall);
-void qh_printvoronoi (FILE *fp, int format, facetT *facetlist, setT *facets, boolT printall);
-void qh_printvnorm (FILE *fp, vertexT *vertex, vertexT *vertexA, setT *centers, boolT unbounded);
-void qh_printvridge (FILE *fp, vertexT *vertex, vertexT *vertexA, setT *centers, boolT unbounded);
-void qh_produce_output(void);
-void qh_projectdim3 (pointT *source, pointT *destination);
-int qh_readfeasible (int dim, char *remainder);
-coordT *qh_readpoints(int *numpoints, int *dimension, boolT *ismalloc);
-void qh_setfeasible (int dim);
-boolT qh_skipfacet(facetT *facet);
-
-#endif /* qhDEFio */
+++ /dev/null
-/*<html><pre> -<a href="qh-mem.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- mem.h
- prototypes for memory management functions
-
- see qh-mem.htm, mem.c and qset.h
-
- for error handling, writes message and calls
- qh_errexit (qhmem_ERRmem, NULL, NULL) if insufficient memory
- and
- qh_errexit (qhmem_ERRqhull, NULL, NULL) otherwise
-
- copyright (c) 1993-2002, The Geometry Center
-*/
-
-#ifndef qhDEFmem
-#define qhDEFmem
-
-/*-<a href="qh-mem.htm#TOC"
- >-------------------------------</a><a name="NOmem">-</a>
-
- qh_NOmem
- turn off quick-fit memory allocation
-
- notes:
- mem.c implements Quickfit memory allocation for about 20% time
- savings. If it fails on your machine, try to locate the
- problem, and send the answer to qhull@geom.umn.edu. If this can
- not be done, define qh_NOmem to use malloc/free instead.
-
- #define qh_NOmem
-*/
-
-/*-------------------------------------------
- to avoid bus errors, memory allocation must consider alignment requirements.
- malloc() automatically takes care of alignment. Since mem.c manages
- its own memory, we need to explicitly specify alignment in
- qh_meminitbuffers().
-
- A safe choice is sizeof(double). sizeof(float) may be used if doubles
- do not occur in data structures and pointers are the same size. Be careful
- of machines (e.g., DEC Alpha) with large pointers. If gcc is available,
- use __alignof__(double) or fmax_(__alignof__(float), __alignof__(void *)).
-
- see <a href="user.h#MEMalign">qh_MEMalign</a> in user.h for qhull's alignment
-*/
-
-#define qhmem_ERRmem 4 /* matches qh_ERRmem in qhull.h */
-#define qhmem_ERRqhull 5 /* matches qh_ERRqhull in qhull.h */
-
-/*-<a href="qh-mem.htm#TOC"
- >--------------------------------</a><a name="ptr_intT">-</a>
-
- ptr_intT
- for casting a void* to an integer-type
-
- notes:
- On 64-bit machines, a pointer may be larger than an 'int'.
- qh_meminit() checks that 'long' holds a 'void*'
-*/
-typedef unsigned long ptr_intT;
-
-/*-<a href="qh-mem.htm#TOC"
- >--------------------------------</a><a name="qhmemT">-</a>
-
- qhmemT
- global memory structure for mem.c
-
- notes:
- users should ignore qhmem except for writing extensions
- qhmem is allocated in mem.c
-
- qhmem could be swapable like qh and qhstat, but then
- multiple qh's and qhmem's would need to keep in synch.
- A swapable qhmem would also waste memory buffers. As long
- as memory operations are atomic, there is no problem with
- multiple qh structures being active at the same time.
- If you need separate address spaces, you can swap the
- contents of qhmem.
-*/
-typedef struct qhmemT qhmemT;
-extern qhmemT qhmem;
-
-struct qhmemT { /* global memory management variables */
- int BUFsize; /* size of memory allocation buffer */
- int BUFinit; /* initial size of memory allocation buffer */
- int TABLEsize; /* actual number of sizes in free list table */
- int NUMsizes; /* maximum number of sizes in free list table */
- int LASTsize; /* last size in free list table */
- int ALIGNmask; /* worst-case alignment, must be 2^n-1 */
- void **freelists; /* free list table, linked by offset 0 */
- int *sizetable; /* size of each freelist */
- int *indextable; /* size->index table */
- void *curbuffer; /* current buffer, linked by offset 0 */
- void *freemem; /* free memory in curbuffer */
- int freesize; /* size of free memory in bytes */
- void *tempstack; /* stack of temporary memory, managed by users */
- FILE *ferr; /* file for reporting errors */
- int IStracing; /* =5 if tracing memory allocations */
- int cntquick; /* count of quick allocations */
- /* remove statistics doesn't effect speed */
- int cntshort; /* count of short allocations */
- int cntlong; /* count of long allocations */
- int curlong; /* current count of inuse, long allocations */
- int freeshort; /* count of short memfrees */
- int freelong; /* count of long memfrees */
- int totshort; /* total size of short allocations */
- int totlong; /* total size of long allocations */
- int maxlong; /* maximum totlong */
- int cntlarger; /* count of setlarger's */
- int totlarger; /* total copied by setlarger */
-};
-
-
-/*==================== -macros ====================*/
-
-/*-<a href="qh-mem.htm#TOC"
- >--------------------------------</a><a name="memalloc_">-</a>
-
- qh_memalloc_(size, object, type)
- returns object of size bytes
- assumes size<=qhmem.LASTsize and void **freelistp is a temp
-*/
-
-#ifdef qh_NOmem
-#define qh_memalloc_(size, freelistp, object, type) {\
- object= (type*)qh_memalloc (size); }
-#else /* !qh_NOmem */
-
-#define qh_memalloc_(size, freelistp, object, type) {\
- freelistp= qhmem.freelists + qhmem.indextable[size];\
- if ((object= (type*)*freelistp)) {\
- qhmem.cntquick++; \
- *freelistp= *((void **)*freelistp);\
- }else object= (type*)qh_memalloc (size);}
-#endif
-
-/*-<a href="qh-mem.htm#TOC"
- >--------------------------------</a><a name="memfree_">-</a>
-
- qh_memfree_(object, size)
- free up an object
-
- notes:
- object may be NULL
- assumes size<=qhmem.LASTsize and void **freelistp is a temp
-*/
-#ifdef qh_NOmem
-#define qh_memfree_(object, size, freelistp) {\
- qh_memfree (object, size); }
-#else /* !qh_NOmem */
-
-#define qh_memfree_(object, size, freelistp) {\
- if (object) { \
- qhmem .freeshort++;\
- freelistp= qhmem.freelists + qhmem.indextable[size];\
- *((void **)object)= *freelistp;\
- *freelistp= object;}}
-#endif
-
-/*=============== prototypes in alphabetical order ============*/
-
-void *qh_memalloc(int insize);
-void qh_memfree (void *object, int size);
-void qh_memfreeshort (int *curlong, int *totlong);
-void qh_meminit (FILE *ferr);
-void qh_meminitbuffers (int tracelevel, int alignment, int numsizes,
- int bufsize, int bufinit);
-void qh_memsetup (void);
-void qh_memsize(int size);
-void qh_memstatistics (FILE *fp);
-
-#endif /* qhDEFmem */
+++ /dev/null
-/*<html><pre> -<a href="qh-merge.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- merge.h
- header file for merge.c
-
- see qh-merge.htm and merge.c
-
- copyright (c) 1993-2002, The Geometry Center
-*/
-
-#ifndef qhDEFmerge
-#define qhDEFmerge 1
-
-
-/*============ -constants- ==============*/
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="qh_ANGLEredundant">-</a>
-
- qh_ANGLEredundant
- indicates redundant merge in mergeT->angle
-*/
-#define qh_ANGLEredundant 6.0
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="qh_ANGLEdegen">-</a>
-
- qh_ANGLEdegen
- indicates degenerate facet in mergeT->angle
-*/
-#define qh_ANGLEdegen 5.0
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="qh_ANGLEconcave">-</a>
-
- qh_ANGLEconcave
- offset to indicate concave facets in mergeT->angle
-
- notes:
- concave facets are assigned the range of [2,4] in mergeT->angle
- roundoff error may make the angle less than 2
-*/
-#define qh_ANGLEconcave 1.5
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="MRG">-</a>
-
- MRG... (mergeType)
- indicates the type of a merge (mergeT->type)
-*/
-typedef enum { /* in sort order for facet_mergeset */
- MRGnone= 0,
- MRGcoplanar, /* centrum coplanar */
- MRGanglecoplanar, /* angle coplanar */
- /* could detect half concave ridges */
- MRGconcave, /* concave ridge */
- MRGflip, /* flipped facet. facet1 == facet2 */
- MRGridge, /* duplicate ridge (qh_MERGEridge) */
- /* degen and redundant go onto degen_mergeset */
- MRGdegen, /* degenerate facet (not enough neighbors) facet1 == facet2 */
- MRGredundant, /* redundant facet (vertex subset) */
- /* merge_degenredundant assumes degen < redundant */
- MRGmirror, /* mirror facet from qh_triangulate */
- ENDmrg
-} mergeType;
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="qh_MERGEapex">-</a>
-
- qh_MERGEapex
- flag for qh_mergefacet() to indicate an apex merge
-*/
-#define qh_MERGEapex True
-
-/*============ -structures- ====================*/
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="mergeT">-</a>
-
- mergeT
- structure used to merge facets
-*/
-
-typedef struct mergeT mergeT;
-struct mergeT { /* initialize in qh_appendmergeset */
- realT angle; /* angle between normals of facet1 and facet2 */
- facetT *facet1; /* will merge facet1 into facet2 */
- facetT *facet2;
- mergeType type;
-};
-
-
-/*=========== -macros- =========================*/
-
-/*-<a href="qh-merge.htm#TOC"
- >--------------------------------</a><a name="FOREACHmerge_">-</a>
-
- FOREACHmerge_( merges ) {...}
- assign 'merge' to each merge in merges
-
- notes:
- uses 'mergeT *merge, **mergep;'
- if qh_mergefacet(),
- restart since qh.facet_mergeset may change
- see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHmerge_( merges ) FOREACHsetelement_(mergeT, merges, merge)
-
-/*============ prototypes in alphabetical order after pre/postmerge =======*/
-
-void qh_premerge (vertexT *apex, realT maxcentrum, realT maxangle);
-void qh_postmerge (char *reason, realT maxcentrum, realT maxangle,
- boolT vneighbors);
-void qh_all_merges (boolT othermerge, boolT vneighbors);
-void qh_appendmergeset(facetT *facet, facetT *neighbor, mergeType mergetype, realT *angle);
-setT *qh_basevertices( facetT *samecycle);
-void qh_checkconnect (void /* qh new_facets */);
-boolT qh_checkzero (boolT testall);
-void qh_copynonconvex (ridgeT *atridge);
-void qh_degen_redundant_facet (facetT *facet);
-void qh_degen_redundant_neighbors (facetT *facet, facetT *delfacet);
-vertexT *qh_find_newvertex (vertexT *oldvertex, setT *vertices, setT *ridges);
-void qh_findbest_test (boolT testcentrum, facetT *facet, facetT *neighbor,
- facetT **bestfacet, realT *distp, realT *mindistp, realT *maxdistp);
-facetT *qh_findbestneighbor(facetT *facet, realT *distp, realT *mindistp, realT *maxdistp);
-void qh_flippedmerges(facetT *facetlist, boolT *wasmerge);
-void qh_forcedmerges( boolT *wasmerge);
-void qh_getmergeset(facetT *facetlist);
-void qh_getmergeset_initial (facetT *facetlist);
-void qh_hashridge (setT *hashtable, int hashsize, ridgeT *ridge, vertexT *oldvertex);
-ridgeT *qh_hashridge_find (setT *hashtable, int hashsize, ridgeT *ridge,
- vertexT *vertex, vertexT *oldvertex, int *hashslot);
-void qh_makeridges(facetT *facet);
-void qh_mark_dupridges(facetT *facetlist);
-void qh_maydropneighbor (facetT *facet);
-int qh_merge_degenredundant (void);
-void qh_merge_nonconvex( facetT *facet1, facetT *facet2, mergeType mergetype);
-void qh_mergecycle (facetT *samecycle, facetT *newfacet);
-void qh_mergecycle_all (facetT *facetlist, boolT *wasmerge);
-void qh_mergecycle_facets( facetT *samecycle, facetT *newfacet);
-void qh_mergecycle_neighbors(facetT *samecycle, facetT *newfacet);
-void qh_mergecycle_ridges(facetT *samecycle, facetT *newfacet);
-void qh_mergecycle_vneighbors( facetT *samecycle, facetT *newfacet);
-void qh_mergefacet(facetT *facet1, facetT *facet2, realT *mindist, realT *maxdist, boolT mergeapex);
-void qh_mergefacet2d (facetT *facet1, facetT *facet2);
-void qh_mergeneighbors(facetT *facet1, facetT *facet2);
-void qh_mergeridges(facetT *facet1, facetT *facet2);
-void qh_mergesimplex(facetT *facet1, facetT *facet2, boolT mergeapex);
-void qh_mergevertex_del (vertexT *vertex, facetT *facet1, facetT *facet2);
-void qh_mergevertex_neighbors(facetT *facet1, facetT *facet2);
-void qh_mergevertices(setT *vertices1, setT **vertices);
-setT *qh_neighbor_intersections (vertexT *vertex);
-void qh_newvertices (setT *vertices);
-boolT qh_reducevertices (void);
-vertexT *qh_redundant_vertex (vertexT *vertex);
-boolT qh_remove_extravertices (facetT *facet);
-vertexT *qh_rename_sharedvertex (vertexT *vertex, facetT *facet);
-void qh_renameridgevertex(ridgeT *ridge, vertexT *oldvertex, vertexT *newvertex);
-void qh_renamevertex(vertexT *oldvertex, vertexT *newvertex, setT *ridges,
- facetT *oldfacet, facetT *neighborA);
-boolT qh_test_appendmerge (facetT *facet, facetT *neighbor);
-boolT qh_test_vneighbors (void /* qh newfacet_list */);
-void qh_tracemerge (facetT *facet1, facetT *facet2);
-void qh_tracemerging (void);
-void qh_updatetested( facetT *facet1, facetT *facet2);
-setT *qh_vertexridges (vertexT *vertex);
-void qh_vertexridges_facet (vertexT *vertex, facetT *facet, setT **ridges);
-void qh_willdelete (facetT *facet, facetT *replace);
-
-#endif /* qhDEFmerge */
+++ /dev/null
-/*<html><pre> -<a href="qh-poly.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- poly.h
- header file for poly.c and poly2.c
-
- see qh-poly.htm, qhull.h and poly.c
-
- copyright (c) 1993-2002, The Geometry Center
-*/
-
-#ifndef qhDEFpoly
-#define qhDEFpoly 1
-
-/*=============== constants ========================== */
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="ALGORITHMfault">-</a>
-
- ALGORITHMfault
- use as argument to checkconvex() to report errors during buildhull
-*/
-#define qh_ALGORITHMfault 0
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="DATAfault">-</a>
-
- DATAfault
- use as argument to checkconvex() to report errors during initialhull
-*/
-#define qh_DATAfault 1
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="DUPLICATEridge">-</a>
-
- DUPLICATEridge
- special value for facet->neighbor to indicate a duplicate ridge
-
- notes:
- set by matchneighbor, used by matchmatch and mark_dupridge
-*/
-#define qh_DUPLICATEridge ( facetT * ) 1L
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="MERGEridge">-</a>
-
- MERGEridge flag in facet
- special value for facet->neighbor to indicate a merged ridge
-
- notes:
- set by matchneighbor, used by matchmatch and mark_dupridge
-*/
-#define qh_MERGEridge ( facetT * ) 2L
-
-
-/*============ -structures- ====================*/
-
-/*=========== -macros- =========================*/
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLfacet_">-</a>
-
- FORALLfacet_( facetlist ) { ... }
- assign 'facet' to each facet in facetlist
-
- notes:
- uses 'facetT *facet;'
- assumes last facet is a sentinel
-
- see:
- FORALLfacets
-*/
-#define FORALLfacet_( facetlist ) if ( facetlist ) for( facet=( facetlist );facet && facet->next;facet=facet->next )
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLnew_facets">-</a>
-
- FORALLnew_facets { ... }
- assign 'newfacet' to each facet in qh.newfacet_list
-
- notes:
- uses 'facetT *newfacet;'
- at exit, newfacet==NULL
-*/
-#define FORALLnew_facets for( newfacet=qh newfacet_list;newfacet && newfacet->next;newfacet=newfacet->next )
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLvertex_">-</a>
-
- FORALLvertex_( vertexlist ) { ... }
- assign 'vertex' to each vertex in vertexlist
-
- notes:
- uses 'vertexT *vertex;'
- at exit, vertex==NULL
-*/
-#define FORALLvertex_( vertexlist ) for ( vertex=( vertexlist );vertex && vertex->next;vertex= vertex->next )
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLvisible_facets">-</a>
-
- FORALLvisible_facets { ... }
- assign 'visible' to each visible facet in qh.visible_list
-
- notes:
- uses 'vacetT *visible;'
- at exit, visible==NULL
-*/
-#define FORALLvisible_facets for (visible=qh visible_list; visible && visible->visible; visible= visible->next)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLsame_">-</a>
-
- FORALLsame_( newfacet ) { ... }
- assign 'same' to each facet in newfacet->f.samecycle
-
- notes:
- uses 'facetT *same;'
- stops when it returns to newfacet
-*/
-#define FORALLsame_(newfacet) for (same= newfacet->f.samecycle; same != newfacet; same= same->f.samecycle)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLsame_cycle_">-</a>
-
- FORALLsame_cycle_( newfacet ) { ... }
- assign 'same' to each facet in newfacet->f.samecycle
-
- notes:
- uses 'facetT *same;'
- at exit, same == NULL
-*/
-#define FORALLsame_cycle_(newfacet) \
- for (same= newfacet->f.samecycle; \
- same; same= (same == newfacet ? NULL : same->f.samecycle))
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHneighborA_">-</a>
-
- FOREACHneighborA_( facet ) { ... }
- assign 'neighborA' to each neighbor in facet->neighbors
-
- FOREACHneighborA_( vertex ) { ... }
- assign 'neighborA' to each neighbor in vertex->neighbors
-
- declare:
- facetT *neighborA, **neighborAp;
-
- see:
- <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHneighborA_(facet) FOREACHsetelement_(facetT, facet->neighbors, neighborA)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHvisible_">-</a>
-
- FOREACHvisible_( facets ) { ... }
- assign 'visible' to each facet in facets
-
- notes:
- uses 'facetT *facet, *facetp;'
- see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvisible_(facets) FOREACHsetelement_(facetT, facets, visible)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHnewfacet_">-</a>
-
- FOREACHnewfacet_( facets ) { ... }
- assign 'newfacet' to each facet in facets
-
- notes:
- uses 'facetT *newfacet, *newfacetp;'
- see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHnewfacet_(facets) FOREACHsetelement_(facetT, facets, newfacet)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHvertexA_">-</a>
-
- FOREACHvertexA_( vertices ) { ... }
- assign 'vertexA' to each vertex in vertices
-
- notes:
- uses 'vertexT *vertexA, *vertexAp;'
- see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertexA_(vertices) FOREACHsetelement_(vertexT, vertices, vertexA)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHvertexreverse12_">-</a>
-
- FOREACHvertexreverse12_( vertices ) { ... }
- assign 'vertex' to each vertex in vertices
- reverse order of first two vertices
-
- notes:
- uses 'vertexT *vertex, *vertexp;'
- see <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertexreverse12_(vertices) FOREACHsetelementreverse12_(vertexT, vertices, vertex)
-
-
-/*=============== prototypes poly.c in alphabetical order ================*/
-
-void qh_appendfacet(facetT *facet);
-void qh_appendvertex(vertexT *vertex);
-void qh_attachnewfacets (void);
-boolT qh_checkflipped (facetT *facet, realT *dist, boolT allerror);
-void qh_delfacet(facetT *facet);
-void qh_deletevisible(void /*qh visible_list, qh horizon_list*/);
-setT *qh_facetintersect (facetT *facetA, facetT *facetB, int *skipAp,int *skipBp, int extra);
-unsigned qh_gethash (int hashsize, setT *set, int size, int firstindex, void *skipelem);
-facetT *qh_makenewfacet(setT *vertices, boolT toporient, facetT *facet);
-void qh_makenewplanes ( void /* newfacet_list */);
-facetT *qh_makenew_nonsimplicial (facetT *visible, vertexT *apex, int *numnew);
-facetT *qh_makenew_simplicial (facetT *visible, vertexT *apex, int *numnew);
-void qh_matchneighbor (facetT *newfacet, int newskip, int hashsize,
- int *hashcount);
-void qh_matchnewfacets (void);
-boolT qh_matchvertices (int firstindex, setT *verticesA, int skipA,
- setT *verticesB, int *skipB, boolT *same);
-facetT *qh_newfacet(void);
-ridgeT *qh_newridge(void);
-int qh_pointid (pointT *point);
-void qh_removefacet(facetT *facet);
-void qh_removevertex(vertexT *vertex);
-void qh_updatevertices (void);
-
-
-/*========== -prototypes poly2.c in alphabetical order ===========*/
-
-void qh_addhash (void* newelem, setT *hashtable, int hashsize, unsigned hash);
-void qh_check_bestdist (void);
-void qh_check_maxout (void);
-void qh_check_output (void);
-void qh_check_point (pointT *point, facetT *facet, realT *maxoutside, realT *maxdist, facetT **errfacet1, facetT **errfacet2);
-void qh_check_points(void);
-void qh_checkconvex(facetT *facetlist, int fault);
-void qh_checkfacet(facetT *facet, boolT newmerge, boolT *waserrorp);
-void qh_checkflipped_all (facetT *facetlist);
-void qh_checkpolygon(facetT *facetlist);
-void qh_checkvertex (vertexT *vertex);
-void qh_clearcenters (qh_CENTER type);
-void qh_createsimplex(setT *vertices);
-void qh_delridge(ridgeT *ridge);
-void qh_delvertex (vertexT *vertex);
-setT *qh_facet3vertex (facetT *facet);
-facetT *qh_findbestfacet (pointT *point, boolT bestoutside,
- realT *bestdist, boolT *isoutside);
-facetT *qh_findfacet_all (pointT *point, realT *bestdist, boolT *isoutside,
- int *numpart);
-int qh_findgood (facetT *facetlist, int goodhorizon);
-void qh_findgood_all (facetT *facetlist);
-void qh_furthestnext (void /* qh facet_list */);
-void qh_furthestout (facetT *facet);
-void qh_infiniteloop (facetT *facet);
-void qh_initbuild(void);
-void qh_initialhull(setT *vertices);
-setT *qh_initialvertices(int dim, setT *maxpoints, pointT *points, int numpoints);
-vertexT *qh_isvertex (pointT *point, setT *vertices);
-vertexT *qh_makenewfacets (pointT *point /*horizon_list, visible_list*/);
-void qh_matchduplicates (facetT *atfacet, int atskip, int hashsize, int *hashcount);
-void qh_nearcoplanar ( void /* qh.facet_list */);
-vertexT *qh_nearvertex (facetT *facet, pointT *point, realT *bestdistp);
-int qh_newhashtable(int newsize);
-vertexT *qh_newvertex(pointT *point);
-ridgeT *qh_nextridge3d (ridgeT *atridge, facetT *facet, vertexT **vertexp);
-void qh_outcoplanar (void /* facet_list */);
-pointT *qh_point (int id);
-void qh_point_add (setT *set, pointT *point, void *elem);
-setT *qh_pointfacet (void /*qh facet_list*/);
-setT *qh_pointvertex (void /*qh facet_list*/);
-void qh_prependfacet(facetT *facet, facetT **facetlist);
-void qh_printhashtable(FILE *fp);
-void qh_printlists (void);
-void qh_resetlists (boolT stats, boolT resetVisible /*qh newvertex_list newfacet_list visible_list*/);
-void qh_setvoronoi_all (void);
-void qh_triangulate (void /*qh facet_list*/);
-void qh_triangulate_facet (facetT *facetA, vertexT **first_vertex);
-void qh_triangulate_link (facetT *oldfacetA, facetT *facetA, facetT *oldfacetB, facetT *facetB);
-void qh_triangulate_mirror (facetT *facetA, facetT *facetB);
-void qh_triangulate_null (facetT *facetA);
-void qh_vertexintersect(setT **vertexsetA,setT *vertexsetB);
-setT *qh_vertexintersect_new(setT *vertexsetA,setT *vertexsetB);
-void qh_vertexneighbors (void /*qh facet_list*/);
-boolT qh_vertexsubset(setT *vertexsetA, setT *vertexsetB);
-
-
-#endif /* qhDEFpoly */
+++ /dev/null
-/*<html><pre> -<a href="qh-qhull.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- qhull.h
- user-level header file for using qhull.a library
-
- see qh-qhull.htm, qhull_a.h
-
- copyright (c) 1993-2002, The Geometry Center
-
- NOTE: access to qh_qh is via the 'qh' macro. This allows
- qh_qh to be either a pointer or a structure. An example
- of using qh is "qh DROPdim" which accesses the DROPdim
- field of qh_qh. Similarly, access to qh_qhstat is via
- the 'qhstat' macro.
-
- includes function prototypes for qhull.c, geom.c, global.c, io.c, user.c
-
- use mem.h for mem.c
- use qset.h for qset.c
-
- see unix.c for an example of using qhull.h
-
- recompile qhull if you change this file
-*/
-
-#ifndef qhDEFqhull
-#define qhDEFqhull 1
-
-/*=========================== -included files ==============*/
-
-#include <setjmp.h>
-#include <float.h>
-#include <time.h>
-
-#if __MWERKS__ && __POWERPC__
-#include <SIOUX.h>
-#include <Files.h>
-#include <Desk.h>
-#endif
-
-#ifndef __STDC__
-#ifndef __cplusplus
-#if !_MSC_VER
-#error Neither __STDC__ nor __cplusplus is defined. Please use strict ANSI C or C++ to compile
-#error Qhull. You may need to turn off compiler extensions in your project configuration. If
-#error your compiler is a standard C compiler, you can delete this warning from qhull.h
-#endif
-#endif
-#endif
-
-#include "user.h" /* user defineable constants */
-
-/*============ constants and basic types ====================*/
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="qh_VERSION">-</a>
-
- qh_VERSION
- version string by year and date
-
- the revision increases on code changes only
-
- notes:
- change date: Changes.txt, Announce.txt, README.txt, qhull.man
- qhull-news.html, Eudora signatures,
- change version: README.txt, qhull.html, file_id.diz, Makefile
- change year: Copying.txt
- check download size
- recompile user_eg.c, rbox.c, qhull.c, qconvex.c, qdelaun.c qvoronoi.c, qhalf.c
- make copy of qhull-news.html as qh-news.htm
-*/
-
-#define qh_VERSION "2002.1 2002/8/20"
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="coordT">-</a>
-
- coordT
- coordinates and coefficients are stored as realT (i.e., double)
-
- notes:
- could use 'float' for data and 'double' for calculations (realT vs. coordT)
- This requires many type casts, and adjusted error bounds.
- Also C compilers may do expressions in double anyway.
-*/
-#define coordT realT
-
-/*-<a href="qh-geom.htm#TOC"
- >--------------------------------</a><a name="pointT">-</a>
-
- pointT
- a point is an array of DIM3 coordinates
-*/
-#define pointT coordT
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="flagT">-</a>
-
- flagT
- Boolean flag as a bit
-*/
-#define flagT unsigned int
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="boolT">-</a>
-
- boolT
- boolean value, either True or False
-
- notes:
- needed for portability
-*/
-#define boolT unsigned int
-#ifdef False
-#undef False
-#endif
-#ifdef True
-#undef True
-#endif
-#define False 0
-#define True 1
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="CENTERtype">-</a>
-
- qh_CENTER
- to distinguish facet->center
-*/
-typedef enum
-{
- qh_ASnone = 0, qh_ASvoronoi, qh_AScentrum
-}
-qh_CENTER;
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="qh_PRINT">-</a>
-
- qh_PRINT
- output formats for printing (qh.PRINTout).
- 'Fa' 'FV' 'Fc' 'FC'
-
-
- notes:
- some of these names are similar to qh names. The similar names are only
- used in switch statements in qh_printbegin() etc.
-*/
-typedef enum {qh_PRINTnone= 0,
- qh_PRINTarea, qh_PRINTaverage, /* 'Fa' 'FV' 'Fc' 'FC' */
- qh_PRINTcoplanars, qh_PRINTcentrums,
- qh_PRINTfacets, qh_PRINTfacets_xridge, /* 'f' 'FF' 'G' 'FI' 'Fi' 'Fn' */
- qh_PRINTgeom, qh_PRINTids, qh_PRINTinner, qh_PRINTneighbors,
- qh_PRINTnormals, qh_PRINTouter, /* 'n' 'Fo' 'i' 'm' 'Fm' 'o' */
- qh_PRINTincidences, qh_PRINTmathematica, qh_PRINTmerges, qh_PRINToff,
- qh_PRINToptions, qh_PRINTpointintersect, /* 'FO' 'Fp' 'FP' 'p' 'FQ' 'FS' */
- qh_PRINTpointnearest, qh_PRINTpoints, qh_PRINTqhull, qh_PRINTsize,
- qh_PRINTsummary, qh_PRINTtriangles, /* 'Fs' 'Ft' 'Fv' 'FN' 'Fx' */
- qh_PRINTvertices, qh_PRINTvneighbors, qh_PRINTextremes,
- qh_PRINTEND} qh_PRINT;
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="qh_ALL">-</a>
-
- qh_ALL
- argument flag for selecting everything
-*/
-#define qh_ALL True
-#define qh_NOupper True /* argument for qh_findbest */
-#define qh_IScheckmax True /* argument for qh_findbesthorizon */
-#define qh_ISnewfacets True /* argument for qh_findbest */
-#define qh_RESETvisible True /* argument for qh_resetlists */
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="qh_ERR">-</a>
-
- qh_ERR
- Qhull exit codes, for indicating errors
-*/
-#define qh_ERRnone 0 /* no error occurred during qhull */
-#define qh_ERRinput 1 /* input inconsistency */
-#define qh_ERRsingular 2 /* singular input data */
-#define qh_ERRprec 3 /* precision error */
-#define qh_ERRmem 4 /* insufficient memory, matches mem.h */
-#define qh_ERRqhull 5 /* internal error detected, matches mem.h */
-
-/* ============ -structures- ====================
- each of the following structures is defined by a typedef
- all realT and coordT fields occur at the beginning of a structure
- (otherwise space may be wasted due to alignment)
- define all flags together and pack into 32-bit number
-*/
-
-typedef struct vertexT vertexT;
-typedef struct ridgeT ridgeT;
-typedef struct facetT facetT;
-#ifndef DEFsetT
-#define DEFsetT 1
-typedef struct setT setT; /* defined in qset.h */
-#endif
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="facetT">-</a>
-
- facetT
- defines a facet
-
- notes:
- qhull() generates the hull as a list of facets.
-
- topological information:
- f.previous,next doubly-linked list of facets
- f.vertices set of vertices
- f.ridges set of ridges
- f.neighbors set of neighbors
- f.toporient True if facet has top-orientation (else bottom)
-
- geometric information:
- f.offset,normal hyperplane equation
- f.maxoutside offset to outer plane -- all points inside
- f.center centrum for testing convexity
- f.simplicial True if facet is simplicial
- f.flipped True if facet does not include qh.interior_point
-
- for constructing hull:
- f.visible True if facet on list of visible facets (will be deleted)
- f.newfacet True if facet on list of newly created facets
- f.coplanarset set of points coplanar with this facet
- (includes near-inside points for later testing)
- f.outsideset set of points outside of this facet
- f.furthestdist distance to furthest point of outside set
- f.visitid marks visited facets during a loop
- f.replace replacement facet for to-be-deleted, visible facets
- f.samecycle,newcycle cycle of facets for merging into horizon facet
-
- see below for other flags and fields
-*/
-struct facetT {
-#if !qh_COMPUTEfurthest
- coordT furthestdist;/* distance to furthest point of outsideset */
-#endif
-#if qh_MAXoutside
- coordT maxoutside; /* max computed distance of point to facet
- Before QHULLfinished this is an approximation
- since maxdist not always set for mergefacet
- Actual outer plane is +DISTround and
- computed outer plane is +2*DISTround */
-#endif
- coordT offset; /* exact offset of hyperplane from origin */
- coordT *normal; /* normal of hyperplane, hull_dim coefficients */
- /* if tricoplanar, shared with a neighbor */
- union { /* in order of testing */
- realT area; /* area of facet, only in io.c if ->isarea */
- facetT *replace; /* replacement facet if ->visible and NEWfacets
- is NULL only if qh_mergedegen_redundant or interior */
- facetT *samecycle; /* cycle of facets from the same visible/horizon intersection,
- if ->newfacet */
- facetT *newcycle; /* in horizon facet, current samecycle of new facets */
- facetT *trivisible; /* visible facet for ->tricoplanar facets during qh_triangulate() */
- facetT *triowner; /* owner facet for ->tricoplanar, !isarea facets w/ ->keepcentrum */
- }f;
- coordT *center; /* centrum for convexity, qh CENTERtype == qh_AScentrum */
- /* Voronoi center, qh CENTERtype == qh_ASvoronoi */
- /* if tricoplanar, shared with a neighbor */
- facetT *previous; /* previous facet in the facet_list */
- facetT *next; /* next facet in the facet_list */
- setT *vertices; /* vertices for this facet, inverse sorted by ID
- if simplicial, 1st vertex was apex/furthest */
- setT *ridges; /* explicit ridges for nonsimplicial facets.
- for simplicial facets, neighbors defines ridge */
- setT *neighbors; /* neighbors of the facet. If simplicial, the kth
- neighbor is opposite the kth vertex, and the first
- neighbor is the horizon facet for the first vertex*/
- setT *outsideset; /* set of points outside this facet
- if non-empty, last point is furthest
- if NARROWhull, includes coplanars for partitioning*/
- setT *coplanarset; /* set of points coplanar with this facet
- > qh.min_vertex and <= facet->max_outside
- a point is assigned to the furthest facet
- if non-empty, last point is furthest away */
- unsigned visitid; /* visit_id, for visiting all neighbors,
- all uses are independent */
- unsigned id; /* unique identifier from qh facet_id */
- unsigned nummerge:9; /* number of merges */
-#define qh_MAXnummerge 511 /* 2^9-1, 32 flags total, see "flags:" in io.c */
- flagT tricoplanar:1; /* True if TRIangulate and simplicial and coplanar with a neighbor */
- /* all tricoplanars share the same ->center, ->normal, ->offset, ->maxoutside */
- /* all tricoplanars share the same apex */
- /* if ->degenerate, does not span facet (one logical ridge) */
- /* one tricoplanar has ->keepcentrum and ->coplanarset */
- /* during qh_triangulate, f.trivisible points to original facet */
- flagT newfacet:1; /* True if facet on qh newfacet_list (new or merged) */
- flagT visible:1; /* True if visible facet (will be deleted) */
- flagT toporient:1; /* True if created with top orientation
- after merging, use ridge orientation */
- flagT simplicial:1;/* True if simplicial facet, ->ridges may be implicit */
- flagT seen:1; /* used to perform operations only once, like visitid */
- flagT seen2:1; /* used to perform operations only once, like visitid */
- flagT flipped:1; /* True if facet is flipped */
- flagT upperdelaunay:1; /* True if facet is upper envelope of Delaunay triangulation */
- flagT notfurthest:1; /* True if last point of outsideset is not furthest*/
-
-/*-------- flags primarily for output ---------*/
- flagT good:1; /* True if a facet marked good for output */
- flagT isarea:1; /* True if facet->f.area is defined */
-
-/*-------- flags for merging ------------------*/
- flagT dupridge:1; /* True if duplicate ridge in facet */
- flagT mergeridge:1; /* True if facet or neighbor contains a qh_MERGEridge
- ->normal defined (also defined for mergeridge2) */
- flagT mergeridge2:1; /* True if neighbor contains a qh_MERGEridge (mark_dupridges */
- flagT coplanar:1; /* True if horizon facet is coplanar at last use */
- flagT mergehorizon:1; /* True if will merge into horizon (->coplanar) */
- flagT cycledone:1;/* True if mergecycle_all already done */
- flagT tested:1; /* True if facet convexity has been tested (false after merge */
- flagT keepcentrum:1; /* True if keep old centrum after a merge, or marks owner for ->tricoplanar */
- flagT newmerge:1; /* True if facet is newly merged for reducevertices */
- flagT degenerate:1; /* True if facet is degenerate (degen_mergeset or ->tricoplanar) */
- flagT redundant:1; /* True if facet is redundant (degen_mergeset) */
-};
-
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="ridgeT">-</a>
-
- ridgeT
- defines a ridge
-
- notes:
- a ridge is DIM3-1 simplex between two neighboring facets. If the
- facets are non-simplicial, there may be more than one ridge between
- two facets. E.G. a 4-d hypercube has two triangles between each pair
- of neighboring facets.
-
- topological information:
- vertices a set of vertices
- top,bottom neighboring facets with orientation
-
- geometric information:
- tested True if ridge is clearly convex
- nonconvex True if ridge is non-convex
-*/
-struct ridgeT {
- setT *vertices; /* vertices belonging to this ridge, inverse sorted by ID
- NULL if a degen ridge (matchsame) */
- facetT *top; /* top facet this ridge is part of */
- facetT *bottom; /* bottom facet this ridge is part of */
- unsigned id:24; /* unique identifier, =>room for 8 flags */
- flagT seen:1; /* used to perform operations only once */
- flagT tested:1; /* True when ridge is tested for convexity */
- flagT nonconvex:1; /* True if getmergeset detected a non-convex neighbor
- only one ridge between neighbors may have nonconvex */
-};
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="vertexT">-</a>
-
- vertexT
- defines a vertex
-
- topological information:
- next,previous doubly-linked list of all vertices
- neighbors set of adjacent facets (only if qh.VERTEXneighbors)
-
- geometric information:
- point array of DIM3 coordinates
-*/
-struct vertexT {
- vertexT *next; /* next vertex in vertex_list */
- vertexT *previous; /* previous vertex in vertex_list */
- pointT *point; /* hull_dim coordinates (coordT) */
- setT *neighbors; /* neighboring facets of vertex, qh_vertexneighbors()
- inits in io.c or after first merge */
- unsigned visitid; /* for use with qh vertex_visit */
- unsigned id:24; /* unique identifier, =>room for 8 flags */
- flagT seen:1; /* used to perform operations only once */
- flagT seen2:1; /* another seen flag */
- flagT delridge:1; /* vertex was part of a deleted ridge */
- flagT deleted:1; /* true if vertex on qh del_vertices */
- flagT newlist:1; /* true if vertex on qh newvertex_list */
-};
-
-/*======= -global variables -qh ============================*/
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh">-</a>
-
- qh
- all global variables for qhull are in qh, qhmem, and qhstat
-
- notes:
- qhmem is defined in mem.h and qhstat is defined in stat.h
- access to qh_qh is via the "qh" macro. See qh_QHpointer in user.h
-*/
-typedef struct qhT qhT;
-#if qh_QHpointer
-#define qh qh_qh->
-extern qhT *qh_qh; /* allocated in global.c */
-#else
-#define qh qh_qh.
-extern qhT qh_qh;
-#endif
-
-struct qhT {
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-const">-</a>
-
- qh constants
- configuration flags and constants for Qhull
-
- notes:
- The user configures Qhull by defining flags. They are
- copied into qh by qh_setflags(). qh-quick.htm#options defines the flags.
-*/
- boolT ALLpoints; /* true 'Qs' if search all points for initial simplex */
- boolT ANGLEmerge; /* true 'Qa' if sort potential merges by angle */
- boolT APPROXhull; /* true 'Wn' if MINoutside set */
- realT MINoutside; /* 'Wn' min. distance for an outside point */
- boolT ATinfinity; /* true 'Qz' if point num_points-1 is "at-infinity"
- for improving precision in Delaunay triangulations */
- boolT AVOIDold; /* true 'Q4' if avoid old->new merges */
- boolT BESToutside; /* true 'Qf' if partition points into best outsideset */
- boolT CDDinput; /* true 'Pc' if input uses CDD format (1.0/offset first) */
- boolT CDDoutput; /* true 'PC' if print normals in CDD format (offset first) */
- boolT CHECKfrequently; /* true 'Tc' if checking frequently */
- realT premerge_cos; /* 'A-n' cos_max when pre merging */
- realT postmerge_cos; /* 'An' cos_max when post merging */
- boolT DELAUNAY; /* true 'd' if computing DELAUNAY triangulation */
- boolT DOintersections; /* true 'Gh' if print hyperplane intersections */
- int DROPdim; /* drops dim 'GDn' for 4-d -> 3-d output */
- boolT FORCEoutput; /* true 'Po' if forcing output despite degeneracies */
- int GOODpoint; /* 1+n for 'QGn', good facet if visible/not(-) from point n*/
- pointT *GOODpointp; /* the actual point */
- boolT GOODthreshold; /* true if qh lower_threshold/upper_threshold defined
- false if qh SPLITthreshold */
- int GOODvertex; /* 1+n, good facet if vertex for point n */
- pointT *GOODvertexp; /* the actual point */
- boolT HALFspace; /* true 'Hn,n,n' if halfspace intersection */
- int IStracing; /* trace execution, 0=none, 1=least, 4=most, -1=events */
- int KEEParea; /* 'PAn' number of largest facets to keep */
- boolT KEEPcoplanar; /* true 'Qc' if keeping nearest facet for coplanar points */
- boolT KEEPinside; /* true 'Qi' if keeping nearest facet for inside points
- set automatically if 'd Qc' */
- int KEEPmerge; /* 'PMn' number of facets to keep with most merges */
- realT KEEPminArea; /* 'PFn' minimum facet area to keep */
- realT MAXcoplanar; /* 'Un' max distance below a facet to be coplanar*/
- boolT MERGEexact; /* true 'Qx' if exact merges (coplanar, degen, dupridge, flipped) */
- boolT MERGEindependent; /* true 'Q2' if merging independent sets */
- boolT MERGING; /* true if exact-, pre- or post-merging, with angle and centrum tests */
- realT premerge_centrum; /* 'C-n' centrum_radius when pre merging. Default is round-off */
- realT postmerge_centrum; /* 'Cn' centrum_radius when post merging. Default is round-off */
- boolT MERGEvertices; /* true 'Q3' if merging redundant vertices */
- realT MINvisible; /* 'Vn' min. distance for a facet to be visible */
- boolT NOnarrow; /* true 'Q10' if no special processing for narrow distributions */
- boolT NOnearinside; /* true 'Q8' if ignore near-inside points when partitioning */
- boolT NOpremerge; /* true 'Q0' if no defaults for C-0 or Qx */
- boolT ONLYgood; /* true 'Qg' if process points with good visible or horizon facets */
- boolT ONLYmax; /* true 'Qm' if only process points that increase max_outside */
- boolT PICKfurthest; /* true 'Q9' if process furthest of furthest points*/
- boolT POSTmerge; /* true if merging after buildhull (Cn or An) */
- boolT PREmerge; /* true if merging during buildhull (C-n or A-n) */
- /* NOTE: some of these names are similar to qh_PRINT names */
- boolT PRINTcentrums; /* true 'Gc' if printing centrums */
- boolT PRINTcoplanar; /* true 'Gp' if printing coplanar points */
- int PRINTdim; /* print dimension for Geomview output */
- boolT PRINTdots; /* true 'Ga' if printing all points as dots */
- boolT PRINTgood; /* true 'Pg' if printing good facets */
- boolT PRINTinner; /* true 'Gi' if printing inner planes */
- boolT PRINTneighbors; /* true 'PG' if printing neighbors of good facets */
- boolT PRINTnoplanes; /* true 'Gn' if printing no planes */
- boolT PRINToptions1st; /* true 'FO' if printing options to stderr */
- boolT PRINTouter; /* true 'Go' if printing outer planes */
- boolT PRINTprecision; /* false 'Pp' if not reporting precision problems */
- qh_PRINT PRINTout[qh_PRINTEND]; /* list of output formats to print */
- boolT PRINTridges; /* true 'Gr' if print ridges */
- boolT PRINTspheres; /* true 'Gv' if print vertices as spheres */
- boolT PRINTstatistics; /* true 'Ts' if printing statistics to stderr */
- boolT PRINTsummary; /* true 's' if printing summary to stderr */
- boolT PRINTtransparent; /* true 'Gt' if print transparent outer ridges */
- boolT PROJECTdelaunay; /* true if DELAUNAY, no readpoints() and
- need projectinput() for Delaunay in qh_init_B */
- int PROJECTinput; /* number of projected dimensions 'bn:0Bn:0' */
- boolT QUICKhelp; /* true if quick help message for degen input */
- boolT RANDOMdist; /* true if randomly change distplane and setfacetplane */
- realT RANDOMfactor; /* maximum random perturbation */
- realT RANDOMa; /* qh_randomfactor is randr * RANDOMa + RANDOMb */
- realT RANDOMb;
- boolT RANDOMoutside; /* true if select a random outside point */
- int REPORTfreq; /* buildtracing reports every n facets */
- int REPORTfreq2; /* tracemerging reports every REPORTfreq/2 facets */
- int RERUN; /* 'TRn' rerun qhull n times (qh.build_cnt) */
- int ROTATErandom; /* 'QRn' seed, 0 time, >= rotate input */
- boolT SCALEinput; /* true 'Qbk' if scaling input */
- boolT SCALElast; /* true 'Qbb' if scale last coord to max prev coord */
- boolT SETroundoff; /* true 'E' if qh DISTround is predefined */
- boolT SKIPcheckmax; /* true 'Q5' if skip qh_check_maxout */
- 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 (not for qh ONLYgood) */
- 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 */
- int TESTpoints; /* 'QTn' num of test points after qh.num_points. Test points always coplanar. */
- boolT TESTvneighbors; /* true 'Qv' if test vertex neighbors at end */
- int TRACElevel; /* 'Tn' conditional IStracing level */
- int TRACElastrun; /* qh.TRACElevel applies to last qh.RERUN */
- int TRACEpoint; /* 'TPn' start tracing when point n is a vertex */
- realT TRACEdist; /* 'TWn' start tracing when merge distance too big */
- int TRACEmerge; /* 'TMn' start tracing before this merge */
- boolT TRIangulate; /* true 'Qt' if triangulate non-simplicial facets */
- boolT TRInormals; /* true 'Q11' if triangulate duplicates normals (sets Qt) */
- boolT UPPERdelaunay; /* true 'Qu' if computing furthest-site Delaunay */
- boolT VERIFYoutput; /* true 'Tv' if verify output at end of qhull */
- boolT VIRTUALmemory; /* true 'Q7' if depth-first processing in buildhull */
- boolT VORONOI; /* true 'v' if computing Voronoi diagram */
-
- /*--------input constants ---------*/
- realT AREAfactor; /* 1/(hull_dim-1)! for converting det's to area */
- boolT DOcheckmax; /* true if calling qh_check_maxout (qh_initqhull_globals) */
- char *feasible_string; /* feasible point 'Hn,n,n' for halfspace intersection */
- coordT *feasible_point; /* as coordinates, both malloc'd */
- boolT GETarea; /* true 'Fa', 'FA', 'FS', 'PAn', 'PFn' if compute facet area/Voronoi volume in io.c */
- boolT KEEPnearinside; /* true if near-inside points in coplanarset */
- int hull_dim; /* dimension of hull, set by initbuffers */
- int input_dim; /* dimension of input, set by initbuffers */
- int num_points; /* number of input points */
- pointT *first_point; /* array of input points, see POINTSmalloc */
- boolT POINTSmalloc; /* true if qh first_point/num_points allocated */
- pointT *input_points; /* copy of original qh.first_point for input points for qh_joggleinput */
- boolT input_malloc; /* true if qh input_points malloc'd */
- char qhull_command[256];/* command line that invoked this program */
- char rbox_command[256]; /* command line that produced the input points */
- char qhull_options[512];/* descriptive list of options */
- int qhull_optionlen; /* length of last line */
- int qhull_optionsiz; /* size of qhull_options before qh_initbuild */
- boolT VERTEXneighbors; /* true if maintaining vertex neighbors */
- boolT ZEROcentrum; /* true if 'C-0' or 'C-0 Qx'. sets ZEROall_ok */
- realT *upper_threshold; /* don't print if facet->normal[k]>=upper_threshold[k]
- must set either GOODthreshold or SPLITthreshold
- if Delaunay, default is 0.0 for upper envelope */
- realT *lower_threshold; /* don't print if facet->normal[k] <=lower_threshold[k] */
- realT *upper_bound; /* scale point[k] to new upper bound */
- realT *lower_bound; /* scale point[k] to new lower bound
- project if both upper_ and lower_bound == 0 */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-prec">-</a>
-
- qh precision constants
- precision constants for Qhull
-
- notes:
- qh_detroundoff() computes the maximum roundoff error for distance
- and other computations. It also sets default values for the
- qh constants above.
-*/
- realT ANGLEround; /* max round off error for angles */
- realT centrum_radius; /* max centrum radius for convexity (roundoff added) */
- realT cos_max; /* max cosine for convexity (roundoff added) */
- realT DISTround; /* max round off error for distances, 'E' overrides */
- realT MAXabs_coord; /* max absolute coordinate */
- realT MAXlastcoord; /* max last coordinate for qh_scalelast */
- realT MAXsumcoord; /* max sum of coordinates */
- realT MAXwidth; /* max rectilinear width of point coordinates */
- realT MINdenom_1; /* min. abs. value for 1/x */
- realT MINdenom; /* use divzero if denominator < MINdenom */
- realT MINdenom_1_2; /* min. abs. val for 1/x that allows normalization */
- realT MINdenom_2; /* use divzero if denominator < MINdenom_2 */
- realT MINlastcoord; /* min. last coordinate for qh_scalelast */
- boolT NARROWhull; /* set in qh_initialhull if angle < qh_MAXnarrow */
- realT *NEARzero; /* hull_dim array for near zero in gausselim */
- realT NEARinside; /* keep points for qh_check_maxout if close to facet */
- realT ONEmerge; /* max distance for merging simplicial facets */
- realT outside_err; /* application's epsilon for coplanar points
- qh_check_bestdist() qh_check_points() reports error if point outside */
- realT WIDEfacet; /* size of wide facet for skipping ridge in
- area computation and locking centrum */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-intern">-</a>
-
- qh internal constants
- internal constants for Qhull
-*/
- char qhull[sizeof("qhull")]; /* for checking ownership */
- void *old_stat; /* pointer to saved qh_qhstat, qh_save_qhull */
- jmp_buf errexit; /* exit label for qh_errexit, defined by setjmp() */
- char jmpXtra[40]; /* extra bytes in case jmp_buf is defined wrong by compiler */
- jmp_buf restartexit; /* restart label for qh_errexit, defined by setjmp() */
- char jmpXtra2[40]; /* extra bytes in case jmp_buf is defined wrong by compiler*/
- FILE *fin; /* pointer to input file, init by qh_meminit */
- FILE *fout; /* pointer to output file */
- FILE *ferr; /* pointer to error file */
- pointT *interior_point; /* center point of the initial simplex*/
- int normal_size; /* size in bytes for facet normals and point coords*/
- int center_size; /* size in bytes for Voronoi centers */
- int TEMPsize; /* size for small, temporary sets (in quick mem) */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-lists">-</a>
-
- qh facet and vertex lists
- defines lists of facets, new facets, visible facets, vertices, and
- new vertices. Includes counts, next ids, and trace ids.
- see:
- qh_resetlists()
-*/
- facetT *facet_list; /* first facet */
- facetT *facet_tail; /* end of facet_list (dummy facet) */
- facetT *facet_next; /* next facet for buildhull()
- previous facets do not have outside sets
- NARROWhull: previous facets may have coplanar outside sets for qh_outcoplanar */
- facetT *newfacet_list; /* list of new facets to end of facet_list */
- facetT *visible_list; /* list of visible facets preceeding newfacet_list,
- facet->visible set */
- int num_visible; /* current number of visible facets */
- unsigned tracefacet_id; /* set at init, then can print whenever */
- facetT *tracefacet; /* set in newfacet/mergefacet, undone in delfacet*/
- unsigned tracevertex_id; /* set at buildtracing, can print whenever */
- vertexT *tracevertex; /* set in newvertex, undone in delvertex*/
- vertexT *vertex_list; /* list of all vertices, to vertex_tail */
- vertexT *vertex_tail; /* end of vertex_list (dummy vertex) */
- vertexT *newvertex_list; /* list of vertices in newfacet_list, to vertex_tail
- all vertices have 'newlist' set */
- int num_facets; /* number of facets in facet_list
- includes visble faces (num_visible) */
- int num_vertices; /* number of vertices in facet_list */
- int num_outside; /* number of points in outsidesets (for tracing and RANDOMoutside)
- includes coplanar outsideset points for NARROWhull/qh_outcoplanar() */
- int num_good; /* number of good facets (after findgood_all) */
- unsigned facet_id; /* ID of next, new facet from newfacet() */
- unsigned ridge_id; /* ID of next, new ridge from newridge() */
- unsigned vertex_id; /* ID of next, new vertex from newvertex() */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-var">-</a>
-
- qh global variables
- defines minimum and maximum distances, next visit ids, several flags,
- and other global variables.
- initialize in qh_initbuild or qh_maxmin if used in qh_buildhull
-*/
- unsigned long hulltime; /* ignore time to set up input and randomize */
- /* use unsigned to avoid wrap-around errors */
- boolT ALLOWrestart; /* true if qh_precision can use qh.restartexit */
- int build_cnt; /* number of calls to qh_initbuild */
- qh_CENTER CENTERtype; /* current type of facet->center, qh_CENTER */
- int furthest_id; /* pointid of furthest point, for tracing */
- facetT *GOODclosest; /* closest facet to GOODthreshold in qh_findgood */
- realT JOGGLEmax; /* set 'QJn' if randomly joggle input */
- boolT maxoutdone; /* set qh_check_maxout(), cleared by qh_addpoint() */
- realT max_outside; /* maximum distance from a point to a facet,
- before roundoff, not simplicial vertices
- actual outer plane is +DISTround and
- computed outer plane is +2*DISTround */
- realT max_vertex; /* maximum distance (>0) from vertex to a facet,
- before roundoff, due to a merge */
- realT min_vertex; /* minimum distance (<0) from vertex to a facet,
- before roundoff, due to a merge
- if qh.JOGGLEmax, qh_makenewplanes sets it
- recomputed if qh.DOcheckmax, default -qh.DISTround */
- boolT NEWfacets; /* true while visible facets invalid due to new or merge
- from makecone/attachnewfacets to deletevisible */
- boolT findbestnew; /* true if partitioning calls qh_findbestnew */
- boolT findbest_notsharp; /* true if new facets are at least 90 degrees */
- boolT NOerrexit; /* true if qh.errexit is not available */
- realT PRINTcradius; /* radius for printing centrums */
- realT PRINTradius; /* radius for printing vertex spheres and points */
- boolT POSTmerging; /* true when post merging */
- int printoutvar; /* temporary variable for qh_printbegin, etc. */
- int printoutnum; /* number of facets printed */
- boolT QHULLfinished; /* True after qhull() is finished */
- realT totarea; /* 'FA': total facet area computed by qh_getarea */
- realT totvol; /* 'FA': total volume computed by qh_getarea */
- unsigned int visit_id; /* unique ID for searching neighborhoods, */
- unsigned int vertex_visit; /* unique ID for searching vertices */
- boolT ZEROall_ok; /* True if qh_checkzero always succeeds */
- boolT WAScoplanar; /* True if qh_partitioncoplanar (qh_check_maxout) */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-set">-</a>
-
- qh global sets
- defines sets for merging, initial simplex, hashing, extra input points,
- and deleted vertices
-*/
- setT *facet_mergeset; /* temporary set of merges to be done */
- setT *degen_mergeset; /* temporary set of degenerate and redundant merges */
- setT *hash_table; /* hash table for matching ridges in qh_matchfacets
- size is setsize() */
- setT *other_points; /* additional points (first is qh interior_point) */
- setT *del_vertices; /* vertices to partition and delete with visible
- facets. Have deleted set for checkfacet */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-buf">-</a>
-
- qh global buffers
- defines buffers for maxtrix operations, input, and error messages
-*/
- coordT *gm_matrix; /* (dim+1)Xdim matrix for geom.c */
- coordT **gm_row; /* array of gm_matrix rows */
- char* line; /* malloc'd input line of maxline+1 chars */
- int maxline;
- coordT *half_space; /* malloc'd input array for halfspace (qh normal_size+coordT) */
- coordT *temp_malloc; /* malloc'd input array for points */
-
-/*-<a href="qh-globa.htm#TOC"
- >--------------------------------</a><a name="qh-static">-</a>
-
- qh static variables
- defines static variables for individual functions
-
- notes:
- do not use 'static' within a function. Multiple instances of qhull
- may exist.
-
- do not assume zero initialization, 'QPn' may cause a restart
-*/
- boolT ERREXITcalled; /* true during errexit (prevents duplicate calls */
- boolT firstcentrum; /* for qh_printcentrum */
- realT last_low; /* qh_scalelast parameters for qh_setdelaunay */
- realT last_high;
- realT last_newhigh;
- unsigned lastreport; /* for qh_buildtracing */
- int mergereport; /* for qh_tracemerging */
- boolT old_randomdist; /* save RANDOMdist when io, tracing, or statistics */
- int ridgeoutnum; /* number of ridges in 4OFF output */
- void *old_qhstat; /* for saving qh_qhstat in save_qhull() */
- setT *old_tempstack; /* for saving qhmem.tempstack in save_qhull */
- setT *coplanarset; /* set of coplanar facets for searching qh_findbesthorizon() */
-};
-
-/*=========== -macros- =========================*/
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="otherfacet_">-</a>
-
- otherfacet_(ridge, facet)
- return neighboring facet for a ridge in facet
-*/
-#define otherfacet_(ridge, facet) \
- (((ridge)->top == (facet)) ? (ridge)->bottom : (ridge)->top)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="getid_">-</a>
-
- getid_(p)
- return ID for facet, ridge, or vertex
- return MAXINT if NULL (-1 causes type conversion error )
-*/
-#define getid_(p) ((p) ? (p)->id : -1)
-
-/*============== FORALL macros ===================*/
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLfacets">-</a>
-
- FORALLfacets { ... }
- assign 'facet' to each facet in qh.facet_list
-
- notes:
- uses 'facetT *facet;'
- assumes last facet is a sentinel
-
- see:
- FORALLfacet_( facetlist )
-*/
-#define FORALLfacets for (facet=qh facet_list;facet && facet->next;facet=facet->next)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLpoints">-</a>
-
- FORALLpoints { ... }
- assign 'point' to each point in qh.first_point, qh.num_points
-
- declare:
- coordT *point, *pointtemp;
-*/
-#define FORALLpoints FORALLpoint_(qh first_point, qh num_points)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLpoint_">-</a>
-
- FORALLpoint_( points, num) { ... }
- assign 'point' to each point in points array of num points
-
- declare:
- coordT *point, *pointtemp;
-*/
-#define FORALLpoint_(points, num) for(point= (points), \
- pointtemp= (points)+qh hull_dim*(num); point < pointtemp; point += qh hull_dim)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FORALLvertices">-</a>
-
- FORALLvertices { ... }
- assign 'vertex' to each vertex in qh.vertex_list
-
- declare:
- vertexT *vertex;
-
- notes:
- assumes qh.vertex_list terminated with a sentinel
-*/
-#define FORALLvertices for (vertex=qh vertex_list;vertex && vertex->next;vertex= vertex->next)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHfacet_">-</a>
-
- FOREACHfacet_( facets ) { ... }
- assign 'facet' to each facet in facets
-
- declare:
- facetT *facet, **facetp;
-
- see:
- <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHfacet_(facets) FOREACHsetelement_(facetT, facets, facet)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHneighbor_">-</a>
-
- FOREACHneighbor_( facet ) { ... }
- assign 'neighbor' to each neighbor in facet->neighbors
-
- FOREACHneighbor_( vertex ) { ... }
- assign 'neighbor' to each neighbor in vertex->neighbors
-
- declare:
- facetT *neighbor, **neighborp;
-
- see:
- <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHneighbor_(facet) FOREACHsetelement_(facetT, facet->neighbors, neighbor)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHpoint_">-</a>
-
- FOREACHpoint_( points ) { ... }
- assign 'point' to each point in points set
-
- declare:
- pointT *point, **pointp;
-
- see:
- <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHpoint_(points) FOREACHsetelement_(pointT, points, point)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHridge_">-</a>
-
- FOREACHridge_( ridges ) { ... }
- assign 'ridge' to each ridge in ridges set
-
- declare:
- ridgeT *ridge, **ridgep;
-
- see:
- <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHridge_(ridges) FOREACHsetelement_(ridgeT, ridges, ridge)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHvertex_">-</a>
-
- FOREACHvertex_( vertices ) { ... }
- assign 'vertex' to each vertex in vertices set
-
- declare:
- vertexT *vertex, **vertexp;
-
- see:
- <a href="qset.h#FOREACHsetelement_">FOREACHsetelement_</a>
-*/
-#define FOREACHvertex_(vertices) FOREACHsetelement_(vertexT, vertices,vertex)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHfacet_i_">-</a>
-
- FOREACHfacet_i_( facets ) { ... }
- assign 'facet' and 'facet_i' for each facet in facets set
-
- declare:
- facetT *facet;
- int facet_n, facet_i;
-
- see:
- <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHfacet_i_(facets) FOREACHsetelement_i_(facetT, facets, facet)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHneighbor_i_">-</a>
-
- FOREACHneighbor_i_( facet ) { ... }
- assign 'neighbor' and 'neighbor_i' for each neighbor in facet->neighbors
-
- FOREACHneighbor_i_( vertex ) { ... }
- assign 'neighbor' and 'neighbor_i' for each neighbor in vertex->neighbors
-
- declare:
- facetT *neighbor;
- int neighbor_n, neighbor_i;
-
- see:
- <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHneighbor_i_(facet) FOREACHsetelement_i_(facetT, facet->neighbors, neighbor)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHpoint_i_">-</a>
-
- FOREACHpoint_i_( points ) { ... }
- assign 'point' and 'point_i' for each point in points set
-
- declare:
- pointT *point;
- int point_n, point_i;
-
- see:
- <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHpoint_i_(points) FOREACHsetelement_i_(pointT, points, point)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHridge_i_">-</a>
-
- FOREACHridge_i_( ridges ) { ... }
- assign 'ridge' and 'ridge_i' for each ridge in ridges set
-
- declare:
- ridgeT *ridge;
- int ridge_n, ridge_i;
-
- see:
- <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
-*/
-#define FOREACHridge_i_(ridges) FOREACHsetelement_i_(ridgeT, ridges, ridge)
-
-/*-<a href="qh-poly.htm#TOC"
- >--------------------------------</a><a name="FOREACHvertex_i_">-</a>
-
- FOREACHvertex_i_( vertices ) { ... }
- assign 'vertex' and 'vertex_i' for each vertex in vertices set
-
- declare:
- vertexT *vertex;
- int vertex_n, vertex_i;
-
- see:
- <a href="qset.h#FOREACHsetelement_i_">FOREACHsetelement_i_</a>
- */
-#define FOREACHvertex_i_(vertices) FOREACHsetelement_i_(vertexT, vertices,vertex)
-
-/********* -qhull.c prototypes (duplicated from qhull_a.h) **********************/
-
-void qh_qhull (void);
-boolT qh_addpoint (pointT *furthest, facetT *facet, boolT checkdist);
-void qh_printsummary(FILE *fp);
-
-/********* -user.c prototypes (alphabetical) **********************/
-
-void qh_errexit(int exitcode, facetT *facet, ridgeT *ridge);
-void qh_errprint(char* string, facetT *atfacet, facetT *otherfacet, ridgeT *atridge, vertexT *atvertex);
-int qh_new_qhull (int dim, int numpoints, coordT *points, boolT ismalloc,
- char *qhull_cmd, FILE *outfile, FILE *errfile);
-void qh_printfacetlist(facetT *facetlist, setT *facets, boolT printall);
-void qh_user_memsizes (void);
-
-/***** -geom.c/geom2.c prototypes (duplicated from geom.h) ****************/
-
-facetT *qh_findbest (pointT *point, facetT *startfacet,
- boolT bestoutside, boolT newfacets, boolT noupper,
- realT *dist, boolT *isoutside, int *numpart);
-facetT *qh_findbestnew (pointT *point, facetT *startfacet,
- realT *dist, boolT bestoutside, boolT *isoutside, int *numpart);
-boolT qh_gram_schmidt(int dim, realT **rows);
-void qh_outerinner (facetT *facet, realT *outerplane, realT *innerplane);
-void qh_printsummary(FILE *fp);
-void qh_projectinput (void);
-void qh_randommatrix (realT *buffer, int dim, realT **row);
-void qh_rotateinput (realT **rows);
-void qh_scaleinput (void);
-void qh_setdelaunay (int dim, int count, pointT *points);
-coordT *qh_sethalfspace_all (int dim, int count, coordT *halfspaces, pointT *feasible);
-
-/***** -global.c prototypes (alphabetical) ***********************/
-
-unsigned long qh_clock (void);
-void qh_checkflags (char *command, char *hiddenflags);
-void qh_freebuffers (void);
-void qh_freeqhull (boolT allmem);
-void qh_init_A (FILE *infile, FILE *outfile, FILE *errfile, int argc, char *argv[]);
-void qh_init_B (coordT *points, int numpoints, int dim, boolT ismalloc);
-void qh_init_qhull_command (int argc, char *argv[]);
-void qh_initbuffers (coordT *points, int numpoints, int dim, boolT ismalloc);
-void qh_initflags (char *command);
-void qh_initqhull_buffers (void);
-void qh_initqhull_globals (coordT *points, int numpoints, int dim, boolT ismalloc);
-void qh_initqhull_mem (void);
-void qh_initqhull_start (FILE *infile, FILE *outfile, FILE *errfile);
-void qh_initthresholds (char *command);
-void qh_option (char *option, int *i, realT *r);
-#if qh_QHpointer
-void qh_restore_qhull (qhT **oldqh);
-qhT *qh_save_qhull (void);
-#endif
-
-/***** -io.c prototypes (duplicated from io.h) ***********************/
-
-void dfacet( unsigned id);
-void dvertex( unsigned id);
-void qh_printneighborhood (FILE *fp, int format, facetT *facetA, facetT *facetB, boolT printall);
-void qh_produce_output(void);
-coordT *qh_readpoints(int *numpoints, int *dimension, boolT *ismalloc);
-
-
-/********* -mem.c prototypes (duplicated from mem.h) **********************/
-
-void qh_meminit (FILE *ferr);
-void qh_memfreeshort (int *curlong, int *totlong);
-
-/********* -poly.c/poly2.c prototypes (duplicated from poly.h) **********************/
-
-void qh_check_output (void);
-void qh_check_points (void);
-setT *qh_facetvertices (facetT *facetlist, setT *facets, boolT allfacets);
-facetT *qh_findbestfacet (pointT *point, boolT bestoutside,
- realT *bestdist, boolT *isoutside);
-vertexT *qh_nearvertex (facetT *facet, pointT *point, realT *bestdistp);
-pointT *qh_point (int id);
-setT *qh_pointfacet (void /*qh.facet_list*/);
-int qh_pointid (pointT *point);
-setT *qh_pointvertex (void /*qh.facet_list*/);
-void qh_setvoronoi_all (void);
-void qh_triangulate (void /*qh facet_list*/);
-
-/********* -stat.c prototypes (duplicated from stat.h) **********************/
-
-void qh_collectstatistics (void);
-void qh_printallstatistics (FILE *fp, char *string);
-
-#endif /* qhDEFqhull */
+++ /dev/null
-/*<html><pre> -<a href="qh-qhull.htm"
- >-------------------------------</a><a name="TOP">-</a>
-
- qhull_a.h
- all header files for compiling qhull
-
- see qh-qhull.htm
-
- see qhull.h for user-level definitions
-
- see user.h for user-defineable constants
-
- defines internal functions for qhull.c global.c
-
- copyright (c) 1993-2002, The Geometry Center
-
- Notes: grep for ((" and (" to catch fprintf("lkasdjf");
- full parens around (x?y:z)
- use '#include qhull/qhull_a.h' to avoid name clashes
-*/
-
-#ifndef qhDEFqhulla
-#define qhDEFqhulla
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <string.h>
-#include <math.h>
-#include <float.h> /* some compilers will not need float.h */
-#include <limits.h>
-#include <time.h>
-#include <ctype.h>
-/*** uncomment here and qset.c
- if string.h does not define memcpy()
-#include <memory.h>
-*/
-#include "qhull.h"
-#include "mem.h"
-#include "qset.h"
-#include "geom.h"
-#include "merge.h"
-#include "poly.h"
-#include "io.h"
-#include "stat.h"
-
-#if qh_CLOCKtype == 2 /* defined in user.h from qhull.h */
-#include <sys/types.h>
-#include <sys/times.h>
-#include <unistd.h>
-#endif
-
-#ifdef _MSC_VER /* Microsoft Visual C++ */
-#pragma warning( disable : 4056) /* float constant expression. Looks like a compiler bug */
-#pragma warning( disable : 4146) /* unary minus applied to unsigned type */
-#pragma warning( disable : 4244) /* conversion from 'unsigned long' to 'real' */
-#pragma warning( disable : 4305) /* conversion from 'const double' to 'float' */
-#endif
-
-/* ======= -macros- =========== */
-
-/*-<a href="qh-qhull.htm#TOC"
- >--------------------------------</a><a name="traceN">-</a>
-
- traceN((fp.ferr, "format\n", vars));
- calls fprintf if qh.IStracing >= N
-
- notes:
- removing tracing reduces code size but doesn't change execution speed
-*/
-#ifndef qh_NOtrace
-#define trace0(args) {if (qh IStracing) fprintf args;}
-#define trace1(args) {if (qh IStracing >= 1) fprintf args;}
-#define trace2(args) {if (qh IStracing >= 2) fprintf args;}
-#define trace3(args) {if (qh IStracing >= 3) fprintf args;}
-#define trace4(args) {if (qh IStracing >= 4) fprintf args;}
-#define trace5(args) {if (qh IStracing >= 5) fprintf args;}
-#else /* qh_NOtrace */
-#define trace0(args) {}
-#define trace1(args) {}
-#define trace2(args) {}
-#define trace3(args) {}
-#define trace4(args) {}
-#define trace5(args) {}
-#endif /* qh_NOtrace */
-
-/***** -qhull.c prototypes (alphabetical after qhull) ********************/
-
-void qh_qhull (void);
-boolT qh_addpoint (pointT *furthest, facetT *facet, boolT checkdist);
-void qh_buildhull(void);
-void qh_buildtracing (pointT&nb