From b978620b29bba28e371670ee90ad9b8e7d72c5e2 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 7 Sep 2016 15:40:47 +0200 Subject: [PATCH 001/298] Add an include guard --- .../cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index 8168a4baf47..d53edaeaea2 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -1,3 +1,8 @@ +if(CGAL_CreateSingleSourceCGALProgram_included) + return() +endif(CGAL_CreateSingleSourceCGALProgram_included) +set(CGAL_CreateSingleSourceCGALProgram_included TRUE) + include(CGAL_add_test) include(CMakeParseArguments) From ff15d0e5fcc73c33adc6ae74f735f55a5642e79a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 8 Sep 2016 22:13:18 +0200 Subject: [PATCH 002/298] Simplify the CMakeLists.txt of our libraries --- CGAL_Core/src/CGAL_Core/CMakeLists.txt | 27 +---- CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt | 49 ++------ GraphicsView/src/CGAL_Qt5/CMakeLists.txt | 105 +++--------------- Installation/CMakeLists.txt | 5 +- Installation/INSTALL.md | 2 +- .../cmake/modules/CGAL_SetupBoost.cmake | 73 ++++++------ .../modules/CGAL_SetupCGALDependencies.cmake | 32 ++++++ .../CGAL_SetupCGAL_ImageIODependencies.cmake | 46 ++++++++ .../CGAL_SetupCGAL_Qt5Dependencies.cmake | 51 +++++++++ .../cmake/modules/CGAL_SetupGMP.cmake | 22 ++++ .../cmake/modules/CGAL_SetupLEDA.cmake | 21 ++++ Installation/src/CGAL/CMakeLists.txt | 23 ++-- Installation/src/CMakeLists.txt | 5 + 13 files changed, 255 insertions(+), 206 deletions(-) create mode 100644 Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake create mode 100644 Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake create mode 100644 Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake create mode 100644 Installation/cmake/modules/CGAL_SetupGMP.cmake create mode 100644 Installation/cmake/modules/CGAL_SetupLEDA.cmake diff --git a/CGAL_Core/src/CGAL_Core/CMakeLists.txt b/CGAL_Core/src/CGAL_Core/CMakeLists.txt index b9dba585d4d..414b2eac5d8 100644 --- a/CGAL_Core/src/CGAL_Core/CMakeLists.txt +++ b/CGAL_Core/src/CGAL_Core/CMakeLists.txt @@ -1,31 +1,14 @@ message("Configuring libCGAL_Core") -use_essential_libs() - -if (NOT MSVC) - # See the release notes of CGAL-4.10: CGAL_Core now requires - # Boost.Thread, with all compilers but MSVC. - find_package( Boost 1.48 REQUIRED thread system ) - cache_set(CGAL_Core_3RD_PARTY_LIBRARIES ${CGAL_Core_3RD_PARTY_LIBRARIES} ${Boost_LIBRARIES} ) -endif(NOT MSVC) - -include_directories (SYSTEM ${CGAL_3RD_PARTY_INCLUDE_DIRS}) - -add_definitions(${CGAL_3RD_PARTY_DEFINITIONS}) - -link_directories ( ${CGAL_LIBRARIES_DIR} ${CGAL_3RD_PARTY_LIBRARIES_DIRS} ) - collect_cgal_library(CGAL_Core "") -if(NOT CGAL_HEADER_ONLY) - # CGAL_Core does not depend on CGAL in either DEBUG or RELEASE, but we - # still link it. - target_link_libraries( CGAL_Core CGAL ${CGAL_3RD_PARTY_LIBRARIES} ) - - add_dependencies( CGAL_Core CGAL ) +if(CGAL_HEADER_ONLY) + set(keyword INTERFACE) else() - target_link_libraries( CGAL_Core INTERFACE ${CGAL_3RD_PARTY_LIBRARIES} ) + set(keyword PUBLIC) endif() +target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) + message("libCGAL_Core is configured") diff --git a/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt b/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt index 87ec974ca81..8cec2b28a84 100644 --- a/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt +++ b/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt @@ -1,52 +1,17 @@ message("Configuring libCGAL_ImageIO") -find_package( ZLIB ) - -if(ZLIB_FOUND) - get_dependency_version(ZLIB) - cache_set(CGAL_ImageIO_3RD_PARTY_INCLUDE_DIRS ${CGAL_ImageIO_3RD_PARTY_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR} ) - cache_set(CGAL_ImageIO_3RD_PARTY_LIBRARIES ${CGAL_ImageIO_3RD_PARTY_LIBRARIES} ${ZLIB_LIBRARY} ) - cache_set(CGAL_ImageIO_3RD_PARTY_DEFINITIONS "-DCGAL_USE_ZLIB") - cache_set(CGAL_ImageIO_USE_ZLIB "ON") -endif(ZLIB_FOUND) - -set( CGAL_ImageIO_BASENAME CGAL_ImageIO) - -if(COMMAND add_config_flag) - set( CGAL_HAS_IMAGEIO TRUE ) - add_config_flag( CGAL_HAS_IMAGEIO ) -endif() - -use_essential_libs() - -if (CGAL_HEADER_ONLY) - cache_set(CGAL_ImageIO_3RD_PARTY_INCLUDE_DIRS ${CGAL_ImageIO_3RD_PARTY_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}) -else() - include_directories( SYSTEM ${CGAL_3RD_PARTY_INCLUDE_DIRS} ${CGAL_ImageIO_3RD_PARTY_INCLUDE_DIRS} ) - link_directories ( ${CGAL_LIBRARIES_DIR} ${CGAL_3RD_PARTY_LIBRARIES_DIRS} ) - add_definitions ( ${CGAL_3RD_PARTY_DEFINITIONS} ${CGAL_ImageIO_3RD_PARTY_DEFINITIONS} ) -endif() - collect_cgal_library( CGAL_ImageIO "") -if (NOT CGAL_HEADER_ONLY) +include(CGAL_SetupCGAL_ImageIODependencies) - add_dependencies( CGAL_ImageIO CGAL ) +if(CGAL_HEADER_ONLY) + set(keyword "INTERFACE") +endif() - # CGAL_ImageIO only depends on CGAL in DEBUG, but we still link it - # in both build types. - target_link_libraries( CGAL_ImageIO CGAL ${CGAL_3RD_PARTY_LIBRARIES} ${CGAL_ImageIO_3RD_PARTY_LIBRARIES} ) - -else() - - target_link_libraries( CGAL_ImageIO INTERFACE ${CGAL_3RD_PARTY_LIBRARIES} ${CGAL_ImageIO_3RD_PARTY_LIBRARIES} ) - target_include_directories( CGAL_ImageIO INTERFACE ${CGAL_3RD_PARTY_LIBRARIES_DIRS}) +CGAL_setup_CGAL_ImageIO_dependencies(CGAL_ImageIO ${keyword}) +if(ZLIB_FOUND) + get_dependency_version(ZLIB) endif() message("libCGAL_ImageIO is configured") - -if(NOT ZLIB_FOUND) - message( STATUS "NOTICE: libCGAL_ImageIO needs ZLib to read compressed files. That feature will not be activated.") -endif() - diff --git a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt index 5aece17002b..fa1f99e3e51 100644 --- a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt +++ b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt @@ -1,106 +1,27 @@ message("Configuring libCGAL_Qt5") -if(POLICY CMP0043) - cmake_policy(SET CMP0043 OLD) +include(CGAL_SetupCGAL_Qt5Dependencies) + +if(CGAL_Qt5_MISSING_DEPS) + message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") + return() endif() -if($ENV{CGAL_FAKE_PUBLIC_RELEASE}) - add_definitions( -DCGAL_FAKE_PUBLIC_RELEASE ) -endif() +message( STATUS "USING Qt5_VERSION = '${Qt5Core_VERSION_STRING}'" ) -if(CGAL_HEADER_ONLY) - cache_set(CGAL_Qt5_3RD_PARTY_LIBRARIES Qt5::OpenGL Qt5::Svg ) -else(CGAL_HEADER_ONLY) - find_package(Qt5 QUIET COMPONENTS OpenGL Svg) - find_package(OpenGL QUIET) +include(Use_CGAL_Qt5_headers) - set(CGAL_Qt5_MISSING_DEPS "") - if(NOT Qt5OpenGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "Qt5OpenGL") - endif() - if(NOT Qt5Svg_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5Svg") - endif() - if(NOT Qt5_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5") - endif() - if(NOT OPENGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") - endif() - - if(CGAL_Qt5_MISSING_DEPS) - message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") - return() - endif() - - include_directories (BEFORE ../../include) - - message( STATUS "USING Qt5_VERSION = '${Qt5Core_VERSION_STRING}'" ) - if(COMMAND add_config_flag) - set( CGAL_HAS_QT5 TRUE ) - add_config_flag( CGAL_HAS_QT5 ) - endif() - - get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) - message( STATUS "OpenGL include: ${OPENGL_INCLUDE_DIR}" ) - message( STATUS "OpenGL libraries: ${OPENGL_LIBRARIES}" ) - message( STATUS "OpenGL definitions: ${OPENGL_DEFINITIONS}" ) - message( STATUS "Qt5Core include: ${Qt5Core_INCLUDE_DIRS}" ) - message( STATUS "Qt5 libraries: ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5OpenGL_LIBRARIES}" ) - message( STATUS "Qt5Core definitions: ${Qt5Core_DEFINITIONS}" ) - message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) - message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) - - cache_set(CGAL_Qt5_3RD_PARTY_INCLUDE_DIRS ${QT_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ) - cache_set(CGAL_Qt5_3RD_PARTY_LIBRARIES ${QT_LIBRARIES} ${OPENGL_LIBRARIES} ) - cache_set(CGAL_Qt5_3RD_PARTY_DEFINITIONS ${QT_DEFINITIONS} ${OPENGL_DEFINITIONS} ) - - set(mocfiles "") - set(RESOURCE_FILES "") - - foreach (package ${CGAL_CONFIGURED_PACKAGES} ) - file(GLOB PACKAGE_QTMOC_FILES "${package}/src/CGAL_Qt5/*.qtmoc.cmake") - list(SORT PACKAGE_QTMOC_FILES) - foreach(package_qtmoc_file ${PACKAGE_QTMOC_FILES}) - # includes 'moccing' for sources/headers in package + collects lists of moc-files for dependency (to properly build the lib) - include(${package_qtmoc_file}) - # message(STATUS QTMOC------------FILE: ${package_qtmoc_file}) - - endforeach() - endforeach() - - foreach(mocfile ${mocfiles}) - list(APPEND additional_files ${mocfile}) - endforeach() - foreach(resfile ${RESOURCE_FILES}) - list(APPEND additional_files ${resfile}) - endforeach() - -# message(STATUS "Additional input files: ${additional_files}") - - use_essential_libs() - - include_directories( SYSTEM ${CGAL_3RD_PARTY_INCLUDE_DIRS} ${CGAL_Qt5_3RD_PARTY_INCLUDE_DIRS} ) - - link_directories ( ${CGAL_LIBRARIES_DIR} ${CGAL_3RD_PARTY_LIBRARIES_DIRS} ) - - add_definitions ( ${CGAL_3RD_PARTY_DEFINITIONS} ${CGAL_Qt5_3RD_PARTY_DEFINITIONS} ) -endif(CGAL_HEADER_ONLY) +list(APPEND additional_files ${CGAL_Qt5_MOC_FILES} ${CGAL_Qt5_RESOURCE_FILES}) collect_cgal_library( CGAL_Qt5 "${additional_files}") -if (NOT CGAL_HEADER_ONLY) +if(CGAL_HEADER_ONLY) + set(keyword "INTERFACE") +endif() - qt5_use_modules(CGAL_Qt5 OpenGL Svg) - - add_dependencies( CGAL_Qt5 CGAL ) - - # CGAL_Qt5 only depends on CGAL in DEBUG, but we still link it in - # both build types. - target_link_libraries( CGAL_Qt5 CGAL ${CGAL_3RD_PARTY_LIBRARIES} ${CGAL_Qt5_3RD_PARTY_LIBRARIES} ) - -else() +CGAL_setup_CGAL_Qt5_dependencies( CGAL_Qt5 ${keyword}) +if (CGAL_HEADER_ONLY) install(DIRECTORY "../../include/CGAL/Qt/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/include/CGAL/Qt") install(DIRECTORY "../../demo/resources/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/resources") install(DIRECTORY "../../demo/icons/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/icons") diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 94e81674b45..0f55ee1a1b3 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -678,7 +678,7 @@ option( CGAL_ENABLE_PRECONFIG "Select to allow to preconfiguration of external l # this; e.g. in MPFI/RS in Algebraic_kernel_d. For these cases CGAL # and the example/test must be configured with MPFI (just one is not sufficient) -include(CGAL_SetupDependencies) +#include(CGAL_SetupDependencies) message("== Detect external libraries (DONE) ==\n") @@ -708,6 +708,9 @@ list(SORT all_config_tests) file(WRITE ${CMAKE_BINARY_DIR}/include/CGAL/compiler_config.h "//\n// compiler_config.h is included by CGAL headers to load the needed compiler settings.\n//\n// DO NOT EDIT compiler_config.h. It is generated by CMake.\n//\n\n") foreach(config_test_cpp ${all_config_tests}) + message(Skipped) + break() #@TODO + # Test's name is .cpp's base name get_filename_component(config_test_name ${config_test_cpp} NAME_WE) diff --git a/Installation/INSTALL.md b/Installation/INSTALL.md index 11fa35c4300..02673f5ebf8 100644 --- a/Installation/INSTALL.md +++ b/Installation/INSTALL.md @@ -26,7 +26,7 @@ To install CGAL, you need 'cmake' and several third-party libraries. Some are essential for entire CGAL, some are mandatory for particular CGAL packages, some are only needed for demos. - * CMake (>= 2.8.11), the build system used by CGAL + * CMake (>= 2.8.12), the build system used by CGAL Required for building CGAL * Boost (>= 1.48) diff --git a/Installation/cmake/modules/CGAL_SetupBoost.cmake b/Installation/cmake/modules/CGAL_SetupBoost.cmake index c392d09e78e..4016b255448 100644 --- a/Installation/cmake/modules/CGAL_SetupBoost.cmake +++ b/Installation/cmake/modules/CGAL_SetupBoost.cmake @@ -1,6 +1,9 @@ -if ( NOT CGAL_Boost_Setup ) +if ( CGAL_Boost_Setup ) + return() +endif() +set ( CGAL_Boost_Setup TRUE ) - include(CGAL_TweakFindBoost) +include(CGAL_TweakFindBoost) set ( CGAL_requires_Boost_libs TRUE ) if ( DEFINED MSVC_VERSION AND "${MSVC_VERSION}" GREATER 1800) @@ -17,40 +20,36 @@ if ( NOT CGAL_Boost_Setup ) endif() endif() - if (CGAL_requires_Boost_libs) - find_package( Boost 1.48 REQUIRED thread system ) - else() - find_package( Boost 1.48 REQUIRED ) - endif() - - if(Boost_FOUND) - if(DEFINED Boost_DIR AND NOT Boost_DIR) - # Unset that cache variable that is set in the cache by FindBoost - # (while it was searching for boost-cmake). - unset(Boost_DIR CACHE) - set(Boost_NO_BOOST_CMAKE TRUE CACHE INTERNAL "Avoid future search of boost-cmake") - endif() - endif() - - message( STATUS "Boost include: ${Boost_INCLUDE_DIRS}" ) - message( STATUS "Boost libraries: ${Boost_LIBRARIES}" ) - message( STATUS "Boost definitions: ${Boost_DEFINITIONS}" ) - - set ( CGAL_USE_BOOST 1 ) - - include(CGAL_Macros) - - add_to_cached_list(CGAL_3RD_PARTY_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ) - add_to_cached_list(CGAL_3RD_PARTY_LIBRARIES_DIRS ${Boost_LIBRARY_DIRS} ) - add_to_cached_list(CGAL_3RD_PARTY_DEFINITIONS ${Boost_DEFINITIONS} ) - - if ( NOT MSVC ) - add_to_cached_list(CGAL_3RD_PARTY_LIBRARIES ${Boost_LIBRARIES} ) - endif() - - message( STATUS "USING BOOST_VERSION = '${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}'" ) - - set ( CGAL_Boost_Setup TRUE ) - +if (CGAL_requires_Boost_libs) + find_package( Boost 1.48 REQUIRED thread system ) +else() + find_package( Boost 1.48 REQUIRED ) endif() +if(Boost_FOUND) + if(DEFINED Boost_DIR AND NOT Boost_DIR) + # Unset that cache variable that is set in the cache by FindBoost + # (while it was searching for boost-cmake). + unset(Boost_DIR CACHE) + set(Boost_NO_BOOST_CMAKE TRUE CACHE INTERNAL "Avoid future search of boost-cmake") + endif() +endif() + +message( STATUS "Boost include dirs: ${Boost_INCLUDE_DIRS}" ) +message( STATUS "Boost libraries: ${Boost_LIBRARIES}" ) + +set ( CGAL_USE_BOOST 1 ) + +function(use_CGAL_Boost_support target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + if(NOT Boost_FOUND) + message(FATAL_ERROR "use_CGAL_Boost_support is use whereas Boost_FOUND is false.") + return() + endif() + target_include_directories(${target} SYSTEM ${keyword} ${Boost_INCLUDE_DIRS}) + target_link_libraries(${target} ${keyword} ${Boost_LIBRARIES}) +endfunction() diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake new file mode 100644 index 00000000000..fef36bb1c19 --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -0,0 +1,32 @@ +if(CGAL_SetupCGALDependencies_included) + return() +endif() +set(CGAL_SetupCGALDependencies_included TRUE) + +if(NOT CGAL_DISABLE_GMP) + include(CGAL_SetupGMP) +endif() + +if(WITH_LEDA) + include(CGAL_SetupLEDA) +endif() + +include(CGAL_SetupBoost) + +function(CGAL_setup_CGAL_dependencies target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + if(NOT CGAL_DISABLE_GMP) + use_CGAL_GMP_support(${target} ${keyword}) + set(CGAL_USE_GMP TRUE CACHE INTERNAL "CGAL library is configured to use GMP") + endif() + + if(WITH_LEDA) + use_CGAL_LEDA_support(${target} ${keyword}) + endif() + + use_CGAL_Boost_support(${target} ${keyword}) +endfunction() diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake new file mode 100644 index 00000000000..3a7050cc38e --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake @@ -0,0 +1,46 @@ +if(CGAL_SetupCGAL_ImageIODependencies_included) + return() +endif() +set(CGAL_SetupCGAL_ImageIODependencies_included TRUE) + +find_package( ZLIB ) + +define_property(TARGET PROPERTY CGAL_TARGET_USES_ZLIB + BRIEF_DOCS "Tells if the target uses ZLIB as a dependency" + FULL_DOCS "Tells if the target uses ZLIB as a dependency") + +if(ZLIB_FOUND) + cache_set(CGAL_ImageIO_USE_ZLIB "ON") +endif(ZLIB_FOUND) + +set( CGAL_ImageIO_BASENAME CGAL_ImageIO) + +if(COMMAND add_config_flag) + set( CGAL_HAS_IMAGEIO TRUE ) + add_config_flag( CGAL_HAS_IMAGEIO ) +endif() + +if(CGAL_HEADER_ONLY) + set(keyword "INTERFACE") +endif() + +function(CGAL_setup_CGAL_ImageIO_dependencies target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + + target_include_directories( CGAL_ImageIO SYSTEM ${keyword} ${ZLIB_INCLUDE_DIRS}) + target_link_libraries( CGAL_ImageIO ${keyword} CGAL::CGAL) + target_link_libraries( CGAL_ImageIO ${keyword} ${ZLIB_LIBRARIES}) + + if(ZLIB_FOUND) + target_compile_definitions( CGAL_ImageIO ${keyword} "-DCGAL_USE_ZLIB") + if(NOT ARGV1 STREQUAL INTERFACE) + set_target_properties(CGAL_ImageIO PROPERTIES CGAL_TARGET_USES_ZLIB TRUE) + endif() + else() + message( STATUS "NOTICE: libCGAL_ImageIO needs ZLib to read compressed files. That feature will not be activated.") + endif() +endfunction() diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake new file mode 100644 index 00000000000..84b0447da0a --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -0,0 +1,51 @@ +if(CGAL_SetupCGAL_Qt5Dependencies_included) + return() +endif() +set(CGAL_SetupCGAL_Qt5Dependencies_included TRUE) + +find_package(Qt5 QUIET COMPONENTS OpenGL Svg) +find_package(OpenGL QUIET) + +set(CGAL_Qt5_MISSING_DEPS "") +if(NOT Qt5OpenGL_FOUND) + set(CGAL_Qt5_MISSING_DEPS "Qt5OpenGL") +endif() +if(NOT Qt5Svg_FOUND) + set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5Svg") +endif() +if(NOT Qt5_FOUND) + set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5") +endif() +if(NOT OPENGL_FOUND) + set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") +endif() + +if(COMMAND add_config_flag) + set( CGAL_HAS_QT5 TRUE ) + add_config_flag( CGAL_HAS_QT5 ) +endif() + +get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) +message( STATUS "OpenGL include: ${OPENGL_INCLUDE_DIR}" ) +message( STATUS "OpenGL libraries: ${OPENGL_LIBRARIES}" ) +message( STATUS "OpenGL definitions: ${OPENGL_DEFINITIONS}" ) +message( STATUS "Qt5Core include: ${Qt5Core_INCLUDE_DIRS}" ) +message( STATUS "Qt5 libraries: ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5OpenGL_LIBRARIES}" ) +message( STATUS "Qt5Core definitions: ${Qt5Core_DEFINITIONS}" ) +message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) +message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) + +function(CGAL_setup_CGAL_Qt5_dependencies target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + + if($ENV{CGAL_FAKE_PUBLIC_RELEASE}) + target_compile_definitions( ${target} ${keyword} CGAL_FAKE_PUBLIC_RELEASE=1 ) + endif() + target_include_directories( CGAL_Qt5 SYSTEM ${keyword} ${OPENGL_INCLUDE_DIR}) + target_link_libraries( CGAL_Qt5 ${keyword} CGAL::CGAL) + target_link_libraries( CGAL_Qt5 ${keyword} Qt5::OpenGL Qt5::Svg ${OPENGL_LIBRARIES}) +endfunction() diff --git a/Installation/cmake/modules/CGAL_SetupGMP.cmake b/Installation/cmake/modules/CGAL_SetupGMP.cmake new file mode 100644 index 00000000000..5fc936e9a43 --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupGMP.cmake @@ -0,0 +1,22 @@ +if(CGAL_SetupGMP_included OR CGAL_DISABLE_GMP) + return() +endif() +set(CGAL_SetupGMP_included TRUE) + +find_package(GMP) +find_package(MPFR) + +function(use_CGAL_GMP_support target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + if(NOT GMP_FOUND OR NOT MPFR_FOUND) + message(FATAL_ERROR "CGAL requires GMP and MPFR.") + return() + endif() + + target_include_directories(${target} SYSTEM ${keyword} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR}) + target_link_libraries(${target} ${keyword} ${GMP_LIBRARIES} ${MPFR_LIBRARIES}) +endfunction() diff --git a/Installation/cmake/modules/CGAL_SetupLEDA.cmake b/Installation/cmake/modules/CGAL_SetupLEDA.cmake new file mode 100644 index 00000000000..92bb22e1440 --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupLEDA.cmake @@ -0,0 +1,21 @@ +if(CGAL_SetupLEDA_included) + return() +endif() +set(CGAL_SetupLEDA_included TRUE) + +find_package(LEDA) + +function(use_CGAL_LEDA_support target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + if(NOT LEDA_FOUND) + message(FATAL_ERROR "use_CGAL_LEDA_support is use whereas LEDA_FOUND is false.") + return() + endif() + target_compiles_options(${target} ${keyword} ${LEDA_CXX_FLAGS} ${LEDA_DEFINITIONS}) + target_include_directories(${target} SYSTEM ${keyword} ${LEDA_INCLUDE_DIR}) + target_link_libraries(${target} ${keyword} ${LEDA_LIBRARIES} ${LEDA_LINKER_FLAGS}) +endfunction() diff --git a/Installation/src/CGAL/CMakeLists.txt b/Installation/src/CGAL/CMakeLists.txt index c3c36110247..e433c92eca1 100644 --- a/Installation/src/CGAL/CMakeLists.txt +++ b/Installation/src/CGAL/CMakeLists.txt @@ -1,19 +1,20 @@ message("Configuring libCGAL") -use_essential_libs() - -include_directories (SYSTEM ${CGAL_3RD_PARTY_INCLUDE_DIRS}) - -add_definitions(${CGAL_3RD_PARTY_DEFINITIONS}) - -link_directories(${CGAL_3RD_PARTY_LIBRARIES_DIRS}) - collect_cgal_library(CGAL "") +include(CGAL_SetupCGALDependencies) + if(CGAL_HEADER_ONLY) - target_link_libraries(CGAL INTERFACE ${CGAL_3RD_PARTY_LIBRARIES}) -else() - target_link_libraries(CGAL ${CGAL_3RD_PARTY_LIBRARIES}) + set(keyword "INTERFACE") endif() +CGAL_setup_CGAL_dependencies(CGAL ${keyword}) + +if(NOT CGAL_DISABLE_GMP) + get_dependency_version(GMP) + get_dependency_version(MPFR) +endif() + +message( STATUS "USING BOOST_VERSION = '${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}'" ) + message("libCGAL is configured") diff --git a/Installation/src/CMakeLists.txt b/Installation/src/CMakeLists.txt index da2b92f5bad..7c8250adf36 100644 --- a/Installation/src/CMakeLists.txt +++ b/Installation/src/CMakeLists.txt @@ -64,6 +64,11 @@ function (collect_cgal_library LIBRARY_NAME ADDITIONAL_FILES) add_library(${LIBRARY_NAME} INTERFACE) endif() + # Add an alias with the prefix `CGAL::`, so that consumer + # CMakeLists.txt can be the target like if it was an imported + # target. + add_library(CGAL::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME}) + if(CGAL_AUTO_LINK_ENABLED) if (NOT CGAL_HEADER_ONLY) set_target_properties( ${LIBRARY_NAME} PROPERTIES From 70e5a280f096a1fa62ebffc0c62f865f30e0903f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 8 Sep 2016 22:58:01 +0200 Subject: [PATCH 003/298] INSTALL use COMPONENT --- GraphicsView/src/CGAL_Qt5/CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt index fa1f99e3e51..a1e3e89d05f 100644 --- a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt +++ b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt @@ -22,10 +22,9 @@ endif() CGAL_setup_CGAL_Qt5_dependencies( CGAL_Qt5 ${keyword}) if (CGAL_HEADER_ONLY) - install(DIRECTORY "../../include/CGAL/Qt/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/include/CGAL/Qt") - install(DIRECTORY "../../demo/resources/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/resources") - install(DIRECTORY "../../demo/icons/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/icons") - + install(DIRECTORY "../../include/CGAL/Qt/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/include/CGAL/Qt" COMPONENT CGAL_Qt5) + install(DIRECTORY "../../demo/resources/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/resources" COMPONENT CGAL_Qt5) + install(DIRECTORY "../../demo/icons/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/icons" COMPONENT CGAL_Qt5) endif() message("libCGAL_Qt5 is configured") From 429bfa4315bd844632e13b424f1000d1fe4e423c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 8 Sep 2016 23:23:17 +0200 Subject: [PATCH 004/298] move the add_config_flag calls --- CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt | 5 +++++ GraphicsView/src/CGAL_Qt5/CMakeLists.txt | 5 +++++ Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake | 3 ++- .../cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake | 5 ----- .../cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake | 5 ----- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt b/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt index 8cec2b28a84..f9c2a7eeac9 100644 --- a/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt +++ b/CGAL_ImageIO/src/CGAL_ImageIO/CMakeLists.txt @@ -10,6 +10,11 @@ endif() CGAL_setup_CGAL_ImageIO_dependencies(CGAL_ImageIO ${keyword}) +if(COMMAND add_config_flag) + set( CGAL_HAS_IMAGEIO TRUE ) + add_config_flag( CGAL_HAS_IMAGEIO ) +endif() + if(ZLIB_FOUND) get_dependency_version(ZLIB) endif() diff --git a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt index a1e3e89d05f..5050241ecf1 100644 --- a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt +++ b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt @@ -21,6 +21,11 @@ endif() CGAL_setup_CGAL_Qt5_dependencies( CGAL_Qt5 ${keyword}) +if(COMMAND add_config_flag) + set( CGAL_HAS_QT5 TRUE ) + add_config_flag( CGAL_HAS_QT5 ) +endif() + if (CGAL_HEADER_ONLY) install(DIRECTORY "../../include/CGAL/Qt/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/include/CGAL/Qt" COMPONENT CGAL_Qt5) install(DIRECTORY "../../demo/resources/" DESTINATION "${CGAL_INSTALL_INC_DIR}/CGAL/demo/resources" COMPONENT CGAL_Qt5) diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index fef36bb1c19..5989d45817d 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -21,7 +21,8 @@ function(CGAL_setup_CGAL_dependencies target) endif() if(NOT CGAL_DISABLE_GMP) use_CGAL_GMP_support(${target} ${keyword}) - set(CGAL_USE_GMP TRUE CACHE INTERNAL "CGAL library is configured to use GMP") + set(CGAL_USE_GMP TRUE CACHE INTERNAL "CGAL library is configured to use GMP") + set(CGAL_USE_MPFR TRUE CACHE INTERNAL "CGAL library is configured to use MPFR") endif() if(WITH_LEDA) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake index 3a7050cc38e..c84da5b951b 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake @@ -15,11 +15,6 @@ endif(ZLIB_FOUND) set( CGAL_ImageIO_BASENAME CGAL_ImageIO) -if(COMMAND add_config_flag) - set( CGAL_HAS_IMAGEIO TRUE ) - add_config_flag( CGAL_HAS_IMAGEIO ) -endif() - if(CGAL_HEADER_ONLY) set(keyword "INTERFACE") endif() diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake index 84b0447da0a..fe63c4b33f5 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -20,11 +20,6 @@ if(NOT OPENGL_FOUND) set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") endif() -if(COMMAND add_config_flag) - set( CGAL_HAS_QT5 TRUE ) - add_config_flag( CGAL_HAS_QT5 ) -endif() - get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) message( STATUS "OpenGL include: ${OPENGL_INCLUDE_DIR}" ) message( STATUS "OpenGL libraries: ${OPENGL_LIBRARIES}" ) From 8f2fa4f637884ec3296e5df9a2daf20e982433c1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 10:03:48 +0200 Subject: [PATCH 005/298] Do not hardcode CGAL_Qt5 Use ${target} instead. --- .../cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake index fe63c4b33f5..00d9ec7d8bc 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -40,7 +40,7 @@ function(CGAL_setup_CGAL_Qt5_dependencies target) if($ENV{CGAL_FAKE_PUBLIC_RELEASE}) target_compile_definitions( ${target} ${keyword} CGAL_FAKE_PUBLIC_RELEASE=1 ) endif() - target_include_directories( CGAL_Qt5 SYSTEM ${keyword} ${OPENGL_INCLUDE_DIR}) - target_link_libraries( CGAL_Qt5 ${keyword} CGAL::CGAL) - target_link_libraries( CGAL_Qt5 ${keyword} Qt5::OpenGL Qt5::Svg ${OPENGL_LIBRARIES}) + target_include_directories( ${target} SYSTEM ${keyword} ${OPENGL_INCLUDE_DIR}) + target_link_libraries( ${target} ${keyword} CGAL::CGAL) + target_link_libraries( ${target} ${keyword} Qt5::OpenGL Qt5::Svg ${OPENGL_LIBRARIES}) endfunction() From f9835007e5f5afb7fdf287207ac6716db1d6e168 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 11:18:08 +0200 Subject: [PATCH 006/298] Use CGAL::CGAL instead of CGAL --- Installation/cmake/modules/UseCGAL.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Installation/cmake/modules/UseCGAL.cmake b/Installation/cmake/modules/UseCGAL.cmake index 259fb97b451..b678fff4b0a 100644 --- a/Installation/cmake/modules/UseCGAL.cmake +++ b/Installation/cmake/modules/UseCGAL.cmake @@ -45,7 +45,9 @@ if(NOT USE_CGAL_FILE_INCLUDED) include_directories( "${CMAKE_CURRENT_BINARY_DIR}" ) - if(TARGET CGAL) + if(TARGET CGAL::CGAL) + add_to_list( CGAL_LIBRARIES CGAL::CGAL ) + elseif(TARGET CGAL) add_to_list( CGAL_LIBRARIES CGAL ) else() add_to_list( CGAL_LIBRARIES ${CGAL_LIBRARY} ) From c2fd46092738a023b1a04e43c608ca26727c7d02 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 11:19:35 +0200 Subject: [PATCH 007/298] Use CGAL::CGAL_ instead of CGAL_ --- Installation/cmake/modules/CGAL_Macros.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Installation/cmake/modules/CGAL_Macros.cmake b/Installation/cmake/modules/CGAL_Macros.cmake index a0ba6a6cf74..b14ab5cf51f 100644 --- a/Installation/cmake/modules/CGAL_Macros.cmake +++ b/Installation/cmake/modules/CGAL_Macros.cmake @@ -268,7 +268,9 @@ if( NOT CGAL_MACROS_FILE_INCLUDED ) message (STATUS "Requested component: ${component}") if(WITH_CGAL_${component}) - if(TARGET CGAL_${component}) + if(TARGET CGAL::CGAL_${component}) + add_to_list( CGAL_LIBRARIES CGAL::CGAL_${component} ) + elseif(TARGET CGAL_${component}) add_to_list( CGAL_LIBRARIES CGAL_${component} ) else() add_to_list( CGAL_LIBRARIES ${CGAL_${component}_LIBRARY} ) From a2a3ad29b448047736f8c75f96f9f078865c44f2 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 11:32:12 +0200 Subject: [PATCH 008/298] Use CGAL_SetupCGAL_Qt5Dependencies + remove useless test --- .../cmake/modules/CGALConfig_binary.cmake.in | 28 +++++-------------- .../cmake/modules/CGALConfig_install.cmake.in | 28 +++++-------------- 2 files changed, 14 insertions(+), 42 deletions(-) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 7c817e6a7f0..82a09e52b18 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -130,30 +130,16 @@ macro(check_cgal_component COMPONENT) set( CHECK_CGAL_ERROR_TAIL "" ) else( "${CGAL_LIB}" STREQUAL "CGAL" ) if ( WITH_${CGAL_LIB} ) - if(CGAL_HEADER_ONLY OR TARGET CGAL::${CGAL_LIB}) + if(TARGET CGAL::${CGAL_LIB}) if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") - find_package(Qt5 QUIET COMPONENTS OpenGL Svg) - find_package(OpenGL QUIET) - - set(CGAL_Qt5_MISSING_DEPS "") - if(NOT Qt5OpenGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "Qt5OpenGL") - endif() - if(NOT Qt5Svg_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5Svg") - endif() - if(NOT Qt5_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5") - endif() - if(NOT OPENGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") - endif() + + include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") if(CGAL_Qt5_MISSING_DEPS) - set( ${CGAL_LIB}_FOUND FALSE ) + set( CGAL_Qt5_FOUND FALSE ) message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") else() - set( ${CGAL_LIB}_FOUND TRUE ) + set( CGAL_Qt5_FOUND TRUE ) if (CGAL_HEADER_ONLY) include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") endif() @@ -162,10 +148,10 @@ macro(check_cgal_component COMPONENT) # Librairies that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") - else(CGAL_HEADER_ONLY OR TARGET CGAL::${CGAL_LIB}) + else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) - endif(CGAL_HEADER_ONLY OR TARGET CGAL::${CGAL_LIB}) + endif(TARGET CGAL::${CGAL_LIB}) else( WITH_${CGAL_LIB} ) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " Please configure CGAL using WITH_${CGAL_LIB}=ON." ) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index ea644ba9ade..a58321637a7 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -91,30 +91,16 @@ macro(check_cgal_component COMPONENT) endif() if ( WITH_${CGAL_LIB} ) - if(CGAL_HEADER_ONLY OR TARGET CGAL::${CGAL_LIB}) + if(TARGET CGAL::${CGAL_LIB}) if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") - find_package(Qt5 QUIET COMPONENTS OpenGL Svg) - find_package(OpenGL QUIET) - - set(CGAL_Qt5_MISSING_DEPS "") - if(NOT Qt5OpenGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "Qt5OpenGL") - endif() - if(NOT Qt5Svg_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5Svg") - endif() - if(NOT Qt5_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} Qt5") - endif() - if(NOT OPENGL_FOUND) - set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") - endif() + + include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") if(CGAL_Qt5_MISSING_DEPS) - set( ${CGAL_LIB}_FOUND FALSE ) + set( CGAL_Qt5_FOUND FALSE ) message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") else() - set( ${CGAL_LIB}_FOUND TRUE ) + set( CGAL_Qt5_FOUND TRUE ) if (CGAL_HEADER_ONLY) include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") endif() @@ -123,10 +109,10 @@ macro(check_cgal_component COMPONENT) # Librairies that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") - else(CGAL_HEADER_ONLY OR TARGET CGAL::${CGAL_LIB}) + else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) - endif(CGAL_HEADER_ONLY OR TARGET CGAL::${CGAL_LIB}) + endif(TARGET CGAL::${CGAL_LIB}) else( WITH_${CGAL_LIB} ) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " Please configure CGAL using WITH_${CGAL_LIB}=ON." ) From 973b4e89b2faec53684e2e1ec1398af66f9f95e1 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 11:32:46 +0200 Subject: [PATCH 009/298] Fix bug in case ZLib is not found --- .../cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake index c84da5b951b..31cb1fbce3e 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake @@ -26,11 +26,12 @@ function(CGAL_setup_CGAL_ImageIO_dependencies target) set(keyword PUBLIC) endif() - target_include_directories( CGAL_ImageIO SYSTEM ${keyword} ${ZLIB_INCLUDE_DIRS}) target_link_libraries( CGAL_ImageIO ${keyword} CGAL::CGAL) - target_link_libraries( CGAL_ImageIO ${keyword} ${ZLIB_LIBRARIES}) if(ZLIB_FOUND) + target_include_directories( CGAL_ImageIO SYSTEM ${keyword} ${ZLIB_INCLUDE_DIRS}) + target_link_libraries( CGAL_ImageIO ${keyword} ${ZLIB_LIBRARIES}) + target_compile_definitions( CGAL_ImageIO ${keyword} "-DCGAL_USE_ZLIB") if(NOT ARGV1 STREQUAL INTERFACE) set_target_properties(CGAL_ImageIO PROPERTIES CGAL_TARGET_USES_ZLIB TRUE) From a3ddaa132fb17cbda662d814d6df3e8966e76ccc Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 11:44:26 +0200 Subject: [PATCH 010/298] Define and use a new CMake API for CGAL For the moment, the new API is used only in: - `examples/Mesh_2/CMakeLists.txt` - `demo/Triangulation_2/CMakeLists.txt` --- .../demo/Triangulation_2/CMakeLists.txt | 53 ++++--------------- .../cmake/modules/CGALConfig_binary.cmake.in | 2 + .../cmake/modules/CGALConfig_install.cmake.in | 2 + .../CGAL_CreateSingleSourceCGALProgram.cmake | 11 +--- Mesh_2/examples/Mesh_2/CMakeLists.txt | 7 --- 5 files changed, 14 insertions(+), 61 deletions(-) diff --git a/GraphicsView/demo/Triangulation_2/CMakeLists.txt b/GraphicsView/demo/Triangulation_2/CMakeLists.txt index fa30e1a5499..ec5ced3168a 100644 --- a/GraphicsView/demo/Triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Triangulation_2/CMakeLists.txt @@ -8,73 +8,38 @@ if(POLICY CMP0043) cmake_policy(SET CMP0043 OLD) endif() +set(CMAKE_AUTOMOC TRUE) +set(CMAKE_AUTOUIC TRUE) +set(CMAKE_AUTORCC TRUE) +set(CMAKE_INCLUDE_CURRENT_DIR TRUE) + find_package(CGAL COMPONENTS Qt5) - -include(${CGAL_USE_FILE}) - - find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL Svg) -include_directories (BEFORE ../../include) -include_directories (BEFORE ./include) -include_directories (BEFORE ../../../Number_types/include) - -include_directories (BEFORE ../../../Triangulation_2/include) - if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND ) add_definitions(-DQT_NO_KEYWORDS) - - #-------------------------------- # The "constrained Delaunay" demo: Constrained_Delaunay_triangulation_2 #-------------------------------- -# UI files (Qt Designer files) -qt5_wrap_ui( CDT_UI_FILES Constrained_Delaunay_triangulation_2.ui ) - -# qrc files (resources files, that contain icons, at least) -qt5_add_resources ( CDT_RESOURCE_FILES ./Constrained_Delaunay_triangulation_2.qrc ) - -# use the Qt MOC preprocessor on classes that derives from QObject -qt5_generate_moc( "Constrained_Delaunay_triangulation_2.cpp" "${CMAKE_CURRENT_BINARY_DIR}/Constrained_Delaunay_triangulation_2.moc" ) # The executable itself. -add_executable ( Constrained_Delaunay_triangulation_2 Constrained_Delaunay_triangulation_2.cpp Constrained_Delaunay_triangulation_2.moc ${CDT_UI_FILES} ${CDT_RESOURCE_FILES} ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) - -qt5_use_modules(Constrained_Delaunay_triangulation_2 Xml Script OpenGL Svg) +add_executable ( Constrained_Delaunay_triangulation_2 Constrained_Delaunay_triangulation_2.cpp) +target_link_libraries( Constrained_Delaunay_triangulation_2 CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Xml Qt5::Script Qt5::OpenGL Qt5::Svg) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2 ) -# Link with Qt libraries -target_link_libraries( Constrained_Delaunay_triangulation_2 ${QT_LIBRARIES} ) -# Link with CGAL -target_link_libraries( Constrained_Delaunay_triangulation_2 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) - #-------------------------------- # The "Delaunay" demo: Delaunay_triangulation_2 #-------------------------------- -# UI files (Qt Designer files) -qt5_wrap_ui( DT_UI_FILES Delaunay_triangulation_2.ui ) - -# qrc files (resources files, that contain icons, at least) -qt5_add_resources ( DT_RESOURCE_FILES ./Delaunay_triangulation_2.qrc ) - -# use the Qt MOC preprocessor on classes that derives from QObject -qt5_generate_moc( "Delaunay_triangulation_2.cpp" "${CMAKE_CURRENT_BINARY_DIR}/Delaunay_triangulation_2.moc" ) # The executable itself. -add_executable ( Delaunay_triangulation_2 Delaunay_triangulation_2.cpp Delaunay_triangulation_2.moc ${DT_UI_FILES} ${DT_RESOURCE_FILES} ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) - -qt5_use_modules(Delaunay_triangulation_2 Xml Script OpenGL Svg) +add_executable ( Delaunay_triangulation_2 Delaunay_triangulation_2.cpp ) +target_link_libraries( Delaunay_triangulation_2 CGAL::CGAL_Qt5 Qt5::Xml Qt5::Script Qt5::OpenGL Qt5::Svg) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2 ) -# Link with Qt libraries -target_link_libraries( Delaunay_triangulation_2 ${QT_LIBRARIES} ) -# Link with CGAL -target_link_libraries( Delaunay_triangulation_2 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) - #-------------------------------- # The "Regular" demo: Regular_triangulation_2 #-------------------------------- diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 82a09e52b18..c4c69cd434e 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -184,3 +184,5 @@ set(CGAL_SUPPORTING_3RD_PARTY_LIBRARIES "@CGAL_SUPPORTING_3RD_PARTY_LIBRARIES@") set(CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES "@CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES@") set(CGAL_DISABLE_GMP "@CGAL_DISABLE_GMP@") + +include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index a58321637a7..b7d54bafbb9 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -145,3 +145,5 @@ set(CGAL_SUPPORTING_3RD_PARTY_LIBRARIES "@CGAL_SUPPORTING_3RD_PARTY_LIBRARIES@") set(CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES "@CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES@") set(CGAL_DISABLE_GMP "@CGAL_DISABLE_GMP@") + +include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index d53edaeaea2..9708252987f 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -63,16 +63,7 @@ function(create_single_source_cgal_program firstfile ) add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${exe_name} ) - # Link the executable to CGAL and third-party libraries - if ( CGAL_AUTO_LINK_ENABLED ) - - target_link_libraries(${exe_name} ${CGAL_3RD_PARTY_LIBRARIES} ) - - else() - - target_link_libraries(${exe_name} ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) - - endif() + target_link_libraries(${exe_name} CGAL::CGAL ) else() message(AUTHOR_WARNING "The executable ${exe_name} will not be created because the source file ${firstfile} does not exist.") endif() diff --git a/Mesh_2/examples/Mesh_2/CMakeLists.txt b/Mesh_2/examples/Mesh_2/CMakeLists.txt index 54c140c7f82..fc27a1170bd 100644 --- a/Mesh_2/examples/Mesh_2/CMakeLists.txt +++ b/Mesh_2/examples/Mesh_2/CMakeLists.txt @@ -10,12 +10,6 @@ find_package(CGAL QUIET) if ( CGAL_FOUND ) - include( ${CGAL_USE_FILE} ) - - include( CGAL_CreateSingleSourceCGALProgram ) - - include_directories (BEFORE "../../include") - # create a target per cppfile file(GLOB cppfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) foreach(cppfile ${cppfiles}) @@ -27,4 +21,3 @@ else() message(STATUS "This program requires the CGAL library, and will not be compiled.") endif() - From b9909ddfb53a9f35549c5256d53a4c44146cefc4 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 13:07:35 +0200 Subject: [PATCH 011/298] This only has to be done in header-only mode --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 6 +++--- Installation/cmake/modules/CGALConfig_install.cmake.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index c4c69cd434e..6f9004655aa 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -131,7 +131,7 @@ macro(check_cgal_component COMPONENT) else( "${CGAL_LIB}" STREQUAL "CGAL" ) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) - if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + if (CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") @@ -144,10 +144,10 @@ macro(check_cgal_component COMPONENT) include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") endif() endif() - else("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + else(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") # Librairies that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) - endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + endif(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index b7d54bafbb9..fc6f5280c3c 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -92,7 +92,7 @@ macro(check_cgal_component COMPONENT) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) - if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + if (CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") @@ -105,10 +105,10 @@ macro(check_cgal_component COMPONENT) include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") endif() endif() - else("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + else(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") # Librairies that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) - endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") + endif(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) From dfb24b5340baeb2445be463d8c90080ff02e0848 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 13:11:54 +0200 Subject: [PATCH 012/298] Add comments --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 2 ++ Installation/cmake/modules/CGALConfig_install.cmake.in | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 6f9004655aa..4011e19f64d 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -131,6 +131,8 @@ macro(check_cgal_component COMPONENT) else( "${CGAL_LIB}" STREQUAL "CGAL" ) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) + # In header-only, if CGAL_Qt5 is requested, we need to add the + # dependencies here since there is no CGAL_Qt5 lib if (CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index fc6f5280c3c..cedbaef3ab3 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -92,6 +92,8 @@ macro(check_cgal_component COMPONENT) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) + # In header-only, if CGAL_Qt5 is requested, we need to add the + # dependencies here since there is no CGAL_Qt5 lib if (CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") From e9db872747fa6ef2cd0ceef89ad72d5456d03a6c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 13:20:44 +0200 Subject: [PATCH 013/298] Simplify the CMakeLists.txt API even further --- .../demo/Triangulation_2/CMakeLists.txt | 48 +++++++------------ 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/GraphicsView/demo/Triangulation_2/CMakeLists.txt b/GraphicsView/demo/Triangulation_2/CMakeLists.txt index ec5ced3168a..8435339c511 100644 --- a/GraphicsView/demo/Triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Triangulation_2/CMakeLists.txt @@ -4,9 +4,6 @@ project (Triangulation_2_Demo) cmake_minimum_required(VERSION 2.8.11) -if(POLICY CMP0043) - cmake_policy(SET CMP0043 OLD) -endif() set(CMAKE_AUTOMOC TRUE) set(CMAKE_AUTOUIC TRUE) @@ -14,9 +11,12 @@ set(CMAKE_AUTORCC TRUE) set(CMAKE_INCLUDE_CURRENT_DIR TRUE) find_package(CGAL COMPONENTS Qt5) -find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL Svg) +find_package(Qt5 QUIET COMPONENTS Widgets) -if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND ) +if ( NOT CGAL_FOUND OR NOT CGAL_Qt5_FOUND OR NOT Qt5_FOUND ) + message(STATUS "NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") + return() +endif() add_definitions(-DQT_NO_KEYWORDS) @@ -25,10 +25,14 @@ add_definitions(-DQT_NO_KEYWORDS) #-------------------------------- # The executable itself. -add_executable ( Constrained_Delaunay_triangulation_2 Constrained_Delaunay_triangulation_2.cpp) -target_link_libraries( Constrained_Delaunay_triangulation_2 CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Xml Qt5::Script Qt5::OpenGL Qt5::Svg) +add_executable( Constrained_Delaunay_triangulation_2 + Constrained_Delaunay_triangulation_2.cpp ) +target_link_libraries( Constrained_Delaunay_triangulation_2 + PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) +target_include_directories( Constrained_Delaunay_triangulation_2 + PRIVATE ./include) -add_to_cached_list( CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2 ) +add_to_cached_list(CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2) #-------------------------------- # The "Delaunay" demo: Delaunay_triangulation_2 @@ -36,36 +40,18 @@ add_to_cached_list( CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2 # The executable itself. add_executable ( Delaunay_triangulation_2 Delaunay_triangulation_2.cpp ) -target_link_libraries( Delaunay_triangulation_2 CGAL::CGAL_Qt5 Qt5::Xml Qt5::Script Qt5::OpenGL Qt5::Svg) +target_link_libraries( Delaunay_triangulation_2 + PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2 ) #-------------------------------- # The "Regular" demo: Regular_triangulation_2 #-------------------------------- -# UI files (Qt Designer files) -qt5_wrap_ui( DT_UI_FILES Regular_triangulation_2.ui ) - -# qrc files (resources files, that contain icons, at least) -qt5_add_resources ( DT_RESOURCE_FILES ./Regular_triangulation_2.qrc ) - -# use the Qt MOC preprocessor on classes that derives from QObject -qt5_generate_moc( "Regular_triangulation_2.cpp" "${CMAKE_CURRENT_BINARY_DIR}/Regular_triangulation_2.moc" ) # The executable itself. -add_executable ( Regular_triangulation_2 Regular_triangulation_2.cpp Regular_triangulation_2.moc ${DT_UI_FILES} ${DT_RESOURCE_FILES} ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) - -qt5_use_modules(Regular_triangulation_2 Xml Script OpenGL Svg) +add_executable ( Regular_triangulation_2 Regular_triangulation_2.cpp ) +target_link_libraries(Regular_triangulation_2 + PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Regular_triangulation_2 ) - -# Link with Qt libraries -target_link_libraries( Regular_triangulation_2 ${QT_LIBRARIES} ) -# Link with CGAL -target_link_libraries( Regular_triangulation_2 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) - -else() - - message(STATUS "NOTICE: This demo requires CGAL and Qt5, and will not be compiled.") - -endif() From 5d5f6d4dae562ec5d7ba8266fcd89703d38a314c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 13:26:05 +0200 Subject: [PATCH 014/298] include CGAL_Macros.cmake in the CGALConfig.cmake --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 1 + Installation/cmake/modules/CGALConfig_install.cmake.in | 1 + 2 files changed, 2 insertions(+) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 4011e19f64d..f14da35a7bd 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -188,3 +188,4 @@ set(CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES "@CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES@") set(CGAL_DISABLE_GMP "@CGAL_DISABLE_GMP@") include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) +include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index cedbaef3ab3..390cd2524e5 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -149,3 +149,4 @@ set(CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES "@CGAL_ESSENTIAL_3RD_PARTY_LIBRARIES@") set(CGAL_DISABLE_GMP "@CGAL_DISABLE_GMP@") include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) +include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) From 6f0efd931f9b5ea0b4938fd81e5612639e02e9b1 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 13:33:11 +0200 Subject: [PATCH 015/298] Remove useless test --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 4 +--- Installation/cmake/modules/CGALConfig_install.cmake.in | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index f14da35a7bd..f0c870782b2 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -142,9 +142,7 @@ macro(check_cgal_component COMPONENT) message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") else() set( CGAL_Qt5_FOUND TRUE ) - if (CGAL_HEADER_ONLY) - include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") - endif() + include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") endif() else(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") # Librairies that have no dependencies diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index 390cd2524e5..dce20db8367 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -103,9 +103,7 @@ macro(check_cgal_component COMPONENT) message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") else() set( CGAL_Qt5_FOUND TRUE ) - if (CGAL_HEADER_ONLY) - include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") - endif() + include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") endif() else(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") # Librairies that have no dependencies From 23a1c3ee54c5c25494cfeaf09a4411d9d120e837 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 14:07:30 +0200 Subject: [PATCH 016/298] Revert "This only has to be done in header-only mode" This reverts commit ff3b3b01ab96485cd32564175833b68044806bee. --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 10 ++++++---- Installation/cmake/modules/CGALConfig_install.cmake.in | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index f0c870782b2..1f84bcef671 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -133,7 +133,7 @@ macro(check_cgal_component COMPONENT) if(TARGET CGAL::${CGAL_LIB}) # In header-only, if CGAL_Qt5 is requested, we need to add the # dependencies here since there is no CGAL_Qt5 lib - if (CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") + if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") @@ -142,12 +142,14 @@ macro(check_cgal_component COMPONENT) message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") else() set( CGAL_Qt5_FOUND TRUE ) - include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") + if (CGAL_HEADER_ONLY) + include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") + endif() endif() - else(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") + else("${CGAL_LIB}" STREQUAL "CGAL_Qt5") # Librairies that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) - endif(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") + endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index dce20db8367..910bbdb03e1 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -94,7 +94,7 @@ macro(check_cgal_component COMPONENT) if(TARGET CGAL::${CGAL_LIB}) # In header-only, if CGAL_Qt5 is requested, we need to add the # dependencies here since there is no CGAL_Qt5 lib - if (CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") + if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") @@ -103,12 +103,14 @@ macro(check_cgal_component COMPONENT) message(STATUS "libCGAL_Qt5 is missing the dependencies: ${CGAL_Qt5_MISSING_DEPS} cannot be configured.") else() set( CGAL_Qt5_FOUND TRUE ) - include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") + if (CGAL_HEADER_ONLY) + include("${CGAL_MODULES_DIR}/Use_CGAL_Qt5_headers.cmake") + endif() endif() - else(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") + else("${CGAL_LIB}" STREQUAL "CGAL_Qt5") # Librairies that have no dependencies set( ${CGAL_LIB}_FOUND TRUE ) - endif(CGAL_HEADER_ONLY AND "${CGAL_LIB}" STREQUAL "CGAL_Qt5") + endif("${CGAL_LIB}" STREQUAL "CGAL_Qt5") else(TARGET CGAL::${CGAL_LIB}) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " CGAL was configured with WITH_${CGAL_LIB}=ON, but one of the dependencies of ${CGAL_LIB} was not configured properly." ) From 98890c9924f74e5ee122dee95cf1c04c2ccfb5ad Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 17:32:54 +0200 Subject: [PATCH 017/298] Fix the INTERFACE_INCLUDE_DIRECTORIES of CGAL --- Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index 5989d45817d..7ce5c84a63e 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -30,4 +30,10 @@ function(CGAL_setup_CGAL_dependencies target) endif() use_CGAL_Boost_support(${target} ${keyword}) + foreach(dir ${CGAL_INCLUDE_DIRS}) + target_include_directories(${target} ${keyword} + $) + endforeach() + target_include_directories(${target} ${keyword} + $) endfunction() From 5725835fc3b4acf7de0a7de5b8775a67d150f63e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 17:38:42 +0200 Subject: [PATCH 018/298] Fix a bug Do not add non-existent directories to `CGAL_INCLUDE_DIRS`. CMake-3.5.2 complains about that in header-only. --- Installation/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 0f55ee1a1b3..eee53c63bc9 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -794,7 +794,9 @@ set(CGAL_LIBRARIES_DIR ${CMAKE_BINARY_DIR}/lib) set(CGAL_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/include) foreach (package ${CGAL_CONFIGURED_PACKAGES}) - set(CGAL_INCLUDE_DIRS ${CGAL_INCLUDE_DIRS} ${package}/include) + if(EXISTS ${package}/include) + set(CGAL_INCLUDE_DIRS ${CGAL_INCLUDE_DIRS} ${package}/include) + endif() endforeach() include_directories (${CGAL_INCLUDE_DIRS}) From fade4c0eb498101b8fed24521ab9f4714c033017 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 18:16:20 +0200 Subject: [PATCH 019/298] Fix CGAL_HEADER_ONLY --- GraphicsView/demo/Triangulation_2/CMakeLists.txt | 8 +++++--- Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/GraphicsView/demo/Triangulation_2/CMakeLists.txt b/GraphicsView/demo/Triangulation_2/CMakeLists.txt index 8435339c511..1bec60b57bf 100644 --- a/GraphicsView/demo/Triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Triangulation_2/CMakeLists.txt @@ -26,7 +26,7 @@ add_definitions(-DQT_NO_KEYWORDS) # The executable itself. add_executable( Constrained_Delaunay_triangulation_2 - Constrained_Delaunay_triangulation_2.cpp ) + Constrained_Delaunay_triangulation_2.cpp ${CGAL_Qt5_extras}) target_link_libraries( Constrained_Delaunay_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) target_include_directories( Constrained_Delaunay_triangulation_2 @@ -39,7 +39,8 @@ add_to_cached_list(CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2) #-------------------------------- # The executable itself. -add_executable ( Delaunay_triangulation_2 Delaunay_triangulation_2.cpp ) +add_executable ( Delaunay_triangulation_2 + Delaunay_triangulation_2.cpp ${CGAL_Qt5_extras}) target_link_libraries( Delaunay_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) @@ -50,7 +51,8 @@ add_to_cached_list( CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2 ) #-------------------------------- # The executable itself. -add_executable ( Regular_triangulation_2 Regular_triangulation_2.cpp ) +add_executable ( Regular_triangulation_2 + Regular_triangulation_2.cpp ${CGAL_Qt5_extras}) target_link_libraries(Regular_triangulation_2 PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) diff --git a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake index 4132d77bfab..3a4ca8572f6 100644 --- a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake +++ b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake @@ -11,3 +11,5 @@ qt5_add_resources (CGAL_Qt5_RESOURCE_FILES ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/File.qrc ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/demo/icons/Triangulation_2.qrc) +set(CGAL_Qt5_extras) +list(APPEND CGAL_Qt5_extras ${CGAL_Qt5_MOC_FILES} ${CGAL_Qt5_RESOURCE_FILES}) From e209c572692473c80267d62fb3ac89a2bda1da58 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 18:30:02 +0200 Subject: [PATCH 020/298] Add -DCGAL_HEADER_ONLY when relevant --- Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index 7ce5c84a63e..fc669694472 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -28,6 +28,10 @@ function(CGAL_setup_CGAL_dependencies target) if(WITH_LEDA) use_CGAL_LEDA_support(${target} ${keyword}) endif() + + if (CGAL_HEADER_ONLY) + target_compile_definitions(${target} ${keyword} CGAL_HEADER_ONLY=1) + endif() use_CGAL_Boost_support(${target} ${keyword}) foreach(dir ${CGAL_INCLUDE_DIRS}) From 6af02862de975f17ad355f64d2b4372ee88a8826 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Fri, 9 Sep 2016 18:35:07 +0200 Subject: [PATCH 021/298] This comment is not true anymore --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 2 -- Installation/cmake/modules/CGALConfig_install.cmake.in | 2 -- 2 files changed, 4 deletions(-) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 1f84bcef671..0fe3bbdaab0 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -131,8 +131,6 @@ macro(check_cgal_component COMPONENT) else( "${CGAL_LIB}" STREQUAL "CGAL" ) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) - # In header-only, if CGAL_Qt5 is requested, we need to add the - # dependencies here since there is no CGAL_Qt5 lib if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.in b/Installation/cmake/modules/CGALConfig_install.cmake.in index 910bbdb03e1..bbb01cd0c8b 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.in @@ -92,8 +92,6 @@ macro(check_cgal_component COMPONENT) if ( WITH_${CGAL_LIB} ) if(TARGET CGAL::${CGAL_LIB}) - # In header-only, if CGAL_Qt5 is requested, we need to add the - # dependencies here since there is no CGAL_Qt5 lib if ("${CGAL_LIB}" STREQUAL "CGAL_Qt5") include("${CGAL_MODULES_DIR}/CGAL_SetupCGAL_Qt5Dependencies.cmake") From 2daba815b36db771cb2932fb1cfcb10a2aec0cf2 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 20:16:00 +0200 Subject: [PATCH 022/298] New way to use the CGAL_Qt5 extra files --- GraphicsView/demo/Triangulation_2/CMakeLists.txt | 12 ++++++------ GraphicsView/src/CGAL_Qt5/CMakeLists.txt | 9 ++++++--- .../cmake/modules/Use_CGAL_Qt5_headers.cmake | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/GraphicsView/demo/Triangulation_2/CMakeLists.txt b/GraphicsView/demo/Triangulation_2/CMakeLists.txt index 1bec60b57bf..682cfb3b450 100644 --- a/GraphicsView/demo/Triangulation_2/CMakeLists.txt +++ b/GraphicsView/demo/Triangulation_2/CMakeLists.txt @@ -26,9 +26,9 @@ add_definitions(-DQT_NO_KEYWORDS) # The executable itself. add_executable( Constrained_Delaunay_triangulation_2 - Constrained_Delaunay_triangulation_2.cpp ${CGAL_Qt5_extras}) + Constrained_Delaunay_triangulation_2.cpp) target_link_libraries( Constrained_Delaunay_triangulation_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_Qt5_extras Qt5::Widgets) target_include_directories( Constrained_Delaunay_triangulation_2 PRIVATE ./include) @@ -40,9 +40,9 @@ add_to_cached_list(CGAL_EXECUTABLE_TARGETS Constrained_Delaunay_triangulation_2) # The executable itself. add_executable ( Delaunay_triangulation_2 - Delaunay_triangulation_2.cpp ${CGAL_Qt5_extras}) + Delaunay_triangulation_2.cpp) target_link_libraries( Delaunay_triangulation_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_Qt5_extras Qt5::Widgets) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2 ) @@ -52,8 +52,8 @@ add_to_cached_list( CGAL_EXECUTABLE_TARGETS Delaunay_triangulation_2 ) # The executable itself. add_executable ( Regular_triangulation_2 - Regular_triangulation_2.cpp ${CGAL_Qt5_extras}) + Regular_triangulation_2.cpp) target_link_libraries(Regular_triangulation_2 - PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 Qt5::Widgets) + PRIVATE CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_Qt5_extras Qt5::Widgets) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Regular_triangulation_2 ) diff --git a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt index 5050241ecf1..35bc6d5c02f 100644 --- a/GraphicsView/src/CGAL_Qt5/CMakeLists.txt +++ b/GraphicsView/src/CGAL_Qt5/CMakeLists.txt @@ -11,9 +11,7 @@ message( STATUS "USING Qt5_VERSION = '${Qt5Core_VERSION_STRING}'" ) include(Use_CGAL_Qt5_headers) -list(APPEND additional_files ${CGAL_Qt5_MOC_FILES} ${CGAL_Qt5_RESOURCE_FILES}) - -collect_cgal_library( CGAL_Qt5 "${additional_files}") +collect_cgal_library( CGAL_Qt5 "") if(CGAL_HEADER_ONLY) set(keyword "INTERFACE") @@ -21,6 +19,11 @@ endif() CGAL_setup_CGAL_Qt5_dependencies( CGAL_Qt5 ${keyword}) +if(NOT CGAL_HEADER_ONLY) + target_link_libraries( CGAL_Qt5 PRIVATE CGAL_Qt5_extras) +endif() + + if(COMMAND add_config_flag) set( CGAL_HAS_QT5 TRUE ) add_config_flag( CGAL_HAS_QT5 ) diff --git a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake index 3a4ca8572f6..fb69289d23c 100644 --- a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake +++ b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake @@ -1,3 +1,8 @@ +if(Use_CGAL_Qt5_headers_included) + return() +endif() +set(Use_CGAL_Qt5_headers_included TRUE) + qt5_wrap_cpp(CGAL_Qt5_MOC_FILES ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/GraphicsViewNavigation.h ${CGAL_GRAPHICSVIEW_PACKAGE_DIR}/include/CGAL/Qt/DemosMainWindow.h @@ -13,3 +18,14 @@ qt5_add_resources (CGAL_Qt5_RESOURCE_FILES set(CGAL_Qt5_extras) list(APPEND CGAL_Qt5_extras ${CGAL_Qt5_MOC_FILES} ${CGAL_Qt5_RESOURCE_FILES}) + +if(NOT TARGET CGAL_Qt5_extras) + add_library(CGAL_Qt5_extras STATIC ${CGAL_Qt5_extras}) + set_target_properties(CGAL_Qt5_extras PROPERTIES + POSITION_INDEPENDENT_CODE TRUE + EXCLUDE_FROM_ALL TRUE) + target_link_libraries(CGAL_Qt5_extras Qt5::Widgets Qt5::OpenGL Qt5::Svg) + + add_library(CGAL::CGAL_Qt5_extras ALIAS CGAL_Qt5_extras) + add_library(CGAL::Qt5_extras ALIAS CGAL_Qt5_extras) +endif() From 70a6bf5ef99eaa14a50aae5198e7d14e999872e7 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 9 Sep 2016 23:08:26 +0200 Subject: [PATCH 023/298] CMake-2.8.12 is now required --- Installation/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index eee53c63bc9..9da67b6f09f 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -8,10 +8,10 @@ if(NOT PROJECT_NAME) endif() # Minimal version of CMake: -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 2.8.12) # Tested version: -cmake_policy(VERSION 2.8.11) +cmake_policy(VERSION 2.8.12) # # Compatibility with CMake 3.0 From 255c09f03bcc259559ed989229b221a10c57d89a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 10 Sep 2016 00:49:36 +0200 Subject: [PATCH 024/298] Simplify CGALConfig_binary.cmake.in --- .../cmake/modules/CGALConfig_binary.cmake.in | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 0fe3bbdaab0..98787d38b07 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -15,30 +15,9 @@ set(CGAL_HEADER_ONLY "@CGAL_HEADER_ONLY@" ) # The code for including exported targets is different from # CGAL_Config_install.cmake. We do not have separate export files in # an installed version and we need to make sure that we are not -# currently building CGAL. Note that for CMake<=2.8.11 (detected by -# the absence of CMP0024), the else() condition is never used. -if(NOT POLICY CMP0024 OR NOT CGAL_BUILDING_LIBS) +# currently building CGAL. +if(NOT CGAL_BUILDING_LIBS) include("${CGAL_CONFIG_DIR}/CGALExports.cmake") - - macro(CGAL_get_property_optional VAR TARGET PROPERTY) - if(TARGET ${TARGET}) - get_property(${VAR} TARGET ${TARGET} PROPERTY ${PROPERTY}) - else() - set(${VAR} "") - endif() - endmacro() - - if(NOT MSVC AND NOT CGAL_HEADER_ONLY) - CGAL_get_property_optional(CGAL_LIBRARY CGAL::CGAL LOCATION) - CGAL_get_property_optional(CGAL_Core_LIBRARY CGAL::CGAL_Core LOCATION) - CGAL_get_property_optional(CGAL_ImageIO_LIBRARY CGAL::CGAL_ImageIO LOCATION) - CGAL_get_property_optional(CGAL_Qt5_LIBRARY CGAL::CGAL_Qt5 LOCATION) - else() - set(CGAL_LIBRARY "") - set(CGAL_Core_LIBRARY "") - set(CGAL_ImageIO_LIBRARY "") - set(CGAL_Qt5_LIBRARY "") - endif() else() # We are currently in a CGAL Build and CGALExports.cmake has not # necessarily been created yet. Just alias the targets. Also don't @@ -48,9 +27,6 @@ else() macro(CGAL_alias_library lib) if(TARGET ${lib} AND NOT TARGET CGAL::${lib}) add_library(CGAL::${lib} ALIAS ${lib}) - set(${lib}_LIBRARY CGAL::${lib}) - else() - set(${lib}_LIBRARY "") endif() endmacro() @@ -60,6 +36,19 @@ else() CGAL_alias_library(CGAL_Qt5) endif() +macro(CGAL_set_LIB_LIBRARY_var lib) + if(TARGET CGAL::${lib}) + set(${lib}_LIBRARY CGAL::${lib}) + else() + set(${lib}_LIBRARY "") + endif() +endmacro() + +CGAL_set_LIB_LIBRARY_var(CGAL) +CGAL_set_LIB_LIBRARY_var(CGAL_Core) +CGAL_set_LIB_LIBRARY_var(CGAL_ImageIO) +CGAL_set_LIB_LIBRARY_var(CGAL_Qt5) + # Check for possible config files of our libraries and include them. file(GLOB CGAL_CONFIG_FILES LIST_DIRECTORIES false RELATIVE "${CGAL_CONFIG_DIR}" "${CGAL_CONFIG_DIR}/*LibConfig.cmake") @@ -156,7 +145,7 @@ macro(check_cgal_component COMPONENT) set( ${CGAL_LIB}_FOUND FALSE ) set( CHECK_${CGAL_LIB}_ERROR_TAIL " Please configure CGAL using WITH_${CGAL_LIB}=ON." ) endif( WITH_${CGAL_LIB} ) - endif( "${CGAL_LIB}" STREQUAL "CGAL" ) + endif() if ( NOT ${CGAL_LIB}_FOUND AND CHECK_CGAL_COMPONENT_MSG_ON_ERROR ) message( ${CHECK_CGAL_COMPONENT_ERROR_TYPE} "${CHECK_CGAL_COMPONENT_ERROR_TITLE} The ${CGAL_LIB} library was not configured.${CHECK_${CGAL_LIB}_ERROR_TAIL}" ) From 9902457b0a17f8ed377777903ac4d9b5ed0875db Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 10 Sep 2016 00:50:44 +0200 Subject: [PATCH 025/298] Make CGAL_SCM.cmake define a function ... instead of launching the code. That will help launch it on other directories. --- CMakeLists.txt | 1 + Installation/cmake/modules/CGAL_SCM.cmake | 86 +++++++++++++---------- Installation/cmake/modules/UseCGAL.cmake | 1 + 3 files changed, 49 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d6e9ed78b4..48d0d563dd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ cmake_minimum_required(VERSION 2.8.11) set( CGAL_BRANCH_BUILD ON CACHE INTERNAL "Create CGAL from a Git branch" FORCE) include(${CMAKE_SOURCE_DIR}/Installation/cmake/modules/CGAL_SCM.cmake) +CGAL_detect_git(${CMAKE_SOURCE_DIR}) # add option for duplicate file detection option( CGAL_REPORT_DUPLICATE_FILES "Switch on to start (naive) detection of duplicate source- and headerfiles in packages" OFF) diff --git a/Installation/cmake/modules/CGAL_SCM.cmake b/Installation/cmake/modules/CGAL_SCM.cmake index 6fafc60c7aa..2e826779307 100644 --- a/Installation/cmake/modules/CGAL_SCM.cmake +++ b/Installation/cmake/modules/CGAL_SCM.cmake @@ -1,50 +1,58 @@ # Common settings for CGAL cmake scripts -if( NOT CGAL_SCM_FILE_INCLUDED ) - set(CGAL_SCM_FILE_INCLUDED 1 ) +if(CGAL_SCM_FILE_INCLUDED) + return() +endif() +set(CGAL_SCM_FILE_INCLUDED 1) # CGAL_SCM_NAME can be either git or n/a as an indicator if we have a # build system or not # TODO: make that scm agnostic and turn it into a boolean -set(GIT_PARENT_DIR "${CMAKE_SOURCE_DIR}") -set(GIT_DIR "${GIT_PARENT_DIR}/.git") -if (EXISTS "${GIT_DIR}") - set( CGAL_SCM_NAME "git" ) -else() - while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories - set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") - get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) - if( "${GIT_PARENT_DIR}" STREQUAL "${GIT_PREVIOUS_PARENT}" ) - # We have reached the root directory, we are not in git - set( _refspecvar "GITDIR-NOTFOUND" ) - set( _hashvar "GITDIR-NOTFOUND" ) - set( CGAL_SCM_NAME "n/a" ) - break() - else() - set( GIT_DIR "${GIT_PARENT_DIR}/.git" ) - set( CGAL_SCM_NAME "git" ) - endif() - endwhile() -endif() +function(CGAL_detect_git GIT_PARENT_DIR) + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + if (EXISTS "${GIT_DIR}") + set( CGAL_SCM_NAME "git" ) + else() + while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories + set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") + get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) + if( "${GIT_PARENT_DIR}" STREQUAL "${GIT_PREVIOUS_PARENT}" ) + # We have reached the root directory, we are not in git + set( _refspecvar "GITDIR-NOTFOUND" ) + set( _hashvar "GITDIR-NOTFOUND" ) + set( CGAL_SCM_NAME "n/a" ) + break() + else() + set( GIT_DIR "${GIT_PARENT_DIR}/.git" ) + set( CGAL_SCM_NAME "git" ) + endif() + endwhile() + endif() -if ( "${CGAL_SCM_NAME}" STREQUAL "git" ) - find_program(GIT_EXECUTABLE git DOC "git command line client") - execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${GIT_DIR} rev-parse --symbolic --abbrev-ref HEAD - OUTPUT_VARIABLE CGAL_GIT_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE) + if ( "${CGAL_SCM_NAME}" STREQUAL "git" ) + find_program(GIT_EXECUTABLE git DOC "git command line client") + execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${GIT_DIR} rev-parse --symbolic --abbrev-ref HEAD + OUTPUT_VARIABLE CGAL_GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE) - set( CGAL_SCM_BRANCH_NAME "${CGAL_GIT_BRANCH}" ) + set( CGAL_SCM_BRANCH_NAME "${CGAL_GIT_BRANCH}" ) - execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${GIT_DIR} rev-parse HEAD - OUTPUT_VARIABLE CGAL_GIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${GIT_DIR} rev-parse HEAD + OUTPUT_VARIABLE CGAL_CREATED_GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) - # backward compatible - set( CGAL_CREATED_SVN_REVISION "99999" ) -else() - set( CGAL_SCM_BRANCH_NAME "n/a") - set( CGAL_CREATED_GIT_HASH "n/a" ) - set( CGAL_CREATED_SVN_REVISION "n/a" ) -endif() + # backward compatible + set( CGAL_CREATED_SVN_REVISION "99999" ) + else() + set( CGAL_SCM_BRANCH_NAME "n/a" ) + set( CGAL_CREATED_GIT_HASH "n/a" ) + set( CGAL_CREATED_SVN_REVISION "n/a" ) + endif() + + # export the variables to PARENT_SCOPE + set( CGAL_SCM_NAME ${CGAL_SCM_NAME} PARENT_SCOPE ) + set( CGAL_SCM_BRANCH_NAME ${CGAL_SCM_BRANCH_NAME} PARENT_SCOPE ) + set( CGAL_CREATED_GIT_HASH ${CGAL_CREATED_GIT_HASH} PARENT_SCOPE ) + set( CGAL_CREATED_SVN_REVISION ${CGAL_CREATED_SVN_REVISION} PARENT_SCOPE ) +endfunction() -endif() diff --git a/Installation/cmake/modules/UseCGAL.cmake b/Installation/cmake/modules/UseCGAL.cmake index b678fff4b0a..46e41281295 100644 --- a/Installation/cmake/modules/UseCGAL.cmake +++ b/Installation/cmake/modules/UseCGAL.cmake @@ -27,6 +27,7 @@ if(NOT USE_CGAL_FILE_INCLUDED) if( NOT "${CGAL_INSTALLED_SCM_BRANCH_NAME}" STREQUAL "" ) include(CGAL_SCM) + CGAL_detect_git(${CMAKE_SOURCE_DIR}) if ( NOT "${CGAL_SCM_BRANCH_NAME}" STREQUAL "" ) message ( STATUS "Code taken from Git branch: ${CGAL_SCM_BRANCH_NAME}" ) if ( NOT "${CGAL_SCM_BRANCH_NAME}" STREQUAL "${CGAL_INSTALLED_SCM_BRANCH_NAME}") From 908bb2dc01aaf426abbbfe4bab9e5f8f4472d13d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 10 Sep 2016 02:09:59 +0200 Subject: [PATCH 026/298] Fix Use_CGAL_Qt5_headers.cmake Outside a build with `WITH_demos=TRUE`, that was probably buggy. --- Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake index fb69289d23c..98aa3619e78 100644 --- a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake +++ b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake @@ -24,7 +24,7 @@ if(NOT TARGET CGAL_Qt5_extras) set_target_properties(CGAL_Qt5_extras PROPERTIES POSITION_INDEPENDENT_CODE TRUE EXCLUDE_FROM_ALL TRUE) - target_link_libraries(CGAL_Qt5_extras Qt5::Widgets Qt5::OpenGL Qt5::Svg) + target_link_libraries(CGAL_Qt5_extras CGAL::CGAL Qt5::Widgets Qt5::OpenGL Qt5::Svg) add_library(CGAL::CGAL_Qt5_extras ALIAS CGAL_Qt5_extras) add_library(CGAL::Qt5_extras ALIAS CGAL_Qt5_extras) From 9c96205a3865b63ab4844836770821654cd7260c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 10 Sep 2016 02:11:10 +0200 Subject: [PATCH 027/298] First prototype of a pure CGAL_HEADER_ONLY MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That is the step 2 of the header-only effort. Still to do: - make it work with `make install` - ensure that `CGAL_Core` is correctly handled with `CGAL_DISABLE_GMP` --- .../CGAL_SetupCGAL_ImageIODependencies.cmake | 2 +- Installation/lib/cmake/CGAL/CGALConfig.cmake | 94 +++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 Installation/lib/cmake/CGAL/CGALConfig.cmake diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake index 31cb1fbce3e..ffd5c59fd20 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake @@ -10,7 +10,7 @@ define_property(TARGET PROPERTY CGAL_TARGET_USES_ZLIB FULL_DOCS "Tells if the target uses ZLIB as a dependency") if(ZLIB_FOUND) - cache_set(CGAL_ImageIO_USE_ZLIB "ON") + set(CGAL_ImageIO_USE_ZLIB ON CACHE BOOL "CGAL_ImageIO uses ZLIB") endif(ZLIB_FOUND) set( CGAL_ImageIO_BASENAME CGAL_ImageIO) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake new file mode 100644 index 00000000000..e80df6ba919 --- /dev/null +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -0,0 +1,94 @@ +# +# This file is the CGALConfig.cmake for a pure header-only CGAL installion +# + +if(CGALConfig_included) + return() +endif() + +set(CGALConfig_included TRUE) + +get_filename_component(CGAL_CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + +set(CGAL_HEADER_ONLY TRUE) + +# Save the current source directory. That variable can be changed by +# a `CMakeLists.txt`, for `CMakeLists.txt` files that are created in +# the binary directory. +set(CGAL_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + +function(_detect_branch_build VAR_NAME) + if(IS_DIRECTORY ${CGAL_CONFIG_DIR}/../../../../Installation) + set(${VAR_NAME} TRUE PARENT_SCOPE) + else() + set(${VAR_NAME} FALSE PARENT_SCOPE) + endif() +endfunction() + +_detect_branch_build(BRANCH_BUILD) +if(BRANCH_BUILD) + set(CGAL_ROOT ${CGAL_CONFIG_DIR}/../../../..) + set(CGAL_INSTALLATION_PACKAGE_DIR ${CGAL_ROOT}/Installation) + set(CGAL_GRAPHICSVIEW_PACKAGE_DIR ${CGAL_ROOT}/GraphicsView) + file(GLOB include_dirs ${CGAL_ROOT}/*/include) +# message("inc_dirs: ${include_dirs}") + foreach(inc_dir ${include_dirs}) + if(IS_DIRECTORY ${inc_dir}) + list(APPEND CGAL_INCLUDE_DIRS ${inc_dir}) + if(EXISTS ${inc_dir}/CGAL/config.h) + set(CGAL_FOUND TRUE) + endif() + endif() + endforeach() +else() + set(CGAL_ROOT ${CGAL_CONFIG_DIR}/../../..) + set(CGAL_INSTALLATION_PACKAGE_DIR ${CGAL_ROOT}) + set(CGAL_GRAPHICSVIEW_PACKAGE_DIR ${CGAL_ROOT}) + set(CGAL_INCLUDE_DIRS ${CGAL_ROOT}/include) + if(EXISTS ${CGAL_ROOT}/include/CGAL/config.h) + set(CGAL_FOUND TRUE) + endif() +endif() + +if(NOT CGAL_FOUND) + return() +endif() + +set(CGAL_MODULES_DIR ${CGAL_CONFIG_DIR}/../../../cmake/modules) +list(APPEND CMAKE_MODULE_PATH ${CGAL_MODULES_DIR}) + +include( ${CGAL_MODULES_DIR}/CGAL_SCM.cmake ) +CGAL_detect_git(${CGAL_CONFIG_DIR}/../../../..) + +include( ${CGAL_MODULES_DIR}/CGAL_SetupCGALDependencies.cmake ) + +# +# Define the CGAL targets and theirs CGAL:: aliases +# +foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) + set(${cgal_lib}_FOUND TRUE) + add_library(${cgal_lib} INTERFACE) + add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) + if(NOT ${cgal_lib} STREQUAL CGAL_Core) + include( ${CGAL_MODULES_DIR}/CGAL_Setup${cgal_lib}Dependencies.cmake ) + endif() +endforeach() +target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY=1) +target_include_directories(CGAL INTERFACE ${CGAL_INCLUDE_DIRS}) +CGAL_setup_CGAL_dependencies(CGAL INTERFACE) +CGAL_setup_CGAL_Qt5_dependencies(CGAL_Qt5 INTERFACE) +target_link_libraries( CGAL_Core INTERFACE CGAL::CGAL ) +CGAL_setup_CGAL_ImageIO_dependencies(CGAL_ImageIO INTERFACE) + +# +# +# + +include(Use_CGAL_Qt5_headers) + +message("CGAL_FOUND: ${CGAL_FOUND}") +message("CGAL_Qt5_FOUND: ${CGAL_Qt5_FOUND}") +message("Qt5_FOUND: ${Qt5_FOUND}") + +include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) +include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) From c68488969d3e44be679568a98db19b6e26c2dda1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 10 Sep 2016 02:14:21 +0200 Subject: [PATCH 028/298] Remove debug messages --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index e80df6ba919..4f76eeffdba 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -86,9 +86,5 @@ CGAL_setup_CGAL_ImageIO_dependencies(CGAL_ImageIO INTERFACE) include(Use_CGAL_Qt5_headers) -message("CGAL_FOUND: ${CGAL_FOUND}") -message("CGAL_Qt5_FOUND: ${CGAL_Qt5_FOUND}") -message("Qt5_FOUND: ${Qt5_FOUND}") - include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) From 1f3ba3c7ab4711ace1e46b8d79dd660f452a3599 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 10 Sep 2016 23:34:29 +0200 Subject: [PATCH 029/298] Improvements to CGAL_HEADER_ONLY - Now `` is no longer used. - GMP and MPFR are assumed. - `` is in the distribution. --- Installation/include/CGAL/config.h | 6 ++- .../internal/enable_third_party_libraries.h | 48 +++++++++++++++++++ Installation/include/CGAL/version.h | 30 ++++++++++++ Installation/lib/cmake/CGAL/CGALConfig.cmake | 11 +++-- 4 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 Installation/include/CGAL/internal/enable_third_party_libraries.h create mode 100644 Installation/include/CGAL/version.h diff --git a/Installation/include/CGAL/config.h b/Installation/include/CGAL/config.h index 14550d82272..ff55439e1ee 100644 --- a/Installation/include/CGAL/config.h +++ b/Installation/include/CGAL/config.h @@ -123,7 +123,11 @@ // platform specific workaround flags (CGAL_CFG_...) //----------------------------------------------------------------------// -#include +#if CGAL_HEADER_ONLY_STEP_2 +# include +#else +# include +#endif //----------------------------------------------------------------------// // Support for DLL on Windows (CGAL_EXPORT macro) diff --git a/Installation/include/CGAL/internal/enable_third_party_libraries.h b/Installation/include/CGAL/internal/enable_third_party_libraries.h new file mode 100644 index 00000000000..394a343d28e --- /dev/null +++ b/Installation/include/CGAL/internal/enable_third_party_libraries.h @@ -0,0 +1,48 @@ +// Copyright (c) 2016 GeometryFactory (France). All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// +// +// Author(s) : Laurent Rineau + +#ifndef CGAL_INTERNAL_ENABLE_THIRD_PARTY_LIBRARIES_H +#define CGAL_INTERNAL_ENABLE_THIRD_PARTY_LIBRARIES_H + +// GMP and MPFR are highly recommended in CGAL. +#define CGAL_USE_GMP 1 +#define CGAL_USE_MPFR 1 + +#if CGAL_DISABLE_GMP && ! defined(CGAL_NO_GMP) +# define CGAL_NO_GMP 1 +#endif + +#if CGAL_NO_GMP || CGAL_NO_MPFR +# undef CGAL_USE_MPFR +# undef CGAL_USE_GMP +#endif + +#if defined(__has_include) +# if CGAL_USE_GMP && ! __has_include() +# warning " cannot be found. Less efficient number types will be used instead. Define CGAL_NO_GMP=1 if that is on purpose." +# undef CGAL_USE_GMP +# undef CGAL_USE_MPFR +# elif CGAL_USE_MPFR && ! __has_include() +# warning " cannot be found and the GMP support in CGAL requires it. Less efficient number types will be used instead. Define CGAL_NO_GMP=1 if that is on purpose." +# undef CGAL_USE_GMP +# undef CGAL_USE_MPFR +# endif // CGAL_USE_MPFR and no +#endif // __has_include + +#endif // CGAL_INTERNAL_ENABLE_THIRD_PARTY_LIBRARIES_H diff --git a/Installation/include/CGAL/version.h b/Installation/include/CGAL/version.h new file mode 100644 index 00000000000..0149e03cbbc --- /dev/null +++ b/Installation/include/CGAL/version.h @@ -0,0 +1,30 @@ +// Copyright (c) 2009 +// Utrecht University (The Netherlands), +// ETH Zurich (Switzerland), +// INRIA Sophia-Antipolis (France), +// Max-Planck-Institute Saarbruecken (Germany), +// and Tel-Aviv University (Israel). All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Author(s) : - + +#ifndef CGAL_VERSION_H +#define CGAL_VERSION_H + +#define CGAL_VERSION 4.9-I-900 +#define CGAL_VERSION_NR 1040900900 +#define CGAL_SVN_REVISION 99999 + +#include + +#endif diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 4f76eeffdba..ed380055885 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -30,10 +30,12 @@ if(BRANCH_BUILD) set(CGAL_ROOT ${CGAL_CONFIG_DIR}/../../../..) set(CGAL_INSTALLATION_PACKAGE_DIR ${CGAL_ROOT}/Installation) set(CGAL_GRAPHICSVIEW_PACKAGE_DIR ${CGAL_ROOT}/GraphicsView) - file(GLOB include_dirs ${CGAL_ROOT}/*/include) -# message("inc_dirs: ${include_dirs}") - foreach(inc_dir ${include_dirs}) - if(IS_DIRECTORY ${inc_dir}) + file(GLOB packages_dirs ${CGAL_ROOT}/*) +# message("packages_dirs: ${packages_dirs}") + foreach(package_dir ${packages_dirs}) + set(inc_dir ${package_dir}/include) + if(IS_DIRECTORY ${inc_dir} + AND IS_DIRECTORY ${package_dir}/package_info) list(APPEND CGAL_INCLUDE_DIRS ${inc_dir}) if(EXISTS ${inc_dir}/CGAL/config.h) set(CGAL_FOUND TRUE) @@ -74,6 +76,7 @@ foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) endif() endforeach() target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY=1) +target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY_STEP_2=1) target_include_directories(CGAL INTERFACE ${CGAL_INCLUDE_DIRS}) CGAL_setup_CGAL_dependencies(CGAL INTERFACE) CGAL_setup_CGAL_Qt5_dependencies(CGAL_Qt5 INTERFACE) From 98156dc1a776be39587f23620bf6dc1242ed388b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 11:09:43 +0200 Subject: [PATCH 030/298] CGAL_Setup${cgal_lib}CoreDependencies improve - Now even CGAL_Core has one. - The `${cgal_lib}_FOUND` are now set in those modules, after having chec - For self-consistency, `Use_CGAL_Qt5_headers` is included by `CGAL_SetupCGAL_Qt5Dependencies`. --- CGAL_Core/src/CGAL_Core/CMakeLists.txt | 22 +++++++++++-------- .../modules/CGAL_SetupCGALDependencies.cmake | 4 ++++ .../CGAL_SetupCGAL_CoreDependencies.cmake | 21 ++++++++++++++++++ .../CGAL_SetupCGAL_ImageIODependencies.cmake | 4 +--- .../CGAL_SetupCGAL_Qt5Dependencies.cmake | 6 +++++ .../cmake/modules/Use_CGAL_Qt5_headers.cmake | 4 ++++ 6 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake diff --git a/CGAL_Core/src/CGAL_Core/CMakeLists.txt b/CGAL_Core/src/CGAL_Core/CMakeLists.txt index 414b2eac5d8..4c5eeb14e89 100644 --- a/CGAL_Core/src/CGAL_Core/CMakeLists.txt +++ b/CGAL_Core/src/CGAL_Core/CMakeLists.txt @@ -1,14 +1,18 @@ +include(CGAL_SetupCGAL_CoreDependencies) + message("Configuring libCGAL_Core") +if(CGAL_Core_FOUND) -collect_cgal_library(CGAL_Core "") + collect_cgal_library(CGAL_Core "") -if(CGAL_HEADER_ONLY) - set(keyword INTERFACE) -else() - set(keyword PUBLIC) + if(CGAL_HEADER_ONLY) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + + target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) + + message("libCGAL_Core is configured") endif() -target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) - -message("libCGAL_Core is configured") - diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index fc669694472..6473be244b7 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -13,6 +13,10 @@ endif() include(CGAL_SetupBoost) +if(Boost_FOUND) + set(CGAL_FOUND TRUE) +endif() + function(CGAL_setup_CGAL_dependencies target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake new file mode 100644 index 00000000000..9050c1f33b8 --- /dev/null +++ b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake @@ -0,0 +1,21 @@ +if(CGAL_SetupCGAL_CoreDependencies_included) + return() +endif() +set(CGAL_SetupCGAL_CoreDependencies_included TRUE) + +if(NOT CGAL_DISABLE_GMP) + include(CGAL_SetupGMP) + if(GMP_FOUND) + set(CGAL_Core_FOUND TRUE) + endif() +endif() + +function(CGAL_setup_CGAL_Core_dependencies target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + use_CGAL_GMP_support(CGAL_Core ${keyword}) + target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) +endfunction() diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake index ffd5c59fd20..e9d3acc6d43 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake @@ -15,9 +15,7 @@ endif(ZLIB_FOUND) set( CGAL_ImageIO_BASENAME CGAL_ImageIO) -if(CGAL_HEADER_ONLY) - set(keyword "INTERFACE") -endif() +set(CGAL_ImageIO_FOUND TRUE) function(CGAL_setup_CGAL_ImageIO_dependencies target) if(ARGV1 STREQUAL INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake index 00d9ec7d8bc..16f99b8068d 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -20,6 +20,10 @@ if(NOT OPENGL_FOUND) set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") endif() +if(NOT CGAL_Qt5_MISSING_DEPS) + set(CGAL_Qt5_FOUND TRUE) +endif() + get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) message( STATUS "OpenGL include: ${OPENGL_INCLUDE_DIR}" ) message( STATUS "OpenGL libraries: ${OPENGL_LIBRARIES}" ) @@ -44,3 +48,5 @@ function(CGAL_setup_CGAL_Qt5_dependencies target) target_link_libraries( ${target} ${keyword} CGAL::CGAL) target_link_libraries( ${target} ${keyword} Qt5::OpenGL Qt5::Svg ${OPENGL_LIBRARIES}) endfunction() + +include(Use_CGAL_Qt5_headers) diff --git a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake index 98aa3619e78..920d42edaa8 100644 --- a/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake +++ b/Installation/cmake/modules/Use_CGAL_Qt5_headers.cmake @@ -1,3 +1,7 @@ +if(NOT CGAL_Qt5_FOUND) + return() +endif() + if(Use_CGAL_Qt5_headers_included) return() endif() From bac7c694bc6e9a2989b6d7ca19741b5adc4c86f9 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 11:24:30 +0200 Subject: [PATCH 031/298] Restore the creation of --- Installation/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 9da67b6f09f..61045cd8133 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -708,9 +708,6 @@ list(SORT all_config_tests) file(WRITE ${CMAKE_BINARY_DIR}/include/CGAL/compiler_config.h "//\n// compiler_config.h is included by CGAL headers to load the needed compiler settings.\n//\n// DO NOT EDIT compiler_config.h. It is generated by CMake.\n//\n\n") foreach(config_test_cpp ${all_config_tests}) - message(Skipped) - break() #@TODO - # Test's name is .cpp's base name get_filename_component(config_test_name ${config_test_cpp} NAME_WE) From 35e2fc5aeeb26adf615428b0c275b279d4e7c96d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 12:00:20 +0200 Subject: [PATCH 032/298] This CGAL_CFG*BUG macro is never used --- ...FG_NESTED_CLASS_FRIEND_DECLARATION_BUG.cpp | 78 ------------------- 1 file changed, 78 deletions(-) delete mode 100644 Installation/config/testfiles/CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG.cpp diff --git a/Installation/config/testfiles/CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG.cpp b/Installation/config/testfiles/CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG.cpp deleted file mode 100644 index 78be28f1b21..00000000000 --- a/Installation/config/testfiles/CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2005 Foundation for Research and Technology-Hellas (Greece). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// -// Author(s) : Menelaos Karavelas - -//| The flag CGAL_CFG_NESTED_CLASS_FRIEND_DECLARATION_BUG is set -//| if the compiler cannot recognize the declaration of a nested -//| class as friend. -//| Compilers such as the Intel compiler 8.x (for linux or windows), -//| MSVC 7.1 or pgCC have this "bug". It should be noted that the C++ -//| standard is a bit vague on this issue, in other words what is referred -//| to as "bug" above, may not really be a bug. Hopefully, the next standard -//| will resolve this issue. - -#include - -template -struct A -{ - void do_something() const { - std::cerr << "A's do_something" << std::endl; - T().do_something(); - } -}; - -template -struct B -{ - typedef A Nested; - - void do_something() const { - std::cerr << "B's do_something" << std::endl; - T().do_something(); - } -}; - - -template -class C -{ - friend struct B< C >; - friend struct B< C >::Nested; - // the following declaration (instead of the one above) is what - // pgCC, Intel 8.x and MSVC 7.1 would accept: - // friend class A< C >; - - protected: - void do_something() const { - std::cerr << "C's do_something" << std::endl; - } -}; - - -int main() -{ - A< C > a; - B< C > b; - - a.do_something(); - b.do_something(); - - return 0; -} From 718512a7ba59f21de176811dea864e2f931f9253 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 12:03:54 +0200 Subject: [PATCH 033/298] Handle for MSVC Actually, in our testsuite results, no other compiler has any bug detected by the `CGAL_CFG*BUG` macros. --- .../include/CGAL/MSVC_compiler_config.h | 36 +++++++++++++++++++ Installation/include/CGAL/config.h | 3 ++ 2 files changed, 39 insertions(+) create mode 100644 Installation/include/CGAL/MSVC_compiler_config.h diff --git a/Installation/include/CGAL/MSVC_compiler_config.h b/Installation/include/CGAL/MSVC_compiler_config.h new file mode 100644 index 00000000000..81f34913a8c --- /dev/null +++ b/Installation/include/CGAL/MSVC_compiler_config.h @@ -0,0 +1,36 @@ +// Copyright (c) 2016 GeometryFactory (France). All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// +// +// Author(s) : Laurent Rineau + +#ifndef CGAL_MSVC_COMPILER_CONFIG_H +#define CGAL_MSVC_COMPILER_CONFIG_H + +// For all known version of MSVC. Actually we do not really have a +// test for that bug. +#define CGAL_CFG_MATCHING_BUG_6 1 + +// Fixed since MSVC 2015 +#define CGAL_CFG_MATCHING_BUG_7 1 + +// for all known version of MSVC +#define CGAL_CFG_MATCHING_BUG_8 1 + +// Should be only for MSVC 2012 and 2013 in Release +#define CGAL_CFG_FPU_ROUNDING_MODE_UNWINDING_VC_BUG 1 + +#endif // CGAL_MSVC_COMPILER_CONFIG_H diff --git a/Installation/include/CGAL/config.h b/Installation/include/CGAL/config.h index ff55439e1ee..35fb8eb599c 100644 --- a/Installation/include/CGAL/config.h +++ b/Installation/include/CGAL/config.h @@ -125,6 +125,9 @@ #if CGAL_HEADER_ONLY_STEP_2 # include +# if(BOOST_MSVC) +# include +# endif #else # include #endif From fa0d681c23ff5d6e401b88edd659fa01c96317f0 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 12:05:04 +0200 Subject: [PATCH 034/298] Simplify and fix CGALConfig.cmake for header-only2 --- .../CGAL_setup_target_dependencies.cmake | 17 +++++++++++ Installation/lib/cmake/CGAL/CGALConfig.cmake | 30 +++++++++++-------- 2 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 Installation/cmake/modules/CGAL_setup_target_dependencies.cmake diff --git a/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake b/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake new file mode 100644 index 00000000000..a763cbc7480 --- /dev/null +++ b/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake @@ -0,0 +1,17 @@ +function(CGAL_setup_target_dependencies target) + if(ARGV1 STREQUAL INTERFACE) + set(keyword INTERFACE) + else() + set(keyword PUBLIC) + endif() + + if(${target} STREQUAL CGAL) + CGAL_setup_CGAL_dependencies(${target} ${keyword}) + elseif(${target} STREQUAL CGAL_Core) + CGAL_setup_CGAL_Core_dependencies(${target} ${keyword}) + elseif(${target} STREQUAL CGAL_ImageIO) + CGAL_setup_CGAL_Core_dependencies(${target} ${keyword}) + elseif(${target} STREQUAL CGAL_Qt5) + CGAL_setup_CGAL_Qt5_dependencies(${target} ${keyword}) + endif() +endfunction() diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index ed380055885..46024cb6dc7 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -2,6 +2,9 @@ # This file is the CGALConfig.cmake for a pure header-only CGAL installion # +#set(CGAL_Boost_USE_STATIC_LIBS ON) +set(CGAL_AUTO_LINK_ENABLED) + if(CGALConfig_included) return() endif() @@ -68,26 +71,29 @@ include( ${CGAL_MODULES_DIR}/CGAL_SetupCGALDependencies.cmake ) # Define the CGAL targets and theirs CGAL:: aliases # foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) - set(${cgal_lib}_FOUND TRUE) - add_library(${cgal_lib} INTERFACE) - add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) - if(NOT ${cgal_lib} STREQUAL CGAL_Core) - include( ${CGAL_MODULES_DIR}/CGAL_Setup${cgal_lib}Dependencies.cmake ) + if(${cgal_lib}_FOUND) + add_library(${cgal_lib} INTERFACE) + add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) + include(CGAL_Setup${cgal_lib}Dependencies) endif() endforeach() + +# this include has to be after the loop that includes the +# `CGAL_Setup${cgal_lib}Dependencies` files +include(CGAL_setup_target_dependencies) + +foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) + if(${cgal_lib}_FOUND) + CGAL_setup_target_dependencies(${cgal_lib} INTERFACE) + endif() +endforeach() + target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY=1) target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY_STEP_2=1) -target_include_directories(CGAL INTERFACE ${CGAL_INCLUDE_DIRS}) -CGAL_setup_CGAL_dependencies(CGAL INTERFACE) -CGAL_setup_CGAL_Qt5_dependencies(CGAL_Qt5 INTERFACE) -target_link_libraries( CGAL_Core INTERFACE CGAL::CGAL ) -CGAL_setup_CGAL_ImageIO_dependencies(CGAL_ImageIO INTERFACE) # # # -include(Use_CGAL_Qt5_headers) - include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) From 7c18b22b4c0627e8af480c688e83d1046e72041f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 12:20:15 +0200 Subject: [PATCH 035/298] Fix CGAL_TweakFindBoost That module was using the useless macros `cache_set` and `add_to_cached_list`. --- Installation/cmake/modules/CGAL_TweakFindBoost.cmake | 7 +++---- Installation/lib/cmake/CGAL/CGALConfig.cmake | 3 --- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Installation/cmake/modules/CGAL_TweakFindBoost.cmake b/Installation/cmake/modules/CGAL_TweakFindBoost.cmake index 95577907b49..a27ff2d960b 100644 --- a/Installation/cmake/modules/CGAL_TweakFindBoost.cmake +++ b/Installation/cmake/modules/CGAL_TweakFindBoost.cmake @@ -52,10 +52,9 @@ if( NOT CGAL_TweakFindBoost ) # One must add -DBOOST_ALL_DYN_LINK to DEFINITIONS to use Boost # auto-link with shared libraries. - # First, add the variable to cache, if it was loaded from CGALConfig.cmake - cache_set(CGAL_3RD_PARTY_DEFINITIONS "${CGAL_3RD_PARTY_DEFINITIONS}") - # Then amend it - add_to_cached_list(CGAL_3RD_PARTY_DEFINITIONS -DBOOST_ALL_DYN_LINK) + list(APPEND CGAL_3RD_PARTY_DEFINITIONS -DBOOST_ALL_DYN_LINK) + set(CGAL_3RD_PARTY_DEFINITIONS "${CGAL_3RD_PARTY_DEFINITIONS}" + CACHE INTERNAL "3rd party definitions for CGAL") endif() endif() diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 46024cb6dc7..1babbd5361f 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -2,9 +2,6 @@ # This file is the CGALConfig.cmake for a pure header-only CGAL installion # -#set(CGAL_Boost_USE_STATIC_LIBS ON) -set(CGAL_AUTO_LINK_ENABLED) - if(CGALConfig_included) return() endif() From a0c0227f7dc0dcebc2892bb5bba6a5026f9315d3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 11 Sep 2016 13:25:33 +0200 Subject: [PATCH 036/298] Remove display messages Anyway that lead to a bug when Qt5 was not found. --- .../CGAL_SetupCGAL_Qt5Dependencies.cmake | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake index 16f99b8068d..c3eb36aaf0f 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -24,15 +24,15 @@ if(NOT CGAL_Qt5_MISSING_DEPS) set(CGAL_Qt5_FOUND TRUE) endif() -get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) -message( STATUS "OpenGL include: ${OPENGL_INCLUDE_DIR}" ) -message( STATUS "OpenGL libraries: ${OPENGL_LIBRARIES}" ) -message( STATUS "OpenGL definitions: ${OPENGL_DEFINITIONS}" ) -message( STATUS "Qt5Core include: ${Qt5Core_INCLUDE_DIRS}" ) -message( STATUS "Qt5 libraries: ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5OpenGL_LIBRARIES}" ) -message( STATUS "Qt5Core definitions: ${Qt5Core_DEFINITIONS}" ) -message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) -message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) +#get_property(QT_UIC_EXECUTABLE TARGET Qt5::uic PROPERTY LOCATION) +#message( STATUS "OpenGL include: ${OPENGL_INCLUDE_DIR}" ) +#message( STATUS "OpenGL libraries: ${OPENGL_LIBRARIES}" ) +#message( STATUS "OpenGL definitions: ${OPENGL_DEFINITIONS}" ) +#message( STATUS "Qt5Core include: ${Qt5Core_INCLUDE_DIRS}" ) +#message( STATUS "Qt5 libraries: ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5OpenGL_LIBRARIES}" ) +#message( STATUS "Qt5Core definitions: ${Qt5Core_DEFINITIONS}" ) +#message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) +#message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) function(CGAL_setup_CGAL_Qt5_dependencies target) if(ARGV1 STREQUAL INTERFACE) From 83482f5505eedb0ad8333aacea2e87aea74427e9 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 14 Sep 2016 20:41:10 +0200 Subject: [PATCH 037/298] Fix CGALConfig.cmake for pure header-only --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 1babbd5361f..6126ad3a908 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -62,7 +62,12 @@ list(APPEND CMAKE_MODULE_PATH ${CGAL_MODULES_DIR}) include( ${CGAL_MODULES_DIR}/CGAL_SCM.cmake ) CGAL_detect_git(${CGAL_CONFIG_DIR}/../../../..) -include( ${CGAL_MODULES_DIR}/CGAL_SetupCGALDependencies.cmake ) +# +# Search for all dependencies +# +foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) + include(CGAL_Setup${cgal_lib}Dependencies) +endforeach() # # Define the CGAL targets and theirs CGAL:: aliases @@ -71,7 +76,6 @@ foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) if(${cgal_lib}_FOUND) add_library(${cgal_lib} INTERFACE) add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) - include(CGAL_Setup${cgal_lib}Dependencies) endif() endforeach() From eb5f52869f949b5b5d740b2a7ff2f695862febb3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 12:24:37 +0200 Subject: [PATCH 038/298] Use the new API of target_link_libraries ... otherwise CMake warns about mixing old and new usages of that CMake command. --- BGL/examples/BGL_OpenMesh/CMakeLists.txt | 4 ++-- BGL/examples/BGL_polyhedron_3/CMakeLists.txt | 2 +- BGL/test/BGL/CMakeLists.txt | 14 ++++++++------ .../CGAL_CreateSingleSourceCGALProgram.cmake | 2 +- .../Polygon_mesh_processing/CMakeLists.txt | 12 ++++++------ .../Surface_mesh_deformation/CMakeLists.txt | 2 +- .../test/Surface_mesh_deformation/CMakeLists.txt | 2 +- .../Surface_mesh_segmentation/CMakeLists.txt | 2 +- .../Surface_mesh_shortest_path/CMakeLists.txt | 3 ++- .../Surface_mesh_simplification/CMakeLists.txt | 2 +- 10 files changed, 24 insertions(+), 21 deletions(-) diff --git a/BGL/examples/BGL_OpenMesh/CMakeLists.txt b/BGL/examples/BGL_OpenMesh/CMakeLists.txt index fd10fd5cd32..e8ee1c44e66 100644 --- a/BGL/examples/BGL_OpenMesh/CMakeLists.txt +++ b/BGL/examples/BGL_OpenMesh/CMakeLists.txt @@ -51,7 +51,7 @@ include_directories( BEFORE ../../include ) include( CGAL_CreateSingleSourceCGALProgram ) if(OpenMesh_FOUND) -create_single_source_cgal_program( "TriMesh.cpp" ) - target_link_libraries( TriMesh ${OPENMESH_LIBRARIES} ) + create_single_source_cgal_program( "TriMesh.cpp" ) + target_link_libraries( TriMesh PRIVATE ${OPENMESH_LIBRARIES} ) endif() diff --git a/BGL/examples/BGL_polyhedron_3/CMakeLists.txt b/BGL/examples/BGL_polyhedron_3/CMakeLists.txt index 5fab077f346..5c73daedb41 100644 --- a/BGL/examples/BGL_polyhedron_3/CMakeLists.txt +++ b/BGL/examples/BGL_polyhedron_3/CMakeLists.txt @@ -69,6 +69,6 @@ create_single_source_cgal_program( "copy_polyhedron.cpp" ) if(OpenMesh_FOUND) - target_link_libraries( copy_polyhedron ${OPENMESH_LIBRARIES} ) + target_link_libraries( copy_polyhedron PRIVATE ${OPENMESH_LIBRARIES} ) endif() diff --git a/BGL/test/BGL/CMakeLists.txt b/BGL/test/BGL/CMakeLists.txt index 52154710778..efcf6f6b6d0 100644 --- a/BGL/test/BGL/CMakeLists.txt +++ b/BGL/test/BGL/CMakeLists.txt @@ -56,7 +56,7 @@ include( CGAL_CreateSingleSourceCGALProgram ) if(OpenMesh_FOUND) create_single_source_cgal_program( "graph_concept_OpenMesh.cpp" ) - target_link_libraries( graph_concept_OpenMesh ${OPENMESH_LIBRARIES} ) + target_link_libraries( graph_concept_OpenMesh PRIVATE ${OPENMESH_LIBRARIES} ) endif() create_single_source_cgal_program( "next.cpp" ) @@ -87,26 +87,28 @@ create_single_source_cgal_program( "test_Has_member_id.cpp" ) create_single_source_cgal_program( "test_cgal_bgl_named_params.cpp" ) - +if(OpenMesh_FOUND) + target_link_libraries( test_graph_geometry PRIVATE ${OPENMESH_LIBRARIES}) +endif() if(OpenMesh_FOUND) - target_link_libraries( test_clear ${OPENMESH_LIBRARIES}) + target_link_libraries( test_clear PRIVATE ${OPENMESH_LIBRARIES}) endif() create_single_source_cgal_program( "test_Euler_operations.cpp" ) if(OpenMesh_FOUND) - target_link_libraries( test_Euler_operations ${OPENMESH_LIBRARIES}) + target_link_libraries( test_Euler_operations PRIVATE ${OPENMESH_LIBRARIES}) endif() create_single_source_cgal_program( "test_graph_traits.cpp" ) if(OpenMesh_FOUND) - target_link_libraries( test_graph_traits ${OPENMESH_LIBRARIES} ) + target_link_libraries( test_graph_traits PRIVATE ${OPENMESH_LIBRARIES} ) endif() create_single_source_cgal_program( "test_Properties.cpp" ) if(OpenMesh_FOUND) - target_link_libraries( test_Properties ${OPENMESH_LIBRARIES}) + target_link_libraries( test_Properties PRIVATE ${OPENMESH_LIBRARIES}) endif() diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index 9708252987f..1632d1bc6d5 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -63,7 +63,7 @@ function(create_single_source_cgal_program firstfile ) add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${exe_name} ) - target_link_libraries(${exe_name} CGAL::CGAL ) + target_link_libraries(${exe_name} PRIVATE CGAL::CGAL ) else() message(AUTHOR_WARNING "The executable ${exe_name} will not be created because the source file ${firstfile} does not exist.") endif() diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 8560602f720..7cfaeb7ae75 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -105,22 +105,22 @@ create_single_source_cgal_program( "corefinement_polyhedron_union.cpp" ) if(OpenMesh_FOUND) create_single_source_cgal_program( "compute_normals_example_OM.cpp" ) -target_link_libraries( compute_normals_example_OM ${OPENMESH_LIBRARIES} ) +target_link_libraries( compute_normals_example_OM PRIVATE ${OPENMESH_LIBRARIES} ) create_single_source_cgal_program( "hole_filling_example_OM.cpp" ) -target_link_libraries( hole_filling_example_OM ${OPENMESH_LIBRARIES} ) +target_link_libraries( hole_filling_example_OM PRIVATE ${OPENMESH_LIBRARIES} ) create_single_source_cgal_program( "point_inside_example_OM.cpp") -target_link_libraries( point_inside_example_OM ${OPENMESH_LIBRARIES} ) +target_link_libraries( point_inside_example_OM PRIVATE ${OPENMESH_LIBRARIES} ) create_single_source_cgal_program( "stitch_borders_example_OM.cpp" ) -target_link_libraries( stitch_borders_example_OM ${OPENMESH_LIBRARIES} ) +target_link_libraries( stitch_borders_example_OM PRIVATE ${OPENMESH_LIBRARIES} ) #create_single_source_cgal_program( "remove_degeneracies_example_OM.cpp") -#target_link_libraries( remove_degeneracies_example_OM ${OPENMESH_LIBRARIES} ) +#target_link_libraries( remove_degeneracies_example_OM PRIVATE ${OPENMESH_LIBRARIES} ) create_single_source_cgal_program( "triangulate_faces_example_OM.cpp") -target_link_libraries( triangulate_faces_example_OM ${OPENMESH_LIBRARIES} ) +target_link_libraries( triangulate_faces_example_OM PRIVATE ${OPENMESH_LIBRARIES} ) endif(OpenMesh_FOUND) diff --git a/Surface_mesh_deformation/examples/Surface_mesh_deformation/CMakeLists.txt b/Surface_mesh_deformation/examples/Surface_mesh_deformation/CMakeLists.txt index 513e6bc0d2e..a00d63cb99c 100644 --- a/Surface_mesh_deformation/examples/Surface_mesh_deformation/CMakeLists.txt +++ b/Surface_mesh_deformation/examples/Surface_mesh_deformation/CMakeLists.txt @@ -33,7 +33,7 @@ if ( CGAL_FOUND ) if ( OpenMesh_FOUND ) include( UseOpenMesh ) create_single_source_cgal_program( "all_roi_assign_example_with_OpenMesh.cpp" ) - target_link_libraries( all_roi_assign_example_with_OpenMesh ${OPENMESH_LIBRARIES} ) + target_link_libraries( all_roi_assign_example_with_OpenMesh PRIVATE ${OPENMESH_LIBRARIES} ) else() message(STATUS "Example that use OpenMesh will not be compiled.") endif() diff --git a/Surface_mesh_deformation/test/Surface_mesh_deformation/CMakeLists.txt b/Surface_mesh_deformation/test/Surface_mesh_deformation/CMakeLists.txt index 4f31a839f77..291b39ae8a1 100644 --- a/Surface_mesh_deformation/test/Surface_mesh_deformation/CMakeLists.txt +++ b/Surface_mesh_deformation/test/Surface_mesh_deformation/CMakeLists.txt @@ -27,7 +27,7 @@ if ( CGAL_FOUND ) if ( OpenMesh_FOUND ) include( UseOpenMesh ) create_single_source_cgal_program( "Cactus_deformation_session_OpenMesh.cpp" ) - target_link_libraries( Cactus_deformation_session_OpenMesh ${OPENMESH_LIBRARIES} ) + target_link_libraries( Cactus_deformation_session_OpenMesh PRIVATE ${OPENMESH_LIBRARIES} ) else() message(STATUS "Example that use OpenMesh will not be compiled.") endif() diff --git a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/CMakeLists.txt b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/CMakeLists.txt index 95d98601c9b..8d32c64c0b9 100644 --- a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/CMakeLists.txt +++ b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/CMakeLists.txt @@ -68,6 +68,6 @@ create_single_source_cgal_program( "segmentation_from_sdf_values_SM_example.cpp" if(OpenMesh_FOUND) create_single_source_cgal_program( "segmentation_from_sdf_values_OpenMesh_example.cpp" ) - target_link_libraries( segmentation_from_sdf_values_OpenMesh_example ${OPENMESH_LIBRARIES} ) + target_link_libraries( segmentation_from_sdf_values_OpenMesh_example PRIVATE ${OPENMESH_LIBRARIES} ) endif() diff --git a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/CMakeLists.txt b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/CMakeLists.txt index aaef527195e..61811abb690 100644 --- a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/CMakeLists.txt +++ b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/CMakeLists.txt @@ -1,3 +1,4 @@ + # Created by the script cgal_create_cmake_script # This is the CMake script for compiling a CGAL application. @@ -26,7 +27,7 @@ if ( CGAL_FOUND ) if ( OpenMesh_FOUND ) include( UseOpenMesh ) create_single_source_cgal_program( "shortest_paths_OpenMesh.cpp" ) - target_link_libraries( shortest_paths_OpenMesh ${OPENMESH_LIBRARIES} ) + target_link_libraries( shortest_paths_OpenMesh PRIVATE ${OPENMESH_LIBRARIES} ) else() message(STATUS "Examples that use OpenMesh will not be compiled.") endif() diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/CMakeLists.txt b/Surface_mesh_simplification/examples/Surface_mesh_simplification/CMakeLists.txt index 591c3347f10..e7cd781ee2d 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/CMakeLists.txt +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/CMakeLists.txt @@ -71,5 +71,5 @@ create_single_source_cgal_program( "edge_collapse_all_short_edges.cpp" ) if(OpenMesh_FOUND) create_single_source_cgal_program( "edge_collapse_OpenMesh.cpp" ) -target_link_libraries( edge_collapse_OpenMesh ${OPENMESH_LIBRARIES} ) +target_link_libraries( edge_collapse_OpenMesh PRIVATE ${OPENMESH_LIBRARIES} ) endif() From af38caef16eca454cc90eb5d6f83b4981ce16af6 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 12:27:35 +0200 Subject: [PATCH 039/298] Better CMake API for TBB - new CMake module `CGAL_target_use_TBB` that defines a function, that enables TBB per target. - `UseTBB.cmake` is deprecated. --- .../cmake/modules/CGAL_target_use_TBB.cmake | 12 ++++++ Installation/cmake/modules/UseTBB.cmake | 2 + Mesh_2/examples/Mesh_2/CMakeLists.txt | 6 +-- .../examples/Triangulation_3/CMakeLists.txt | 37 ++++++++----------- 4 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 Installation/cmake/modules/CGAL_target_use_TBB.cmake diff --git a/Installation/cmake/modules/CGAL_target_use_TBB.cmake b/Installation/cmake/modules/CGAL_target_use_TBB.cmake new file mode 100644 index 00000000000..0e3e3f8c803 --- /dev/null +++ b/Installation/cmake/modules/CGAL_target_use_TBB.cmake @@ -0,0 +1,12 @@ +if (CGAL_target_use_TBB_included) + return() +endif() +set(CGAL_target_use_TBB_included TRUE) + +function(CGAL_target_use_TBB target) + set(keyword PUBLIC) + + target_include_directories ( ${target} SYSTEM ${keyword} ${TBB_INCLUDE_DIRS} ) + target_link_libraries( ${target} ${keyword} ${TBB_LIBRARIES} ) + target_compile_options( ${target} ${keyword} -DNOMINMAX -DCGAL_LINKED_WITH_TBB ) +endfunction() diff --git a/Installation/cmake/modules/UseTBB.cmake b/Installation/cmake/modules/UseTBB.cmake index 25122e25825..5a22f6f079a 100644 --- a/Installation/cmake/modules/UseTBB.cmake +++ b/Installation/cmake/modules/UseTBB.cmake @@ -4,3 +4,5 @@ include_directories ( ${TBB_INCLUDE_DIRS} ) link_directories( ${TBB_LIBRARY_DIRS} ) add_definitions( -DNOMINMAX -DCGAL_LINKED_WITH_TBB ) + +message(DEPRECATION "This file UseTBB.cmake is deprecated, and the function `CGAL_target_use_TBB` from CGAL_target_use_TBB.cmake should be used instead.") diff --git a/Mesh_2/examples/Mesh_2/CMakeLists.txt b/Mesh_2/examples/Mesh_2/CMakeLists.txt index fc27a1170bd..43eaf6b585d 100644 --- a/Mesh_2/examples/Mesh_2/CMakeLists.txt +++ b/Mesh_2/examples/Mesh_2/CMakeLists.txt @@ -1,10 +1,6 @@ -# Created by the script cgal_create_cmake_script -# This is the CMake script for compiling a CGAL application. - - project( Mesh_2_Examples ) -cmake_minimum_required(VERSION 2.8.10) +cmake_minimum_required(VERSION 2.8.12) find_package(CGAL QUIET) diff --git a/Triangulation_3/examples/Triangulation_3/CMakeLists.txt b/Triangulation_3/examples/Triangulation_3/CMakeLists.txt index 32eebdcbae2..596bd423bd4 100644 --- a/Triangulation_3/examples/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/examples/Triangulation_3/CMakeLists.txt @@ -1,29 +1,11 @@ -# Created by the script cgal_create_cmake_script -# This is the CMake script for compiling a CGAL application. - - project( Triangulation_3_Examples ) -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 2.8.12) find_package(CGAL QUIET) if ( CGAL_FOUND ) - - include( ${CGAL_USE_FILE} ) - - find_package( TBB QUIET ) - - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - - include( CGAL_CreateSingleSourceCGALProgram ) - - include_directories (BEFORE "../../include") - create_single_source_cgal_program( "adding_handles_3.cpp" ) create_single_source_cgal_program( "color.cpp" ) create_single_source_cgal_program( "copy_triangulation_3.cpp" ) @@ -33,14 +15,27 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "info_insert_with_pair_iterator_regular.cpp" ) create_single_source_cgal_program( "info_insert_with_transform_iterator.cpp" ) create_single_source_cgal_program( "info_insert_with_zip_iterator.cpp" ) - create_single_source_cgal_program( "parallel_insertion_and_removal_in_regular_3.cpp" ) - create_single_source_cgal_program( "parallel_insertion_in_delaunay_3.cpp" ) create_single_source_cgal_program( "regular_3.cpp" ) create_single_source_cgal_program( "regular_with_info_3.cpp" ) create_single_source_cgal_program( "sequential_parallel.cpp" ) create_single_source_cgal_program( "simple_triangulation_3.cpp" ) create_single_source_cgal_program( "simplex.cpp" ) + find_package( TBB QUIET ) + + if( TBB_FOUND ) + include( CGAL_target_use_TBB ) + + create_single_source_cgal_program( "parallel_insertion_and_removal_in_regular_3.cpp" ) + create_single_source_cgal_program( "parallel_insertion_in_delaunay_3.cpp" ) + create_single_source_cgal_program( "sequential_parallel.cpp" ) + CGAL_target_use_TBB( parallel_insertion_and_removal_in_regular_3 ) + CGAL_target_use_TBB( parallel_insertion_in_delaunay_3 ) + CGAL_target_use_TBB( sequential_parallel ) + else() + message(STATUS "NOTICE: a few examples require TBB and will not be compiled.") + endif() + else() message(STATUS "This program requires the CGAL library, and will not be compiled.") From 20dbf716badf1665b421ab9142d2bbac9d7a372f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 14:29:55 +0200 Subject: [PATCH 040/298] Fill CGAL_USE_FILE for compatibility --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 6126ad3a908..e1b462471e0 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -98,3 +98,5 @@ target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY_STEP_2=1) include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) + +set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) From 7c97443e3769e955bb412a6b004a9f3b36418c15 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 15:48:52 +0200 Subject: [PATCH 041/298] Add a backward compatibility A few CMakeLists.txt modify `CGAL_3RD_PARTY_LIBRARIES` to add Boost or TBB libraries to it. In this case, emit a `DEPRECATION` warning and do link with `${CGAL_3RD_PARTY_LIBRARIES}`. --- .../cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake | 7 ++++++- Installation/cmake/modules/UseCGAL.cmake | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index 1632d1bc6d5..42001cc90c8 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -63,7 +63,12 @@ function(create_single_source_cgal_program firstfile ) add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${exe_name} ) - target_link_libraries(${exe_name} PRIVATE CGAL::CGAL ) + target_link_libraries(${exe_name} PRIVATE CGAL::CGAL) + if(CGAL_3RD_PARTY_LIBRARIES) + message(DEPRECATION "Deprecated use of CGAL_3RD_PARTY_LIBRARIES: " ${CGAL_3RD_PARTY_LIBRARIES}) + target_link_libraries(${exe_name} PRIVATE ${CGAL_3RD_PARTY_LIBRARIES}) + endif() + else() message(AUTHOR_WARNING "The executable ${exe_name} will not be created because the source file ${firstfile} does not exist.") endif() diff --git a/Installation/cmake/modules/UseCGAL.cmake b/Installation/cmake/modules/UseCGAL.cmake index 46e41281295..8dd14c9016e 100644 --- a/Installation/cmake/modules/UseCGAL.cmake +++ b/Installation/cmake/modules/UseCGAL.cmake @@ -64,7 +64,7 @@ if(NOT USE_CGAL_FILE_INCLUDED) if (CGAL_HEADER_ONLY) add_definitions(-DCGAL_HEADER_ONLY) link_directories ( ${CGAL_3RD_PARTY_LIBRARIES_DIRS} ) - link_libraries ( ${CGAL_3RD_PARTY_LIBRARIES} ) + link_libraries ( ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) else() link_directories ( ${CGAL_LIBRARIES_DIR} ${CGAL_3RD_PARTY_LIBRARIES_DIRS} ) link_libraries ( ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) From e1e90924a8f2bab30b9d4a3696b0035e04d209d0 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 15:50:19 +0200 Subject: [PATCH 042/298] Allow to configure/build all CGAL with step_2 If `CGAL_HEADER_ONLY_STEP_2` is `TRUE`, then a build of CGAL with `WITH_demos`, `WITH_examples` will succeed. --- Installation/CMakeLists.txt | 15 ++++++++++----- Installation/src/CGAL/CMakeLists.txt | 4 ++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 61045cd8133..7c4091667f4 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -53,10 +53,10 @@ if(CMAKE_MAJOR_VERSION GREATER 2) # Thus this option is only enabled for cmake >= 3.0. option(CGAL_HEADER_ONLY "Enable the header only version of CGAL" OFF ) - if (CGAL_HEADER_ONLY) + if (CGAL_HEADER_ONLY OR CGAL_HEADER_ONLY_STEP_2) set(CGAL_HEADER_ONLY TRUE CACHE BOOL "Enable cgal header only" FORCE) add_definitions(-DCGAL_HEADER_ONLY) - endif (CGAL_HEADER_ONLY) + endif() endif() @@ -678,7 +678,9 @@ option( CGAL_ENABLE_PRECONFIG "Select to allow to preconfiguration of external l # this; e.g. in MPFI/RS in Algebraic_kernel_d. For these cases CGAL # and the example/test must be configured with MPFI (just one is not sufficient) -#include(CGAL_SetupDependencies) +if(NOT CGAL_HEADER_ONLY_STEP_2) + include(CGAL_SetupDependencies) +endif() message("== Detect external libraries (DONE) ==\n") @@ -688,6 +690,7 @@ message("== Detect external libraries (DONE) ==\n") # #-------------------------------------------------------------------------------------------------- +if(NOT CGAL_HEADER_ONLY_STEP_2) # The variables set are the #defines expected by compiler_config.h # Note: CMake will not notice when files are added or removed # but this is probably OK for the installation procedure. @@ -745,6 +748,10 @@ if ( RUNNING_CGAL_AUTO_TEST AND MSVC ) file( APPEND "${CMAKE_BINARY_DIR}/include/CGAL/compiler_config.h" "#include \n\n" ) endif() +message("== Write compiler_config.h (DONE) ==\n") + +endif(NOT CGAL_HEADER_ONLY_STEP_2) + #-------------------------------------------------------------------------------------------------- # # -= Installation Setup =- @@ -775,8 +782,6 @@ set ( CGAL_INSTALL_MAN_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/man/man1" CACHE STRING "The folder where manual pages for CGAL scripts will be installed, relative to CMAKE_INSTALL_PREFIX" ) -message("== Write compiler_config.h (DONE) ==\n") - #-------------------------------------------------------------------------------------------------- # # -= Build =- diff --git a/Installation/src/CGAL/CMakeLists.txt b/Installation/src/CGAL/CMakeLists.txt index e433c92eca1..55ab4627631 100644 --- a/Installation/src/CGAL/CMakeLists.txt +++ b/Installation/src/CGAL/CMakeLists.txt @@ -10,6 +10,10 @@ endif() CGAL_setup_CGAL_dependencies(CGAL ${keyword}) +if(CGAL_HEADER_ONLY_STEP_2) + target_compile_definitions(CGAL INTERFACE CGAL_HEADER_ONLY_STEP_2=1) +endif() + if(NOT CGAL_DISABLE_GMP) get_dependency_version(GMP) get_dependency_version(MPFR) From 97352da979eb9c7d48089388cf03ca03afaceb9f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 16:44:24 +0200 Subject: [PATCH 043/298] Fix CGAL_Core and CGAL_HEADERS_ONLY_STEP_2 --- CGAL_Core/src/CGAL_Core/CMakeLists.txt | 2 +- .../cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake | 1 + .../include/CGAL/internal/enable_third_party_libraries.h | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CGAL_Core/src/CGAL_Core/CMakeLists.txt b/CGAL_Core/src/CGAL_Core/CMakeLists.txt index 4c5eeb14e89..0ce25c586ca 100644 --- a/CGAL_Core/src/CGAL_Core/CMakeLists.txt +++ b/CGAL_Core/src/CGAL_Core/CMakeLists.txt @@ -11,7 +11,7 @@ if(CGAL_Core_FOUND) set(keyword PUBLIC) endif() - target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) + CGAL_setup_CGAL_Core_dependencies(CGAL_Core ${keyword}) message("libCGAL_Core is configured") endif() diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake index 9050c1f33b8..ed1f6c23039 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake @@ -17,5 +17,6 @@ function(CGAL_setup_CGAL_Core_dependencies target) set(keyword PUBLIC) endif() use_CGAL_GMP_support(CGAL_Core ${keyword}) + target_compile_definitions(${target} ${keyword} CGAL_USE_CORE=1) target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) endfunction() diff --git a/Installation/include/CGAL/internal/enable_third_party_libraries.h b/Installation/include/CGAL/internal/enable_third_party_libraries.h index 394a343d28e..a33c9b9827d 100644 --- a/Installation/include/CGAL/internal/enable_third_party_libraries.h +++ b/Installation/include/CGAL/internal/enable_third_party_libraries.h @@ -45,4 +45,8 @@ # endif // CGAL_USE_MPFR and no #endif // __has_include +#if CGAL_USE_GMP && CGAL_USE_MPFR && ! CGAL_NO_CORE +# define CGAL_USE_CORE 1 +#endif + #endif // CGAL_INTERNAL_ENABLE_THIRD_PARTY_LIBRARIES_H From a27beba41c86c9993d30200a74d8eb37a4ca5b58 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 15 Sep 2016 17:45:14 +0200 Subject: [PATCH 044/298] Check if the targets already exist `CGALConfig.cmake` is guarded, but it might be that the targets are already defined by a sub-directory. --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index e1b462471e0..fb49e4a6fd2 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -73,9 +73,11 @@ endforeach() # Define the CGAL targets and theirs CGAL:: aliases # foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) - if(${cgal_lib}_FOUND) + if(${cgal_lib}_FOUND AND NOT TARGET ${cgal_lib}) add_library(${cgal_lib} INTERFACE) - add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) + if(NOT TARGET CGAL::${cgal_lib}) + add_library(CGAL::${cgal_lib} ALIAS ${cgal_lib}) + endif() endif() endforeach() From a0155a70ed8676e362b18fe227cce287097ce064 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 22 Sep 2016 11:51:45 +0200 Subject: [PATCH 045/298] Add Sphinx documentation The `Makefile` can be used to generate the documentation: make html `sphinx-build` must be in the path. --- .gitignore | 3 + .../cmake/modules/CGAL_SetupBoost.cmake | 27 ++ .../modules/CGAL_SetupCGALDependencies.cmake | 60 +++ .../CGAL_SetupCGAL_CoreDependencies.cmake | 41 ++ .../CGAL_SetupCGAL_ImageIODependencies.cmake | 32 ++ .../CGAL_SetupCGAL_Qt5Dependencies.cmake | 46 ++ .../cmake/modules/CGAL_SetupGMP.cmake | 28 ++ .../cmake/modules/CGAL_SetupLEDA.cmake | 26 ++ .../cmake/modules/Help/CGAL_SetupBoost.rst | 1 + .../Help/CGAL_SetupCGALDependencies.rst | 1 + .../Help/CGAL_SetupCGAL_CoreDependencies.rst | 1 + .../CGAL_SetupCGAL_ImageIODependencies.rst | 1 + .../Help/CGAL_SetupCGAL_Qt5Dependencies.rst | 1 + .../cmake/modules/Help/CGAL_SetupGMP.rst | 1 + .../cmake/modules/Help/CGAL_SetupLEDA.rst | 1 + Installation/cmake/modules/Help/cmake.py | 393 ++++++++++++++++++ Installation/cmake/modules/Help/conf.py | 340 +++++++++++++++ Installation/cmake/modules/Help/index.rst | 34 ++ Installation/cmake/modules/Makefile | 225 ++++++++++ 19 files changed, 1262 insertions(+) create mode 100644 Installation/cmake/modules/Help/CGAL_SetupBoost.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupCGALDependencies.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupCGAL_CoreDependencies.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupCGAL_ImageIODependencies.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupGMP.rst create mode 100644 Installation/cmake/modules/Help/CGAL_SetupLEDA.rst create mode 100644 Installation/cmake/modules/Help/cmake.py create mode 100644 Installation/cmake/modules/Help/conf.py create mode 100644 Installation/cmake/modules/Help/index.rst create mode 100644 Installation/cmake/modules/Makefile diff --git a/.gitignore b/.gitignore index cf6ea13ac18..7aa0d0711d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1094,6 +1094,9 @@ cgal_test_with_cmake.log # File created by the Semantic Bovinator (an Emacs package) semantic.cache +# Python cache files +*.pyc + # Files produced by a Qt compilation/execution .qglviewer.xml *.moc diff --git a/Installation/cmake/modules/CGAL_SetupBoost.cmake b/Installation/cmake/modules/CGAL_SetupBoost.cmake index 4016b255448..09b794a2914 100644 --- a/Installation/cmake/modules/CGAL_SetupBoost.cmake +++ b/Installation/cmake/modules/CGAL_SetupBoost.cmake @@ -1,3 +1,15 @@ +#.rst: +# CGAL_SetupBoost +# --------------- +# +# The module searchs for the `Boost` headers and library, by calling +# +# .. code-block:: cmake +# +# find_package(Boost) +# +# and defines the function :command:`use_CGAL_Boost_support`. + if ( CGAL_Boost_Setup ) return() endif() @@ -40,6 +52,21 @@ message( STATUS "Boost libraries: ${Boost_LIBRARIES}" ) set ( CGAL_USE_BOOST 1 ) + +#.rst: +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: use_CGAL_Boost_support +# +# Link the target with the `Boost` libraries:: +# +# use_CGAL_Boost_support( target [INTERFACE] ) +# +# If the option ``INTERFACE`` is passed, the dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword, or ``PUBLIC`` otherwise. + function(use_CGAL_Boost_support target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index 6473be244b7..e4c0a75f038 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -1,22 +1,82 @@ +#.rst: +# CGAL_SetupCGALDependencies +# -------------------------- +# +# The module searchs for the dependencies of the CGAL library: +# - the `GMP/MPFR` couple, +# - `LEDA` (optional) +# - the `Boost` libraries (mostly the header-only libraries) +# +# and defines the variable :variable:`CGAL_FOUND` and the function +# :command:`CGAL_setup_CGAL_dependencies`. +# +# Module Input Variables +# ^^^^^^^^^^^^^^^^^^^^^^ +# .. variable:: CGAL_DISABLE_GMP +# +# If set, the `GMP` library will not be used. If +# :variable:`WITH_LEDA` is not used either, a efficient exact +# number types are used by CGAL kernels for exact computation. +# +# .. variable:: WITH_LEDA +# +# If set, the `LEDA` library will be searched and used to provide +# the exact number types used by CGAL kernels. +# +# .. variable:: CGAL_HEADER_ONLY +# +# Set this variable if you are using the CGAL libraries as +# header-only libraries. +# if(CGAL_SetupCGALDependencies_included) return() endif() set(CGAL_SetupCGALDependencies_included TRUE) +#.rst: +# Used Modules +# ^^^^^^^^^^^^ +# - :module:`CGAL_SetupGMP` if(NOT CGAL_DISABLE_GMP) include(CGAL_SetupGMP) endif() +#.rst: +# - :module:`CGAL_SetupLEDA` if(WITH_LEDA) include(CGAL_SetupLEDA) endif() +#.rst: +# - :module:`CGAL_SetupBoost` include(CGAL_SetupBoost) +#.rst: +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# .. variable:: CGAL_FOUND +# +# Set to `TRUE` if the dependencies of CGAL were found. if(Boost_FOUND) set(CGAL_FOUND TRUE) endif() +#.rst: +# +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: CGAL_setup_CGAL_dependencies +# +# Link the target with the dependencies of CGAL:: +# +# CGAL_setup_CGAL_dependencies( target [INTERFACE] ) +# +# If the option ``INTERFACE`` is passed, the dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword, or ``PUBLIC`` otherwise. +# function(CGAL_setup_CGAL_dependencies target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake index ed1f6c23039..e3df4e49141 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake @@ -1,8 +1,34 @@ +#.rst: +# CGAL_SetupCGAL_CoreDependencies +# ------------------------------- +# +# The module searchs for the dependencies of the `CGAL_Core` library: +# - the `GMP/MPFR` couple, +# +# and defines the variable :variable:`CGAL_Core_FOUND` and the function +# :command:`CGAL_setup_CGAL_Core_dependencies`. +# +# Module Input Variables +# ^^^^^^^^^^^^^^^^^^^^^^ +# - :variable:`CGAL_DISABLE_GMP` + if(CGAL_SetupCGAL_CoreDependencies_included) return() endif() set(CGAL_SetupCGAL_CoreDependencies_included TRUE) +#.rst: +# Used Modules +# ^^^^^^^^^^^^ +# - :module:`CGAL_SetupGMP` +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# .. variable:: CGAL_Core_FOUND +# +# Set to `TRUE` if the dependencies of `CGAL_Core` were found. + if(NOT CGAL_DISABLE_GMP) include(CGAL_SetupGMP) if(GMP_FOUND) @@ -10,6 +36,21 @@ if(NOT CGAL_DISABLE_GMP) endif() endif() +#.rst: +# +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: CGAL_setup_CGAL_Core_dependencies +# +# Link the target with the dependencies of `CGAL_Core`:: +# +# CGAL_setup_CGAL_Core_dependencies( target [INTERFACE] ) +# +# If the option ``INTERFACE`` is passed, the dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword, or ``PUBLIC`` otherwise. +# function(CGAL_setup_CGAL_Core_dependencies target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake index e9d3acc6d43..35eb1d66c03 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_ImageIODependencies.cmake @@ -1,14 +1,46 @@ +#.rst: +# CGAL_SetupCGAL_ImageIODependencies +# ---------------------------------- +# +# The module searchs for the dependencies of the `CGAL_ImageIO` library: +# - the `Zlib` library (optional) +# +# by calling +# +# .. code-block:: cmake +# +# find_package(ZLIB) +# +# and defines the variable :variable:`CGAL_ImageIO_FOUND` and the function +# :command:`CGAL_setup_CGAL_ImageIO_dependencies`. +# if(CGAL_SetupCGAL_ImageIODependencies_included) return() endif() set(CGAL_SetupCGAL_ImageIODependencies_included TRUE) +#.rst: +# Used Modules +# ^^^^^^^^^^^^ +# - :module:`FindZLIB` find_package( ZLIB ) define_property(TARGET PROPERTY CGAL_TARGET_USES_ZLIB BRIEF_DOCS "Tells if the target uses ZLIB as a dependency" FULL_DOCS "Tells if the target uses ZLIB as a dependency") +#.rst: +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# .. variable:: CGAL_ImageIO_USE_ZLIB +# +# Set to `TRUE` if `CGAL_ImageIO` was compiled with `Zlib`. +# +# .. variable:: CGAL_ImageIO_FOUND +# +# Always set to `TRUE`. + if(ZLIB_FOUND) set(CGAL_ImageIO_USE_ZLIB ON CACHE BOOL "CGAL_ImageIO uses ZLIB") endif(ZLIB_FOUND) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake index c3eb36aaf0f..b8be3141991 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -1,8 +1,31 @@ +#.rst: +# CGAL_SetupCGAL_Qt5Dependencies +# ------------------------------ +# +# The module searchs for the dependencies of the `CGAL_Qt5` library: +# - the `Qt5` libraries +# +# by calling +# +# .. code-block:: cmake +# +# find_package(Qt5 QUIET COMPONENTS OpenGL Svg) +# find_package(OpenGL QUIET) +# +# and defines the variable :variable:`CGAL_Qt5_FOUND` and the function +# :command:`CGAL_setup_CGAL_Qt5_dependencies`. +# + if(CGAL_SetupCGAL_Qt5Dependencies_included) return() endif() set(CGAL_SetupCGAL_Qt5Dependencies_included TRUE) +#.rst: +# Used Modules +# ^^^^^^^^^^^^ +# - :module:`Qt5Config` +# - :module:`FindOpenGL` find_package(Qt5 QUIET COMPONENTS OpenGL Svg) find_package(OpenGL QUIET) @@ -20,6 +43,14 @@ if(NOT OPENGL_FOUND) set(CGAL_Qt5_MISSING_DEPS "${CGAL_Qt5_MISSING_DEPS} OpenGL") endif() +#.rst: +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# .. variable:: CGAL_Qt5_FOUND +# +# Set to `TRUE` if the dependencies of `CGAL_Qt5` were found. +# if(NOT CGAL_Qt5_MISSING_DEPS) set(CGAL_Qt5_FOUND TRUE) endif() @@ -34,6 +65,21 @@ endif() #message( STATUS "moc executable: ${QT_MOC_EXECUTABLE}" ) #message( STATUS "uic executable: ${QT_UIC_EXECUTABLE}" ) +#.rst: +# +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: CGAL_setup_CGAL_Qt5_dependencies +# +# Link the target with the dependencies of `CGAL_Qt5`:: +# +# CGAL_setup_CGAL_Qt5_dependencies( target [INTERFACE] ) +# +# If the option ``INTERFACE`` is passed, the dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword, or ``PUBLIC`` otherwise. +# function(CGAL_setup_CGAL_Qt5_dependencies target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupGMP.cmake b/Installation/cmake/modules/CGAL_SetupGMP.cmake index 5fc936e9a43..757ca2637a7 100644 --- a/Installation/cmake/modules/CGAL_SetupGMP.cmake +++ b/Installation/cmake/modules/CGAL_SetupGMP.cmake @@ -1,3 +1,17 @@ +#.rst: +# CGAL_SetupGMP +# ------------- +# +# The module searchs for the `GMP` and `MPFR` headers and libraries, +# by calling +# +# .. code-block:: cmake +# +# find_package(GMP) +# find_package(MPFR) +# +# and defines the function :command:`use_CGAL_GMP_support`. + if(CGAL_SetupGMP_included OR CGAL_DISABLE_GMP) return() endif() @@ -6,6 +20,20 @@ set(CGAL_SetupGMP_included TRUE) find_package(GMP) find_package(MPFR) +#.rst: +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: use_CGAL_GMP_support +# +# Link the target with the `GMP` and `MPFR` libraries:: +# +# use_CGAL_GMP_support( target [INTERFACE] ) +# +# If the option ``INTERFACE`` is passed, the dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword, or ``PUBLIC`` otherwise. + function(use_CGAL_GMP_support target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/CGAL_SetupLEDA.cmake b/Installation/cmake/modules/CGAL_SetupLEDA.cmake index 92bb22e1440..3097651c2c9 100644 --- a/Installation/cmake/modules/CGAL_SetupLEDA.cmake +++ b/Installation/cmake/modules/CGAL_SetupLEDA.cmake @@ -1,3 +1,15 @@ +#.rst: +# CGAL_SetupLEDA +# -------------- +# +# The module searchs for the `LEDA` headers and library, by calling +# +# .. code-block:: cmake +# +# find_package(LEDA) +# +# and defines the function :command:`use_CGAL_LEDA_support`. + if(CGAL_SetupLEDA_included) return() endif() @@ -5,6 +17,20 @@ set(CGAL_SetupLEDA_included TRUE) find_package(LEDA) +#.rst: +# Provided Functions +# ^^^^^^^^^^^^^^^^^^ +# +# .. command:: use_CGAL_LEDA_support +# +# Link the target with the `LEDA` libraries:: +# +# use_CGAL_LEDA_support( target [INTERFACE] ) +# +# If the option ``INTERFACE`` is passed, the dependencies are +# added using :command:`target_link_libraries` with the ``INTERFACE`` +# keyword, or ``PUBLIC`` otherwise. + function(use_CGAL_LEDA_support target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) diff --git a/Installation/cmake/modules/Help/CGAL_SetupBoost.rst b/Installation/cmake/modules/Help/CGAL_SetupBoost.rst new file mode 100644 index 00000000000..23f0d839045 --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupBoost.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupBoost.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupCGALDependencies.rst b/Installation/cmake/modules/Help/CGAL_SetupCGALDependencies.rst new file mode 100644 index 00000000000..b660bd26231 --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupCGALDependencies.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupCGALDependencies.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupCGAL_CoreDependencies.rst b/Installation/cmake/modules/Help/CGAL_SetupCGAL_CoreDependencies.rst new file mode 100644 index 00000000000..7db98a80573 --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupCGAL_CoreDependencies.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupCGAL_CoreDependencies.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupCGAL_ImageIODependencies.rst b/Installation/cmake/modules/Help/CGAL_SetupCGAL_ImageIODependencies.rst new file mode 100644 index 00000000000..98fef84747d --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupCGAL_ImageIODependencies.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupCGAL_ImageIODependencies.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst b/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst new file mode 100644 index 00000000000..815f7a4dd5f --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupCGAL_Qt5Dependencies.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupCGAL_Qt5Dependencies.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupGMP.rst b/Installation/cmake/modules/Help/CGAL_SetupGMP.rst new file mode 100644 index 00000000000..701ef3aabed --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupGMP.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupGMP.cmake diff --git a/Installation/cmake/modules/Help/CGAL_SetupLEDA.rst b/Installation/cmake/modules/Help/CGAL_SetupLEDA.rst new file mode 100644 index 00000000000..d9a872a44a8 --- /dev/null +++ b/Installation/cmake/modules/Help/CGAL_SetupLEDA.rst @@ -0,0 +1 @@ +.. cmake-module:: ../CGAL_SetupLEDA.cmake diff --git a/Installation/cmake/modules/Help/cmake.py b/Installation/cmake/modules/Help/cmake.py new file mode 100644 index 00000000000..32003d475e6 --- /dev/null +++ b/Installation/cmake/modules/Help/cmake.py @@ -0,0 +1,393 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2013 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +import os +import re + +# Monkey patch for pygments reporting an error when generator expressions are +# used. +# https://bitbucket.org/birkenfeld/pygments-main/issue/942/cmake-generator-expressions-not-handled +from pygments.lexers import CMakeLexer +from pygments.token import Name, Operator +from pygments.lexer import bygroups +CMakeLexer.tokens["args"].append(('(\\$<)(.+?)(>)', + bygroups(Operator, Name.Variable, Operator))) + +# Monkey patch for sphinx generating invalid content for qcollectiongenerator +# https://bitbucket.org/birkenfeld/sphinx/issue/1435/qthelp-builder-should-htmlescape-keywords +from sphinx.util.pycompat import htmlescape +from sphinx.builders.qthelp import QtHelpBuilder +old_build_keywords = QtHelpBuilder.build_keywords +def new_build_keywords(self, title, refs, subitems): + old_items = old_build_keywords(self, title, refs, subitems) + new_items = [] + for item in old_items: + before, rest = item.split("ref=\"", 1) + ref, after = rest.split("\"") + if ("<" in ref and ">" in ref): + new_items.append(before + "ref=\"" + htmlescape(ref) + "\"" + after) + else: + new_items.append(item) + return new_items +QtHelpBuilder.build_keywords = new_build_keywords + + +from docutils.parsers.rst import Directive, directives +from docutils.transforms import Transform +try: + from docutils.utils.error_reporting import SafeString, ErrorString +except ImportError: + # error_reporting was not in utils before version 0.11: + from docutils.error_reporting import SafeString, ErrorString + +from docutils import io, nodes + +from sphinx.directives import ObjectDescription +from sphinx.domains import Domain, ObjType +from sphinx.roles import XRefRole +from sphinx.util.nodes import make_refnode +from sphinx import addnodes + +class CMakeModule(Directive): + required_arguments = 1 + optional_arguments = 0 + final_argument_whitespace = True + option_spec = {'encoding': directives.encoding} + + def __init__(self, *args, **keys): + self.re_start = re.compile(r'^#\[(?P=*)\[\.rst:$') + Directive.__init__(self, *args, **keys) + + def run(self): + settings = self.state.document.settings + if not settings.file_insertion_enabled: + raise self.warning('"%s" directive disabled.' % self.name) + + env = self.state.document.settings.env + rel_path, path = env.relfn2path(self.arguments[0]) + path = os.path.normpath(path) + encoding = self.options.get('encoding', settings.input_encoding) + e_handler = settings.input_encoding_error_handler + try: + settings.record_dependencies.add(path) + f = io.FileInput(source_path=path, encoding=encoding, + error_handler=e_handler) + except UnicodeEncodeError as error: + raise self.severe('Problems with "%s" directive path:\n' + 'Cannot encode input file path "%s" ' + '(wrong locale?).' % + (self.name, SafeString(path))) + except IOError as error: + raise self.severe('Problems with "%s" directive path:\n%s.' % + (self.name, ErrorString(error))) + raw_lines = f.read().splitlines() + f.close() + rst = None + lines = [] + for line in raw_lines: + if rst is not None and rst != '#': + # Bracket mode: check for end bracket + pos = line.find(rst) + if pos >= 0: + if line[0] == '#': + line = '' + else: + line = line[0:pos] + rst = None + else: + # Line mode: check for .rst start (bracket or line) + m = self.re_start.match(line) + if m: + rst = ']%s]' % m.group('eq') + line = '' + elif line == '#.rst:': + rst = '#' + line = '' + elif rst == '#': + if line == '#' or line[:2] == '# ': + line = line[2:] + else: + rst = None + line = '' + elif rst is None: + line = '' + lines.append(line) + if rst is not None and rst != '#': + raise self.warning('"%s" found unclosed bracket "#[%s[.rst:" in %s' % + (self.name, rst[1:-1], path)) + self.state_machine.insert_input(lines, path) + return [] + +class _cmake_index_entry: + def __init__(self, desc): + self.desc = desc + + def __call__(self, title, targetid, main = 'main'): +# return (targetid, title, main, targetid, '', '', 0) + return ('pair', u'%s ; %s' % (self.desc, title), targetid, main) + +_cmake_index_objs = { + 'command': _cmake_index_entry('command'), + 'generator': _cmake_index_entry('generator'), + 'manual': _cmake_index_entry('manual'), + 'module': _cmake_index_entry('module'), + 'policy': _cmake_index_entry('policy'), + 'prop_cache': _cmake_index_entry('cache property'), + 'prop_dir': _cmake_index_entry('directory property'), + 'prop_gbl': _cmake_index_entry('global property'), + 'prop_inst': _cmake_index_entry('installed file property'), + 'prop_sf': _cmake_index_entry('source file property'), + 'prop_test': _cmake_index_entry('test property'), + 'prop_tgt': _cmake_index_entry('target property'), + 'variable': _cmake_index_entry('variable'), + } + +def _cmake_object_inventory(env, document, line, objtype, targetid): + inv = env.domaindata['cmake']['objects'] + if targetid in inv: + document.reporter.warning( + 'CMake object "%s" also described in "%s".' % + (targetid, env.doc2path(inv[targetid][0])), line=line) + inv[targetid] = (env.docname, objtype) + +class CMakeTransform(Transform): + + # Run this transform early since we insert nodes we want + # treated as if they were written in the documents. + default_priority = 210 + + def __init__(self, document, startnode): + Transform.__init__(self, document, startnode) + self.titles = {} + + def parse_title(self, docname): + """Parse a document title as the first line starting in [A-Za-z0-9<] + or fall back to the document basename if no such line exists. + The cmake --help-*-list commands also depend on this convention. + Return the title or False if the document file does not exist. + """ + env = self.document.settings.env + title = self.titles.get(docname) + if title is None: + fname = os.path.join(env.srcdir, docname+'.rst') + try: + f = open(fname, 'r') + except IOError: + title = False + else: + for line in f: + if len(line) > 0 and (line[0].isalnum() or line[0] == '<'): + title = line.rstrip() + break + f.close() + if title is None: + title = os.path.basename(docname) + self.titles[docname] = title + return title + + def apply(self): + env = self.document.settings.env + + # Treat some documents as cmake domain objects. + objtype, sep, tail = env.docname.rpartition('/') + make_index_entry = _cmake_index_objs.get(objtype) + if make_index_entry: + title = self.parse_title(env.docname) + # Insert the object link target. + if objtype == 'command': + targetname = title.lower() + else: + targetname = title + targetid = '%s:%s' % (objtype, targetname) + targetnode = nodes.target('', '', ids=[targetid]) + self.document.note_explicit_target(targetnode) + self.document.insert(0, targetnode) + # Insert the object index entry. + indexnode = addnodes.index() + indexnode['entries'] = [make_index_entry(title, targetid)] + self.document.insert(0, indexnode) + # Add to cmake domain object inventory + _cmake_object_inventory(env, self.document, 1, objtype, targetid) + +class CMakeObject(ObjectDescription): + + def handle_signature(self, sig, signode): + # called from sphinx.directives.ObjectDescription.run() + signode += addnodes.desc_name(sig, sig) + return sig + + def add_target_and_index(self, name, sig, signode): + if self.objtype == 'command': + targetname = name.lower() + else: + targetname = name + targetid = '%s:%s' % (self.objtype, targetname) + if targetid not in self.state.document.ids: + signode['names'].append(targetid) + signode['ids'].append(targetid) + signode['first'] = (not self.names) + self.state.document.note_explicit_target(signode) + _cmake_object_inventory(self.env, self.state.document, + self.lineno, self.objtype, targetid) + + make_index_entry = _cmake_index_objs.get(self.objtype) + if make_index_entry: + self.indexnode['entries'].append(make_index_entry(name, targetid)) + +class CMakeXRefRole(XRefRole): + + # See sphinx.util.nodes.explicit_title_re; \x00 escapes '<'. + _re = re.compile(r'^(.+?)(\s*)(?$', re.DOTALL) + _re_sub = re.compile(r'^([^()\s]+)\s*\(([^()]*)\)$', re.DOTALL) + + def __call__(self, typ, rawtext, text, *args, **keys): + # Translate CMake command cross-references of the form: + # `command_name(SUB_COMMAND)` + # to have an explicit target: + # `command_name(SUB_COMMAND) ` + if typ == 'cmake:command': + m = CMakeXRefRole._re_sub.match(text) + if m: + text = '%s <%s>' % (text, m.group(1)) + # CMake cross-reference targets frequently contain '<' so escape + # any explicit `` with '<' not preceded by whitespace. + while True: + m = CMakeXRefRole._re.match(text) + if m and len(m.group(2)) == 0: + text = '%s\x00<%s>' % (m.group(1), m.group(3)) + else: + break + return XRefRole.__call__(self, typ, rawtext, text, *args, **keys) + + # We cannot insert index nodes using the result_nodes method + # because CMakeXRefRole is processed before substitution_reference + # nodes are evaluated so target nodes (with 'ids' fields) would be + # duplicated in each evaluted substitution replacement. The + # docutils substitution transform does not allow this. Instead we + # use our own CMakeXRefTransform below to add index entries after + # substitutions are completed. + # + # def result_nodes(self, document, env, node, is_ref): + # pass + +class CMakeXRefTransform(Transform): + + # Run this transform early since we insert nodes we want + # treated as if they were written in the documents, but + # after the sphinx (210) and docutils (220) substitutions. + default_priority = 221 + + def apply(self): + env = self.document.settings.env + + # Find CMake cross-reference nodes and add index and target + # nodes for them. + for ref in self.document.traverse(addnodes.pending_xref): + if not ref['refdomain'] == 'cmake': + continue + + objtype = ref['reftype'] + make_index_entry = _cmake_index_objs.get(objtype) + if not make_index_entry: + continue + + objname = ref['reftarget'] + targetnum = env.new_serialno('index-%s:%s' % (objtype, objname)) + + targetid = 'index-%s-%s:%s' % (targetnum, objtype, objname) + targetnode = nodes.target('', '', ids=[targetid]) + self.document.note_explicit_target(targetnode) + + indexnode = addnodes.index() + indexnode['entries'] = [make_index_entry(objname, targetid, '')] + ref.replace_self([indexnode, targetnode, ref]) + +class CMakeDomain(Domain): + """CMake domain.""" + name = 'cmake' + label = 'CMake' + object_types = { + 'command': ObjType('command', 'command'), + 'generator': ObjType('generator', 'generator'), + 'variable': ObjType('variable', 'variable'), + 'module': ObjType('module', 'module'), + 'policy': ObjType('policy', 'policy'), + 'prop_cache': ObjType('prop_cache', 'prop_cache'), + 'prop_dir': ObjType('prop_dir', 'prop_dir'), + 'prop_gbl': ObjType('prop_gbl', 'prop_gbl'), + 'prop_inst': ObjType('prop_inst', 'prop_inst'), + 'prop_sf': ObjType('prop_sf', 'prop_sf'), + 'prop_test': ObjType('prop_test', 'prop_test'), + 'prop_tgt': ObjType('prop_tgt', 'prop_tgt'), + 'manual': ObjType('manual', 'manual'), + } + directives = { + 'command': CMakeObject, + 'variable': CMakeObject, + # Other object types cannot be created except by the CMakeTransform + # 'generator': CMakeObject, + # 'module': CMakeObject, + # 'policy': CMakeObject, + # 'prop_cache': CMakeObject, + # 'prop_dir': CMakeObject, + # 'prop_gbl': CMakeObject, + # 'prop_inst': CMakeObject, + # 'prop_sf': CMakeObject, + # 'prop_test': CMakeObject, + # 'prop_tgt': CMakeObject, + # 'manual': CMakeObject, + } + roles = { + 'command': CMakeXRefRole(fix_parens = True, lowercase = True), + 'generator': CMakeXRefRole(), + 'variable': CMakeXRefRole(), + 'module': CMakeXRefRole(), + 'policy': CMakeXRefRole(), + 'prop_cache': CMakeXRefRole(), + 'prop_dir': CMakeXRefRole(), + 'prop_gbl': CMakeXRefRole(), + 'prop_inst': CMakeXRefRole(), + 'prop_sf': CMakeXRefRole(), + 'prop_test': CMakeXRefRole(), + 'prop_tgt': CMakeXRefRole(), + 'manual': CMakeXRefRole(), + } + initial_data = { + 'objects': {}, # fullname -> docname, objtype + } + + def clear_doc(self, docname): + to_clear = set() + for fullname, (fn, _) in self.data['objects'].items(): + if fn == docname: + to_clear.add(fullname) + for fullname in to_clear: + del self.data['objects'][fullname] + + def resolve_xref(self, env, fromdocname, builder, + typ, target, node, contnode): + targetid = '%s:%s' % (typ, target) + obj = self.data['objects'].get(targetid) + if obj is None: + # TODO: warn somehow? + return None + return make_refnode(builder, fromdocname, obj[0], targetid, + contnode, target) + + def get_objects(self): + for refname, (docname, type) in self.data['objects'].items(): + yield (refname, refname, type, docname, refname, 1) + +def setup(app): + app.add_directive('cmake-module', CMakeModule) + app.add_transform(CMakeTransform) + app.add_transform(CMakeXRefTransform) + app.add_domain(CMakeDomain) diff --git a/Installation/cmake/modules/Help/conf.py b/Installation/cmake/modules/Help/conf.py new file mode 100644 index 00000000000..8f40868be48 --- /dev/null +++ b/Installation/cmake/modules/Help/conf.py @@ -0,0 +1,340 @@ +# -*- coding: utf-8 -*- +# +# CGAL CMake Modules documentation build configuration file, created by +# sphinx-quickstart on Fri Sep 23 22:51:32 2016. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +primary_domain = 'cmake' + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['cmake'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +# +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'CGAL CMake Modules' +copyright = u'2016, The CGAL Project' +author = u'The CGAL Project' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'4.10' +# The full version, including alpha/beta/rc tags. +release = u'4.10' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# +# today = '' +# +# Else, today_fmt is used as the format for a strftime call. +# +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. +# " v documentation" by default. +# +# html_title = u'CGAL CMake Modules v4.10' + +# A shorter title for the navigation bar. Default is the same as html_title. +# +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# +# html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# +# html_extra_path = [] + +# If not None, a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# The empty string is equivalent to '%b %d, %Y'. +# +# html_last_updated_fmt = None + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# +# html_additional_pages = {} + +# If false, no module index is generated. +# +# html_domain_indices = True + +# If false, no index is generated. +# +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' +# +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# 'ja' uses this config value. +# 'zh' user can custom change `jieba` dictionary path. +# +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'CGALModulesdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'CGALModules.tex', u'CGAL CMake Modules Documentation', + u'Laurent Rineau', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# +# latex_use_parts = False + +# If true, show page references after internal links. +# +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# +# latex_appendices = [] + +# It false, will not define \strong, \code, itleref, \crossref ... but only +# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added +# packages. +# +# latex_keep_old_macro_names = True + +# If false, no module index is generated. +# +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'cgalmodules', u'CGAL CMake Modules Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +# +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'CGALModules', u'CGAL CMake Modules Documentation', + author, 'CGALModules', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +# +# texinfo_appendices = [] + +# If false, no module index is generated. +# +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# +# texinfo_no_detailmenu = False diff --git a/Installation/cmake/modules/Help/index.rst b/Installation/cmake/modules/Help/index.rst new file mode 100644 index 00000000000..7178feb71ac --- /dev/null +++ b/Installation/cmake/modules/Help/index.rst @@ -0,0 +1,34 @@ +.. CGAL CMake Modules documentation master file, created by + sphinx-quickstart on Fri Sep 23 22:51:32 2016. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to CGAL CMake Modules's documentation! +============================================== + +Contents: + +.. toctree:: + :maxdepth: 1 + + CGAL_SetupGMP + CGAL_SetupLEDA + CGAL_SetupBoost + CGAL_SetupCGALDependencies + CGAL_SetupCGAL_CoreDependencies + CGAL_SetupCGAL_Qt5Dependencies + CGAL_SetupCGAL_ImageIODependencies + +TODO +^^^^ +- ``CGAL_SetupDependencies.cmake`` +- ``CGAL_SetupFlags.cmake`` +- ``CGAL_SetupVLD.cmake`` + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/Installation/cmake/modules/Makefile b/Installation/cmake/modules/Makefile new file mode 100644 index 00000000000..a45ff590e87 --- /dev/null +++ b/Installation/cmake/modules/Makefile @@ -0,0 +1,225 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) Help +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) Help + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " epub3 to make an epub3" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/CGALModules.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/CGALModules.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/CGALModules" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/CGALModules" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: epub3 +epub3: + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +.PHONY: dummy +dummy: + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." From c89d55110503010d83061fc5fb9846847dba9e95 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Mon, 27 Mar 2017 18:13:20 +0200 Subject: [PATCH 046/298] Add message saying that the header-only mode is activated --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index fb49e4a6fd2..2b4a7c73132 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -1,11 +1,13 @@ # -# This file is the CGALConfig.cmake for a pure header-only CGAL installion +# This file is the CGALConfig.cmake for a pure header-only CGAL installation # if(CGALConfig_included) return() endif() +message(STATUS "Using pure header-only CGAL") + set(CGALConfig_included TRUE) get_filename_component(CGAL_CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) From 3e2ae550fbdcc358ec4f159009b72403350dde86 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 29 Mar 2017 12:48:53 +0200 Subject: [PATCH 047/298] Add CGALConfig.cmake at the root of the Git layout That CGALConfig.cmake is a sort of alias for lib/cmake/CGAL/CGALConfig.cmake in Installation. --- CGALConfig.cmake | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 CGALConfig.cmake diff --git a/CGALConfig.cmake b/CGALConfig.cmake new file mode 100644 index 00000000000..819331d263c --- /dev/null +++ b/CGALConfig.cmake @@ -0,0 +1,6 @@ +# +# This file points to the CGALConfig.cmake for a pure header-only +# CGAL installation. +# + +include(${CMAKE_CURRENT_LIST_DIR}/Installation/lib/cmake/CGAL/CGALConfig.cmake) From 10aa5b54203578a535a0cd25aedcf014314d9e1f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 29 Mar 2017 12:51:02 +0200 Subject: [PATCH 048/298] Add also a CGALConfig.cmake at the root of the CGAL tarball --- Installation/CGALConfig.cmake | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Installation/CGALConfig.cmake diff --git a/Installation/CGALConfig.cmake b/Installation/CGALConfig.cmake new file mode 100644 index 00000000000..075a14aea6e --- /dev/null +++ b/Installation/CGALConfig.cmake @@ -0,0 +1,6 @@ +# +# This file points to the CGALConfig.cmake for a pure header-only +# CGAL installation. +# + +include(${CMAKE_CURRENT_LIST_DIR}/lib/cmake/CGAL/CGALConfig.cmake) From a20eb3c7485e6170734d4dc638baee75e03efd91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 7 Jun 2017 11:14:34 +0200 Subject: [PATCH 049/298] add debug function to get the number of curves overlapping on a subcurve --- .../include/CGAL/Sweep_line_2/Sweep_line_subcurve.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index dd31aa4636e..063b033663c 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -250,6 +250,15 @@ public: else return (depth2 + 1); } + /*! Get the number of input curves contributing to the subcurve */ + unsigned int number_of_original_curves() const + { + if (m_orig_subcurve1 == NULL) return 1; + unsigned int d1 = m_orig_subcurve1->number_of_original_curves(); + unsigned int d2 = m_orig_subcurve2->number_of_original_curves(); + return d1+d2; + } + #ifdef CGAL_SL_VERBOSE void Print() const; #endif @@ -262,7 +271,7 @@ public: std::cout << "Curve " << this << " (" << m_lastCurve << ") " << " [sc1: " << m_orig_subcurve1 - << ", sc2: " << m_orig_subcurve2 << "]"; + << ", sc2: " << m_orig_subcurve2 << "]" << " " << number_of_original_curves() ; } #endif From 782b6310da1f5c91d2244aa9efd64ddeebfd99ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 8 Jun 2017 20:49:29 +0200 Subject: [PATCH 050/298] compute all overlap curves in _intersect and handle them in _add_curve_to_right --- Sweep_line_2/include/CGAL/Sweep_line_2.h | 20 +- .../Sweep_line_2/Basic_sweep_line_2_impl.h | 1 + .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 315 ++++++------------ .../CGAL/Sweep_line_2/Sweep_line_event.h | 4 + .../CGAL/Sweep_line_2/Sweep_line_subcurve.h | 5 + 5 files changed, 117 insertions(+), 228 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2.h index 2408d387768..c7f0c74c784 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2.h @@ -167,22 +167,18 @@ protected: /*! Add a subcurve to the right of an event point. * \param event The event point. * \param curve The subcurve to add. - * \return (true) if an overlap occured; (false) otherwise. */ - virtual bool _add_curve_to_right(Event* event, Subcurve* curve, - bool overlap_exist = false); + virtual bool _add_curve_to_right(Event* event, Subcurve* curve); /*! Fix overlapping subcurves before handling the current event. */ void _fix_overlap_subcurves(); - /*! Handle overlap at right insertion to event. - * \param event The event point. - * \param curve The subcurve representing the overlap. - * \param iter An iterator for the curves. - * \param overlap_exist + /*! create an overlap subcurve from overlap_cv between c1 and c2. + * \param overlap_cv the overlapping curve. + * \param c1 first subcurve contributing to the overlap. + * \param c2 second subcurve contributing to the overlap. */ - void _handle_overlap(Event* event, Subcurve* curve, - Event_subcurve_iterator iter, bool overlap_exist); + void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , Subcurve* c2); /*! Compute intersections between the two given curves. * If the two curves intersect, create a new event (or use the event that @@ -207,13 +203,11 @@ protected: * \param mult Its multiplicity. * \param curve1 The first curve. * \param curve2 The second curve. - * \param is_overlap Whether the two curves overlap at xp. */ void _create_intersection_point(const Point_2& xp, unsigned int mult, Subcurve*& c1, - Subcurve*& c2, - bool is_overlap = false); + Subcurve*& c2); /*! Fix a subcurve that represents an overlap. * \param sc The subcurve. diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h index 7e9b92520f2..ad6b41c1809 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h @@ -462,6 +462,7 @@ void Basic_sweep_line_2::_sort_left_curves() Subcurve* curve = *(m_currentEvent->left_curves_begin()); Status_line_iterator sl_iter = curve->hint(); + CGAL_assertion(sl_iter != m_statusLine.end()); CGAL_assertion(*sl_iter == curve); // Look for the first curve in the vertical ordering that is also in the // left curve of the event diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 460316a29f8..8725e272e2f 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -98,6 +98,10 @@ void Sweep_line_2::_handle_left_curves() CGAL_SL_PRINT_TEXT("The event is on a curve in the status line"); CGAL_SL_PRINT_EOL(); + + // Obtain the subcurve that contains the current event + Subcurve* sc = static_cast(*(this->m_status_line_insert_hint)); + // The current event point starts at the interior of a subcurve that // already exists in the status line (this may also indicate an overlap). if (! this->m_currentEvent->has_right_curves()) { @@ -113,37 +117,21 @@ void Sweep_line_2::_handle_left_curves() // intersection. CGAL_assertion(this->m_currentEvent->is_action()); this->m_currentEvent->set_weak_intersection(); + this->m_visitor->update_event(this->m_currentEvent, sc); + + this->m_currentEvent->add_curve_to_left(sc); + this->m_currentEvent->push_back_curve_to_right(sc); } + else + _add_curve_to_right(this->m_currentEvent, sc); - // Obtain the subcurve that contains the current event, and add it to - // the left curves incident to the event. - Subcurve* sc = static_cast(*(this->m_status_line_insert_hint)); - const X_monotone_curve_2& last_curve = sc->last_curve(); - - this->m_currentEvent->set_weak_intersection(); - this->m_visitor->update_event(this->m_currentEvent, sc); - - this->m_currentEvent->add_curve_to_left(sc); - - // If necessary, add the subcurves as a right incident curve as well. - // We also check for overlaps. - bool is_overlap = _add_curve_to_right(this->m_currentEvent, sc); - - this->m_traits->split_2_object()(last_curve, - this->m_currentEvent->point(), - sub_cv1, sub_cv2); - - ++(this->m_status_line_insert_hint); - - if (is_overlap) { - // Handle overlaps. - this->m_visitor->before_handle_event(this->m_currentEvent); - this->m_visitor->add_subcurve(sub_cv1, sc); - CGAL_SL_PRINT_ERASE(*sl_pos); - this->m_statusLine.erase(sl_pos); - CGAL_SL_PRINT_END_EOL("handling left curves"); - return; - } + // sc is now on the left + CGAL_SL_PRINT_TEXT("Event after update:"); + CGAL_SL_PRINT_EOL(); + CGAL_SL_PRINT_EVENT_INFO(this->m_currentEvent); + CGAL_SL_PRINT_EOL(); + CGAL_assertion(std::distance(this->m_currentEvent->left_curves_begin(), + this->m_currentEvent->left_curves_end())==1); } else { // The event is not located on any subcurve. @@ -286,7 +274,7 @@ void Sweep_line_2::_handle_right_curves() template bool Sweep_line_2:: -_add_curve_to_right(Event* event, Subcurve* curve, bool overlap_exist) +_add_curve_to_right(Event* event, Subcurve* curve) { CGAL_SL_PRINT_START("adding a Curve to the right of ("); CGAL_SL_DEBUG(this->PrintEvent(event)); @@ -300,7 +288,7 @@ _add_curve_to_right(Event* event, Subcurve* curve, bool overlap_exist) { CGAL_SL_PRINT_CURVE(*iter); CGAL_SL_PRINT_EOL(); - if ((curve == *iter) || (*iter)->is_inner_node(curve)) { + if ((*iter)->is_inner_node(curve)) { CGAL_SL_PRINT_END_EOL("adding a Curve to the right (curve exists)"); return false; } @@ -312,19 +300,7 @@ _add_curve_to_right(Event* event, Subcurve* curve, bool overlap_exist) return false; } - /*! If the two curves have the exact same leaves, then use the new curve - * as a right curve instead of the existing one. - * \todo EF, this may not be a sufficient condition. It is possible that - * we also need to check whether the event at the right endpoint has a - * matching left curve, and only if it has, make the switch. If this is - * the case, then other modifications are necessary. I hope it's not. - */ - if ((curve)->has_same_leaves(*iter)) { - *iter = curve; // replace the current curve with the new one. - CGAL_SL_PRINT_END_EOL - ("adding a Curve to the right (curve completely overlaps)"); - return false; - } + CGAL_assertion(!(curve)->has_same_leaves(*iter)); if ((curve)->has_common_leaf(*iter)) { /*! Collect all the distinct nodes of curves including the common nodes. @@ -336,7 +312,12 @@ _add_curve_to_right(Event* event, Subcurve* curve, bool overlap_exist) std::list list_of_sc; curve->distinct_nodes(*iter, std::back_inserter(list_of_sc)); - typename std::list::iterator sc_iter; +//SL_SAYS +// the pb here is that the curve that will be put on the right of the right end of the overlapping curve +// will be the filtered curves and not the overlap that is actually on the right. Two solutions: I manage +// to pass curve or I pass all the curves of the overlap to the right of the end of the new overlap + + typename std::list::iterator sc_iter; for (sc_iter = list_of_sc.begin(); sc_iter != list_of_sc.end(); ++sc_iter) _add_curve_to_right(event, static_cast(*sc_iter)); @@ -353,7 +334,9 @@ _add_curve_to_right(Event* event, Subcurve* curve, bool overlap_exist) return false; } - _handle_overlap(event, curve, pair_res.second, overlap_exist); + // a new overlap needs to be computed + _intersect(static_cast(curve), + static_cast(*(pair_res.second))); // Inidicate that an overlap has occured: CGAL_SL_PRINT_END_EOL("adding a Curve to the right (overlap)"); @@ -428,7 +411,10 @@ void Sweep_line_2::_intersect(Subcurve* c1, // look up for (c1,c2) in the table and insert if doesnt exist Curve_pair cv_pair(c1,c2); if (! (m_curves_pair_set.insert(cv_pair)).second) + { + CGAL_SL_PRINT_END_EOL("end computing intersection (already computed)"); return; //the curves have already been checked for intersection + } float load_factor = static_cast(m_curves_pair_set.size()) / m_curves_pair_set.bucket_count(); @@ -534,28 +520,28 @@ void Sweep_line_2::_intersect(Subcurve* c1, const std::pair* xp_point; - // Efi: why not skipping in a loop?check only one (that is, why not in a loop)? - if (vi != vi_end) { - xp_point = object_cast >(&(*vi)); - if (xp_point != NULL) { - // Skip the intersection point if it is not larger than the current - // event. - if (this->m_queueEventLess(xp_point->first, this->m_currentEvent) != - LARGER) - { - ++vi; - } - } - } +// SL_SAYS : replace with assertions + //~ // Efi: why not skipping in a loop?check only one (that is, why not in a loop)? + //~ if (vi != vi_end) { + //~ xp_point = object_cast >(&(*vi)); + //~ if (xp_point != NULL) { + //~ // Skip the intersection point if it is not larger than the current + //~ // event. + //~ if (this->m_queueEventLess(xp_point->first, this->m_currentEvent) != + //~ LARGER) + //~ { + //~ ++vi; + //~ } + //~ } + //~ } for (; vi != vi_end; ++vi) { const X_monotone_curve_2* icv; - Point_2 xp; unsigned int multiplicity = 0; xp_point = object_cast >(&(*vi)); if (xp_point != NULL) { - xp = xp_point->first; + Point_2 xp = xp_point->first; multiplicity = xp_point->second; CGAL_SL_PRINT_TEXT("Found an intersection point"); CGAL_SL_PRINT_EOL(); @@ -566,14 +552,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, CGAL_assertion(icv != NULL); CGAL_SL_PRINT_TEXT("Found an overlap"); CGAL_SL_PRINT_EOL(); - - // TODO EBEB: This code does not work with overlaps that reach the boundary - Point_2 left_xp = this->m_traits->construct_min_vertex_2_object()(*icv); - xp = this->m_traits->construct_max_vertex_2_object()(*icv); - - sub_cv1 = *icv; - _create_intersection_point(xp, 0 , c1 , c2); - _create_intersection_point(left_xp, 0 , c1 ,c2, true); + _create_overlapping_curve(*icv, c1 , c2); } } @@ -588,10 +567,9 @@ template :: _create_intersection_point(const Point_2& xp, unsigned int multiplicity, - Subcurve*& c1, Subcurve*& c2, - bool is_overlap) + Subcurve*& c1, Subcurve*& c2) { - CGAL_SL_PRINT_START_EOL("createing an intersection point netween"); + CGAL_SL_PRINT_START_EOL("creating an intersection point between"); CGAL_SL_PRINT_CURVE(c1); CGAL_SL_PRINT_EOL(); CGAL_SL_PRINT_CURVE(c2); @@ -603,7 +581,7 @@ _create_intersection_point(const Point_2& xp, Event* e = pair_res.first; if (pair_res.second) { - // a new event is creatd , which inidicates that the intersection point + // a new event is created , which indicates that the intersection point // cannot be one of the end-points of two curves CGAL_SL_PRINT_TEXT("A new event is created .. ("); CGAL_SL_PRINT(xp); @@ -619,11 +597,9 @@ _create_intersection_point(const Point_2& xp, // Act according to the multiplicity: if (multiplicity == 0) { // The multiplicity of the intersection point is unkown or undefined: - _add_curve_to_right(e, c1, is_overlap); - _add_curve_to_right(e, c2, is_overlap); - if (! is_overlap) { - if (e->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); - } + _add_curve_to_right(e, c1); + _add_curve_to_right(e, c2); + if (e->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); } else { if ((multiplicity % 2) == 1) { @@ -646,42 +622,36 @@ _create_intersection_point(const Point_2& xp, CGAL_SL_PRINT(xp); CGAL_SL_PRINT_TEXT(")"); CGAL_SL_PRINT_EOL(); - if (e == this->m_currentEvent) { - // This can happen when c1 starts at the interior of c2 (or vice versa). - return; - } - e->add_curve_to_left(c1); - e->add_curve_to_left(c2); + if (!c1->is_start_point(e)) e->add_curve_to_left(c1); + if (!c2->is_start_point(e)) e->add_curve_to_left(c2); if (!c1->is_end_point(e) && !c2->is_end_point(e)) { - _add_curve_to_right(e, c1, is_overlap); - _add_curve_to_right(e, c2, is_overlap); + _add_curve_to_right(e, c1); + _add_curve_to_right(e, c2); e->set_intersection(); this->m_visitor->update_event(e, c1, c2, false); } else { if (!c1->is_end_point(e) && c2->is_end_point(e)) { - _add_curve_to_right(e, c1, is_overlap); + _add_curve_to_right(e, c1); e->set_weak_intersection(); this->m_visitor->update_event(e, c1); } else { if (c1->is_end_point(e) && !c2->is_end_point(e)) { - _add_curve_to_right(e, c2, is_overlap); + _add_curve_to_right(e, c2); e->set_weak_intersection(); this->m_visitor->update_event(e, c2); } } } - if (! is_overlap) { - if (e->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); - } + if (e->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); CGAL_SL_PRINT_EVENT_INFO(e); } - CGAL_SL_PRINT_END_EOL("Createing an intersection point"); + CGAL_SL_PRINT_END_EOL("Creating an intersection point"); } //----------------------------------------------------------------------------- @@ -724,154 +694,69 @@ void Sweep_line_2::_fix_overlap_subcurves() * \param curve the subcurve that its insertion to the list of right subcurves of * 'event' causes the overlap (with *iter). * \param iter the existing subcurve at the right subcurves of 'event' - * \param overlap_exist a flag indicates if the overlap X_monotone_curve_2 was - * computed already (is true than its stored at sub_cv1 data member). */ template void Sweep_line_2:: -_handle_overlap(Event* event, Subcurve* curve, Event_subcurve_iterator iter, - bool overlap_exist) +_create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , Subcurve* c2) { // An overlap occurs: - CGAL_SL_PRINT_START_EOL("handling overlap at right insertion"); + CGAL_SL_PRINT_START_EOL("creating an overlapping curve"); - X_monotone_curve_2 overlap_cv; - if (overlap_exist) overlap_cv = sub_cv1; - else { - // compute the overlap. - std::vector obj_vec; - vector_inserter vit(obj_vec); - this->m_traits->intersect_2_object()(curve->last_curve(), - (*iter)->last_curve(), - vit); + // TODO EBEB: This code does not work with overlaps that reach the boundary + Point_2 left_end = this->m_traits->construct_min_vertex_2_object()(overlap_cv); + Point_2 right_end = this->m_traits->construct_max_vertex_2_object()(overlap_cv); + + Event* left_event = + this->_push_event(left_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; + Event* right_event = + this->_push_event(right_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; - if (obj_vec.empty()) { - CGAL_SL_PRINT_END_EOL("handling overlap"); - return; - } - - overlap_cv = object_cast(obj_vec.front()); - } - - // Get the right end of overlap_cv (if it is closed from the right). - Event* right_end; - Arr_parameter_space ps_x_r = - this->m_traits->parameter_space_in_x_2_object()(overlap_cv, ARR_MAX_END); - Arr_parameter_space ps_y_r = - this->m_traits->parameter_space_in_y_2_object()(overlap_cv, ARR_MAX_END); - - CGAL_assertion(ps_x_r != ARR_LEFT_BOUNDARY); - if ((ps_x_r != ARR_INTERIOR) || (ps_y_r != ARR_INTERIOR)) { - // The overlapping subcurve is either open from the right, or - // touches the boundary of the surface. In either case, the curves that - // are involved in the overlap must also be open or defined at the - // boundary, so the event associated with their right ends already exists, - // and we set it as the overlapping subcurve's right event. - CGAL_assertion((*iter)->right_event() == curve->right_event()); - right_end = (Event*)(curve->right_event()); - } - else { - // The overlapping subcurve has a valid right endpoint. - // Find the event associated with this point (or create a new event). - Point_2 end_overlap = - this->m_traits->construct_max_vertex_2_object()(overlap_cv); - - const std::pair& pair_res = - this->_push_event(end_overlap, Base_event::OVERLAP, ps_x_r, ps_y_r); - - right_end = pair_res.first; - } - - // Get the left end of overlap_cv (if it is closed from the left). - Arr_parameter_space ps_x_l = - this->m_traits->parameter_space_in_x_2_object()(overlap_cv, ARR_MIN_END); - Arr_parameter_space ps_y_l = - this->m_traits->parameter_space_in_y_2_object()(overlap_cv, ARR_MIN_END); - - CGAL_assertion(ps_x_l != ARR_RIGHT_BOUNDARY); - if ((ps_x_l == ARR_INTERIOR) && (ps_y_l == ARR_INTERIOR)) { - // The left end of the overlapping subcurve is regular point, so in case - // the event is also associated with a regular point (not incident to the - // surface boundaries), we make sure that the overlapping subcurve does - // not start to the left of this event. - if (! event->is_on_boundary()) { - // If the left endpoint of the overlapping curve is to the left of the - // event, split the overlapping subcurve so its left endpoint equals - // the event point. - const Point_2& begin_overlap = - this->m_traits->construct_min_vertex_2_object()(overlap_cv); - Comparison_result res = - this->m_traits->compare_xy_2_object()(event->point(), begin_overlap); - - CGAL_assertion(res != SMALLER); - if (res == LARGER) { - this->m_traits->split_2_object()(overlap_cv, event->point(), - sub_cv1, sub_cv2); - overlap_cv = sub_cv2; - } - } - } - else { - // The left end of the overlapping subcurve is either open, or - // incident to the surface boundaries. In case the current event is - // associated with a regular point, it must lie to the right of this - // curve-end, so we clip the overlapping subcurve accordingly. - if (! event->is_on_boundary()) { - this->m_traits->split_2_object()(overlap_cv, event->point(), - sub_cv1, sub_cv2); - overlap_cv = sub_cv2; - } - } - - // Alocate a new Subcure for the overlap + if (!c1->is_start_point(left_event)) + left_event->add_curve_to_left(c1); + if (!c2->is_start_point(left_event)) + left_event->add_curve_to_left(c2); + + // Allocate a new Subcurve for the overlap Subcurve* overlap_sc = this->m_subCurveAlloc.allocate(1); this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); overlap_sc->set_hint(this->m_statusLine.end()); overlap_sc->init(overlap_cv); - overlap_sc->set_left_event(event); - overlap_sc->set_right_event(right_end); + overlap_sc->set_left_event(left_event); + overlap_sc->set_right_event(right_event); m_overlap_subCurves.push_back(overlap_sc); - - // Set the two events' attribute to overlap. - event->set_overlap(); - //right_end->set_overlap(); - + left_event->set_overlap(); // sets the two originating subcurves of overlap_sc - overlap_sc->set_originating_subcurve1(*iter); - overlap_sc->set_originating_subcurve2(curve); + overlap_sc->set_originating_subcurve1(c1); + overlap_sc->set_originating_subcurve2(c2); - CGAL_SL_PRINT_CURVE(curve); + CGAL_SL_PRINT_CURVE(c1); CGAL_SL_PRINT_TEXT(" + "); - CGAL_SL_PRINT_CURVE(*iter); + CGAL_SL_PRINT_CURVE(c2); CGAL_SL_PRINT_TEXT(" => "); CGAL_SL_PRINT_EOL(); CGAL_SL_PRINT_TEXT(" "); CGAL_SL_PRINT_CURVE(overlap_sc); CGAL_SL_PRINT_EOL(); - // Remove curve, *iter from the left curves of end_overlap event - right_end->remove_curve_from_left(curve); - right_end->remove_curve_from_left(*iter); + // Remove curves from the left curves of the right end + // and add them on the right otherwise + if (c1->is_end_point(right_event)) + right_event->remove_curve_from_left(c1); + else + _add_curve_to_right(right_event, c1); + if (c2->is_end_point(right_event)) + right_event->remove_curve_from_left(c2); + else + _add_curve_to_right(right_event, c2); - // Add overlap_sc to the left curves - right_end->add_curve_to_left(overlap_sc); + // add the overlapping curve of the right of the left end + _add_curve_to_right(left_event, overlap_sc); + right_event->push_back_curve_to_left(overlap_sc); - // If one of the originating subcurves (or both), does not end - // at the right end of the overlap, add them to the right subcurves - // of the event associated with the right end of the overlap. - if ((Event*)curve->right_event() != right_end) - _add_curve_to_right(right_end, curve); + this->m_visitor->found_overlap(c1, c2, overlap_sc); - if ((Event*)(*iter)->right_event() != right_end) - _add_curve_to_right(right_end, (*iter)); - - this->m_visitor->found_overlap(curve, *iter, overlap_sc); - - // Replace current sub-curve (*iter) with the new sub-curve - (*iter) = overlap_sc; - - CGAL_SL_PRINT_END_EOL("handling overlap"); + CGAL_SL_PRINT_END_EOL("creating an overlapping curve"); } //----------------------------------------------------------------------------- diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h index eaaa1fbc085..29f85872731 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h @@ -175,6 +175,10 @@ public: void push_back_curve_to_left(Subcurve* curve) { m_leftCurves.push_back(curve); } + /*! Add a subcurve to the container of right curves (without checks). */ + void push_back_curve_to_right(Subcurve* curve) + { m_rightCurves.push_back(curve); } + /*! Add a subcurve to the container of right curves. */ std::pair add_curve_to_right(Subcurve* curve, const Traits_2* tr) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index 063b033663c..a5c66512f3d 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -111,6 +111,11 @@ public: /*! Set the last intersecing curve so far. */ void set_last_curve(const X_monotone_curve_2& cv) { m_lastCurve = cv; } + /*! Check if the given event is the matches the left-end event. */ + template + bool is_start_point(const SweepEvent* event) const + { return (m_left_event == (Event*)event); } + /*! Check if the given event is the matches the right-end event. */ template bool is_end_point(const SweepEvent* event) const From d1e257f7cfa6d6240db5f7bae65fa16f64439236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 9 Jun 2017 07:26:54 +0200 Subject: [PATCH 051/298] small fix --- Arrangement_on_surface_2/include/CGAL/Basic_sweep_line_2.h | 3 +-- .../include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Basic_sweep_line_2.h b/Arrangement_on_surface_2/include/CGAL/Basic_sweep_line_2.h index e3653b882f7..b2ca01b8a25 100644 --- a/Arrangement_on_surface_2/include/CGAL/Basic_sweep_line_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Basic_sweep_line_2.h @@ -446,8 +446,7 @@ protected: * \param curve The subcurve to add. * \return (true) if an overlap occured; (false) otherwise. */ - virtual bool _add_curve_to_right(Event* event, Subcurve* curve, - bool overlap_exist = false); + virtual bool _add_curve_to_right(Event* event, Subcurve* curve); /*! Remove a curve from the status line. */ void _remove_curve_from_status_line(Subcurve *leftCurve); diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h index ad6b41c1809..0cc93082487 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h @@ -556,7 +556,7 @@ void Basic_sweep_line_2::_handle_right_curves() template bool Basic_sweep_line_2:: -_add_curve_to_right(Event* event, Subcurve* curve, bool /* overlap_exist */) +_add_curve_to_right(Event* event, Subcurve* curve) { #if defined(CGAL_NO_ASSERTIONS) (void) event->add_curve_to_right(curve, m_traits); From 7800ac5e4d6071899060b4364114443208cf5a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 12 Jun 2017 15:57:20 +0200 Subject: [PATCH 052/298] fix the order of the right curves after an overlap + add todo about how to create overlapping curves having common input curves --- Sweep_line_2/include/CGAL/Sweep_line_2.h | 2 +- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 89 ++++++++++++------- .../CGAL/Sweep_line_2/Sweep_line_subcurve.h | 6 ++ 3 files changed, 62 insertions(+), 35 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2.h index c7f0c74c784..04e373a5471 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2.h @@ -178,7 +178,7 @@ protected: * \param c1 first subcurve contributing to the overlap. * \param c2 second subcurve contributing to the overlap. */ - void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , Subcurve* c2); + void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2); /*! Compute intersections between the two given curves. * If the two curves intersect, create a new event (or use the event that diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 8725e272e2f..c59bbbf82ed 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -123,7 +123,13 @@ void Sweep_line_2::_handle_left_curves() this->m_currentEvent->push_back_curve_to_right(sc); } else - _add_curve_to_right(this->m_currentEvent, sc); + { + if (!_add_curve_to_right(this->m_currentEvent, sc)) + { + // no overlap + this->m_currentEvent->push_back_curve_to_left(sc); + } + } // sc is now on the left CGAL_SL_PRINT_TEXT("Event after update:"); @@ -300,30 +306,30 @@ _add_curve_to_right(Event* event, Subcurve* curve) return false; } - CGAL_assertion(!(curve)->has_same_leaves(*iter)); + CGAL_assertion(!(curve)->has_same_leaves(*iter)); // SL_SAYS I'm not 100% sure this precondition is valid - if ((curve)->has_common_leaf(*iter)) { - /*! Collect all the distinct nodes of curves including the common nodes. - * \todo EF, common nodes should be excluded. It is not incorrect to - * include a common node, because in the recursive call it becomes - * 'curve', which is an inner node of iter, and it is discarded; see 2 - * conditions above. - */ - std::list list_of_sc; - curve->distinct_nodes(*iter, std::back_inserter(list_of_sc)); + //~ if ((curve)->has_common_leaf(*iter)) { + //~ /*! Collect all the distinct nodes of curves including the common nodes. + //~ * \todo EF, common nodes should be excluded. It is not incorrect to + //~ * include a common node, because in the recursive call it becomes + //~ * 'curve', which is an inner node of iter, and it is discarded; see 2 + //~ * conditions above. + //~ */ + //~ std::list list_of_sc; + //~ curve->distinct_nodes(*iter, std::back_inserter(list_of_sc)); //SL_SAYS // the pb here is that the curve that will be put on the right of the right end of the overlapping curve // will be the filtered curves and not the overlap that is actually on the right. Two solutions: I manage // to pass curve or I pass all the curves of the overlap to the right of the end of the new overlap - typename std::list::iterator sc_iter; - for (sc_iter = list_of_sc.begin(); sc_iter != list_of_sc.end(); ++sc_iter) - _add_curve_to_right(event, static_cast(*sc_iter)); + //~ typename std::list::iterator sc_iter; + //~ for (sc_iter = list_of_sc.begin(); sc_iter != list_of_sc.end(); ++sc_iter) + //~ _add_curve_to_right(event, static_cast(*sc_iter)); - CGAL_SL_PRINT_END_EOL("adding a Curve to the right (common leaf)"); - return true; - } + //~ CGAL_SL_PRINT_END_EOL("adding a Curve to the right (common leaf)"); + //~ return true; + //~ } } std::pair pair_res = event->add_curve_to_right(curve, this->m_traits); @@ -338,7 +344,7 @@ _add_curve_to_right(Event* event, Subcurve* curve) _intersect(static_cast(curve), static_cast(*(pair_res.second))); - // Inidicate that an overlap has occured: + // Indicate that an overlap has occured: CGAL_SL_PRINT_END_EOL("adding a Curve to the right (overlap)"); return true; } @@ -521,19 +527,19 @@ void Sweep_line_2::_intersect(Subcurve* c1, const std::pair* xp_point; // SL_SAYS : replace with assertions - //~ // Efi: why not skipping in a loop?check only one (that is, why not in a loop)? - //~ if (vi != vi_end) { - //~ xp_point = object_cast >(&(*vi)); - //~ if (xp_point != NULL) { - //~ // Skip the intersection point if it is not larger than the current - //~ // event. - //~ if (this->m_queueEventLess(xp_point->first, this->m_currentEvent) != - //~ LARGER) - //~ { - //~ ++vi; - //~ } - //~ } - //~ } + // Efi: why not skipping in a loop?check only one (that is, why not in a loop)? + if (vi != vi_end) { + xp_point = object_cast >(&(*vi)); + if (xp_point != NULL) { + // Skip the intersection point if it is not larger than the current + // event. + if (this->m_queueEventLess(xp_point->first, this->m_currentEvent) != + LARGER) + { + ++vi; + } + } + } for (; vi != vi_end; ++vi) { const X_monotone_curve_2* icv; @@ -698,7 +704,7 @@ void Sweep_line_2::_fix_overlap_subcurves() template void Sweep_line_2:: -_create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , Subcurve* c2) +_create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2) { // An overlap occurs: CGAL_SL_PRINT_START_EOL("creating an overlapping curve"); @@ -729,6 +735,8 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , S // sets the two originating subcurves of overlap_sc overlap_sc->set_originating_subcurve1(c1); overlap_sc->set_originating_subcurve2(c2); + // la courbe overlap peut contenir des duplicates... il faudrait appeler la fonction du dessous + //~ overlap_sc->set_originating_subcurves(c1, c2, right_event); CGAL_SL_PRINT_CURVE(c1); CGAL_SL_PRINT_TEXT(" + "); @@ -745,6 +753,7 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , S right_event->remove_curve_from_left(c1); else _add_curve_to_right(right_event, c1); + if (c2->is_end_point(right_event)) right_event->remove_curve_from_left(c2); else @@ -752,10 +761,14 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve* c1 , S // add the overlapping curve of the right of the left end _add_curve_to_right(left_event, overlap_sc); - right_event->push_back_curve_to_left(overlap_sc); + right_event->add_curve_to_left(overlap_sc); this->m_visitor->found_overlap(c1, c2, overlap_sc); + if (!c1->is_end_point(right_event) && !c2->is_end_point(right_event)) + if (right_event->is_right_curve_bigger(c1, c2)) + std::swap(c1, c2); + CGAL_SL_PRINT_END_EOL("creating an overlapping curve"); } @@ -776,7 +789,15 @@ _fix_finished_overlap_subcurve(Subcurve* sc) CGAL_assertion(sc != NULL); // split 'sc' if necessary and update to event as weak intersection - if ((Event*)sc->right_event() != this->m_currentEvent) { + if ((Event*)sc->right_event() != this->m_currentEvent + + && //SL_SAYS this is a temporary condition while set_originating_subcurves is not implemented + //(because a curve could be tried to be split several times) + !this->m_traits->equal_2_object()( + this->m_traits->construct_min_vertex_2_object()(sc->last_curve()), + this->m_currentEvent->point()) + + ) { this->m_traits->split_2_object()(sc->last_curve(), this->m_currentEvent->point(), sub_cv1, sub_cv2); diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index a5c66512f3d..79c22939259 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -263,6 +263,12 @@ public: unsigned int d2 = m_orig_subcurve2->number_of_original_curves(); return d1+d2; } + + //~ void set_originating_subcurves(Subcurve* c1, Subcurve* c2, Event* right_event) + //~ { + + //~ } + #ifdef CGAL_SL_VERBOSE void Print() const; From 627b88fc31d152dff5c80fd7c50a6d0cfed57a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 16 Jun 2017 16:40:20 +0200 Subject: [PATCH 053/298] generate overlapping curves without duplicates --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 87 ++++++++++++++++--- .../CGAL/Sweep_line_2/Sweep_line_event.h | 12 +++ .../CGAL/Sweep_line_2/Sweep_line_subcurve.h | 22 ++--- 3 files changed, 94 insertions(+), 27 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index c59bbbf82ed..b7e72ecc916 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -722,21 +722,82 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , left_event->add_curve_to_left(c1); if (!c2->is_start_point(left_event)) left_event->add_curve_to_left(c2); + if (c1->is_start_point(left_event)) + left_event->remove_curve_from_right(c1); + if (c2->is_start_point(left_event)) + left_event->remove_curve_from_right(c2); - // Allocate a new Subcurve for the overlap - Subcurve* overlap_sc = this->m_subCurveAlloc.allocate(1); - this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); - overlap_sc->set_hint(this->m_statusLine.end()); - overlap_sc->init(overlap_cv); - overlap_sc->set_left_event(left_event); - overlap_sc->set_right_event(right_event); - m_overlap_subCurves.push_back(overlap_sc); + // Allocate the new Subcurve for the overlap + Subcurve* first_parent = c1; + Subcurve* second_parent = c2; + + std::vector all_leaves_first; + std::vector all_leaves_second; + first_parent->template all_leaves(std::back_inserter(all_leaves_first)); + second_parent->template all_leaves(std::back_inserter(all_leaves_second)); + if (all_leaves_second.size() > all_leaves_first.size()) + { + std::swap(first_parent,second_parent); + std::swap(all_leaves_first,all_leaves_second); + } + + std::vector all_leaves_diff; + if (!all_leaves_first.empty() && !all_leaves_second.empty()) + { + std::sort(all_leaves_first.begin(), all_leaves_first.end()); + std::sort(all_leaves_second.begin(), all_leaves_second.end()); + + std::set_difference(all_leaves_second.begin(), all_leaves_second.end(), + all_leaves_first.begin(), all_leaves_first.end(), + std::back_inserter(all_leaves_diff)); + } + + Subcurve* overlap_sc; + if (all_leaves_second.size()==all_leaves_diff.size()) + { + CGAL_SL_PRINT_TEXT("Allocate a new subcurve for the overlap (no common subcurves)"); + CGAL_SL_PRINT_EOL(); + // no duplicate only one curve is needed + overlap_sc = this->m_subCurveAlloc.allocate(1); + this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); + overlap_sc->set_hint(this->m_statusLine.end()); + overlap_sc->init(overlap_cv); + overlap_sc->set_left_event(left_event); + overlap_sc->set_right_event(right_event); + m_overlap_subCurves.push_back(overlap_sc); + // sets the two originating subcurves of overlap_sc + overlap_sc->set_originating_subcurve1(c1); + overlap_sc->set_originating_subcurve2(c2); + } + else{ + if (all_leaves_diff.empty()) + { + CGAL_SL_PRINT_TEXT("One overlapping curve entirely contains the other one"); + CGAL_SL_PRINT_EOL(); + overlap_sc=first_parent; + } + else + { + // create an overlapping curve per subcurve in second_parent that is not in first_parent + for (typename std::vector::iterator sc_it=all_leaves_diff.begin(); + sc_it!=all_leaves_diff.end(); + ++sc_it) + { + overlap_sc = this->m_subCurveAlloc.allocate(1); // \todo allocate all at once? + this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); + overlap_sc->set_hint(this->m_statusLine.end()); + overlap_sc->init(overlap_cv); + overlap_sc->set_left_event(left_event); + overlap_sc->set_right_event(right_event); + m_overlap_subCurves.push_back(overlap_sc); + // sets the two originating subcurves of overlap_sc + overlap_sc->set_originating_subcurve1(first_parent); + overlap_sc->set_originating_subcurve2(*sc_it); + first_parent=overlap_sc; + } + } + } left_event->set_overlap(); - // sets the two originating subcurves of overlap_sc - overlap_sc->set_originating_subcurve1(c1); - overlap_sc->set_originating_subcurve2(c2); - // la courbe overlap peut contenir des duplicates... il faudrait appeler la fonction du dessous - //~ overlap_sc->set_originating_subcurves(c1, c2, right_event); CGAL_SL_PRINT_CURVE(c1); CGAL_SL_PRINT_TEXT(" + "); diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h index 29f85872731..3a61775a448 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h @@ -244,6 +244,18 @@ public: } } + /*! Remove a curve from the set of right curves. */ + void remove_curve_from_right(Subcurve* curve) + { + Subcurve_iterator iter; + for (iter = m_rightCurves.begin(); iter!= m_rightCurves.end(); ++iter) { + if (curve->has_common_leaf(*iter)) { + m_leftCurves.erase(iter); + return; + } + } + } + /*! Returns an iterator to the first curve to the left of the event. */ Subcurve_iterator left_curves_begin() { return (m_leftCurves.begin()); } diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index 79c22939259..b4882505654 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -154,16 +154,16 @@ public: { m_orig_subcurve2 = orig_subcurve2; } /*! Get all the leaf-nodes in the hierarchy of overlapping subcurves. */ - template + template OutputIterator all_leaves(OutputIterator oi) { if (m_orig_subcurve1 == NULL) { - *oi++ = this; + *oi++ = static_cast(this); return oi; } - oi = m_orig_subcurve1->all_leaves(oi); - oi = m_orig_subcurve2->all_leaves(oi); + oi = m_orig_subcurve1->template all_leaves(oi); + oi = m_orig_subcurve2->template all_leaves(oi); return oi; } @@ -189,8 +189,8 @@ public: std::list my_leaves; std::list other_leaves; - this->all_leaves(std::back_inserter(my_leaves)); - s->all_leaves(std::back_inserter(other_leaves)); + this->template all_leaves(std::back_inserter(my_leaves)); + s->template all_leaves(std::back_inserter(other_leaves)); typename std::list::iterator iter; for (iter = my_leaves.begin(); iter != my_leaves.end(); ++iter) { @@ -214,8 +214,8 @@ public: std::list my_leaves; std::list other_leaves; - this->all_leaves(std::back_inserter(my_leaves)); - s->all_leaves(std::back_inserter(other_leaves)); + this->template all_leaves(std::back_inserter(my_leaves)); + s->template all_leaves(std::back_inserter(other_leaves)); typename std::list::iterator iter; for (iter = my_leaves.begin(); iter != my_leaves.end(); ++iter) { @@ -263,12 +263,6 @@ public: unsigned int d2 = m_orig_subcurve2->number_of_original_curves(); return d1+d2; } - - //~ void set_originating_subcurves(Subcurve* c1, Subcurve* c2, Event* right_event) - //~ { - - //~ } - #ifdef CGAL_SL_VERBOSE void Print() const; From a4f91b1028a3fabd46aff036eeb1440280499a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sat, 17 Jun 2017 07:41:05 +0200 Subject: [PATCH 054/298] add missing visitor call + always add curve to left --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index b7e72ecc916..de0c92ef607 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -124,10 +124,12 @@ void Sweep_line_2::_handle_left_curves() } else { + this->m_currentEvent->push_back_curve_to_left(sc); + this->m_currentEvent->set_weak_intersection(); if (!_add_curve_to_right(this->m_currentEvent, sc)) { // no overlap - this->m_currentEvent->push_back_curve_to_left(sc); + this->m_visitor->update_event(this->m_currentEvent, sc); } } From a11f1da495753aaf6d632f2307b9d70069b0a413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 19 Jun 2017 11:40:21 +0200 Subject: [PATCH 055/298] remove commented code and temporary fix --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 36 ++----------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index de0c92ef607..3d450c010de 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -308,30 +308,7 @@ _add_curve_to_right(Event* event, Subcurve* curve) return false; } - CGAL_assertion(!(curve)->has_same_leaves(*iter)); // SL_SAYS I'm not 100% sure this precondition is valid - - //~ if ((curve)->has_common_leaf(*iter)) { - //~ /*! Collect all the distinct nodes of curves including the common nodes. - //~ * \todo EF, common nodes should be excluded. It is not incorrect to - //~ * include a common node, because in the recursive call it becomes - //~ * 'curve', which is an inner node of iter, and it is discarded; see 2 - //~ * conditions above. - //~ */ - //~ std::list list_of_sc; - //~ curve->distinct_nodes(*iter, std::back_inserter(list_of_sc)); - -//SL_SAYS -// the pb here is that the curve that will be put on the right of the right end of the overlapping curve -// will be the filtered curves and not the overlap that is actually on the right. Two solutions: I manage -// to pass curve or I pass all the curves of the overlap to the right of the end of the new overlap - - //~ typename std::list::iterator sc_iter; - //~ for (sc_iter = list_of_sc.begin(); sc_iter != list_of_sc.end(); ++sc_iter) - //~ _add_curve_to_right(event, static_cast(*sc_iter)); - - //~ CGAL_SL_PRINT_END_EOL("adding a Curve to the right (common leaf)"); - //~ return true; - //~ } + CGAL_assertion(!(curve)->has_same_leaves(*iter)); } std::pair pair_res = event->add_curve_to_right(curve, this->m_traits); @@ -528,7 +505,6 @@ void Sweep_line_2::_intersect(Subcurve* c1, const std::pair* xp_point; -// SL_SAYS : replace with assertions // Efi: why not skipping in a loop?check only one (that is, why not in a loop)? if (vi != vi_end) { xp_point = object_cast >(&(*vi)); @@ -852,15 +828,7 @@ _fix_finished_overlap_subcurve(Subcurve* sc) CGAL_assertion(sc != NULL); // split 'sc' if necessary and update to event as weak intersection - if ((Event*)sc->right_event() != this->m_currentEvent - - && //SL_SAYS this is a temporary condition while set_originating_subcurves is not implemented - //(because a curve could be tried to be split several times) - !this->m_traits->equal_2_object()( - this->m_traits->construct_min_vertex_2_object()(sc->last_curve()), - this->m_currentEvent->point()) - - ) { + if ((Event*)sc->right_event() != this->m_currentEvent) { this->m_traits->split_2_object()(sc->last_curve(), this->m_currentEvent->point(), sub_cv1, sub_cv2); From 9d3e77d8c6d0657532a33d24ec33546e689ef452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 19 Jun 2017 11:40:45 +0200 Subject: [PATCH 056/298] split last_curve of overlapping curves on the right of an event if not done This happens when the curve on the left and on the right are different (thus not split in _handle_left_curves()). This happens when there is an additional overlapping on the left and this overlapping was detected with overlapping curves having common ancesters --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 3d450c010de..9ce09c87d75 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -214,6 +214,33 @@ void Sweep_line_2::_handle_right_curves() return; } + // Some overlapping curves that are on the right might not be + // on the left (in case of overlap with other curves having common + // ancesters). Consequently, an overlapping curve on the right might + // not have been split. + // SL_SAYS: we should be able to do something better without geometric test + // (like having an additional boolean in subcurve) + for( Event_subcurve_iterator cit = this->m_currentEvent->right_curves_begin(), + cit_end = this->m_currentEvent->right_curves_end(); + cit!=cit_end; ++cit) + { + if ( (*cit)->originating_subcurve1()!=NULL && + (Event*)(*cit)->left_event()!=this->m_currentEvent ) + { + // split the subcurve. + const X_monotone_curve_2& lastCurve = (*cit)->last_curve(); + + if (!this->m_traits->equal_2_object()( + this->m_traits->construct_min_vertex_2_object()(lastCurve), + this->m_currentEvent->point())) + { + this->m_traits->split_2_object()(lastCurve, this->m_currentEvent->point(), + sub_cv1, sub_cv2); + (*cit)->set_last_curve(sub_cv2); + } + } + } + // Loop over the curves to the right of the status line and handle them: // - If we are at the beginning of the curve, we insert it to the status // line, then we look if it intersects any of its neighbors. From fa0bab49285930b6bddb6a7697174fa36975e37d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 20 Jun 2017 09:27:09 +0200 Subject: [PATCH 057/298] update the filtering mecanism of intersections for overlaps --- .../include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h index e8b16b382a0..65ba5ba1f46 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h @@ -107,7 +107,8 @@ public: OutputIterator oi) { if(cv1.halfedge_handle() != invalid_he && - cv2.halfedge_handle() != invalid_he) + cv2.halfedge_handle() != invalid_he && + cv1.halfedge_handle()!=cv2.halfedge_handle()) //SL_SAYS check with Efi { // The curves are interior-disjoint as both of them are already in // the arrangement. From c67cd489679f1abe11c29d9d7c88faaf0322ddaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 20 Jun 2017 17:21:45 +0200 Subject: [PATCH 058/298] add comment + debug info --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 9ce09c87d75..324c207f24b 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -219,7 +219,8 @@ void Sweep_line_2::_handle_right_curves() // ancesters). Consequently, an overlapping curve on the right might // not have been split. // SL_SAYS: we should be able to do something better without geometric test - // (like having an additional boolean in subcurve) + // (like having an additional boolean in subcurve that we can set in + // _handle_left_curves() after a split) for( Event_subcurve_iterator cit = this->m_currentEvent->right_curves_begin(), cit_end = this->m_currentEvent->right_curves_end(); cit!=cit_end; ++cit) @@ -436,6 +437,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, vector_inserter vi(m_x_objects) ; vector_inserter vi_end(m_x_objects); + vi_end = this->m_traits->intersect_2_object()(c1->last_curve(), c2->last_curve(), vi); @@ -783,6 +785,9 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , } else { + CGAL_SL_PRINT_TEXT("Allocate new subcurves for the overlap (common subcurves)"); + CGAL_SL_PRINT_EOL(); + // create an overlapping curve per subcurve in second_parent that is not in first_parent for (typename std::vector::iterator sc_it=all_leaves_diff.begin(); sc_it!=all_leaves_diff.end(); From e2d380d14fad24e8cfafaeb076a222d5117cd5a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 21 Jun 2017 15:22:34 +0200 Subject: [PATCH 059/298] call update event in all cases (overlap or not) --- .../include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 324c207f24b..db46f03aeef 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -126,11 +126,8 @@ void Sweep_line_2::_handle_left_curves() { this->m_currentEvent->push_back_curve_to_left(sc); this->m_currentEvent->set_weak_intersection(); - if (!_add_curve_to_right(this->m_currentEvent, sc)) - { - // no overlap - this->m_visitor->update_event(this->m_currentEvent, sc); - } + this->m_visitor->update_event(this->m_currentEvent, sc); + _add_curve_to_right(this->m_currentEvent, sc); } // sc is now on the left @@ -181,7 +178,6 @@ void Sweep_line_2::_handle_left_curves() else { // curren event splits the subcurve. const X_monotone_curve_2& lastCurve = leftCurve->last_curve(); - this->m_traits->split_2_object()(lastCurve, this->m_currentEvent->point(), sub_cv1, sub_cv2); this->m_visitor->add_subcurve(sub_cv1, leftCurve); @@ -425,7 +421,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, Curve_pair cv_pair(c1,c2); if (! (m_curves_pair_set.insert(cv_pair)).second) { - CGAL_SL_PRINT_END_EOL("end computing intersection (already computed)"); + CGAL_SL_PRINT_END_EOL("computing intersection (already computed)"); return; //the curves have already been checked for intersection } From 757d698aa20c6511b6f99a9930823a25673c59dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 22 Jun 2017 14:35:18 +0200 Subject: [PATCH 060/298] really remove the curve from the right... copy-paste error --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h index 3a61775a448..35eea401adc 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h @@ -250,7 +250,7 @@ public: Subcurve_iterator iter; for (iter = m_rightCurves.begin(); iter!= m_rightCurves.end(); ++iter) { if (curve->has_common_leaf(*iter)) { - m_leftCurves.erase(iter); + m_rightCurves.erase(iter); return; } } From 00bcb717d22357fb8584296d2555867966a09c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 26 Jun 2017 15:08:56 +0200 Subject: [PATCH 061/298] fix detection of overlap on the boundary of the domain --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index db46f03aeef..e32ce9e3bb1 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -443,7 +443,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, } // The two subCurves may start at the same point, in that case we ignore the - // first intersection point (if we got to that stage, they cannot overlap). + // first intersection point. const Arr_parameter_space ps_x1 = this->m_traits->parameter_space_in_x_2_object()(c1->last_curve(), @@ -463,7 +463,8 @@ void Sweep_line_2::_intersect(Subcurve* c1, this->m_traits->is_closed_2_object()(c1->last_curve(), ARR_MIN_END) && this->m_traits->is_closed_2_object()(c2->last_curve(), ARR_MIN_END)) { - if (this->m_traits->equal_2_object() + if ( object_cast >(&(*vi)) != NULL + && this->m_traits->equal_2_object() (this->m_traits->construct_min_vertex_2_object()(c1->last_curve()), this->m_traits->construct_min_vertex_2_object()(c2->last_curve()))) { From f6412c786e2b0600f65dfbb72074d91ce4ceaffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 26 Jun 2017 15:11:59 +0200 Subject: [PATCH 062/298] handle event on boundary when dealing with overlaps --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index e32ce9e3bb1..20f5afa4578 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -713,14 +713,37 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , // An overlap occurs: CGAL_SL_PRINT_START_EOL("creating an overlapping curve"); - // TODO EBEB: This code does not work with overlaps that reach the boundary - Point_2 left_end = this->m_traits->construct_min_vertex_2_object()(overlap_cv); - Point_2 right_end = this->m_traits->construct_max_vertex_2_object()(overlap_cv); + // Get the left end of overlap_cv. + Event* left_event; + Arr_parameter_space ps_x_l = + this->m_traits->parameter_space_in_x_2_object()(overlap_cv, ARR_MIN_END); + Arr_parameter_space ps_y_l = + this->m_traits->parameter_space_in_y_2_object()(overlap_cv, ARR_MIN_END); + if ((ps_x_l != ARR_INTERIOR) || (ps_y_l != ARR_INTERIOR)) { + // SL_SAYS check with Efi + CGAL_assertion(c1->left_event() == c2->left_event()); + left_event=(Event*)(c1->left_event()); + } + else{ + Point_2 left_end = this->m_traits->construct_min_vertex_2_object()(overlap_cv); + left_event = this->_push_event(left_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; + } - Event* left_event = - this->_push_event(left_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; - Event* right_event = - this->_push_event(right_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; + // Get the right end of overlap_cv. + Event* right_event; + Arr_parameter_space ps_x_r = + this->m_traits->parameter_space_in_x_2_object()(overlap_cv, ARR_MAX_END); + Arr_parameter_space ps_y_r = + this->m_traits->parameter_space_in_y_2_object()(overlap_cv, ARR_MAX_END); + if ((ps_x_r != ARR_INTERIOR) || (ps_y_r != ARR_INTERIOR)) { + // SL_SAYS check with Efi + CGAL_assertion(c1->right_event() == c2->right_event()); + right_event = (Event*)(c1->right_event()); + } + else { + Point_2 right_end = this->m_traits->construct_max_vertex_2_object()(overlap_cv); + right_event = this->_push_event(right_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; + } if (!c1->is_start_point(left_event)) left_event->add_curve_to_left(c1); From 4b7b5e5a9c6110e326c10880eec8c948df22db72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 23 Jun 2017 14:46:21 +0200 Subject: [PATCH 063/298] deal with overlapping curves with common ancesters before calling Intersec_2 Depending on the arrangement visitors and of the traits class used, it is assumed in some cases that X_monotone_curves are created without duplicates (for example some compute the multiplicity of overlap in Intersect_2 and store the info in X_monotone_curve). In Boolean Operations, Intersect_2 is overriden and two curves having a common ancester will never be detected as intersecting This is WIP, partial overlap is not yet handled fully correctly --- Sweep_line_2/include/CGAL/Sweep_line_2.h | 11 +- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 184 +++++++++++------- 2 files changed, 129 insertions(+), 66 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2.h index 04e373a5471..9b8bb579475 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2.h @@ -177,8 +177,17 @@ protected: * \param overlap_cv the overlapping curve. * \param c1 first subcurve contributing to the overlap. * \param c2 second subcurve contributing to the overlap. + * \param all_leaves_diff not empty in case c1 and c2 have common ancesters. + * It contains the set of curves not contained in first_parent + * that are in the other subcurve + * \param first_parent only used when c1 and c2 have common ancesters. + * It is either c1 or c2 (the one having the more leaves) + * */ - void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2); + void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, + Subcurve*& c1 , Subcurve*& c2, + const std::vector& all_leaves_diff, + Subcurve* first_parent); /*! Compute intersections between the two given curves. * If the two curves intersect, create a new event (or use the event that diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 20f5afa4578..a6832fa1e32 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -431,6 +431,97 @@ void Sweep_line_2::_intersect(Subcurve* c1, if (load_factor > 6.0f) m_curves_pair_set.resize(m_curves_pair_set.size() * 6); + // handle overlapping curves with common ancesters + std::vector all_leaves_diff; + Subcurve* first_parent=NULL; + if (c1->originating_subcurve1()!=NULL || c2->originating_subcurve2()!=NULL) + { + // get the subcurve leaves of c1 and of c2. Then extact from the smallest set + // the subcurves leaves that are not in the other one. If empty, it means that + // a subcurves is completely contained in another one. + first_parent = c1; + Subcurve* second_parent = c2; + + std::vector all_leaves_first; + std::vector all_leaves_second; + first_parent->template all_leaves(std::back_inserter(all_leaves_first)); + second_parent->template all_leaves(std::back_inserter(all_leaves_second)); + if (all_leaves_second.size() > all_leaves_first.size()) + { + std::swap(first_parent,second_parent); + std::swap(all_leaves_first,all_leaves_second); + } + + CGAL_assertion(!all_leaves_first.empty() && !all_leaves_second.empty()); + + std::sort(all_leaves_first.begin(), all_leaves_first.end()); + std::sort(all_leaves_second.begin(), all_leaves_second.end()); + + std::set_difference(all_leaves_second.begin(), all_leaves_second.end(), + all_leaves_first.begin(), all_leaves_first.end(), + std::back_inserter(all_leaves_diff)); + + if (all_leaves_second.size()==all_leaves_diff.size()) + all_leaves_diff.clear(); // clear so that it is not used by _create_overlapping_curve() + else + if (all_leaves_diff.empty()) + { + CGAL_SL_PRINT_TEXT("One overlapping curve entirely contains the other one"); + CGAL_SL_PRINT_EOL(); + + Event* left_event = (Event*) first_parent->left_event(); + Event* right_event = (Event*) first_parent->right_event(); + + if (!second_parent->is_start_point(left_event)) + left_event->add_curve_to_left(second_parent); + else + left_event->remove_curve_from_right(second_parent); + + CGAL_SL_PRINT_CURVE(c1); + CGAL_SL_PRINT_TEXT(" + "); + CGAL_SL_PRINT_CURVE(c2); + CGAL_SL_PRINT_TEXT(" => "); + CGAL_SL_PRINT_EOL(); + CGAL_SL_PRINT_TEXT(" "); + CGAL_SL_PRINT_CURVE(first_parent); + CGAL_SL_PRINT_EOL(); + + // Remove second_parent from the left curves of the right end + // and add it on the right otherwise + if (second_parent->is_end_point(right_event)) + right_event->remove_curve_from_left(second_parent); + else + _add_curve_to_right(right_event, second_parent); + + // add the overlapping curve kept of the right of the left end + _add_curve_to_right(left_event, first_parent); + right_event->add_curve_to_left(first_parent); + + this->m_visitor->found_overlap(c1, c2, first_parent); // SL_SAYS check with Efi + + CGAL_SL_PRINT_END_EOL("computing intersection"); + return; + } + else{ + X_monotone_curve_2 xc = first_parent->last_curve(); + for (typename std::vector::iterator sc_it=all_leaves_diff.begin(); + sc_it!=all_leaves_diff.end(); ++sc_it) + { + std::vector inter_res; + vector_inserter vi(inter_res) ; + vector_inserter vi_end(inter_res); + + this->m_traits->intersect_2_object()(xc, (*sc_it)->last_curve(), vi); + CGAL_assertion(inter_res.empty() || inter_res.size()==1); //TMP for debug + CGAL_assertion( CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front())!=NULL );// TMP for debug + xc = *CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front()); + } + _create_overlapping_curve(xc, c1 , c2, all_leaves_diff, first_parent); + return; + } + } + + // do compute the intersection of the two curves vector_inserter vi(m_x_objects) ; vector_inserter vi_end(m_x_objects); @@ -562,7 +653,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, CGAL_assertion(icv != NULL); CGAL_SL_PRINT_TEXT("Found an overlap"); CGAL_SL_PRINT_EOL(); - _create_overlapping_curve(*icv, c1 , c2); + _create_overlapping_curve(*icv, c1 , c2, all_leaves_diff, first_parent); } } @@ -698,17 +789,13 @@ void Sweep_line_2::_fix_overlap_subcurves() CGAL_SL_PRINT_END_EOL("Fixing overlap subcurves"); } -/*! Handle overlap at right insertion to event. - * \param event the event where that overlap starts (the left end point of the - * overlap). - * \param curve the subcurve that its insertion to the list of right subcurves of - * 'event' causes the overlap (with *iter). - * \param iter the existing subcurve at the right subcurves of 'event' - */ template void Sweep_line_2:: -_create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2) +_create_overlapping_curve(const X_monotone_curve_2& overlap_cv, + Subcurve*& c1 , Subcurve*& c2, + const std::vector& all_leaves_diff, + Subcurve* first_parent) { // An overlap occurs: CGAL_SL_PRINT_START_EOL("creating an overlapping curve"); @@ -747,40 +834,16 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , if (!c1->is_start_point(left_event)) left_event->add_curve_to_left(c1); + else + left_event->remove_curve_from_right(c1); if (!c2->is_start_point(left_event)) left_event->add_curve_to_left(c2); - if (c1->is_start_point(left_event)) - left_event->remove_curve_from_right(c1); - if (c2->is_start_point(left_event)) + else left_event->remove_curve_from_right(c2); - + // Allocate the new Subcurve for the overlap - Subcurve* first_parent = c1; - Subcurve* second_parent = c2; - - std::vector all_leaves_first; - std::vector all_leaves_second; - first_parent->template all_leaves(std::back_inserter(all_leaves_first)); - second_parent->template all_leaves(std::back_inserter(all_leaves_second)); - if (all_leaves_second.size() > all_leaves_first.size()) - { - std::swap(first_parent,second_parent); - std::swap(all_leaves_first,all_leaves_second); - } - - std::vector all_leaves_diff; - if (!all_leaves_first.empty() && !all_leaves_second.empty()) - { - std::sort(all_leaves_first.begin(), all_leaves_first.end()); - std::sort(all_leaves_second.begin(), all_leaves_second.end()); - - std::set_difference(all_leaves_second.begin(), all_leaves_second.end(), - all_leaves_first.begin(), all_leaves_first.end(), - std::back_inserter(all_leaves_diff)); - } - Subcurve* overlap_sc; - if (all_leaves_second.size()==all_leaves_diff.size()) + if (all_leaves_diff.empty()) { CGAL_SL_PRINT_TEXT("Allocate a new subcurve for the overlap (no common subcurves)"); CGAL_SL_PRINT_EOL(); @@ -797,34 +860,25 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , overlap_sc->set_originating_subcurve2(c2); } else{ - if (all_leaves_diff.empty()) - { - CGAL_SL_PRINT_TEXT("One overlapping curve entirely contains the other one"); - CGAL_SL_PRINT_EOL(); - overlap_sc=first_parent; - } - else - { - CGAL_SL_PRINT_TEXT("Allocate new subcurves for the overlap (common subcurves)"); - CGAL_SL_PRINT_EOL(); + CGAL_SL_PRINT_TEXT("Allocate new subcurves for the overlap (common subcurves)"); + CGAL_SL_PRINT_EOL(); - // create an overlapping curve per subcurve in second_parent that is not in first_parent - for (typename std::vector::iterator sc_it=all_leaves_diff.begin(); - sc_it!=all_leaves_diff.end(); - ++sc_it) - { - overlap_sc = this->m_subCurveAlloc.allocate(1); // \todo allocate all at once? - this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); - overlap_sc->set_hint(this->m_statusLine.end()); - overlap_sc->init(overlap_cv); - overlap_sc->set_left_event(left_event); - overlap_sc->set_right_event(right_event); - m_overlap_subCurves.push_back(overlap_sc); - // sets the two originating subcurves of overlap_sc - overlap_sc->set_originating_subcurve1(first_parent); - overlap_sc->set_originating_subcurve2(*sc_it); - first_parent=overlap_sc; - } + // create an overlapping curve per subcurve in second_parent that is not in first_parent + for (typename std::vector::const_iterator sc_it=all_leaves_diff.begin(); + sc_it!=all_leaves_diff.end(); + ++sc_it) + { + overlap_sc = this->m_subCurveAlloc.allocate(1); // \todo allocate all at once? + this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); + overlap_sc->set_hint(this->m_statusLine.end()); + overlap_sc->init(overlap_cv); + overlap_sc->set_left_event(left_event); + overlap_sc->set_right_event(right_event); + m_overlap_subCurves.push_back(overlap_sc); + // sets the two originating subcurves of overlap_sc + overlap_sc->set_originating_subcurve1(first_parent); + overlap_sc->set_originating_subcurve2(*sc_it); + first_parent=overlap_sc; } } left_event->set_overlap(); From 68f76598fa8e8aed22be064e132b5d5af105f84f Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 25 Jan 2017 13:52:19 +0200 Subject: [PATCH 064/298] Added test cases for testing the construction of arrangements of segments (based on the finding of a user called vladaburian) --- .../test_construction/segments/test48.txt | 34 +++++++++++++++++++ .../test_construction/segments/test49.txt | 31 +++++++++++++++++ .../test_construction/segments/test50.txt | 34 +++++++++++++++++++ .../test_construction.segments.cmd | 3 ++ 4 files changed, 102 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test48.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test49.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test50.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test48.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test48.txt new file mode 100644 index 00000000000..52ad6c8979a --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test48.txt @@ -0,0 +1,34 @@ +6 +1 3 4 0 +4 0 5 0 +5 0 7 2 +0 0 9 0 +3 0 6 0 +2 0 8 0 + +0 + +10 +9 +1 + +0 0 +1 3 +2 0 +3 0 +4 0 +5 0 +6 0 +7 2 +8 0 +9 0 + +0 0 2 0 1 +1 3 4 0 1 +2 0 3 0 2 +3 0 4 0 3 +4 0 5 0 4 +5 0 6 0 3 +5 0 7 2 1 +6 0 8 0 2 +8 0 9 0 1 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test49.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test49.txt new file mode 100644 index 00000000000..fcfa42b50b5 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test49.txt @@ -0,0 +1,31 @@ +5 +1 3 4 0 +4 0 5 0 +0 0 9 0 +3 0 6 0 +2 0 8 0 + +0 + +9 +8 +1 + +0 0 +1 3 +2 0 +3 0 +4 0 +5 0 +6 0 +8 0 +9 0 + +0 0 2 0 1 +1 3 4 0 1 +2 0 3 0 2 +3 0 4 0 3 +4 0 5 0 4 +5 0 6 0 3 +6 0 8 0 2 +8 0 9 0 1 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test50.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test50.txt new file mode 100644 index 00000000000..1114ce12da1 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test50.txt @@ -0,0 +1,34 @@ +6 +1 3 4 0 +4 0 5 0 +0 0 9 0 +3 0 6 0 +7 1 8 0 +2 0 8 0 + +0 + +10 +9 +1 + +0 0 +1 3 +2 0 +3 0 +4 0 +5 0 +6 0 +7 1 +8 0 +9 0 + +0 0 2 0 1 +1 3 4 0 1 +2 0 3 0 2 +3 0 4 0 3 +4 0 5 0 4 +5 0 6 0 3 +6 0 8 0 2 +7 1 8 0 1 +8 0 9 0 1 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.segments.cmd b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.segments.cmd index 4e20bb65871..30d9155bc40 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.segments.cmd +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.segments.cmd @@ -45,3 +45,6 @@ ./data/test_construction/segments/test45.txt ./data/test_construction/segments/test46.txt ./data/test_construction/segments/test47.txt +./data/test_construction/segments/test48.txt +./data/test_construction/segments/test49.txt +./data/test_construction/segments/test50.txt From 126ed74256f339fa84652a723a382295411f1949 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 25 Jan 2017 13:55:24 +0200 Subject: [PATCH 065/298] Added test cases for testing the construction of arrangements of overlapping polylines --- .../Arrangement_on_surface_2/cgal_test_base | 13 +++++++++ .../test_construction/polylines/test01.txt | 25 +++++++++++++++++ .../test_construction/polylines/test02.txt | 27 +++++++++++++++++++ .../test_construction.polylines.cmd | 2 ++ 4 files changed, 67 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test01.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test02.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base index 6d659f7bf1c..0957aa42d4d 100755 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base @@ -873,6 +873,18 @@ test_construction_spherical_arcs() compile_and_run_with_flags test_construction geodesic_arcs_on_sphere "$flags" } +#---------------------------------------------------------------------# +# construction with polylines +#---------------------------------------------------------------------# +test_construction_polylines() +{ + local nt=$CGAL_GMPQ_NT; + local kernel=$CARTESIAN_KERNEL; + local geom_traits=$POLYLINE_GEOM_TRAITS; + local flags="-DTEST_NT=$nt -DTEST_KERNEL=$kernel -DTEST_GEOM_TRAITS=$geom_traits"; + compile_and_run_with_flags test_construction polylines "$flags" +} + #---------------------------------------------------------------------# # overlay with segments #---------------------------------------------------------------------# @@ -1674,6 +1686,7 @@ compile_and_run test_vert_ray_shoot_vert_segments test_construction_segments test_construction_linear test_construction_spherical_arcs +test_construction_polylines test_overlay_segments test_overlay_spherical_arcs diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test01.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test01.txt new file mode 100644 index 00000000000..1ec5ed13060 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test01.txt @@ -0,0 +1,25 @@ +3 +2 0 0 7 0 +3 3 1 4 0 6 0 +3 1 0 3 2 5 0 +0 + +7 +7 +2 + +0 0 +1 0 +3 1 +4 0 +5 0 +6 0 +7 0 + +2 0 0 1 0 1 +2 1 0 4 0 1 +3 1 0 3 2 5 0 1 +2 3 1 4 0 1 +2 4 0 5 0 2 +2 5 0 6 0 2 +2 6 0 7 0 1 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test02.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test02.txt new file mode 100644 index 00000000000..da8479558dd --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test02.txt @@ -0,0 +1,27 @@ +3 +2 0 0 7 0 +4 1 0 3 1 4 0 6 0 +3 0 -1 3 2 5 0 + +0 + +7 +8 +3 + +0 -1 +0 0 +1 0 +4 0 +5 0 +6 0 +7 0 + +2 0 -1 1 0 1 +2 0 0 1 0 1 +2 1 0 4 0 1 +3 1 0 3 1 4 0 1 +3 1 0 3 2 5 0 1 +2 4 0 5 0 2 +2 5 0 6 0 2 +2 6 0 7 0 1 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd new file mode 100644 index 00000000000..b5eed0dace4 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd @@ -0,0 +1,2 @@ +./data/test_construction/polylines/test01.txt +./data/test_construction/polylines/test02.txt From bf33219cf81405c3f8bddcf42acd859e66a4a2ad Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Mon, 30 Jan 2017 11:30:12 +0200 Subject: [PATCH 066/298] Enhanced messages when an error occurs --- .../Construction_test.h | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h index b3334e9f8f2..31b7c7c58d8 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h @@ -225,9 +225,19 @@ bool Construction_test::are_same_results() << m_num_faces << ")" << std::endl; } - if (m_arr->number_of_vertices() != m_num_vertices) return false; - if (m_arr->number_of_edges() != m_num_edges) return false; - if (m_arr->number_of_faces() != m_num_faces) return false; + if ((m_arr->number_of_vertices() != m_num_vertices) || + (m_arr->number_of_edges() != m_num_edges) || + (m_arr->number_of_faces() != m_num_faces)) { + std::cout << "# vertices, edge, faces obtained: (" + << m_arr->number_of_vertices() << "," + << m_arr->number_of_edges() << "," + << m_arr->number_of_faces() << ")" + << ", expected: (" + << m_num_vertices << "," + << m_num_edges << "," + << m_num_faces << ")" << std::endl; + return false; + } Point_container points_res(m_num_vertices); typename Point_container::iterator pit = points_res.begin(); @@ -239,13 +249,20 @@ bool Construction_test::are_same_results() std::sort(points_res.begin(), pit, pt_compare); if (m_verbose_level > 2) { - std::copy(points_res.begin(), pit, + std::copy(points_res.begin(), points_res.end(), std::ostream_iterator(std::cout, "\n")); } Point_equal point_eq(m_geom_traits); - if (! std::equal(points_res.begin(), pit, m_points.begin(), point_eq)) + if (! std::equal(points_res.begin(), pit, m_points.begin(), point_eq)) { + std::cout << "Obtained: " << std::endl; + std::copy(m_points.begin(), m_points.end(), + std::ostream_iterator(std::cout, "\n")); + std::cout << "Expected: " << std::endl; + std::copy(points_res.begin(), points_res.end(), + std::ostream_iterator(std::cout, "\n")); return false; + } std::vector curves_res(m_arr->number_of_edges()); typename Xcurve_container::iterator xcit = curves_res.begin(); @@ -259,13 +276,23 @@ bool Construction_test::are_same_results() std::sort(curves_res.begin(), xcit, curve_compare); if (m_verbose_level > 2) { - std::copy(curves_res.begin(), xcit, - std::ostream_iterator(std::cout, "\n")); + for (typename Xcurve_container::iterator it = curves_res.begin(); + it != curves_res.end(); ++it) + std::cout << *it << " " << it->data() << std::endl; } Curve_equal curve_eq(m_geom_traits); - if (! std::equal(curves_res.begin(), xcit, m_xcurves.begin(), curve_eq)) + if (! std::equal(curves_res.begin(), xcit, m_xcurves.begin(), curve_eq)) { + std::cout << "Obtained: " << std::endl; + for (typename Xcurve_container::iterator it = m_xcurves.begin(); + it != m_xcurves.end(); ++it) + std::cout << *it << " " << it->data() << std::endl; + std::cout << "Expected: " << std::endl; + for (typename Xcurve_container::iterator it = curves_res.begin(); + it != curves_res.end(); ++it) + std::cout << *it << " " << it->data() << std::endl; return false; + } if (m_arr->number_of_faces() == 1) { Face_const_iterator fit = m_arr->faces_begin(); From c4a25fddfb280a78c5e8899494d0c75d4692708f Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Mon, 30 Jan 2017 11:30:45 +0200 Subject: [PATCH 067/298] Added a test case --- .../test_construction/polylines/test03.txt | 19 +++++++++++++++++++ .../test_construction.polylines.cmd | 1 + 2 files changed, 20 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test03.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test03.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test03.txt new file mode 100644 index 00000000000..de59d514e0e --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test03.txt @@ -0,0 +1,19 @@ +3 +4 5 0 4 1 3 1 2 1 +5 5 0 4 1 3 1 2 1 0 0 +3 1 2 3 1 4 1 +0 +6 +5 +1 +0 0 +1 2 +2 1 +3 1 +4 1 +5 0 +2 2 1 0 0 1 +2 1 2 3 1 1 +2 2 1 3 1 2 +2 3 1 4 1 3 +2 4 1 5 0 2 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd index b5eed0dace4..a826289decb 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd @@ -1,2 +1,3 @@ ./data/test_construction/polylines/test01.txt ./data/test_construction/polylines/test02.txt +./data/test_construction/polylines/test03.txt From 51a729a73c03f2d85cac90eda4d449a2f8870f3f Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Thu, 2 Feb 2017 11:34:35 +0200 Subject: [PATCH 068/298] Added test with overlaps --- .../data/test_construction/polylines/test04.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test04.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test04.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test04.txt new file mode 100644 index 00000000000..dc0c3039d79 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test04.txt @@ -0,0 +1,17 @@ +3 +4 1 2 2 1 3 1 4 0 +4 0 0 2 1 3 1 4 0 +2 2 1 3 1 +0 +5 +4 +1 +0 0 +1 2 +2 1 +3 1 +4 0 +2 0 0 2 1 1 +2 1 2 2 1 1 +2 2 1 3 1 3 +2 3 1 4 0 2 From 5bbbf2eb3a6baed77e344f6e8733feced217b388 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 5 Feb 2017 09:26:15 +0200 Subject: [PATCH 069/298] New tests --- .../test_construction/polylines/test05.txt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test05.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test05.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test05.txt new file mode 100644 index 00000000000..79061951b3e --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test05.txt @@ -0,0 +1,25 @@ +3 +3 0 3 1 2 2 0 +3 0 1 1 2 2 0 +2 0 2 3 0 +0 +8 +8 +2 +0 1 +0 2 +0 3 +3/5 8/5 +1 2 +3/2 1 +2 0 +3 0 + +2 0 1 3/5 8/5 1 +2 0 2 3/5 8/5 1 +2 0 3 1 2 1 +2 3/5 8/5 3/2 1 1 +2 3/5 8/5 1 2 1 +2 1 2 3/2 1 2 +2 3/2 1 2 0 2 +2 3/2 1 3 0 1 From ec291f8502fec9d07240499120bbeba31afd5998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 26 Jun 2017 16:15:38 +0200 Subject: [PATCH 070/298] update cmake script to test polylines --- .../test/Arrangement_on_surface_2/cgal_test.cmake | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake index 9439aa934ce..16d3d2b1376 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake @@ -669,6 +669,18 @@ function(test_construction_spherical_arcs) compile_and_run_with_flags( test_construction geodesic_arcs_on_sphere "${flags}") endfunction() +#---------------------------------------------------------------------# +# construction with polylines +#---------------------------------------------------------------------# +function(test_construction_polylines) + set(nt ${CGAL_GMPQ_NT}) + set(kernel ${CARTESIAN_KERNEL}) + set(geom_traits ${POLYLINE_GEOM_TRAITS}) + set(flags "-DTEST_NT=${nt} -DTEST_KERNEL=${kernel} -DTEST_GEOM_TRAITS=${geom_traits}") + compile_and_run_with_flags( test_construction polylines "${flags}") +endfunction() + + #---------------------------------------------------------------------# # overlay with segments #---------------------------------------------------------------------# @@ -1329,6 +1341,7 @@ compile_and_run(test_vert_ray_shoot_vert_segments) test_construction_segments() test_construction_linear_curves() test_construction_spherical_arcs() +test_construction_polylines() test_overlay_segments() test_overlay_spherical_arcs() From 29ce8330aed2a252c9a8e0c432243258dba63688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 26 Jun 2017 16:56:19 +0200 Subject: [PATCH 071/298] add all test cases --- .../Arrangement_on_surface_2/test_construction.polylines.cmd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd index a826289decb..7c0952457f3 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd @@ -1,3 +1,5 @@ ./data/test_construction/polylines/test01.txt ./data/test_construction/polylines/test02.txt ./data/test_construction/polylines/test03.txt +./data/test_construction/polylines/test04.txt +./data/test_construction/polylines/test05.txt From 55bb4d208c50540af96ab2bee999022f05ebd002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 27 Jun 2017 13:49:07 +0200 Subject: [PATCH 072/298] a curve no longer needs an event when it is no longer swept --- .../include/CGAL/Sweep_line_2/Arr_construction_sl_visitor.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_construction_sl_visitor.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_construction_sl_visitor.h index 935c6bb9476..aecc86e3842 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_construction_sl_visitor.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_construction_sl_visitor.h @@ -552,7 +552,9 @@ add_subcurve(const X_monotone_curve_2& cv, Subcurve* sc) // In case the event has no more right subcurves associated with it, we can // deallocate it. Note that we inform the helper class before deallocating // the event. - if (last_event->dec_right_curves_counter() == 0) { + if (((Event*) sc->right_event())==this->current_event() && + last_event->dec_right_curves_counter() == 0) + { m_helper.before_deallocate_event(last_event); this->deallocate_event(last_event); } From 7fa251e3e8740584e087f9ffc80ac92c0839ba4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 28 Jun 2017 09:57:04 +0200 Subject: [PATCH 073/298] make debug output more robust in case of loss of precision --- .../include/CGAL/Arr_geometry_traits/Circle_segment_2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Circle_segment_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Circle_segment_2.h index eb5e4aa9885..ae61e1ae363 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Circle_segment_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_geometry_traits/Circle_segment_2.h @@ -2440,7 +2440,7 @@ protected: { x = x_left + x_jump*i; disc = app_sqr_rad - CGAL::square(x - app_xcenter); - CGAL_precondition(disc >= 0); + if (disc < 0) disc = 0; if(is_up) y = app_ycenter + std::sqrt(disc); else From c31e8596a69d60834eb3baa4f9370737bcbf2477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 28 Jun 2017 10:15:42 +0200 Subject: [PATCH 074/298] add missing END of --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index a6832fa1e32..0c1e98b526c 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -517,6 +517,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, xc = *CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front()); } _create_overlapping_curve(xc, c1 , c2, all_leaves_diff, first_parent); + CGAL_SL_PRINT_END_EOL("computing intersection (overlap with common ancesters)"); return; } } From b3435d28c4e57ba306357a097a77ffdbfd3e1cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 28 Jun 2017 10:16:48 +0200 Subject: [PATCH 075/298] replace a curve on the left if the new one contains all ancesters of the old one --- .../CGAL/Sweep_line_2/Sweep_line_event.h | 16 +++++++++++---- .../CGAL/Sweep_line_2/Sweep_line_subcurve.h | 20 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h index 35eea401adc..d0e6adc4ea6 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h @@ -155,11 +155,19 @@ public: return; } - // Replace the existing curve in case of overlap. - // EBEB 2011-10-27: Fixed to detect overlaps correctly - if ((curve != *iter) && (curve->has_common_leaf(*iter))) { + // Replace the existing curve in case of overlap, only if the set of ancesters + // of curve contains the set of ancesters of *iter + if ((curve != *iter) && (curve->has_common_leaf(*iter))) + { //std::cout << "add_curve_to_left, curve overlaps" << std::endl; - *iter = curve; + if ( curve->number_of_original_curves() > (*iter)->number_of_original_curves() ) + { + CGAL_assertion( curve->are_all_leaves_contained(*iter) ); + *iter = curve; + } + else{ + CGAL_assertion( (*iter)->are_all_leaves_contained(curve) ); + } return; } } diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index b4882505654..ec1e233d192 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -183,6 +183,26 @@ public: return (m_orig_subcurve1->is_leaf(s) || m_orig_subcurve2->is_leaf(s)); } + /*! Check if other is entirely contained in the hierarchy of subcurves of this*/ + bool are_all_leaves_contained(Self* other) + { + std::set leaves_of_this; + this->template all_leaves(std::inserter(leaves_of_this, leaves_of_this.begin())); + std::vector leaves_of_other; + other->template all_leaves(std::back_inserter(leaves_of_other)); + if (leaves_of_other.size() > leaves_of_this.size()) + return false; + for (typename std::vector::iterator it=leaves_of_other.begin(); + it!=leaves_of_other.end(); + ++it) + { + if (leaves_of_this.count(*it)==0) + return false; + } + + return true; + } + /*! Check if the two hierarchies contain the same leaf nodes. */ bool has_same_leaves(Self* s) { From f07e0670561955a878abc52ab9caa3da38eb0b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 7 Aug 2017 15:34:21 +0200 Subject: [PATCH 076/298] fix swapt expected/obtained --- .../test/Arrangement_on_surface_2/Construction_test.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h index 31b7c7c58d8..b6958af15fa 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Construction_test.h @@ -255,10 +255,10 @@ bool Construction_test::are_same_results() Point_equal point_eq(m_geom_traits); if (! std::equal(points_res.begin(), pit, m_points.begin(), point_eq)) { - std::cout << "Obtained: " << std::endl; + std::cout << "Expected: " << std::endl; std::copy(m_points.begin(), m_points.end(), std::ostream_iterator(std::cout, "\n")); - std::cout << "Expected: " << std::endl; + std::cout << "Obtained: " << std::endl; std::copy(points_res.begin(), points_res.end(), std::ostream_iterator(std::cout, "\n")); return false; @@ -283,11 +283,11 @@ bool Construction_test::are_same_results() Curve_equal curve_eq(m_geom_traits); if (! std::equal(curves_res.begin(), xcit, m_xcurves.begin(), curve_eq)) { - std::cout << "Obtained: " << std::endl; + std::cout << "Expected: " << std::endl; for (typename Xcurve_container::iterator it = m_xcurves.begin(); it != m_xcurves.end(); ++it) std::cout << *it << " " << it->data() << std::endl; - std::cout << "Expected: " << std::endl; + std::cout << "Obtained: " << std::endl; for (typename Xcurve_container::iterator it = curves_res.begin(); it != curves_res.end(); ++it) std::cout << *it << " " << it->data() << std::endl; From 973af4dc31116e80797ee3b1ab633f3b1218ce34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 9 Aug 2017 13:27:06 +0200 Subject: [PATCH 077/298] add missing include directive --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index ec1e233d192..3efbb9b7be5 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -31,6 +31,7 @@ #include #include #include +#include namespace CGAL { From a8f5a4c19d1099581f14cc56ca85282fc9414c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 9 Aug 2017 16:35:52 +0200 Subject: [PATCH 078/298] Mainly two changes: - make sure left of an event curves removed by the addition of an overlapping curve are by an overlapping curve that has them as a leaf. As a consequence we leave more curves on the left but several can be removed by the addition of one curve. Similarly for right curves of an event, the replacement of a curve on the right is done only when all subcurves are contained by an overlapping curve. - In case of overlapping of two curves detected when inserting one of the two curves on the right of an event, it might happen that the current event is not the left end point of the overlapping curve to be computed. In such a case, the new overlapping curve will not be added in the current event. The modification here pass the current event to the intersection function that will pass it to the overlap creation function so that the overlapping curve will also be added on the right and on the left of the current event. --- Sweep_line_2/include/CGAL/Sweep_line_2.h | 6 ++- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 46 ++++++++++++++----- .../CGAL/Sweep_line_2/Sweep_line_event.h | 35 +++++++++++--- 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2.h index 9b8bb579475..b85dce1997c 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2.h @@ -31,6 +31,7 @@ #include #include #include +#include namespace CGAL { @@ -187,7 +188,8 @@ protected: void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2, const std::vector& all_leaves_diff, - Subcurve* first_parent); + Subcurve* first_parent, + Event* event_on_overlap); /*! Compute intersections between the two given curves. * If the two curves intersect, create a new event (or use the event that @@ -196,7 +198,7 @@ protected: * \param curve1 The first curve. * \param curve2 The second curve. */ - void _intersect(Subcurve* c1, Subcurve* c2); + void _intersect(Subcurve* c1, Subcurve* c2, Event* event_for_overlap = NULL); /*! When a curve is removed from the status line for good, its top and * bottom neighbors become neighbors. This method finds these cases and diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 0c1e98b526c..4597e14d19e 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -320,12 +320,12 @@ _add_curve_to_right(Event* event, Subcurve* curve) { CGAL_SL_PRINT_CURVE(*iter); CGAL_SL_PRINT_EOL(); - if ((*iter)->is_inner_node(curve)) { + if ((*iter)->are_all_leaves_contained(curve)) { CGAL_SL_PRINT_END_EOL("adding a Curve to the right (curve exists)"); return false; } - if ((curve)->is_inner_node(*iter)) { + if ((curve)->are_all_leaves_contained(*iter)) { *iter = curve; // replace the current curve with the new one. CGAL_SL_PRINT_END_EOL ("adding a Curve to the right (curve partially overlaps)"); @@ -345,7 +345,12 @@ _add_curve_to_right(Event* event, Subcurve* curve) // a new overlap needs to be computed _intersect(static_cast(curve), - static_cast(*(pair_res.second))); + static_cast(*(pair_res.second)), + event); + // SL_SAYS: we need to be sure that the overlapping curve generated by + // `curve` and `*(pair_res.second)` has not yet been computed or + // that that overlapping curve will be added to the right of + // `event` because of an adjacency in the status line. // Indicate that an overlap has occured: CGAL_SL_PRINT_END_EOL("adding a Curve to the right (overlap)"); @@ -405,7 +410,8 @@ _remove_curve_from_status_line(Subcurve* leftCurve, bool remove_for_good) template void Sweep_line_2::_intersect(Subcurve* c1, - Subcurve* c2) + Subcurve* c2, + Event* event_for_overlap) { CGAL_SL_PRINT_START("computing intersection of "); CGAL_SL_PRINT_CURVE(c1); @@ -436,7 +442,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, Subcurve* first_parent=NULL; if (c1->originating_subcurve1()!=NULL || c2->originating_subcurve2()!=NULL) { - // get the subcurve leaves of c1 and of c2. Then extact from the smallest set + // get the subcurve leaves of c1 and of c2. Then extract from the smallest set // the subcurves leaves that are not in the other one. If empty, it means that // a subcurves is completely contained in another one. first_parent = c1; @@ -512,11 +518,12 @@ void Sweep_line_2::_intersect(Subcurve* c1, vector_inserter vi_end(inter_res); this->m_traits->intersect_2_object()(xc, (*sc_it)->last_curve(), vi); - CGAL_assertion(inter_res.empty() || inter_res.size()==1); //TMP for debug - CGAL_assertion( CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front())!=NULL );// TMP for debug + // SL_SAYS: we need to check that the following assertions are always valid + CGAL_assertion(inter_res.empty() || inter_res.size()==1); + CGAL_assertion( CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front())!=NULL ); xc = *CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front()); } - _create_overlapping_curve(xc, c1 , c2, all_leaves_diff, first_parent); + _create_overlapping_curve(xc, c1 , c2, all_leaves_diff, first_parent, event_for_overlap); CGAL_SL_PRINT_END_EOL("computing intersection (overlap with common ancesters)"); return; } @@ -654,7 +661,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, CGAL_assertion(icv != NULL); CGAL_SL_PRINT_TEXT("Found an overlap"); CGAL_SL_PRINT_EOL(); - _create_overlapping_curve(*icv, c1 , c2, all_leaves_diff, first_parent); + _create_overlapping_curve(*icv, c1 , c2, all_leaves_diff, first_parent, event_for_overlap); } } @@ -769,7 +776,7 @@ void Sweep_line_2::_fix_overlap_subcurves() Event_subcurve_iterator iter = this->m_currentEvent->left_curves_begin(); - //special treatment for Subcuves that store overlaps + //special treatment for Subcurves that store overlaps while (iter != this->m_currentEvent->left_curves_end()) { Subcurve* leftCurve = *iter; @@ -796,7 +803,8 @@ void Sweep_line_2:: _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2, const std::vector& all_leaves_diff, - Subcurve* first_parent) + Subcurve* first_parent, + Event* event_on_overlap) { // An overlap occurs: CGAL_SL_PRINT_START_EOL("creating an overlapping curve"); @@ -869,7 +877,7 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, sc_it!=all_leaves_diff.end(); ++sc_it) { - overlap_sc = this->m_subCurveAlloc.allocate(1); // \todo allocate all at once? + overlap_sc = this->m_subCurveAlloc.allocate(1); // SL_SAYS: allocate all at once? this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); overlap_sc->set_hint(this->m_statusLine.end()); overlap_sc->init(overlap_cv); @@ -915,6 +923,20 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, if (right_event->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); + if (event_on_overlap != NULL && event_on_overlap!=left_event) + { + // first check that event_on_overlap is in that overlapping curve as it + // can be on another overlapping part of the generating curves + if ( this->m_queueEventLess(event_on_overlap, left_event) == LARGER && + this->m_queueEventLess(right_event, event_on_overlap) == LARGER ) + { + CGAL_SL_PRINT_TEXT("An overlapping curve starts before the event inducing its creation"); + CGAL_SL_PRINT_EOL(); + // an overlapping curve is involved in an intersection + _add_curve_to_right(event_on_overlap, overlap_sc); + event_on_overlap->add_curve_to_left(overlap_sc); + } + } CGAL_SL_PRINT_END_EOL("creating an overlapping curve"); } diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h index d0e6adc4ea6..fdaaa538665 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h @@ -145,6 +145,8 @@ public: //std::cout << "add_curve_to_left, curve: "; //curve->Print(); + bool curve_added = false; + std::vector left_curves_to_remove; for (iter = m_leftCurves.begin(); iter != m_leftCurves.end(); ++iter) { //std::cout << "add_curve_to_left, iter: "; //(*iter)->Print(); @@ -157,21 +159,40 @@ public: // Replace the existing curve in case of overlap, only if the set of ancesters // of curve contains the set of ancesters of *iter - if ((curve != *iter) && (curve->has_common_leaf(*iter))) + if (curve->has_common_leaf(*iter)) { //std::cout << "add_curve_to_left, curve overlaps" << std::endl; if ( curve->number_of_original_curves() > (*iter)->number_of_original_curves() ) { - CGAL_assertion( curve->are_all_leaves_contained(*iter) ); - *iter = curve; + if (curve->are_all_leaves_contained(*iter)) + { + if (curve_added) + { + left_curves_to_remove.push_back(iter); + continue; + } + + *iter = curve; + curve_added=true; + } } else{ - CGAL_assertion( (*iter)->are_all_leaves_contained(curve) ); + if ((*iter)->are_all_leaves_contained(curve)) + { + CGAL_assertion(!curve_added); + return; + } } - return; } } + for (typename std::vector::iterator itit = + left_curves_to_remove.begin(); itit!=left_curves_to_remove.end(); ++itit) + { + m_leftCurves.erase(*itit); + } + + if (curve_added) return; // The curve does not exist - insert it to the container. m_leftCurves.push_back(curve); // std::cout << "add_curve_to_left, pushed back" << std::endl; @@ -245,7 +266,7 @@ public: { Subcurve_iterator iter; for (iter = m_leftCurves.begin(); iter!= m_leftCurves.end(); ++iter) { - if (curve->has_common_leaf(*iter)) { + if (curve == *iter || curve->are_all_leaves_contained(*iter)) { m_leftCurves.erase(iter); return; } @@ -257,7 +278,7 @@ public: { Subcurve_iterator iter; for (iter = m_rightCurves.begin(); iter!= m_rightCurves.end(); ++iter) { - if (curve->has_common_leaf(*iter)) { + if (curve == *iter || curve->are_all_leaves_contained(*iter)) { m_rightCurves.erase(iter); return; } From 458ca21e3b8c24552c5f48fe9609aa6a5e3b91f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 10 Aug 2017 10:59:21 +0200 Subject: [PATCH 079/298] fix unused variable warning --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 4597e14d19e..3d3cca419ed 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -92,7 +92,7 @@ void Sweep_line_2::_handle_left_curves() CGAL_SL_PRINT_EOL(); this->_handle_event_without_left_curves(); - Status_line_iterator sl_pos = this->m_status_line_insert_hint; + // Status_line_iterator sl_pos = this->m_status_line_insert_hint; if (this->m_is_event_on_above) { CGAL_SL_PRINT_TEXT("The event is on a curve in the status line"); From 88f85cb438891595b349bc5c0a85b9591859e8e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 25 Aug 2017 16:42:32 +0200 Subject: [PATCH 080/298] handle case when the left curve of an event shouldn't be filled ... ... as it prevents from detecting it is on an overlapping curve --- .../test_construction/segments/test51.txt | 24 +++++++++++++++++++ .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 20 ++++++++++++---- 2 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test51.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test51.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test51.txt new file mode 100644 index 00000000000..d05b8f0fe0e --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/segments/test51.txt @@ -0,0 +1,24 @@ +4 +0 0 4 0 +1 0 3 0 +2 0 5 0 +2 0 3 0 + +0 + +6 +5 +1 + +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 + +0 0 1 0 1 +1 0 2 0 2 +2 0 3 0 4 +3 0 4 0 2 +4 0 5 0 1 diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 3d3cca419ed..e7b33dd499e 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -841,12 +841,24 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, right_event = this->_push_event(right_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; } - if (!c1->is_start_point(left_event)) - left_event->add_curve_to_left(c1); + if (!c1->is_start_point(left_event)) + { + // here we do no add a curve on the left if there wasn't a curve before + // it might happen that a curve will be added on the left while + // it should have been an overlapping curve (that will be detected + // upon handling of an event with no left curve). + // See for example data/test_construction/segments/test51.txt + if (!c2->is_start_point(left_event) || left_event->has_left_curves()) + left_event->add_curve_to_left(c1); + } else left_event->remove_curve_from_right(c1); - if (!c2->is_start_point(left_event)) - left_event->add_curve_to_left(c2); + if (!c2->is_start_point(left_event)) + { + // same reason than just above + if (!c1->is_start_point(left_event) || left_event->has_left_curves()) + left_event->add_curve_to_left(c2); + } else left_event->remove_curve_from_right(c2); From 76f4de545d5ab12251af35b73670bcaf2c86c395 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 30 Aug 2017 15:01:27 +0300 Subject: [PATCH 081/298] Introduced Subcurve_vector type and used it --- Sweep_line_2/include/CGAL/Sweep_line_2.h | 5 ++++- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 17 +++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2.h index b85dce1997c..c399d6fc63f 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2.h @@ -27,6 +27,8 @@ */ #include +#include + #include #include #include @@ -152,6 +154,7 @@ public: virtual ~Sweep_line_2() {} protected: + typedef typename std::vector Subcurve_vector; /*! Initialize the data structures for the sweep-line algorithm. */ virtual void _init_structures(); @@ -187,7 +190,7 @@ protected: */ void _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2, - const std::vector& all_leaves_diff, + const Subcurve_vector& all_leaves_diff, Subcurve* first_parent, Event* event_on_overlap); diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index e7b33dd499e..3f8adb85600 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -101,7 +101,7 @@ void Sweep_line_2::_handle_left_curves() // Obtain the subcurve that contains the current event Subcurve* sc = static_cast(*(this->m_status_line_insert_hint)); - + // The current event point starts at the interior of a subcurve that // already exists in the status line (this may also indicate an overlap). if (! this->m_currentEvent->has_right_curves()) { @@ -438,7 +438,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, m_curves_pair_set.resize(m_curves_pair_set.size() * 6); // handle overlapping curves with common ancesters - std::vector all_leaves_diff; + Subcurve_vector all_leaves_diff; Subcurve* first_parent=NULL; if (c1->originating_subcurve1()!=NULL || c2->originating_subcurve2()!=NULL) { @@ -448,8 +448,8 @@ void Sweep_line_2::_intersect(Subcurve* c1, first_parent = c1; Subcurve* second_parent = c2; - std::vector all_leaves_first; - std::vector all_leaves_second; + Subcurve_vector all_leaves_first; + Subcurve_vector all_leaves_second; first_parent->template all_leaves(std::back_inserter(all_leaves_first)); second_parent->template all_leaves(std::back_inserter(all_leaves_second)); if (all_leaves_second.size() > all_leaves_first.size()) @@ -509,9 +509,10 @@ void Sweep_line_2::_intersect(Subcurve* c1, return; } else{ + CGAL_SL_PRINT_TEXT("Overlap with common ancesters"); X_monotone_curve_2 xc = first_parent->last_curve(); - for (typename std::vector::iterator sc_it=all_leaves_diff.begin(); - sc_it!=all_leaves_diff.end(); ++sc_it) + for (typename Subcurve_vector::iterator sc_it=all_leaves_diff.begin(); + sc_it!=all_leaves_diff.end(); ++sc_it) { std::vector inter_res; vector_inserter vi(inter_res) ; @@ -802,7 +803,7 @@ template :: _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Subcurve*& c1 , Subcurve*& c2, - const std::vector& all_leaves_diff, + const Subcurve_vector& all_leaves_diff, Subcurve* first_parent, Event* event_on_overlap) { @@ -824,7 +825,7 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Point_2 left_end = this->m_traits->construct_min_vertex_2_object()(overlap_cv); left_event = this->_push_event(left_end, Base_event::DEFAULT, ARR_INTERIOR, ARR_INTERIOR).first; } - + // Get the right end of overlap_cv. Event* right_event; Arr_parameter_space ps_x_r = From 898451f7435b99e64699dfa90c29cd0d175fb30b Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 30 Aug 2017 15:03:26 +0300 Subject: [PATCH 082/298] Introduced a new test that tests the case 'Overlap with common ancesters' --- .../data/test_construction/polylines/spec.txt | 1 + .../test_construction/polylines/test06.pdf | Bin 0 -> 3012 bytes .../test_construction/polylines/test06.txt | 35 ++++++++++++++++++ .../test_construction.polylines.cmd | 1 + 4 files changed, 37 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.pdf create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt new file mode 100644 index 00000000000..aac947be291 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt @@ -0,0 +1 @@ +test06 covers the case "Overlap with common ancesters" diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.pdf b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3489398982b942678e10d0a8544d37f594fb24b1 GIT binary patch literal 3012 zcmc&$dpwl+8h4GxH6*uqH@89N^3Ki3vKW_KGG>rlWsDc&GNbX1$l+AFD;4GJmaJR~ z?Qs@GHWap0a!PAMwn(YQ^+c_W)cMV9PRcoF|2m)Z{_(!=^SsaVdw<{O@_WAKOoqEH z5l6z1AOa+ajDs8;FnCTvQY?o^AP|5A;a!~}B82C1z}?Xi{3u|FAusX>NJ~N> zJd=Z>h>(w2c#&#}5|PJ8r2>q>2k;Vj{FnvF#YK<`g@Kg_5cnZPhBjgF!E6*sg6MP% zK1BLP#^6~=~o71FOnZqZCj&dF<(IiQ}Za8F!SG&E;tHF$JGet7V@!oYCn@22F~*Tcxw&g^Qf zbmCCviXkiX_(<=bKL3Z+%P;@E-$J7y!$i|yx}>tcNcb{u%+pvcFi}ret+v|;g< z_qCVAWB1Prj=uRSQ)Z5{He_j{?G|BJNOTN>!Mh6hD8fgRAqhwjfyJeXfj|=o1za|Q zf}+NQ-hx0u1EpIk>cK`q*+G&%V@Xu5f&_t(oy6fH(k^4VvZ1hr#)0q*B!$OCSRO8$ zBqb_Y_V?a`B$<%-OPc_R;&DDU5Cx>gjtqmMcNGefq^miYdo(SYm%YS_m2+Bf|NigY;vwSVsSMY?Y*)+FN(;m^NGau=| z<;p0AqAFt*J<%E$eES(#fA5W z+jQ#22}RrU+UKyA`c2b8rBU&2VTCm(1`nU`v?_eYs1n>7dXr~>^StPRm|rthl}`z+ z|MCJ-(4W8S*+p4{!4XpvB#*b_ZHV69{pX)uNSw5+Pj*uy-Hun}TlL#qa2OAH{TPPV zm^_cS=qY$~9Fh;reL5U;<50l&F~g_NsWncBtd+WCzo=EPB97w~y}N^puM3ZzRI@R0 z3h!_u2}UdGS9Lb!4KY}%Xv00%2rnWIDOe=ltmAm zdS!YF_1&D^^H*_0!^YFfVh^hLWaH+q`M!5LReq{}n*vQWiPIliLMBW}eocx<0q64BMenpKKQUtj_(6dQhkm&h0^Q*k>0Y{2ZtIB zn)B~Roj!SioxRO-E>!R2(9!dIrr%$5?DoR62(cYbrE#;hioK759sj12!rT9-_80bN1Xp%9Iotk&%9=TDq<_NL zUMq8lquHKjUg3%`mZ+pfb;e!8NZm%8B|q|w*RLDX1BV$Cu}TLY7HO%=y)$56o67qF zdl$R54-1p_JTKizGROGC@XBEow-u!uc%6tCh>}C0DD1h43IxN23Sx zveWmLC);A{ywPB?&>^IHXWWw~X9Dt_LT$Xbfj`_s;2rtLUr`a=wK|EVl%I#X~v|Kr)nvyg()gar)iYszn9V!`CZh8|f>XtW)xtxLQOU&<1FP@GQd#)Vk zw);(T2UEw%b*mZ`H?$|E1YNVQIF+%jv@S*1)a#YwF7RxiIsFzmu)pKmt{w{u`J!@b zZM~u-9ZW`dyN7a?=G&8ZzW!Dm*7ZE@Ra9pAW%XZH8O|U&Gt(wl=Hmv@o}K+BKK2ij ziyXts@0emQCpmO)QsUb%PGsMTNU+5`o%;S(XV!!WYx*uebvmGHbJyyu^Q~F$<~N7E z|5dY-7O^`fMtJP%H7pz6zV>imu{eS2z%|pTe3?-YZ`pS}ICJ;G%CY+<4UmeWGwuD= z)$m-m^D12IQF8B(t<-%Y4WprDMiDBjBP}lu++q$?S~N`VdZJqx8ZoAz<9YCE*(~`>)N_n%dU`48T2+ud{O0Un_+2P?SH^fQR&iwI4_3D$_L?RPN_Wk zrt_?-h!6h;_lam5tF{~8d$;Y8PHBr;fv)w%yW0H$>B^&b{c7%^DjrSG#@|=ZZok5I zDkz9eZ`R&Cc3@fS%DLs@Gc^>`nyTI|7cpMp@W@vWXI!?$bPX&UY0Yrj`8J3B+RuH5 z_Hm05r)-%zpT5+|(dOZ{IvljUdJbc6FqHsP$< z)N5Eb^l)Tr#@RIOh?UcGH?JJ>Us1PoC`pdvPmf?IKhx3ZfD(PGgDIpX zb}+>b5QhajRLJ2aAVQ3Ub+dWf5eZ&AOCUfYNxA^LSkI3Z0A?%|q+FFFM5UpDX+#pn K+}zF29rI5+Rb2-F literal 0 HcmV?d00001 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.txt new file mode 100644 index 00000000000..0a74c2b93bb --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test06.txt @@ -0,0 +1,35 @@ +4 +3 0 0 2 3 3 0 +2 0 3 4 0 +3 0 2 2 3 3 0 +3 0 1 2 3 3 0 +0 +11 +13 +4 + +0 0 +0 1 +0 2 +0 3 +4/5 12/5 +8/7 15/7 +4/3 2 +2 3 +8/3 1 +3 0 +4 0 + +2 0 0 4/3 2 1 +2 0 1 8/7 15/7 1 +2 0 2 4/5 12/5 1 +2 0 3 4/5 12/5 1 +2 4/5 12/5 8/7 15/7 1 +2 4/5 12/5 2 3 1 +2 8/7 15/7 4/3 2 1 +2 8/7 15/7 2 3 1 +2 4/3 2 8/3 1 1 +2 4/3 2 2 3 1 +2 2 3 8/3 1 3 +2 8/3 1 3 0 3 +2 8/3 1 4 0 1 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd index 7c0952457f3..e4b43902d31 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd @@ -3,3 +3,4 @@ ./data/test_construction/polylines/test03.txt ./data/test_construction/polylines/test04.txt ./data/test_construction/polylines/test05.txt +./data/test_construction/polylines/test06.txt From f0dd482a28771f82c4fd1c1e32e3adcc03ed5c97 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 30 Aug 2017 15:06:21 +0300 Subject: [PATCH 083/298] Fixed spelling --- .../data/test_construction/polylines/spec.txt | 2 +- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt index aac947be291..aff1ae02e48 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/spec.txt @@ -1 +1 @@ -test06 covers the case "Overlap with common ancesters" +test06 covers the case "Overlap with common ancestors" diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 3f8adb85600..26cf9eb84b0 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -509,7 +509,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, return; } else{ - CGAL_SL_PRINT_TEXT("Overlap with common ancesters"); + CGAL_SL_PRINT_TEXT("Overlap with common ancestors"); X_monotone_curve_2 xc = first_parent->last_curve(); for (typename Subcurve_vector::iterator sc_it=all_leaves_diff.begin(); sc_it!=all_leaves_diff.end(); ++sc_it) @@ -525,7 +525,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, xc = *CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front()); } _create_overlapping_curve(xc, c1 , c2, all_leaves_diff, first_parent, event_for_overlap); - CGAL_SL_PRINT_END_EOL("computing intersection (overlap with common ancesters)"); + CGAL_SL_PRINT_END_EOL("computing intersection (overlap with common ancestors)"); return; } } From 4a93ac421bff77b3ad2fd21b97a8faa4bd2b46f2 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Thu, 28 Sep 2017 15:40:25 +0300 Subject: [PATCH 084/298] Added some test cases for plane sweep of polylines --- .../test_construction/polylines/test07.pdf | Bin 0 -> 13549 bytes .../test_construction/polylines/test07.txt | 54 +++++++++++++ .../test_construction/polylines/test08.pdf | Bin 0 -> 13486 bytes .../test_construction/polylines/test08.txt | 41 ++++++++++ .../test_construction/polylines/test09.pdf | Bin 0 -> 2537 bytes .../test_construction/polylines/test09.txt | 75 ++++++++++++++++++ .../test_construction/polylines/test10.txt | 48 +++++++++++ 7 files changed, 218 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.pdf create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test08.pdf create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test08.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test09.pdf create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test09.txt create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test10.txt diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.pdf b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.pdf new file mode 100644 index 0000000000000000000000000000000000000000..44b03fdbd18cfdf5ee2f8d2dade88841c5862610 GIT binary patch literal 13549 zcmc(mWmKHawx9{Ffk1F;+-ck;xCD0y4vo7zfgr(xLvVMu;0__Uy9Rf6ohIKs_kQP` zJ9FpHtm(Dh?%KQLtzETi?cHlVMWG-n&cMvbipUCJ0@xZ_0QmS2fd*D~W(LemOiW-2 z02C1dFav-_2HHnkE|7q|a^Z#!7{}Zb@{$@3Jm$})&JH-T0`m@vA9DvtFQTm%}aQ?0NUmL&-U}k3q z@919=3xJE28|)Z=NnqFeM-jly#?16T?^Hw`jLLg0Yz`SIX;;)`WD(bouF^XYP~8yS zV*o%_47$G)83~QfL>8N5Vr`87#M$qwwws6-y@Q9DQg+AdnvFxZYg{Z?LT@5&PtH%3 zG5E-xQ0rS5aMWh|ezy=_UXU$bUXOG1^ss2q?;knChYg{FJcXC^*Ix`WA>bAPL`-7% zJzvuD@sTsPVPHN(LjVlyqrP$x6MxQ#lt0u9vaz%OoE^d0LzLN%q~Q3)kH1Ru{nFCY z8kz)EPdEDu59Hht7X*Nr`Q35*(i?|zeXgDnSlF>zAuc~1Vw>6;Kgi4FLx6t3s&Alv zqLVOSsn_oVF)^_&zPh|FXG0Df9A^idza8YRAAhHvZ6*JjYbOK)zWQm#fLoO&1gsp| zs9-}|3RG7g>|0nq2!*eNINNt?zhP?Ny5FECLS3q|Lo6KY&k-9%2*NIXZuf+OIP-r- zxT(K6`G7X3H^SlKVpD$1!6XPj^llBp&;QMWG+qn59yDhMtjWvb80`Mu^_uO5HI(1N zoB+;ad?U&SDLHKY3x&1SE%${^l4E#zU3vIR*N~1?1EQu!Xp@Sy?R~@`622B`xFAGJC=tD*G?6nx!~6!d~Q46p4OhhLZR6K?G!qE zX`erJ!TLd5qwzv_U>(By8NBe`Lm|7|k_jRczdeKbe#UQy3cdF5bhl%C_5tY0i8FPw zy6roRU06n104(UZDp>b*IzP8*`wT%OBmjZhjz$b|nPN^}+0)pDK!&Z$~FA{EtX<%U?=V z#pd|v{RxKN-OJ;Xq)VgeRkpr`HrTlgX7IJ^Ui}0c*wMjblODA?iuifQfbAv6Q-gsw zF}R@n!Y{_Rr~@_SVpUzhZ@zKyr=xt~W1nmk=*P&=4QsenCaPytyTY-~`^bzj+6Nb{(}W_&E~? zV)vT(ynFeBeC17d_Zceb?Por;dtzK@2-4KGwU^W1o*%rHo(YxTLtMgjzd*dGR;OVT zJXc=%MxSR9zr?(F7u>fBFoSp@#W`y`x(bpVGr474O+~kCahcEwp2-vrOa9MrsGo`5YsKi zK8#6(iFF$RnhD(w-kH7M_g@HqRE(gQ?f&>)o+{(Et3ZAJMnrFZ-EMOz;n*d5WbOGYl+Nbhk^&s15I+vw)f0zrFD=%ETy>`lJqqkW>@ zW8y0Qsi%t)i*mBkSoSk1Ub;R?)T*o^Sq2I?db_GsspoX$GQ+Va+Dq5rN} zH=d_OOYjcwhm=NJh~HLIPdzD8?0FI7YIfq*6UAyJW`?2>pOL=1)OQQ{G#(8V4t8?K zn+RE*ck}Dx&GwiBbBpNKnnsM=ca;T4-Hj~HDgTZGhP6dnrJrYKYvFbx2O%@{}xk_B*Hm<9Uf1aa;eZ{a3epf=Qc1COiyt zk#i*cetm1N0aSiNLO&{Z;YB*maZEPZWgzyEs@)vmY7rG(Nkz3$x{9|q`MV? zmX%4u5kEbD^4_!!6?$dK@kGET_;e{JJ6{^8pi6(dxyyQq;jY{ln37d@a581Xgfs2B z*Zg9PMfkOX4UP3kxB4pOKv8F7OM81DYVu6l=GLOO9&PCUet#c1iA35mNjW->pM{|0 z_mYH(Esva-w=+46ke-=*9-0w0tt8TI1A3SFu&j`sGjNR4@4!g}CRZZLshS5YX{H#yY%+NF5g}{W`>*IS|(EuI#XsFJx-gup4Pd( z@fg*l704@N7T&j^qeeS=!;yrJXqcredHD85t%4N>yRe=DM^cN{Lygy3+laEbfjLME zrmRNQVm}|-E}OH7knyf#_Cyw zw_*}g1xb3hm3wW~+tD3p!l-C14;1ov|GZfkj&rU;J)>(1DQf&~G9K*We7SzN6YqRaByOuaVSzsO zTU{QjHce~?!8e^NEt(*>tp(QZQ+4>E!q)~Fl27IOSA0mcinynZ7{O^ppyNHV@8}++ zWF~AApK|TSAzHcXMZ3y%p&YJd={Ahse`;*jzxu!_OF*}tRHS0mHO-qG;G*3wJG|`q zJL-H1Z}8d?UzCGCzm&rai26M+_wtKCqfkfWHyZ2iw|dHsF4~QwmoD?j(^pU4VJ{lt zN=!Uh?`jXLQ>#A7Hlc@en35CQ(#vDi8ugsvSxfoay%X+FbA8`*ek>XJwKSx(uvL}D z1){E0hbqjqUI)sWwC4u0?0eUM)n(E6N8xk7$&98()dpCeoA#D&2VhlaMgzw3307g( zTBn?px~!D0v7l~npN69lR3X!7XVVUAMVT?-uRxeW6*Xt87OF=Y6bZ?)Vn=bwd)YxD zr&Lf1RF$aeS+X|Nk7JT(^f!Z`ZjCI=CP?FEadC7$o~C0eSJE_TdoChZ<6wrrl~$DJbiM&MZ))69rhn}Tx(A%!^)nm@S{FY!-RvymbP$+es|S45WhqH55P^ z3AL_6<-HtRXm{Npmv^{1vePKXAVq`d(lC;@7fp!FOnenXVqm(;H~J&WX!P+-4F>iC z>e&om{%5Q%IjS3+1xY@8_-bABt9AaXb)Kc~rY$`230&K6uZfFO^gCTF%e02C#0WP% z5AIU!Orm0b;pA@ex^T6oG$GoxILdx4yJ0_nP;LLf72Rvrx%m=KdX?6EBZX~)Wo<0H zFt4qL0Myn!#AKx@?HA1we&aM9MqQH#;sL%B!*dtecIzxEqa%jQ{T^Fx+JRIv z@5EQn(`FWeJv1eqW5we`mz)+nXQ|-3{gVcD>sjUC;cL?lz7B^TrTp{=ZT(2rbA|UzHJ7q%A?O?c?uw`&UiHnJq;GQykd|L*e%oE0 z#j0rq&KXWIj*vXF87_4fi5gcS)Bm`p3mY%%^x%%ODu2jN(F&=tLNNSrP3AJIgk)!8 ztD0#}sD@KCYIrJCBBn#$h8X)1Xl=5JtQ%*~YIa@{dE3zgMKGntDsj<3eeX5088|X6 zf2c@d+)Z`&P~ghkr@U{Frgy4pIA?K?7cJ`yk~mY{nMI?ANx7j(N;9D#AZ;xraS!jXhZp`)lkfwUBj<+$RZ?cMRzs?M5 zDt=!bJCZ?%#Y(-&U^OF}P{UFMQ$wF|;XU3q3Fi&WQVaRHuHb}*j>Y^4w#+?(#~^_W zvTJ;^;H8(y#ImmkB&&|tmW*XQE&t2r-N78gmmW0^K&LG%T&$3gp8(J2rMI!OTywPs zFJEm^A_;C?-pImq$innJ(gNH@qAGgnRp_@Q^XL6yS3N9s0rs8U#45hT8V>Y z3?6^u+m3$1bYG!Xcm5oop}Q&iyqS2GZqqF)ap$veZFwy=s%)GB39C2&3@o3c2?J6S zcyHq}RWbubf5cVF7(ZPyq(6QAB_vhS5YW^=>gAacAeIrcHQeFaxQLS%_xN~rzCUfS z7psb2lQ>Gq=;Q?>qC)B*1=VhZvpOY3Pdhmrh4vkd74g^0`((k^`L^3)!x1i3n;@Sz z(zvp`l^7FEXmpN=+t`Yh@$LL&H_+Kc;_O`2FZ5Rw(_249BvVw&!@iNzcwVyyhE5(Z zhiSscR<^Y`T$OBoo>CTfNA-3*7GPxznc1C=tmb|Hc^WqHcC~S;W;iqY&}t3Syc!CAS;%0pX#C*Ld8kdo)d5{CzkOyB zuB*&Op>sP$I%z=|MxE!zG3VwB?AYHCu%fBO$EX*1Fo7Z|xcVvqg`I$&MtkwgB5-Je z)^I$Uyy{t#L({iKw3J=v>Q*SE=`k$c$iU84WES09RT$%k(>dd1PPwNrxvIO*>3a!N zW04t<_c#KR8l*@@%uyBS0(d41ovam6bLfh`dX8!!KX(@=C>8!AigDi~vnT#7c{5HW zJFzK-r18hL>&&2GYmY$EOgzNQ+=5n!tarsKR*?box{>|a3Q5De_P$a60_s$76N$TVS{Mjc~~P3wG=)PbJA#UjA`HD1G2Z-|i> zqf}+Gz^6*Fi)o2-Syka$uw#nA6GEcz|JyONKjrB}G7)+5SMm2r%1;!^+;RK#%`Rf{ z#mU!u<*d1zJHe_9g(8>ZLOT%olSNp)o64uz#8s7oY#sR-(hsY(+1nQI(0|McSLDTAL+!i;*Jzj5`wn6~S_cU+f}TeNS6T z6LS-}fQ~xevBE^IxIRXox5KuLFU}5v^e*7QbU^m;vBqB)%x{paKEgrtiX_hCt0$an zNpZiz+(jd=Opd9#X>`;7qS(k5SZNqMEHvo|X_Wk2RQ20>Y*^FVC|1hWyOcui*Cl<} z#V?32(tV1xKL+@>$0P|_r$HjMJ;z}ScPMX3!e_ z)-3~>id_Z+nMJ))8$ZKfRXnz|xK@W3RMwQzqNmKWoN)~mb1|Nw(#ju$=UhKu*MpGe zxG?D=R5xP5H#BG0-r%84vcFZ|gDfbeDd4>kc!XxWGu}-xwRIEz+huJn3iSr!YcY!JoPqUaC;VpId92)Z*ScNbD@Q zP&>YNG|X?M-4po{#Xr$fn_iP@rKTnri$*H}yu_We6kAjY^d#tyhv)jmug6Xj;MR(| zr@L~>DgB!ynC(S~>fnb!waDB0q9NLFtRj_j#UBTeiBs4;p^N$+VsW-YKkp zQ9qkmrsbONGe1x@$!$aX_BtDOR~^p^lu=e`AJw18_DV#$c=RDYum};$?`L&htjX=a zF}AEg(tKb1q4wtCGMDuu(Dh*AfdM<92-R=i2V-`Iqt9Km_e+DKiE54_^h_*aw|q5H zlXqbg(b3|VqTtBIYEY`#TtF-a47YFb3T{j*{ zhG2hIhlyuqxDt%;xd@@wYBHC&{JfGTVdU>zxrTQoxvYh!ucO{IVVxG^+wf@rt41cj z_rcM!J@0OqZbWn<>C>{j-p5)iLed7TMIN=Tnq{0S!<|)J!@4{9R30B!f~xs&&m+}> zINoT=d6CD<0o%r+!zZo*OjG=U%#Hch%pql;u;W>O3feugJKP$oy#$>NB0T;2g`xT& zxPnol3~UO@Z())rj+fZ!`9&SNra857D!)RQe2^5vr(&Vc$!ypkV10BwY%qhho4*zb zJSFWaC?s?HHTej-cn*v4={;WdKR3Vk7g{;d!{zDo#NnRCx)M9(!Is%AW-@mnCgcXL zPgKi|3?3EpZ_}>&+*LJV#+vy_?yHBYtzgwux|RvV`yu?M%NGlkj+pZ79Cr=oWxZ%yVf!YR9OmDya#G7Z!qCiSD2k&#!THV0tu(|yzp2NvM8Idx zWgBP_|5*R=N)+U=xx?jM5bk&DcbGcy?(W+R|J$JF$#PH|UjGe2nVjWM*4?Zl|F^@^ zp%HRtVJ(it$O>HaSH!ZXV`3d%{x*&Fy2%#o{3L|xAD%UxzZv;sl-$5;pRDqGyU>q; zXR*u_%+=7$dPi$aC|`a#MB80Y$ALV}#LJX?WN!G>5oQO{^y@~NBnKTNMgNkG?!>{-ST=wMr>I1V=gd_i4WE;lx2}`+0H!~gi$rE7%#TY zi9-kJ+^3gmm8fI=Mn?XTABrp;4)fB&t7wwy8!bAjJ@v!-!gcv4xixB^Z4Kh!cJ)ve zgP(_Ayf?HbBDC`FCg50_5R)-jnx9}oqf$OTez+X{`qp$z)Hi79?IUAoZM9?e`8NlR z;pUW2X#!}t2f2)fhY{lg2eV0Ywze!z-3LPnYUC)*>7kRE{CXO3RU14;nkAh)V-`9w zv)JfiE$|2Tp9wxC49~GnrrdSf&#rx1JkQUwF0v=4yeIW!pkf95gnN4GWrQiS&g@fctUttFMi=m_%+^OXzWj@ub_=0=2yhBv^l* z!NG&$JaO$-;*)tmD*HM&vVq7n@^ZxGE)EUWR32oLTaDgdR z1=%{~%e6Z?GiH58RbNLG%9MKyjS$?TdfW}Ky}y>z8yp7Hu@bhNBn`cN8)zhrSLtx& z<|Hz*wzmbeZCEKT!1VRNGPJlT@8TMq39?`{c}Q%g)mxU_wvoW$MK$De*kz;t#GA-z z7&)D|XdKU~ra}-#s5d9~T=HTc`K4nJD z*FLNs9+nC>ZfrjW=Be$dJhsO8g^HtMC}R&RFJqLsqjioI&V!U)BS`LD{n;H0rsNzP z5G5f>fF*pyVDe8y#%Afm8y}9We&J?VmIhU_t`^LX8(*9OhZtGg#wCwr)!9g)UfD35 z(rrA*+h%Zft$FoStqxEQLp1Wkcb;sk8xsgpT}AL^lorfvrk#1c_G&>lpKsJrwqf73 zpm&nCLB)NflnO>jMuO_PRy$1HsI@qCs+5{4^^0#CmSd#=tk%RQ7Ecf51)OOsjKAW0c`p^1CnOYqJaF)LqU z%ihyCJ2Z{gY0hJBg8#WH-TYB{D|R)Ej4Y@C%NRS}H4?{fcJ^|;_<+5*@6$<}I!n0o z-AR!dkYA)pfr+*rGIV6UMiyuaK^%D7a*>f*=Wkc=@C2j$eR{h0|`MXX3~v zIkSgqKAdi`=I^#^Q+O}`BJ9w(uZ=}8k>h_zZYZVrmGyqj@FPVu!4IF@6xVVr4LITc{f3wU02Pi2tD>cJ#SH(xlkyLuU>DfqE(220T@})h5j* z>=w+^L0}7;{~zQ>o&ae0Tb0 z*NJcA$G}4M&n^#X`mUN|1}CSDqe!1a52b8x_K3=!`_${r`5R=R2bh&-e%wE@>AqHrZq_Kp5!0yZovBg;ANEFN&@p=@MIGX`%`OH-V;* zrCC$&GXzzqfAUyV7CHT@vqhtOv29A@~9jiiwH&Bd3`3uf6+pWs8Nk4E53Q z6W{5DKVQ?mI}kccxLOFBC^GmWQE-6thUeuDqjP7dFS@2jw3+!p1TmIeQl=o4q%PAn z8clt?4cI^HXxU>Lc|_re9g;>VKX$Z$Lt|Isf+C}iF4utZcV$)_Eu9p0z-A?4ouO|}$f9yfs1GU5 z$G;wk^{`rz(>_G$ZIG}r^$CX`8Mr+n3Q%0l6?_1G|34C7^%^S0U9jvJ|La{KI@0yT-KYV1RQ(vdKC zJw5t2S;WYFKlQow8o}+=?MwzDe26cUs2(LAh195b${1t$iQ$DkI>>_Zl8p&+Ci}LV z=843`nEBWc-SWMQ8;*hyS_SqiGZGj#j6%%53R=ApKbLlwdkV3nWaPiyjLlEMz^rEe z_?^oJT>wfJb1-~{zbx1%hh}cQYa$eg!9CR6>Wwr5DXu=uUrD1BwsW-RoLceY4YmPt zXOSv?gto}(n^uh0{oWxIIb?tf-1{b|C26)_Igzq}GO#hwz3iV{ zMjE8ceXau=z-d?`fc;gr^%{beWd-fL7t79b#WT_+>rBJ^iRZ5J0-ha1WqB5%Hm2Pv zgk1d*OWSz8icD#@W|QpRx=6a}cT9pMfU@Z607cw@KnSBBYe3FspyVJ+l3gU2m|2fL z9V0w%Ypy0L*(7ik{xEy0($w!l9he}hOH@z1Zr@z;(qb5?&{dS zXY=F@9gm^aaGX8^E+4nCqUT3B({NuS_>eSj1ME|K&|A`iS$C-tzNGmS=I~!iZ5458 z93Tb0qrn)eNLB)$_;g2uPYo<3M!(Lm5+y*<8Va0)smW=?huxRad&)Job<}wFX*gC~ z@bl`LVPpbED*kbmo!ap?d}8wODK%Q$pOw|UN*CtQaWSpj@UcUFpp2t=-L}&!bg=_E zR#d01Jpzr3IQq{VkA`JkW1(rWISHYp_l@!DHQ&3U__3#b0AO$1yE4H>^UsKv*1>b? zHY>+TS2?@Kd~in-AEey6c|>PU8g-+x4HEC!{xXu|B+t=@ih-%lo%~&ppCr;(b2;0U zc;7o+q4|doy9v1yxs?NuVQTmdi%dA(HQkyJNUY>Y$3B_jh7MWO-TIxa9oEG0XQ2(U z*3H!kGNSLr;k05`N5uw#yb&PXeyiK~qN&l6hYklD%2KCoPU1YngCINWf{f80)5Xlp$YX6se?3cCy1D>*T(AIT?`kXCn<0ibd5vN6EUlhXJN48baJ3>MfGr6gLWs2KZ;=Hoo z($zm2L~?W@Ln%ngnOj1@$g8RwN581rk#N2p90-F89T$J*3z@aET+5Q~rHeX!RU@d4?Xd$DoFhvNt3U&c*YN)^nfCDeiqxh|Dk7lm0{E2W$atjvvsY)q{{uUrD=IgPZ`= zz&`^4P0U?DKoc;d2edJ_0Re5nk0ZzhWCL_GcLO?^Ie|% z6%_kBIL7_oE(3TL&W28Z5X0BC0l!|@z!CIn@4qdExr3wA>)ZfrTwtcm;6DU*PDG%( zxv`U(Bj6J|7&H98c)&~c&pQBk-J-wG6%4BV0|f*VYg~ZWxhsKz!hev0%*_8;|DSjp zD+~AkOt;m=H_P=hp@}{`g)(Gy%pFJ^Vj)D?z~zdl0HV-n3U9p+ovrSqE8{0cW9QCs zDN=AFsMu~1R?Xi3M#Y&LXb!+5KDii%GrRoQf#Pp;21AqS%7}#Fq#SZBcAiy)bEA4t zR5bV2o{%zD?V0~zZ)2!$R6O9Lk~2S!cQrnX}shKQlkfifIR;|QyA9SI1f zTmPJ^eNkqj+^g;BRVP~EHIKwer@bmBLkol0(6*EIuzn9aioJafGmBA6W;4rb>^?Xd zO-?#EnEI`jG)8dIDL*y|q*cJ$IwT_@qkxvg_dJ;tHgqX5q!5>M_7zu}G}g%2htv#r zA2o!8JD7`dM`Vk9T{ImvzUFI+nSjb$GMm)9G2e+o_Tp;p$VR@a1>h7PwMNx48PzB`X1V&ZCHGjPDk1Hs>iehd~63R|sz7+5Z)c#S4*jm{- zDBBqrf&SpM3L?sYPyZlf0pP>uVr~Rdk`UH;Wl>*W^%q17cttK>`~RU`LB{3=|3%8O zgZWD?HWsjpia6NX{n3LNSTKgk!UgtwZbohnRscIE2P4Ppxp#2-KQ~Y?aCklZuS@e! z-VK)jnRAu01FzJ7;Iz!_?Ee>z+^ZoQxyXUm`k;=+LjgC4ex-8=OFfoN6Qx|SOk|ew zBQQ@?EXH*M>&O24%?HeGX*`W@Eo5ICm}89ZeQDVY3J`dQRjq!wUpy{1YO`O+$+k9I9D5H( zPJjOr_gQF)`70ytoYa?m0hZ3d^Uhxkj7JFG)`6DKTPfO>MvZZoYXus}q{^E@TIs!C ztODSDLVE!$bxctSre_1E)&j&*Pi4P77ir6p3ex9p;0yD@$!}?}zWh>2^{eFz3-F=a`k>BXROO={$Yl-u@27Rjm+7Gr67XJN!D}t5_zim?mXUQj>eUrqX<*NDm zr7?m6cksB;f#{Vlh_@7sSnb& zR(JLc7q{VOq`bz00yi6r-cI=A4`G$ObBN7^(@+#Z?lQtl;W@=xF@+C#?&61%yqEWk zZM*y|_L_TWFbb^fcNyMA1Cp%;P}J35@a*4J*3;LyyHCL1eTIybm)r4Fi{jQX?!~Er zfta`Zc~IV*zj#4kt$|B&&5oJE)qs76HKcWEj`jvmNG^`~xp){<(=E0#mdJpi`F&2( z-sIFp*?l}xf4Zvt`_G|>s+L`EdPh5~`-I+@SXlWkvlg}At4f@>{{37^?POk3x^h9b zqCd_~zgy@E;L}NyCN;&-6A9rx+XQR#7nd}S5PDQi5HN9!?oqGD>j`)}bh&`N{qIM@ zi{bs77F|D@bpsYV6PzGgDTal7PX~W&C$4r2@??a6Zn1XGjP#c(G|Tzu^|cbTBMS3ZxyN>M*$!@e?T@fgzHQus}#-+^$r>fs+7z8Ab{Q= zPRq-rq_xxP9}}*)`@s)i|E+J@JqHzuQljksq)K7sWQ&-LYGL&xKot)1gQ8(O>8^zb zJ824sFSEj_FvJwZ{wk8keZZ_AedE?3Kzg$voD15Ip&Cal>yhAhn9d$~bf+p6*5ay^ z`N9?KyW_lCPV^viU|uWcg^`f_N04r;0(E-=v<4Zpf2496nj}sz4@nf{;aTFPq_5r4 zobTEKPEJ(X0@6^QyQR+?0>3TQH14h~?){2L4wJLvC4^6GybW+YjovY56c{J;s>aRX zZc9TY*lN5bcRdX;3E#PVE3g-SmbyFwS3Xa7XKX{c5>~$yv_cp_%14&Pdu%ExSo5xF zBPfWT3m+_+6=Il>IrUMXOm|uZjMUdELYc41QX-NR8U&%Eu%yHU;i1^bQ=qWpr7FCB z2Yikh!W*U!QPW|jJ(xrd^L>+8c#i(>Vfnw0%8svL*%=&}!0Fycb7OGk2KW=dmB4ZL zZ%NkQ@2&h5(nSow8LX}8>)ixX@P(0o3v7SCw;}?*`T@?a0o35&2H<35W@H0rr{G|3 z>}&+SDe_O+KTXYTZA4##JGCee3llRZ6Bjc#GZPCpI}5m*tgZ3?uI|6)>*fG5K?En} z?1db==?__n&mkOw26cH1}V0tX$w#{}&xQ`@g<}nTeeXoZtUTJMRC^ zHtv75jhU5+?Qc3K2LtfG1qZ~}%Sp=S9-!Ct11j0tf}P{9Gz%zYV`2+n{_9f8pF2GU W4o-j8nwgcEgA0*@LQGy9@qYnhWN%pj literal 0 HcmV?d00001 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.txt b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.txt new file mode 100644 index 00000000000..c0018179a55 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test07.txt @@ -0,0 +1,54 @@ +3 +11 0 1 2 1 3 0 5 0 6 1 8 1 9 0 11 0 12 1 14 1 15 0 +11 0 0 1 1 3 1 4 0 6 0 7 1 9 1 10 0 12 0 13 1 15 1 +12 0 0 1 0 2 1 4 1 5 0 7 0 8 1 10 1 11 0 13 0 14 1 15 1 +0 +18 +26 +10 + +0 0 +0 1 +1 1 +2 1 +3 1 +4 0 +5 0 +6 0 +7 1 +8 1 +9 1 +10 0 +11 0 +12 0 +13 1 +14 1 +15 0 +15 1 + +3 0 0 1 0 2 1 1 +2 0 0 1 1 1 +2 0 1 1 1 1 +2 1 1 2 1 2 +3 2 1 3 0 4 0 1 +2 2 1 3 1 2 +2 3 1 4 0 1 +3 3 1 4 1 5 0 1 +2 4 0 5 0 2 +2 5 0 6 0 2 +3 5 0 6 1 7 1 1 +3 6 0 7 0 8 1 1 +2 6 0 7 1 1 +2 7 1 8 1 2 +3 8 1 9 0 10 0 1 +2 8 1 9 1 2 +2 9 1 10 0 1 +3 9 1 10 1 11 0 1 +2 10 0 11 0 2 +2 11 0 12 0 2 +3 11 0 12 1 13 1 1 +3 12 0 13 0 14 1 1 +2 12 0 13 1 1 +2 13 1 14 1 2 +2 14 1 15 0 1 +2 14 1 15 1 2 diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test08.pdf b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/data/test_construction/polylines/test08.pdf new file mode 100644 index 0000000000000000000000000000000000000000..422d6ebf9bfc5929f4f3e5172fc3c0f63a000d14 GIT binary patch literal 13486 zcmc(`byQqUv+zss0Kp~r5L}1B-95Ow5AN;+5+D!=4#C|eXdt+|I|K{v?s|tj=Q;Oz z-}kJ0?myr9X06Tas_x#qs=9i04eQsGieeIsASPBMRsb`=-q;Gj$A<(ovT?950x>f) zLnHuDR2TpP08NY_e+2}P1OxzJJ5xwcB({HyQ1x^G1AvM~E-qjvJEXsF{%AojqNSb7 zAAto4sA_3rX=nboBqCz(0nmXwi5UQSA%G2_hXmAAaREC3xVe#lT7T}?kbufyXM0yC z6R`7(MGz~1az-vrmXMLmOzZ$gW+pBU4rUg1z&~yv0)QFvFj=sjxr+sW1>%B)r47V9 z$hVD=3s?+nVs8q5d6u(_6WGWW$zy?4ky(+M4aztuTQ!J{2?|#Y1_=q`>tF4Ed;Rj< zzvJ|O(d++q_>cSl^!)#b*Bt-w8Zyh=?2wsa1}OiTX>Ja{OHh>mks6%;=>FFPfB+zN z5M)OGl2`y-tlW^q_)CJM-ru(XZZ;6}|2|U@wQ#D~+ISqY(lYL7ODLl5@7-m#p!KjtQgEd7jiOMy@@O~sl=L?z=_k}mo3*3&j$PVGo|d#SJmqW9#{Cd@Wj3(+}@lz z6)}V;?J#SbSO_#0djU64K0eS*K0Xg~3=Ht-u-Ffr;lswT!QLW^hHKA8nNSG703^)f zgk2xg@(EEgx8UGDz(N6x9HTySk&=GMh*UT*2)1)@{E!{N*+r7skF4nYF@V2P3wv?# zaTQ&Xx~r4@nFo6AkP8X`0%07rF1~UqH{|LXfrlTf5#|ceBekok4uHN`Ish1cTJaAu zOmqz*jMncy0=3y5^9`e40u#(LBY$T zj|$eeq`-9a!lT0TK`DMFe!F$M`Wvnqq4O15BFu#vJJiCF;T)++gdqIlhgNSGsMElw z*VlE|$3p0H1|uA9Zg%BI9L$1ee1oFd1K^|8@al zz{f+9g(HLqRxP}5DQFC<_U*5rtKDz(J~b!uj-kV!o@D*zU>T^6kQyPTcbwS0gg5f*?#Yegr8x=1m7hZd6gjGAKtbITj?e4-Y_ zUH_`<$@G3K-yeMN$oXpSSsxX(&A)fT$=i_eZQGN5Ov?G|(|LZMfTxV2r^LZ$(oTQL z+t%m@e=Oy*K#^zV>gT-Y=R#XuGR4-`HzZQ~K^~e=a&;l>A0EFKfo?`8tO5_o^vj=1 z)Wqlb7y^lgFzyrx$j8?im-cxy89 zCWaJro(IJE7qy|KoUdpI1kC@Of7S>2kr{n>Lu9ue^2oe_AdQF)*_dEfa}$B+y&ILFf5c1LLW@z^Q#+DC{Ex_>njW>^sA^P!4H{l zp?0oF&pMZc6e_MeJ5SNx-F)Cfzazzmg?g8|y83+b+gr$I@rhUk8|ng~^BL+{ttt(V z=&9n;Kl&_-^f~6)%ec+Zpn~}7Av`5btlrtymYWfFHkH%RX zk{-gZ#Y5XAC#*j?MVDaT6DrL4_cM*Hz#p*B8Z}u+PuMo2HdV@urOa7%rxQ}|lhQB7 z-j7Ls5$`ksG!lF4V_0DC1uld?C`C}tcD~0}pw77IDA1U{7B!e(bJ!S4IC6`x;2Dvd zr%)(03isS;v`papRSLuo-$5kNmX*&oF?iTDFjo=dHo3mAdaXMrd|wGI{wm-4!7_ z-b~o$tdrl6V7AK=m|H}@+Aw0`xuYUD>S<~<*sZu;5K#_TcW3csVf!io7@?LoQ+oep z4Zo%+asZv2CauR%4HNnZ?wB*1Gt%ZA1x)&LRBJYL8Q$4xQkcM=FiAc)_Q0D53_MjO z|I+D74mmF5OR_4&Ml`IMhPuaZUOu`~yA&r~JghPNz;)@_lBReM4!uxqhesDp{1cC| zz;KPqsYrctM?H(9UMT12%wng}8JkVTxLaqz?e~??%c40*oino{a1AIa_v3uzjh9&; z&x|mdjm@tb_susq&k}N17Q>k$>3#GE(7Juu(O-{xPiNu9Ozsw?A_N+{Dt8aQj8fDd@gUT%Qs}&woHomlZe&O!UCK=d6*Q(NJB@n%_ z{#6T{izYG0WazClwF73eXw{;z6Fk=E#1zbM*7up88HnyBr4h{=-tbkn6G4?R`%};T zf{j8ClNJr4s$dzi`;?neE>qbnw!|&QUiS8`Z<=vz%2f9HqsBEt$oNJQ^8(zBRIcQ; z8dOl8O%gqUxGu#ttMvTH{u9K2i&Ht}`1Gw>dWu#G@`1b|Ub(0w4IHpOfnP7dN(+Wx zEbDGbY5_7KO@Vx5_Tnei${`AK)**RA>l5B(itfxg9q%FhGj-Ng5h$ih4nF+8g zMbD54`weY<2GID8i36xTQGWBSv467pWbMB0)Wj7819Nafhjo+Cl_-z90c=@ zJFSnVxWu2ov!Syd>Q`N+>?`T5Z|ZIhL`|N`*xgul*P##H-R z{9cqav*(c)_jRR!6E?6=$U`^5qmx3usmJWF9F`Mya0QNW2JE|t!sSXvxm5Ash>0I| zsg5O)!YvIgvGVfZo~uRXpr0os*b3VU+rw9*lsHc(JnZG5sd45${&E{v^(m>@q)xU< zOy;KYISyHGhWVsH8)H5M^n#)}A&Sg$k$5Fj{ygYZ*gNFV+zJb zpYGcLy?LF<5=o;p&=9y6=x_g1}T`!(rz2CVzJb1CqVDB=bv zibl%CXronU)m&7+)Nfn4Gzjx$*RPzs^Ka8z6FdC7=|POw-8IbSUi9W5I|EL;+pgxh z-ticTFP;Rod) zFPO8MREhUIv|Kc1lb{e>#l{m(*?Et02urkm6ZWK?PtMRlK=BFHqw=(SN*qE+T;GNv zV`#=9r4E+zZ7KKJtaG5>*Md{kUK%Lm@$I=@7>;%4R~4bg`;PG2Xe4jWBmwpAb%x-v zuI8&Ty59+(R4m#)T`2fyzW2P!FD|Kye+0^OwWvtFsiL&2LR6GwKeqx2B6@ia-$-iNG zy(2eco6yO17>8=+t`qAh*N1VslA~WY!PfcNXm}~aDMv)VmQjqU@sz?3By-p9t_FdOCblJC#0h^1W@%JKU0h1XGKh^5td9GWVI-P)(?HTo0OUJl{ z9joo~(i(Eo`lf>VA-$T;!Z3x*qwNjbtl!H_iTi@!3RTrzZJMYbXx~Uml@&WnNZrW| z3cI9&Q(!8^)J~IiVSXHuMPt4i1b1p?;WR*-HcCifI(yoZ0}D zo2)KI_x#ZqU%8dHl&!16Wvn&!WboiUf6Urr@q~-4XC5f_4wRR|{pt^!0|)0XRRL)Y z1XBE)n`pA>E!e6a zX&KiLBL`Qxl*DhrM$6h^#N){W?~I3v38HvsD1LHF?tN!2tROu@W-s-iJiNn_b}cRA zPm2~gur{0E3ymOhTLVFiO{vrIZ*V{N@|5sB>I8?uL1{+(w6p%Wr@6Unf^jkoe1UuVu%yCk9&cL%k(2sc`22~Zhd)P6BN62 zfBnjem*YyH7S2$4RonM;Sj%E=h6eVEQ%C(hL0aXBSIV9jBTMRjz<7}W2z>7g4$ zJ%b^!a+Wr;5aOjJ@cOrE38?_ta`aH zvvVl~_|_oIniB62%}f4~K*}yRQQRHTJJnL!x{0WL0JtNnigejKZSN+NICx?qT=)LA9Z>uK(MMmB;* zrWFp9C`~)5Z|@7-LA@$_Mrj5oYQ}R``+3oFu3*Viwe4AS2Dp@K+N3lyN}_korNo>+ z<#Q@Zd)ebwWasknY#Rtsy!bq+wgJv>6JuyB9?&xb|S*jcW* z8l&gWb}5lW!PRE_B)@lx&S%n-%sU=Rtz39Ms)s z!83)7zw&RzJZ8T8u3mfg6rZ8LA@;P9c$#k4DJFUAw{T^BB|fTRngR{4Gyn`LpQHT( zq#^R%!e_1k0mXjARmhq?UNELVe(n>NE~)?2&_C+qo$*OLBW82B&Hd-Ew|Q|752t5) z(?+|oYJ}B^qr^-uK5(L{@0_GzT20=rOi44)O%6w)e?wU+jc7HpnxxhXat;Zm~; z_Io9RFUMPfHPL`h@0_@Wr(_-9%3pR3n@u9Y&Qw51Hy+MQYk*mBGx;34reuH2~_ig12XGSl2jd7Y!eLO}9&V8{wCKTE>kC19q}o%dM< z4NcG)k4IBfK521i`8SD`vg=*m2!}R2e2F(Pa|41ZY3OkGBC=ie$fgf#b&MP6pI4Y(&!N4R6tdhez5VCQdeiE#SHtGVio zvGQV+E6o=8)F^jwtlwT#es?d}Hh;|%N@f`N+c~U1Q7h z6To#$7h{V`He8E5tPLtD({YR{5wg(1608H&IlQFT6I@#SMiHW6bR)pC*BpG(zjH@@ z6O}9KJR9@ydd!Q9&w6x~>G3j~F-vLHWMg=dcc-aWXNgd;Qe>X+XCh!CSZ)c6-K47S z=t^m0t|J#P(Z<`BnJJXk#u)Op*|rEJ*ul`g1spg|D1LsnglmHN^-@)bZ;^Z=N%Q#X zh$ov;JTGx}&?zdCV=AwIdKi9G`pFhlVH`3nJn0N=lKfOu`P+7ESj*QWR@&aTlv2L$ zg5k?~AJj*gUZt8J1N>WKQbf(uV9}bcqc02Nv8$h4YpIU;nidqlP*T}!d4{t*h;zVE zCn;vJ^*i{6=`75A9G%t^G>xUBsj8T;U7ig(iOTJV`z0>!_pt$=eAcomqbsK~nqURQ zs6G0%Qx-ZEuM7@4i)OhdeumMecx>_4YAr!rZu4vJXK*gX zw*}J4+~J%M-X)q4zAJZ%`ISXH-q@#a2{(iKC{bcM<+u&{Do^#eZ0%l_D5>?ZIZN97 zWHgU~PnW;Na2kxT?3^a$QosI0n1F4av1#(CDN=(nlR^NSOGB4&RMubfGp3MIKk8KW z^{0$U5e_po(?tCcp75Zh2DaVPBk)7Rr5Q55!zQIM;rPmqx(#u9$lcPI%4dq`O+k)Z z_MDTf?9oe|X0T{{Rbo`U6MT>OBVXYS0qLvoq@JHTUx@Vud-Sn<)L@D~G}kn!$Duk& zZZEjeIAc2-=Qq>sivEb=pJ=K{uTHg5R~L*$r;`L;;Lll$|56R|ChCtzoz{C;uA_3OEKSV^9Kbj@AVpgbmYK!(fKXP4B`J>ynd7dzPw%T4H%>dG5I`0AB z6xM*Ko<^2w`Nq3UA?gPCEm;3FTQ_b2Wd@jexy1k;{57T|IC8!coN6)mDHaQk+rM}jKc<=K^8(Ty@>TbW0E?Z+r|2JW-oNp$ z6VQ4>@jht4#e*0x1ta{7D1iDtN5?o3xX%iUgX>?53rp5TzKREVP z%jS3AJ6pHr-44@_h)pEvEGZbgudyM1SC9LPN4=wZ>20O)_6ojn?X5y8kDohH<$SpJ zp;|#4Z#31s=)=W;{m-IzId2S#FTgYxO)gM z3%-OJPSg^4q4L5sCC zXg;f`rWHd)I|sbpfHmArTVdlW`KYcOnw}z#%WB&EaoCTG5`1~*^ykFIznlkmDO9!T zREa{_N=Mp`y`aR;m$&Qb^d~#68+_~5?dPjp;NWd3eUg&bcHrc9FGIQqQ*B?P;c6wL zTfKfOw5#B`a2=9V+()h9Mivw88rxPFANR7z(uI3~y zk9C*ul#IN@I*x1?*lnCz>?3Tda=8`$$~pI&By=$H)1zQ;6GuD?v0}(JGP&PwX@bw1 z$Jt#T&C@wyXZ8?1>DK`h$+g1KT$0H(>#Gr2@nN<1xxh4LK6r;PmS22J4xY(itjcMn zc=0vPxAf4iy#|>!iF&rLWECFxVaU@Fa4xKTiYBSQ(qW=G(%i2tT$Ss{uhRH!X_AJt zYJ{;E^&EWkUDut6(9XY|KwxP=O2%Soe1r>&N_qbvbTRrF)qG6MKX?)Kfhnw}$~pV& ztCQw%V~S3i06PADE|c*=#Q4DeY|@;)J&Q}{{!oHC#hb?Tu*pn*1I@U~bsiI~l6Iak zE4`RmJj^dmi2HXRh;$N$=U69GZrdGaS9N}!<>%QJIg(P{z4KUGUhW#v zYqjmHR6P!+iIs^^lA<_z6*J_0%6+|tchAfM+z%U{{q1zcC3C+tg&nn-PI`PUP~SaA zh7aT!9Na(3lhAD@J)Q@ovafNY7>Q1!EJa-GyrspR%7bouA6WB>k?sI3Cm^mjXNheE zAtGht-_PX?Mh7AEti(;nNkgcpK_)T; z6;78PE}|o=yPH7!`sLyR9DgrdW2^J>4z9tOU@KO$`@}{%gC(ggJIS}aXvTa_J8TR( zyosE~k<*F4OygPARf)b38_dZ+I=L!Mr^Mz9_wiZIXJqU zPnA*qxfi#KhvmBmH(mfEXlg4ekL_pt!uP{s7*j7BAJaE;hie?mock#|CeYkFhO^sN z%*i=#!BoU=K3OA13?}y=F*V8@T>Eik^@}vZv(&4RcQoO=U;pR|IKaxory1R-LmnSpRP%T)TQ666opSCY19p@ zVQASwyjmS9ExJ@St*5W0I*HH1}#Qgrn{AJ}r>0QIZPqTnqoMn+U@d zDJx%c)6v^BJ1mXYWzK7Ng8!*9-SR z4VG}%+v6e&AirpXA~RhbblAvRwH(kKiZtk^={zH~HqfEq{t;F=dQ9_mI$;4G?%P&7 z12bnfshM3g%i(mZ)j*FOyTUt#XA!5Ld%Czp6FGqg6vom@pIPr#jo(v76aDbZO>r;B zMTywubEfRN`c?=;<58t+0HrZRF4R5X$O?@NU5rmbg)U^0c{cn+LVNs1>xtDpWn8^c z5+pPIIV&5nQlJrcyRpk9DnrqS{cW;QPo_Z{k8C3O^}fkRvQ91*f-n#k_w|&^$KCr? zE3ZlVR|$0Zp9{7)KNikc`cPu{VLNX}m#(^xGUc8! z%Ie-uCwkAi*la9S%c$(e?6rImU#J}9b&Rl}jQ^o2e)yqY%B~_#qaB5YC?fmoA4{RU2o{}CwQR_S^=0P!4G&Ykk z$s*|IRobAL!^2j!`@~`g3;9>{HK`0`hwB*Jf<`LmoAKJ*7;ra*wTHEuqE3sJ^7ki- zo$2cx7ryl$0}E9>9bPgF9o0vSE-vebk$wkW%Gti`5fxo`saG4xE!slH@F5pd_ufB; z^krwukZgNxt@BR8_h@ob^ZQw>?n_y+h~oz&`we$3I;!yKLlqA5wdW0&3Hfjs)9+w4 zX-iuW(kB>W1_F_4%q4zDpALj&H?#a)h_QR5$Dqnk46-v0Yab*64IJzWKP38 z)5{g?N+L^sH@%a($-dU-r_6UwtC!h1&Og{$hY$S0%Otazf|SD3JP9XNY;(#{Xd-$P z7EsJ4p0m7H%f7){20g^4t$_J3t@n;Urfzojjo$bICXIi@;A(2NBMt|2b=FAjQ44(^ zj5fbeUW5WXEC-iQj!a?lNc&0jBEC{$Z-wFQ(DYn*FHY!UrV$VyMdQ8l1)k>OL?sk{ z0&O8nqn5!3DC+jW&UHK)@fBI1Rm-xbm-qWd&bdmO_u{~X?6|X!8z~_%A3MK=3HZqW z8s1?U2%Ei(#L>{w&S61bP14fnNQW2Wb{$8U?2Gv&+{!-`}R<8baj_lBWPa~DV9P?wjh

6hnntBCcDV4C)}h4hjes_-KN`sa-*iD|qwPs`Jp$9% zHeih)@nPBxs$YF996hn+#@riL;(PafN;hp)xh7noJ4k7?bW+3#kClXVhM_efi`pZh zF0?qG@M<8|%Vt?#_ux%;y`-JFUpV5(z}0?e*m@o+G~JqjPyAGV(PCy^3spL)35SiK zRilQl#wc0YBZG%ndFo8x!C6+NmEuM7k#Vv(*7GdqO{1#=H*(qJ*6A4~S`ta+m{5Px zp$K;!1Ljvbq{zJhjk&dI!L608OhytysE<@=UL{_IG-$UfSY!E#;e}m#D1r)7KNIB5 z_Utz-6G@A4^6{WL6}o?|I}1W-7dS4@NMcF> ztz`cAoy!JW08SQnGJZn5DA=Qb1vTF`5DUcMA82iMM_PcDR_^C7W!@CFax~|h*zgk! zwg7Txk-z^4YmzrK|2|s#dz)DFfDs{R_p6|`l*L}PFQ3=py8^lbeR|lUN&>Kg2oWKl zPZ|TMYg*^P^l@3|Ku0CUDD34uMdB3I5i_}|KYA=qk}L02Z;;>F7Rglpj!CcvP!&DyzmYH^62|Js9gw#hDA~`FViye| z1sO1;V}<8!&Q(VxnL79~o>FEKFKIpn6yB%Y z@;xq%1FXn*I2c16$x7rGpYCj=Q_oUj(szoRC<%_%ROB2?O->^{=)8#DRjIbGr6F)k zduzjmIIp4ggB2lFK8}qCAztW@H{<9&H?0hc z9qfR%Wwog*uOQPRj{Z~U!(lo1SXeqdPGT6DJyU`@Eo}EU0qki)0K6?ncV_r#{uznV zT0~C$MwK|3N>|SqAy0IPL8{H`2TV}Xs0X!uute9^$B`Tt1&&@cEF2B)(kQ^eAGUwixyfxD!Vo zgxATNH&!OdNxl__(}`am78?ceMu7GEZEoU=rbbKd+nnsEN?o=%N%M^NgB@%OGDd&c zni%;f5>w>MMCV(euXaUPtX1YK?kwmo=fpIRHyR(Y73h337j^eYYsMz^aSUp=l8HgG zQrfINk{W)HmeN>xnxb?01`5sG=&?SQUwiKqbJDG7T5Vem>z!D9{)OY`$SZxO%=~cd zI)xhgxUadM&fwrAcO3HJq@;-Jk|VdGWGO4Si7l@gO57nW>lm_{uS)N44wLEwXQeJ) zn`e`!C>{Czu54VFl@LtnxSb6CkS${8A+ot1r%mlx6bkAk-z?}JAtQ;I+|al*$L}q1 zUEXWz=pPLxJ3N-95`4#*TSCOdtEL~v@Jp>N;cP1;2o4`MF8$uE@&i{@3TqCIPFsz-!0ZAAH7_DwJXq0@;7)yUqeLm9Ql(Lu#4KVI zZb}SKH79Pz@RJ*XeqBNMXw&z{%2d?g5!G7E(P9UH)}jX8K6Hf8`L3;Q3WjvK(q{=&ftJDY&*TmT&0ke;GO4pLxC za|?*b#fk)cdCN;1Bj}}3+QrDm(nQ$K+y?x@WkCo$TXo1V2$uI>W7t?B0u=sD3W7lY-TvQr z8w)q*|4z5n#_=n_fKY<3ACMxM(TOt7Yt^B1?SweGV6!o^VX*vL<&)`gG?F&6W3#W% zP6eb7-WnmJ3JllP&}6{i0nj^tJx!_T+=|cPe?mC_<%<; zTMkpq1gAIzisILtss`MQes*o2>l4P!eV)RHvUq&IT zr5H42T0c1p&HfPcyC5R{VC_KCT_IjDW@o{kzB#PKT*{r9xK9$n$!Fd8Pg(R@jzp9_ z<>{lk;EyxT`VI2u4Z39_wZ?m4%tiUVvCp7VxSC;E296?vyD^-8wWsRAP1GFSbn9(_ zqV7FzT}P?QnL+o)yUQ%ESN2(2q{WFRxGfL?!@g3V)T=0*6l%vJHvB&q5s2j<5&vry zDH@rBA=wH^6-b6VL!i5tN%~iw6bS$!SDoxlUeZ|yaw{eQ0IGsLTp%baq~%YR{h4az z7g5~9MN-8D!jA%8fZ0DPQF|MEClv=H6Yw8gR#8+1pz}8Y3xF&xH%k++vZRRK3v2rF zs=pvvzzb6OGX4+E3O2Pg`hQ7Sb_id|#l`|jK~X1rhd+7<WgR zeMrIjnp)s@{w~I&=OPHUG7{EG0z9n)J#&|OYd)HMrnmBJayIun4;L_34|DGyrmj1_ zp(7A?bNm8p*b0B{?9vjx4ph5LVvU<5_jZ}78Q>7oNsF{@|D~;+u;wa0INVr#b4HSk ztWBz@mbj+H@&2HylDKA&i_;n@ffHvUN{@ddYu$L4eDqBqlp}Luny)5b=?Cqv6;{}D zc?Wi5XI_1K$4u)|gWJ|Uc2I`nJ=G_tN#<^B; zQ&2@=J?ii z`@opbGdP+IFvyDQl?*xOr|%md1VSU>&Zor@;B^cZ`<=;PF$v=on)WwKcF=^6Q0l1zfz|_yh@BG0CVlO+r;M?A z=5I)19k?`hS9A*~!dQ?}R$d7d0L?o&S$=tV(6A3?MBsOm<(6|rz>kHEmxwz)!dkqx zKxCLKR@mH*?W0@5;ZpVcl4ZVzCh6G^YhF7;_C}Q{NPmK8weC!j`7;dV0Mb%w5s6yb z9q4AdLrjSon)Rbv19^8s8`MGck(RzngqrkC7~*@6U<%@_+1Ao@uMZpZPl_pa&N*gs zs=9dzib}q+&qb~mj2USi`rN?w)3+nx#fosQjYkP%>S;El9DPbVjAf{IL8Jr827c83 zH3Ilh;(Gf+q;NTkS`xD!ffd++D|@Un3dcItz{{PHhbe5vdIhSZNt&Zx$iKg}I*YR5 z+_`pLicN)m*%V1770uQ>tio^??VU1+0hVm2p_yHGtAVG1SaY1ltRV^Xe%A!s2?D=hPfh z(C8OOq@KZiEyr1*Z}ub^Ian$V&3xfd9gwdo15hjC7xqot^wg-YZ5$TcO<=;y3^Qt0 z>CH-b9k$Vm`Z9lbQ5^6E%DK$di`k8)TAoaa>ijrXDl!)rr=qLM*?=$4S-^ITK$0zQ z8wskkt`Ziz*&FjbFq6gHBS^p?Qn<(q_1FP>Y1&-^N9Pz6Y zA77vJ?k2h3^KNzr&}H%&x4xTJb)Eifw|CGj)E+XO=`}W+0k23#hqHx2CGTIS>D&-) zo^_{Nc<46l0Zgg4T;tto1DyBeIlXqvB}cY6kK?TNEnkkuUpz@gd+J0|bzRHvizc10 zaXLA4l48k7U3KHeNK!!ksVBcSOikUSC(mO-BUv|i`iO7B-6D#X4*C|$dl7}7!`&>Z zz{a1d!Wo~Ksq;hRJDw@uro}bYr5#Kp*@+nzhDUtBVMyD1ye{Q~_V=JtW9$AwwaKv1 zS?#ToQUNJ<->Ps-7d~3W&h=Ua2Wul>5|@;7WYw5xu+k&uJ87)UMC#C?lkH`goW1FPw6U_YuyfJ=!(I<3uo)7hvSvquoR9gh z58%%?zzp!04g_LhhZMFiAAsH8Iu^KnSa-D zLyFXY(SevjERZ_&-*l{8kf{Hgj-CDA-vJ2>*MIoI%>6(3#?A8YHiICQ?mu)cPDYS& z-wEmEbdids7x*Q9KxKP-NOJsDM**en%Ih14M{2J^%uFW949Tq7O;d{-8?xJWVYd$_Gbh<`Co{v$ z37anXR)nG=RQo0hDp(2%`lOUvp=!Y*?L)yAZ;0TfqGBmXDe8YFlilpPT7{jLoc!m% ze*f+4Y1ZnBn#)UjF8=iVtCE2T3foUg2-kheS&ccN%WPXp zc+6-|8oYGqvU>LgwCm0*U%c__U8kqsz48DL;^VtcopDcV-`@P_!#9^6IhJHp@LTokBVV07bNHNh{^g&Kzkcuh)9#n2PuzI+aVGeX8@$ z#rvLm@cp$iA|w^$PPV}~UGQ8NymImQ<;fC!BH27Lb<2Y^s1^e(L#P`f zjj(V8rJf`RKkm5+T9kyJE$Ju%4Sle#j)|)4qM76j< z!*2;6Y&MW;+nJ9djI0`3MM;RYHUbb@v&$67kvR#^_1j!PyU>^&RgtO}^0u8Nr#v-? zsI$U2YO}5vRODaIo|lp5R^%f_gEXQUw(LE&7PGmvC+3~C6~}btDO)N}QOGG%1~gJS zX*ni{B~E4cOl!8jTQCf)K`-h-)M(K2gTxwC z1vr%CSitE(36h7wUh0Uqur3xPxzwke6ZWvTfYltqBSSR^C-x%lg#i+VX*=xmirnve zu4NQUhLfiS#dQh=MO8bRLf})hw&Ab>>o958!OaYf$W zoJISW!-Nm*BY=a*I17KLyn@_pj{+n#gP{yORwH!1&aoP_k*yK6s1Q@pO7p5==|xK? zdx>rlQpQ_2A^9LW1LFwB(|-^h;~WzW<9R3v+o4_@LIsp^B{Y$xJEe7F8ZCQHBC^IZ|4+k3{V)<6?s*RM>uWX zecHx+9(DS}c8xv>OG@+&04_RbqGpMYv#fO3s4Sa=_y_rVzBJ8RyG%XKna|?~A zu$8yaG!1~;LNmbP-)P(DGm2w;Jf@z{Vt7g+Jm;-3hz;RZ7{V?WixlAlK_^5aOYo{V zP(zF5X=5Kzr&Us`&J^nT5(ID7rb)GCnt8QK>IM7u97n}7A>lOUDWIBKf|uQ%eFy8( EU#GeI8vp Date: Mon, 2 Oct 2017 11:28:09 +0300 Subject: [PATCH 085/298] Added missing debugging end-of-line --- Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 26cf9eb84b0..b1ad937d986 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -349,7 +349,7 @@ _add_curve_to_right(Event* event, Subcurve* curve) event); // SL_SAYS: we need to be sure that the overlapping curve generated by // `curve` and `*(pair_res.second)` has not yet been computed or - // that that overlapping curve will be added to the right of + // that the overlapping curve will be added to the right of // `event` because of an adjacency in the status line. // Indicate that an overlap has occured: @@ -510,6 +510,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, } else{ CGAL_SL_PRINT_TEXT("Overlap with common ancestors"); + CGAL_SL_PRINT_EOL(); X_monotone_curve_2 xc = first_parent->last_curve(); for (typename Subcurve_vector::iterator sc_it=all_leaves_diff.begin(); sc_it!=all_leaves_diff.end(); ++sc_it) From 2910c5d009f2dc815dd354854b1b12ac8656df1a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 7 Nov 2017 17:32:47 +0100 Subject: [PATCH 086/298] Support 2D images --- Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index f7b76857999..a6dacea55e2 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -215,9 +215,9 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, for(int axis = 0; axis < 3; ++axis) { - for(int i = 0; i < xdim; i+= (axis == 0 ? (xdim-1) : 1 ) ) - for(int j = 0; j < ydim; j+= (axis == 1 ? (ydim-1) : 1 ) ) - for(int k = 0; k < zdim; k+= (axis == 2 ? (zdim-1) : 1 ) ) + for(int i = 0; i < xdim; i+= (axis == 0 ? (std::max)(1, xdim-1) : 1 ) ) + for(int j = 0; j < ydim; j+= (axis == 1 ? (std::max)(1, ydim-1) : 1 ) ) + for(int k = 0; k < zdim; k+= (axis == 2 ? (std::max)(1, zdim-1) : 1 ) ) { using CGAL::cpp11::array; @@ -538,7 +538,9 @@ case_4: const std::ptrdiff_t nb_facets = case4 + case211 + case121 + case31 + case22 + case1; const std::ptrdiff_t expected_nb_facets = - 2*((xdim-1)*(ydim-1) + (ydim-1)*(zdim-1) + (xdim-1)*(zdim-1)); + ((xdim != 1 && ydim != 1 && zdim != 1) ? 2 : 1) + * + ((xdim-1)*(ydim-1) + (ydim-1)*(zdim-1) + (xdim-1)*(zdim-1)); // std::cerr << "nb of facets: " << nb_facets << std::endl // << " expected nb of facets: " << expected_nb_facets << std::endl; From 3630aa32df7aec68e51f82d7fd2d9c6f9938d443 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 7 Nov 2017 17:32:59 +0100 Subject: [PATCH 087/298] Debug output --- .../CGAL/Mesh_3/polylines_to_protect.h | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index a6dacea55e2..a2a93f65235 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -558,6 +558,19 @@ case_4: const Graph& const_graph = graph; split_graph_into_polylines(const_graph, visitor, Mesh_3::Angle_tester(), less); +#if CGAL_MESH_3_PROTECTION_DEBUG > 1 + {//DEBUG + std::ofstream og("polylines_graph.polylines.txt"); + og.precision(17); + BOOST_FOREACH(const std::vector

& poly, polylines) + { + og << poly.size() << " "; + BOOST_FOREACH(const P& p, poly) + og << p << " "; + og << std::endl; + } + } +#endif // CGAL_MESH_3_PROTECTION_DEBUG > 1 } template >& polylines, typedef typename Kernel_traits

::Kernel K; split_graph_into_polylines(const_graph, visitor, Mesh_3::Angle_tester(), less); +#if CGAL_MESH_3_PROTECTION_DEBUG > 1 + {//DEBUG + std::ofstream og("polylines_graph.polylines.txt"); + og.precision(17); + BOOST_FOREACH(const std::vector

& poly, polylines) + { + og << poly.size() << " "; + BOOST_FOREACH(const P& p, poly) + og << p << " "; + og << std::endl; + } + } +#endif // CGAL_MESH_3_PROTECTION_DEBUG > 1 } template From 4e6a6b57ddb3beae9ee960349369e6678e0a22be Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 9 Nov 2017 14:35:38 +0000 Subject: [PATCH 088/298] Fix null_..(); Add associoated types halfedge_descriptor and face_descriptor --- BGL/doc/BGL/Concepts/FaceGraph.h | 18 +++++++++++------- BGL/doc/BGL/Concepts/HalfedgeGraph.h | 17 ++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/BGL/doc/BGL/Concepts/FaceGraph.h b/BGL/doc/BGL/Concepts/FaceGraph.h index fde6b911778..de04ba092b1 100644 --- a/BGL/doc/BGL/Concepts/FaceGraph.h +++ b/BGL/doc/BGL/Concepts/FaceGraph.h @@ -8,13 +8,23 @@ maintain faces described by halfedges, to provide access from a face to an incident halfedge, and to provide access from a halfedge to its incident face. +

Associated Types:

+ +`boost::graph_traits::face_descriptor` +A face descriptor corresponds to a unique face in an abstract graph instance. +A face descriptor must be `DefaultConstructible`, `Assignable`, and `EqualityComparable`. + \cgalRefines `HalfedgeGraph` \cgalHasModel `CGAL::Polyhedron_3` \cgalHasModel `CGAL::Surface_mesh` \cgalHasModel `CGAL::Linear_cell_complex_for_combinatorial_map` */ -class FaceGraph {}; +class FaceGraph { + /// Returns a special `boost::graph_traits::face_descriptor` object which + /// does not refer to any face of graph object which type is `FaceGraph`. + static boost::graph_traits::halfedge_descriptor null_face(); +}; /*! \relates FaceGraph returns the face incident to halfedge `h`. @@ -37,9 +47,3 @@ template boost::graph_traits::degree_size_type degree(boost::graph_traits::face_descriptor f, const FaceGraph& g); -/*! \relates FaceGraph -returns a special face that is not equal to any other face. - */ -template -boost::graph_traits::face_descriptor -null_face(const FaceGraph& g); diff --git a/BGL/doc/BGL/Concepts/HalfedgeGraph.h b/BGL/doc/BGL/Concepts/HalfedgeGraph.h index 2bfb1136b88..e2a05e433a9 100644 --- a/BGL/doc/BGL/Concepts/HalfedgeGraph.h +++ b/BGL/doc/BGL/Concepts/HalfedgeGraph.h @@ -15,6 +15,11 @@ in another cycle, namely the cycle of halfedges which are incident to the same vertex. We refer to \ref PkgBGLIterators for a description of iterators and circulators for these halfedge cycles. +

Associated Types:

+ +`boost::graph_traits::halfedge_descriptor` +A halfedge descriptor corresponds to a unique halfedge in an abstract graph instance. +A halfedge descriptor must be `DefaultConstructible`, `Assignable`, and `EqualityComparable`. \cgalRefines
`IncidenceGraph` \cgalRefines `PropertyGraph` @@ -24,7 +29,11 @@ A model of `HalfedgeGraph` must have the interior property `vertex_point` attach \cgalHasModel `CGAL::Polyhedron_3` \cgalHasModel `CGAL::Surface_mesh` */ -class HalfedgeGraph {}; +class HalfedgeGraph { + /// Returns a special `boost::graph_traits::halfedge_descriptor` object which + /// does not refer to any halfedge of graph object which type is `HalfedgeGraph`. + static boost::graph_traits::halfedge_descriptor null_halfedge(); +}; /*! \relates HalfedgeGraph returns the edge corresponding to halfedges `h` and `opposite(h,g)`. @@ -92,9 +101,3 @@ template boost::graph_traits::halfedge_descriptor prev(boost::graph_traits::halfedge_descriptor h, const HalfedgeGraph& g); -/*! \relates HalfedgeGraph -returns a special halfedge that is not equal to any other halfedge. - */ -template -boost::graph_traits::halfedge_descriptor -null_halfedge(); From 85fd9e5ef8fe298f37c5f902fb72d17ea9a7bfa8 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 9 Nov 2017 14:43:13 +0000 Subject: [PATCH 089/298] Fix null_..(); Add associoated types halfedge_descriptor and face_descriptor --- BGL/doc/BGL/Concepts/FaceListGraph.h | 7 +++++++ BGL/doc/BGL/Concepts/HalfedgeListGraph.h | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/BGL/doc/BGL/Concepts/FaceListGraph.h b/BGL/doc/BGL/Concepts/FaceListGraph.h index 29d2a71f806..783026f9308 100644 --- a/BGL/doc/BGL/Concepts/FaceListGraph.h +++ b/BGL/doc/BGL/Concepts/FaceListGraph.h @@ -5,6 +5,13 @@ The concept `FaceListGraph` refines the concept `FaceGraph` and adds the requirement for traversal of all faces in a graph. +

Associated Types:

+ +`boost::graph_traits::face_iterator` +A face iterator (obtained via `faces(g)`) provides access to all of the faces in a graph. +A face iterator type must meet the requirements of `MultiPassInputIterator`. The value type of the +face iterator must be the same as the face descriptor of the graph. + \cgalRefines `FaceGraph` \cgalHasModel `CGAL::Polyhedron_3` \cgalHasModel `CGAL::Surface_mesh` diff --git a/BGL/doc/BGL/Concepts/HalfedgeListGraph.h b/BGL/doc/BGL/Concepts/HalfedgeListGraph.h index b7e61b02207..c5d0ba1cc99 100644 --- a/BGL/doc/BGL/Concepts/HalfedgeListGraph.h +++ b/BGL/doc/BGL/Concepts/HalfedgeListGraph.h @@ -5,6 +5,13 @@ The concept `HalfedgeListGraph` refines the concept `HalfedgeGraph` and adds the requirements for traversal of all halfedges in the graph. +

Associated Types:

+ +`boost::graph_traits::halfedge_iterator` +A halfedge iterator (obtained via `halfedges(g)`) provides access to all of the halfedges in a graph. +A halfedge iterator type must meet the requirements of `MultiPassInputIterator`. The value type of the +halfedge iterator must be the same as the halfedge descriptor of the graph. + \cgalRefines `HalfedgeGraph` \cgalHasModel `CGAL::Polyhedron_3` \cgalHasModel `CGAL::Surface_mesh` From be3fa5ba1f7504f12129a1f5f6d236c48d44f5db Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 7 Nov 2017 17:32:59 +0100 Subject: [PATCH 090/298] Factorize debug output --- .../CGAL/Mesh_3/polylines_to_protect.h | 41 +++++++------------ 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index a2a93f65235..fe3589dedd2 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -52,6 +52,21 @@ struct Polyline_visitor : polylines(lines), graph(p_graph) {} + ~Polyline_visitor() + {//DEBUG +#if CGAL_MESH_3_PROTECTION_DEBUG > 1 + std::ofstream og("polylines_graph.polylines.txt"); + og.precision(17); + BOOST_FOREACH(const std::vector

& poly, polylines) + { + og << poly.size() << " "; + BOOST_FOREACH(const P& p, poly) + og << p << " "; + og << std::endl; + } +#endif // CGAL_MESH_3_PROTECTION_DEBUG > 1 + } + void start_new_polyline() { std::vector

V; @@ -558,19 +573,6 @@ case_4: const Graph& const_graph = graph; split_graph_into_polylines(const_graph, visitor, Mesh_3::Angle_tester(), less); -#if CGAL_MESH_3_PROTECTION_DEBUG > 1 - {//DEBUG - std::ofstream og("polylines_graph.polylines.txt"); - og.precision(17); - BOOST_FOREACH(const std::vector

& poly, polylines) - { - og << poly.size() << " "; - BOOST_FOREACH(const P& p, poly) - og << p << " "; - og << std::endl; - } - } -#endif // CGAL_MESH_3_PROTECTION_DEBUG > 1 } template >& polylines, typedef typename Kernel_traits

::Kernel K; split_graph_into_polylines(const_graph, visitor, Mesh_3::Angle_tester(), less); -#if CGAL_MESH_3_PROTECTION_DEBUG > 1 - {//DEBUG - std::ofstream og("polylines_graph.polylines.txt"); - og.precision(17); - BOOST_FOREACH(const std::vector

& poly, polylines) - { - og << poly.size() << " "; - BOOST_FOREACH(const P& p, poly) - og << p << " "; - og << std::endl; - } - } -#endif // CGAL_MESH_3_PROTECTION_DEBUG > 1 } template From 539097d7329c73275f3fb96346265ce57091b2e8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 9 Nov 2017 18:39:26 +0100 Subject: [PATCH 091/298] Use a struct instead of a tuple That way the access to fields is clearer: `.point` instead of `get<1>(..)`. --- .../CGAL/Mesh_3/polylines_to_protect.h | 138 ++++++++++-------- 1 file changed, 78 insertions(+), 60 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index fe3589dedd2..511dfc2cc54 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -42,7 +42,21 @@ namespace CGAL { +namespace internal { namespace Mesh_3 { +template +struct Enriched_pixel { + Pixel pixel; + Point point; + Domain_type domain; + Coeff_type coeff; +}; // end struct template Enriched_pixel +}} // namespaces: end Mesh_3, end internal + namespace Mesh_3{ + template struct Polyline_visitor { @@ -254,37 +268,41 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, // we have gone too far continue; } - typedef tuple Enriched_pixel; + typedef internal::Mesh_3::Enriched_pixel Enriched_pixel; array, 2> square = - {{ {{ Enriched_pixel(pix00, Point_3(), Image_word_type()), - Enriched_pixel(pix01, Point_3(), Image_word_type()) }}, - {{ Enriched_pixel(pix10, Point_3(), Image_word_type()), - Enriched_pixel(pix11, Point_3(), Image_word_type()) }} }}; + {{ {{ { pix00, Point_3(), Image_word_type(), 0 }, + { pix01, Point_3(), Image_word_type(), 0 } }}, + {{ { pix10, Point_3(), Image_word_type(), 0 }, + { pix11, Point_3(), Image_word_type(), 0 } }} }}; std::map pixel_values_set; for(int ii = 0; ii < 2; ++ii) for(int jj = 0; jj < 2; ++jj) { - const Pixel& pixel = get<0>(square[ii][jj]); + const Pixel& pixel = square[ii][jj].pixel; double x = pixel[0] * vx; double y = pixel[1] * vy; double z = pixel[2] * vz; - get<1>(square[ii][jj]) = Point_3(x, y, z); - get<2>(square[ii][jj]) = static_cast(cgal_image.value(pixel[0], - pixel[1], - pixel[2])); - ++pixel_values_set[get<2>(square[ii][jj])]; + square[ii][jj].point = Point_3(x, y, z); + square[ii][jj].domain = static_cast(cgal_image.value(pixel[0], + pixel[1], + pixel[2])); + ++pixel_values_set[square[ii][jj].domain]; } - const Point_3& p00 = get<1>(square[0][0]); - const Point_3& p10 = get<1>(square[1][0]); - const Point_3& p01 = get<1>(square[0][1]); - const Point_3& p11 = get<1>(square[1][1]); + const Point_3& p00 = square[0][0].point; + const Point_3& p10 = square[1][0].point; + const Point_3& p01 = square[0][1].point; + const Point_3& p11 = square[1][1].point; - bool out00 = null(get<2>(square[0][0])); - bool out10 = null(get<2>(square[1][0])); - bool out01 = null(get<2>(square[0][1])); - bool out11 = null(get<2>(square[1][1])); + bool out00 = null(square[0][0].domain); + bool out10 = null(square[1][0].domain); + bool out01 = null(square[0][1].domain); + bool out11 = null(square[1][1].domain); // // Protect the edges of the cube @@ -319,12 +337,12 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, // switch(pixel_values_set.size()) { case 4: { - CGAL_assertion(get<2>(square[0][0]) != get<2>(square[0][1])); - CGAL_assertion(get<2>(square[0][0]) != get<2>(square[1][0])); - CGAL_assertion(get<2>(square[0][0]) != get<2>(square[1][1])); - CGAL_assertion(get<2>(square[1][0]) != get<2>(square[1][1])); - CGAL_assertion(get<2>(square[0][1]) != get<2>(square[1][1])); - CGAL_assertion(get<2>(square[0][1]) != get<2>(square[1][0])); + CGAL_assertion(square[0][0].domain != square[0][1].domain); + CGAL_assertion(square[0][0].domain != square[1][0].domain); + CGAL_assertion(square[0][0].domain != square[1][1].domain); + CGAL_assertion(square[1][0].domain != square[1][1].domain); + CGAL_assertion(square[0][1].domain != square[1][1].domain); + CGAL_assertion(square[0][1].domain != square[1][0].domain); case_4: // case 4 or case 2-2 ++case4; @@ -341,18 +359,18 @@ case_4: } break; case 3: { - if(get<2>(square[0][0]) == get<2>(square[1][1])) { + if(square[0][0].domain == square[1][1].domain) { // Diagonal, but the wrong one. // Vertical swap std::swap(square[0][1], square[0][0]); std::swap(out01, out00); std::swap(square[1][1], square[1][0]); std::swap(out11, out10); } - if(get<2>(square[0][1]) == get<2>(square[1][0])) { + if(square[0][1].domain == square[1][0].domain) { // diagonal case 1-2-1 - CGAL_assertion(get<2>(square[0][1]) == get<2>(square[1][0])); - CGAL_assertion(get<2>(square[1][1]) != get<2>(square[0][0])); - CGAL_assertion(get<2>(square[0][1]) != get<2>(square[0][0])); - CGAL_assertion(get<2>(square[0][1]) != get<2>(square[1][1])); + CGAL_assertion(square[0][1].domain == square[1][0].domain); + CGAL_assertion(square[1][1].domain != square[0][0].domain); + CGAL_assertion(square[0][1].domain != square[0][0].domain); + CGAL_assertion(square[0][1].domain != square[1][1].domain); ++case121; vertex_descriptor left = g_manip.split(p00, p01, out00, out01); vertex_descriptor right = g_manip.split(p10, p11, out10, out11); @@ -386,23 +404,23 @@ case_4: g_manip.try_add_edge(v_int_right, top); } else { // case 2-1-1 - if(get<2>(square[0][0]) == get<2>(square[1][0])) { + if(square[0][0].domain == square[1][0].domain) { // Diagonal swap std::swap(square[0][1], square[1][0]); std::swap(out01, out10); } else - if(get<2>(square[0][1]) == get<2>(square[1][1])) { + if(square[0][1].domain == square[1][1].domain) { // The other diagonal swap std::swap(square[0][0], square[1][1]); std::swap(out00, out11); } else - if(get<2>(square[1][0]) == get<2>(square[1][1])) { + if(square[1][0].domain == square[1][1].domain) { // Vertical swap std::swap(square[0][0], square[1][0]); std::swap(out00, out10); std::swap(square[0][1], square[1][1]); std::swap(out01, out11); } - CGAL_assertion(get<2>(square[0][0]) == get<2>(square[0][1])); - CGAL_assertion(get<2>(square[0][0]) != get<2>(square[1][0])); - CGAL_assertion(get<2>(square[0][0]) != get<2>(square[1][1])); - CGAL_assertion(get<2>(square[1][0]) != get<2>(square[1][1])); + CGAL_assertion(square[0][0].domain == square[0][1].domain); + CGAL_assertion(square[0][0].domain != square[1][0].domain); + CGAL_assertion(square[0][0].domain != square[1][1].domain); + CGAL_assertion(square[1][0].domain != square[1][1].domain); ++case211; Point_3 midleft = midpoint(p00, p01); Point_3 midright = midpoint(p10, p11); @@ -449,37 +467,37 @@ case_4: { // Case of two colors with two pixels each. - if(get<2>(square[0][0])==get<2>(square[1][0])) { + if(square[0][0].domain==square[1][0].domain) { // case 2-2, diagonal swap std::swap(square[0][1], square[1][0]); std::swap(out01, out10); - CGAL_assertion(get<2>(square[0][0])==get<2>(square[0][1])); + CGAL_assertion(square[0][0].domain==square[0][1].domain); } - if(get<2>(square[1][0])==get<2>(square[1][1])) { + if(square[1][0].domain==square[1][1].domain) { // case 2-2, vertical swap std::swap(square[0][1], square[1][1]); std::swap(out01, out11); std::swap(square[0][0], square[1][0]); std::swap(out00, out10); - CGAL_assertion(get<2>(square[0][0])==get<2>(square[0][1])); + CGAL_assertion(square[0][0].domain==square[0][1].domain); } - if(get<2>(square[0][1])==get<2>(square[1][1])) { + if(square[0][1].domain==square[1][1].domain) { // case 2-2, diagonal swap std::swap(square[0][0], square[1][1]); std::swap(out00, out11); - CGAL_assertion(get<2>(square[0][0])==get<2>(square[0][1])); + CGAL_assertion(square[0][0].domain==square[0][1].domain); } - if(get<2>(square[0][0])==get<2>(square[0][1])) { + if(square[0][0].domain==square[0][1].domain) { // vertical case 2-2 ++case22; - CGAL_assertion(get<2>(square[1][0])==get<2>(square[1][1])); - CGAL_assertion(get<2>(square[1][0])!=get<2>(square[0][1])); + CGAL_assertion(square[1][0].domain==square[1][1].domain); + CGAL_assertion(square[1][0].domain!=square[0][1].domain); vertex_descriptor top = g_manip.split(p01, p11, out01, out11); vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); g_manip.try_add_edge(top, bottom); } else { // Else diagonal case case 2-2 // Same as the case with 4 colors - CGAL_assertion(get<2>(square[0][0])==get<2>(square[1][1])); - CGAL_assertion(get<2>(square[1][0])==get<2>(square[0][1])); - CGAL_assertion(get<2>(square[0][0])!=get<2>(square[0][1])); + CGAL_assertion(square[0][0].domain==square[1][1].domain); + CGAL_assertion(square[1][0].domain==square[0][1].domain); + CGAL_assertion(square[0][0].domain!=square[0][1].domain); goto case_4; } } @@ -493,29 +511,29 @@ case_4: CGAL_assertion(pixel_values_set.rbegin()->second ==1); value_alone = pixel_values_set.rbegin()->first; } - if(get<2>(square[0][1]) == value_alone) { + if(square[0][1].domain == value_alone) { // central symmetry std::swap(square[0][1], square[1][0]); std::swap(out01, out10); std::swap(square[0][0], square[1][1]); std::swap(out00, out11); - CGAL_assertion(get<2>(square[1][0]) == value_alone); + CGAL_assertion(square[1][0].domain == value_alone); } - if(get<2>(square[1][1]) == value_alone) { + if(square[1][1].domain == value_alone) { // vertical swap std::swap(square[0][0], square[0][1]); std::swap(out00, out01); std::swap(square[1][0], square[1][1]); std::swap(out10, out11); - CGAL_assertion(get<2>(square[1][0]) == value_alone); + CGAL_assertion(square[1][0].domain == value_alone); } - if(get<2>(square[0][0]) == value_alone) { + if(square[0][0].domain == value_alone) { // horizontal swap std::swap(square[0][1], square[1][1]); std::swap(out01, out11); std::swap(square[0][0], square[1][0]); std::swap(out00, out10); - CGAL_assertion(get<2>(square[1][0]) == value_alone); + CGAL_assertion(square[1][0].domain == value_alone); } ++case31; - CGAL_assertion(get<2>(square[1][0]) == value_alone); - CGAL_assertion(get<2>(square[1][0]) != get<2>(square[0][0])); - CGAL_assertion(get<2>(square[1][1]) == get<2>(square[0][0])); - CGAL_assertion(get<2>(square[0][1]) == get<2>(square[0][0])); + CGAL_assertion(square[1][0].domain == value_alone); + CGAL_assertion(square[1][0].domain != square[0][0].domain); + CGAL_assertion(square[1][1].domain == square[0][0].domain); + CGAL_assertion(square[0][1].domain == square[0][0].domain); vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); vertex_descriptor old = bottom; From 79418f2f43935e671cb2cf99a4e533d9a1de3b5c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 9 Nov 2017 20:33:54 +0100 Subject: [PATCH 092/298] prepare the introduction of DomainFunctor and InterpolationFunctor --- .../CGAL/Mesh_3/polylines_to_protect.h | 106 +++++++++++------- .../internal/Mesh_3/Graph_manipulations.h | 16 ++- 2 files changed, 78 insertions(+), 44 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index 511dfc2cc54..c5818583b3d 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -43,15 +43,31 @@ namespace CGAL { namespace internal { namespace Mesh_3 { + +template +struct Returns_midpoint { + typedef typename K::Point_3 Point_3; + + Point_3 operator()(const Point_3& a, + const Point_3& b, + const NT, + const NT) const + { + typename K::Construct_midpoint_3 midpt + = K().construct_midpoint_3_object(); + return a < b ? midpt(a, b) : midpt(b, a); + } +}; + template + typename Image_word_type> struct Enriched_pixel { Pixel pixel; Point point; Domain_type domain; - Coeff_type coeff; + Image_word_type word; }; // end struct template Enriched_pixel }} // namespaces: end Mesh_3, end internal @@ -204,6 +220,8 @@ struct Less_for_Graph_vertex_descriptors template void polylines_to_protect(const CGAL::Image_3& cgal_image, @@ -211,9 +229,12 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, std::vector >& polylines, Image_word_type*, Null_subdomain_index null, + DomainFunctor domain_fct, + InterpolationFunctor interpolate, PolylineInputIterator existing_polylines_begin, PolylineInputIterator existing_polylines_end) { + typedef typename DomainFunctor::result_type Domain_type; typedef typename Kernel_traits

::Kernel K; typedef P Point_3; typedef boost::adjacency_list Graph; @@ -227,7 +248,10 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, const int image_dims[3] = { xdim, ydim, zdim }; Graph graph; - internal::Mesh_3::Graph_manipulations g_manip(graph); + internal::Mesh_3::Graph_manipulations g_manip(graph, interpolate); std::size_t case4 = 0, // 4 colors @@ -270,15 +294,15 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, } typedef internal::Mesh_3::Enriched_pixel Enriched_pixel; array, 2> square = - {{ {{ { pix00, Point_3(), Image_word_type(), 0 }, - { pix01, Point_3(), Image_word_type(), 0 } }}, - {{ { pix10, Point_3(), Image_word_type(), 0 }, - { pix11, Point_3(), Image_word_type(), 0 } }} }}; + {{ {{ { pix00, Point_3(), Domain_type(), 0 }, + { pix01, Point_3(), Domain_type(), 0 } }}, + {{ { pix10, Point_3(), Domain_type(), 0 }, + { pix11, Point_3(), Domain_type(), 0 } }} }}; std::map pixel_values_set; for(int ii = 0; ii < 2; ++ii) @@ -289,9 +313,11 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, double y = pixel[1] * vy; double z = pixel[2] * vz; square[ii][jj].point = Point_3(x, y, z); - square[ii][jj].domain = static_cast(cgal_image.value(pixel[0], - pixel[1], - pixel[2])); + square[ii][jj].word = + static_cast(cgal_image.value(pixel[0], + pixel[1], + pixel[2])); + square[ii][jj].domain = domain_fct(square[ii][jj].word); ++pixel_values_set[square[ii][jj].domain]; } const Point_3& p00 = square[0][0].point; @@ -299,6 +325,11 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, const Point_3& p01 = square[0][1].point; const Point_3& p11 = square[1][1].point; + const Image_word_type& v00 = square[0][0].word; + const Image_word_type& v10 = square[1][0].word; + const Image_word_type& v01 = square[0][1].word; + const Image_word_type& v11 = square[1][1].word; + bool out00 = null(square[0][0].domain); bool out10 = null(square[1][0].domain); bool out01 = null(square[0][1].domain); @@ -346,10 +377,10 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, case_4: // case 4 or case 2-2 ++case4; - vertex_descriptor left = g_manip.split(p00, p01, out00, out01); - vertex_descriptor right = g_manip.split(p10, p11, out10, out11); - vertex_descriptor top = g_manip.split(p01, p11, out01, out11); - vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); + vertex_descriptor left = g_manip.split(p00, p01, v00, v01, out00, out01); + vertex_descriptor right = g_manip.split(p10, p11, v10, v11, out10, out11); + vertex_descriptor top = g_manip.split(p01, p11, v01, v11, out01, out11); + vertex_descriptor bottom = g_manip.split(p00, p10, v00, v10, out00, out10); vertex_descriptor vmid = g_manip.get_vertex(midpoint(p00, p11)); g_manip.try_add_edge(left , vmid); @@ -372,10 +403,10 @@ case_4: CGAL_assertion(square[0][1].domain != square[0][0].domain); CGAL_assertion(square[0][1].domain != square[1][1].domain); ++case121; - vertex_descriptor left = g_manip.split(p00, p01, out00, out01); - vertex_descriptor right = g_manip.split(p10, p11, out10, out11); - vertex_descriptor top = g_manip.split(p01, p11, out01, out11); - vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); + vertex_descriptor left = g_manip.split(p00, p01, v00, v01, out00, out01); + vertex_descriptor right = g_manip.split(p10, p11, v10, v11, out10, out11); + vertex_descriptor top = g_manip.split(p01, p11, v01, v11, out01, out11); + vertex_descriptor bottom = g_manip.split(p00, p10, v00, v10, out00, out10); vertex_descriptor old_left = left; vertex_descriptor old_right = right; @@ -427,9 +458,9 @@ case_4: Point_3 inter = translate(midleft , (2./3) * vector(midleft, midright)); vertex_descriptor v_inter = g_manip.get_vertex(inter); - vertex_descriptor right = g_manip.split(p10, p11, out10, out11); - vertex_descriptor top = g_manip.split(p01, p11, out01, out11); - vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); + vertex_descriptor right = g_manip.split(p10, p11, v10, v11, out10, out11); + vertex_descriptor top = g_manip.split(p01, p11, v01, v11, out01, out11); + vertex_descriptor bottom = g_manip.split(p00, p10, v00, v10, out00, out10); vertex_descriptor old_top = top; vertex_descriptor old_bottom = bottom; @@ -489,8 +520,8 @@ case_4: ++case22; CGAL_assertion(square[1][0].domain==square[1][1].domain); CGAL_assertion(square[1][0].domain!=square[0][1].domain); - vertex_descriptor top = g_manip.split(p01, p11, out01, out11); - vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); + vertex_descriptor top = g_manip.split(p01, p11, v01, v11, out01, out11); + vertex_descriptor bottom = g_manip.split(p00, p10, v00, v10, out00, out10); g_manip.try_add_edge(top, bottom); } else { // Else diagonal case case 2-2 @@ -534,7 +565,7 @@ case_4: CGAL_assertion(square[1][0].domain != square[0][0].domain); CGAL_assertion(square[1][1].domain == square[0][0].domain); CGAL_assertion(square[0][1].domain == square[0][0].domain); - vertex_descriptor bottom = g_manip.split(p00, p10, out00, out10); + vertex_descriptor bottom = g_manip.split(p00, p10, v00, v10, out00, out10); vertex_descriptor old = bottom; vertex_descriptor v_int; @@ -549,7 +580,7 @@ case_4: old = v_int; } - vertex_descriptor right = g_manip.split(p10, p11, out10, out11); + vertex_descriptor right = g_manip.split(p10, p11, v10, v11, out10, out11); g_manip.try_add_edge(v_int, right); } } @@ -601,12 +632,17 @@ polylines_to_protect(std::vector >& polylines, PolylineInputIterator existing_polylines_end) { typedef P Point_3; + typedef typename Kernel_traits

::Kernel K; typedef boost::adjacency_list Graph; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename std::iterator_traits::value_type Polyline; Graph graph; - internal::Mesh_3::Graph_manipulations g_manip(graph); + typedef internal::Mesh_3::Returns_midpoint Midpoint_fct; + internal::Mesh_3::Graph_manipulations g_manip(graph); for (PolylineInputIterator poly_it = existing_polylines_begin; poly_it != existing_polylines_end; ++poly_it) @@ -642,7 +678,6 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, { polylines_to_protect

(cgal_image, - cgal_image.vx(), cgal_image.vy(),cgal_image.vz(), polylines, word_type, null, @@ -655,14 +690,7 @@ void polylines_to_protect(const CGAL::Image_3& cgal_image, std::vector >& polylines) { - polylines_to_protect

- (cgal_image, - cgal_image.vx(), cgal_image.vy(),cgal_image.vz(), - polylines, - (Image_word_type*)0, - CGAL::Null_subdomain_index(), - 0, - 0); + polylines_to_protect(cgal_image, polylines, 0, 0); } @@ -677,7 +705,6 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, { polylines_to_protect

(cgal_image, - cgal_image.vx(), cgal_image.vy(),cgal_image.vz(), polylines, (Image_word_type*)0, CGAL::Null_subdomain_index(), @@ -697,12 +724,15 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, PolylineInputIterator existing_polylines_begin, PolylineInputIterator existing_polylines_end) { + typedef typename Kernel_traits

::Kernel K; polylines_to_protect

(cgal_image, cgal_image.vx(), cgal_image.vy(),cgal_image.vz(), polylines, word_type, null, + CGAL::Identity(), + internal::Mesh_3::Returns_midpoint(), existing_polylines_begin, existing_polylines_end); } diff --git a/Mesh_3/include/CGAL/internal/Mesh_3/Graph_manipulations.h b/Mesh_3/include/CGAL/internal/Mesh_3/Graph_manipulations.h index 0e4dcf3b2e1..1ac73924184 100644 --- a/Mesh_3/include/CGAL/internal/Mesh_3/Graph_manipulations.h +++ b/Mesh_3/include/CGAL/internal/Mesh_3/Graph_manipulations.h @@ -36,16 +36,22 @@ namespace CGAL { namespace internal { namespace Mesh_3 { -template +template struct Graph_manipulations { typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::edge_descriptor edge_descriptor; std::map p2v; + InterpolationFunctor interpolate; Graph& g; - Graph_manipulations(Graph& g) : g(g) {} + Graph_manipulations(Graph& g, + InterpolationFunctor interpolate = InterpolationFunctor()) + : g(g) + , interpolate(interpolate) + {} vertex_descriptor get_vertex(const Point_3& p) { typename std::map::iterator @@ -61,6 +67,7 @@ struct Graph_manipulations } vertex_descriptor split(const Point_3& a, const Point_3& b, + const NT v_a, const NT v_b, bool a_is_outside, bool b_is_outside) { #ifdef CGAL_MESH_3_DEBUG_GRAPH_MANIPULATION @@ -69,10 +76,7 @@ struct Graph_manipulations << std::boolalpha << b_is_outside << ")\n"; #endif // CGAL_MESH_3_DEBUG_GRAPH_MANIPULATION - typedef typename CGAL::Kernel_traits::Kernel K; - typename K::Construct_midpoint_3 midpt - = K().construct_midpoint_3_object(); - const Point_3 mid = a < b ? midpt(a, b) : midpt(b, a); + const Point_3 mid = interpolate(a, b, v_a, v_b); vertex_descriptor vmid = get_vertex(mid); typename std::map::iterator it_a = p2v.find(a), From f686b140cf80bc0e0db21967fd0d6df938197558 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 10 Nov 2017 11:35:46 +0100 Subject: [PATCH 093/298] Add ASCII-art "pictures" to comment the code --- .../CGAL/Mesh_3/polylines_to_protect.h | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h index c5818583b3d..563146d9134 100644 --- a/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h +++ b/Mesh_3/include/CGAL/Mesh_3/polylines_to_protect.h @@ -376,6 +376,16 @@ polylines_to_protect(const CGAL::Image_3& cgal_image, CGAL_assertion(square[0][1].domain != square[1][0].domain); case_4: // case 4 or case 2-2 + // + // --------------- + // | | | + // | | | + // |______|______| + // | | | + // | | | + // | | | + // --------------- + // ++case4; vertex_descriptor left = g_manip.split(p00, p01, v00, v01, out00, out01); vertex_descriptor right = g_manip.split(p10, p11, v10, v11, out10, out11); @@ -398,6 +408,25 @@ case_4: } if(square[0][1].domain == square[1][0].domain) { // diagonal case 1-2-1 + // + // A-------------C + // | | | + // | \ | + // |___ \__| + // | \ | + // | \ | + // | | | + // B-------------A + // + // two curves: -1 ------------- 0 -1 ------------- 1 + // | | | | | + // | | | \ | + // |___ | | \__| + // | \ | | | + // | \ | | | + // | | | | | + // 1 ------------- -1 0 ------------- -1 + // CGAL_assertion(square[0][1].domain == square[1][0].domain); CGAL_assertion(square[1][1].domain != square[0][0].domain); CGAL_assertion(square[0][1].domain != square[0][0].domain); @@ -453,6 +482,28 @@ case_4: CGAL_assertion(square[0][0].domain != square[1][1].domain); CGAL_assertion(square[1][0].domain != square[1][1].domain); ++case211; + // + // A-------------B + // | | | + // | \ | + // | \__| + // | / | + // | / | + // | | | + // A-------------C + // + // Two curves portions: + // + // 1 ------------- 0 1 ------------- -1 + // | /| | | | + // | / | | \ | + // | / | | \ | + // | / | | \ | + // | / | | \ | + // | | | | \| + // 1 ------------- -1 1 ------------- 0 + // + // ...and a segment. Point_3 midleft = midpoint(p00, p01); Point_3 midright = midpoint(p10, p11); Point_3 inter = translate(midleft @@ -518,6 +569,17 @@ case_4: if(square[0][0].domain==square[0][1].domain) { // vertical case 2-2 ++case22; + // case 2-2 + // + // A-------------B + // | | | + // | | | + // | | | + // | | | + // | | | + // | | | + // A-------------B + // CGAL_assertion(square[1][0].domain==square[1][1].domain); CGAL_assertion(square[1][0].domain!=square[0][1].domain); vertex_descriptor top = g_manip.split(p01, p11, v01, v11, out01, out11); @@ -561,6 +623,16 @@ case_4: CGAL_assertion(square[1][0].domain == value_alone); } ++case31; + // + // A-------------A 1 ------------- 1 + // | | | | + // | | | | + // | ____| | ____| + // | / | | / | + // | / | | / | + // | | | | | | + // A-------------B 1 ------------- -1 + // CGAL_assertion(square[1][0].domain == value_alone); CGAL_assertion(square[1][0].domain != square[0][0].domain); CGAL_assertion(square[1][1].domain == square[0][0].domain); From abd9616231bc4770ed28604610b5afd1e26e10b6 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Wed, 29 Mar 2017 12:35:51 +0200 Subject: [PATCH 094/298] Hide the CMake option we added for "step 1" --- Installation/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 7c4091667f4..4cd5cda296f 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -51,7 +51,6 @@ include(GNUInstallDirs) if(CMAKE_MAJOR_VERSION GREATER 2) # In header only mode, we use INTERFACE libraries, which was introduced in cmake 3.0. # Thus this option is only enabled for cmake >= 3.0. - option(CGAL_HEADER_ONLY "Enable the header only version of CGAL" OFF ) if (CGAL_HEADER_ONLY OR CGAL_HEADER_ONLY_STEP_2) set(CGAL_HEADER_ONLY TRUE CACHE BOOL "Enable cgal header only" FORCE) From 75187a99e050f641e35ee57287ed7ed05998457b Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Wed, 29 Mar 2017 14:24:16 +0200 Subject: [PATCH 095/298] Update Installation Manual with the new way to activate the header-only mode --- Documentation/doc/Documentation/Installation.txt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index 37bc318f113..3cfca7bb3a3 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -324,19 +324,17 @@ variable `BUILD_SHARED_LIBS` to `FALSE`. If you use These setting affect the variants of third-party libraries (see next section) selected whenever the choice is available. -\subsection subsection_headeronly Header-only option +\subsection subsection_headeronly Header-only mode -Since \cgal 4.9, \cgal can be used in headers only mode, i.e. without compiling the \cgal libraries and linking with these libraries when compiling examples, tests and demos. This possibility can be enabled by setting the value of the CMake variable `CGAL_HEADER_ONLY` to `ON`. CMake version 3.0.0 or higher is required to use this option. +Since \cgal 4.11, \cgal can be used in header-only mode, i.e. without configuring nor building any \cgal library. In this case, the program using \cgal (example, test, demo, etc.) must be directly configured using CMake. The variable `CGAL_DIR` must point to the root directory of the CGAL source code. -One advantage of using \cgal in header-only mode is that you do not need to compile and install \cgal libraries before compiling a given example or demo. Note that even in header-only mode we still need to run cmake on \cgal in order to generate different configuration files. So, setting up \cgal becomes now: +So, using \cgal becomes now:

-cd CGAL-\cgalReleaseNumber # go to \cgal directory
-cmake . # configure \cgal
+cd directory-of-your-code # go to the directory of the code source using \cgal
+cmake -DCGAL_DIR= .
 
-and we do not need to run make anymore. - There is one possible problem when using \cgal in header-only mode on a Windows operating system when compiling a program using several modules (executable programs or dynamic-link libraries DLL). If two different modules use the same static variable, this variable is defined independently in each of these modules. If one module modifies the value of this variable, it will not be modified in the other module, which could induce an unexpected behavior. In \cgal, this concerns only a few specific variables: the default random, the failure behavior, IO mode. One example is the following: if you change the default random in one DLL, then if you use the default random in another DLL, you will not obtain the modified default random but the original one. \section secessential3rdpartysoftware Essential Third Party Libraries From a72ce2d0056dc9e2fad58d2ecbf5da6763398979 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 13 Nov 2017 11:11:13 +0100 Subject: [PATCH 096/298] Fix operations disappearing bug (kind of) --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 6406d45c9ba..54ca5611e29 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -128,6 +128,7 @@ MainWindow::MainWindow(QWidget* parent) { ui = new Ui::MainWindow; ui->setupUi(this); + menuBar()->setNativeMenuBar(false); menu_map[ui->menuOperations->title()] = ui->menuOperations; // remove the Load Script menu entry, when the demo has not been compiled with QT_SCRIPT_LIB #if !defined(QT_SCRIPT_LIB) From e09d25c15d6f1ff46b8993ef2e30005bd0ab64b1 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Sat, 13 Apr 2013 11:29:33 +0200 Subject: [PATCH 097/298] Go through mpfr only once to create an interval from mpz/mpq. Still needs some portability improvements (isinf in particular). --- Number_types/include/CGAL/Gmpq.h | 21 +++++++++++++-------- Number_types/include/CGAL/Gmpz.h | 21 +++++++++++++-------- Number_types/include/CGAL/mpq_class.h | 21 +++++++++++++-------- Number_types/include/CGAL/mpz_class.h | 21 +++++++++++++-------- 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/Number_types/include/CGAL/Gmpq.h b/Number_types/include/CGAL/Gmpq.h index 48186657ade..858d8b426b7 100644 --- a/Number_types/include/CGAL/Gmpq.h +++ b/Number_types/include/CGAL/Gmpq.h @@ -88,14 +88,19 @@ template <> class Real_embeddable_traits< Gmpq > : public CGAL::unary_function< Type, std::pair< double, double > > { public: std::pair operator()( const Type& x ) const { - mpfr_t y; - mpfr_init2 (y, 53); /* Assume IEEE-754 */ - mpfr_set_q (y, x.mpq(), GMP_RNDD); - double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ - mpfr_set_q (y, x.mpq(), GMP_RNDU); - double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ - mpfr_clear (y); - return std::pair(i, s); + MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ + int r = mpfr_set_q (y, x.mpq(), MPFR_RNDA); + double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ + if (r == 0 && !isinf (i)) + return std::pair(i, i); + else + { + double s = nextafter (i, 0); + if (i < 0) + return std::pair(i, s); + else + return std::pair(s, i); + } } }; }; diff --git a/Number_types/include/CGAL/Gmpz.h b/Number_types/include/CGAL/Gmpz.h index 7896ff321a9..fe0dc2ef18a 100644 --- a/Number_types/include/CGAL/Gmpz.h +++ b/Number_types/include/CGAL/Gmpz.h @@ -130,14 +130,19 @@ public: public: std::pair operator()( const Type& x ) const { - mpfr_t y; - mpfr_init2 (y, 53); /* Assume IEEE-754 */ - mpfr_set_z (y, x.mpz(), GMP_RNDD); - double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ - mpfr_set_z (y, x.mpz(), GMP_RNDU); - double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ - mpfr_clear (y); - return std::pair(i, s); + MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ + int r = mpfr_set_z (y, x.mpz(), MPFR_RNDA); + double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ + if (r == 0 && !isinf (i)) + return std::pair(i, i); + else + { + double s = nextafter (i, 0); + if (i < 0) + return std::pair(i, s); + else + return std::pair(s, i); + } } }; }; diff --git a/Number_types/include/CGAL/mpq_class.h b/Number_types/include/CGAL/mpq_class.h index 80a2126b058..d822d657a88 100644 --- a/Number_types/include/CGAL/mpq_class.h +++ b/Number_types/include/CGAL/mpq_class.h @@ -207,14 +207,19 @@ class Real_embeddable_traits< mpq_class > : public CGAL::unary_function< mpq_class, std::pair< double, double > > { std::pair operator()( const mpq_class& x ) const { - mpfr_t y; - mpfr_init2 (y, 53); /* Assume IEEE-754 */ - mpfr_set_q (y, x.get_mpq_t(), GMP_RNDD); - double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ - mpfr_set_q (y, x.get_mpq_t(), GMP_RNDU); - double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ - mpfr_clear (y); - return std::pair(i, s); + MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ + int r = mpfr_set_q (y, x.get_mpq_t(), MPFR_RNDA); + double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ + if (r == 0 && !isinf (i)) + return std::pair(i, i); + else + { + double s = nextafter (i, 0); + if (i < 0) + return std::pair(i, s); + else + return std::pair(s, i); + } } }; }; diff --git a/Number_types/include/CGAL/mpz_class.h b/Number_types/include/CGAL/mpz_class.h index 83642c29144..c19728b7651 100644 --- a/Number_types/include/CGAL/mpz_class.h +++ b/Number_types/include/CGAL/mpz_class.h @@ -271,14 +271,19 @@ public: : public CGAL::unary_function< mpz_class, std::pair< double, double > > { std::pair operator()( const mpz_class& x ) const { - mpfr_t y; - mpfr_init2 (y, 53); /* Assume IEEE-754 */ - mpfr_set_z (y, x.get_mpz_t(), GMP_RNDD); - double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ - mpfr_set_z (y, x.get_mpz_t(), GMP_RNDU); - double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ - mpfr_clear (y); - return std::pair(i, s); + MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ + int r = mpfr_set_z (y, x.get_mpz_t(), MPFR_RNDA); + double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ + if (r == 0 && !isinf (i)) + return std::pair(i, i); + else + { + double s = nextafter (i, 0); + if (i < 0) + return std::pair(i, s); + else + return std::pair(s, i); + } } }; }; From ea2d486b81809628f6284c9fc460ea2dbe894e3d Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Sun, 14 Apr 2013 14:19:47 +0200 Subject: [PATCH 098/298] Replace isinf with !is_finite. --- Number_types/include/CGAL/Gmpq.h | 2 +- Number_types/include/CGAL/Gmpz.h | 2 +- Number_types/include/CGAL/mpq_class.h | 2 +- Number_types/include/CGAL/mpz_class.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Number_types/include/CGAL/Gmpq.h b/Number_types/include/CGAL/Gmpq.h index 858d8b426b7..fb04302ee75 100644 --- a/Number_types/include/CGAL/Gmpq.h +++ b/Number_types/include/CGAL/Gmpq.h @@ -91,7 +91,7 @@ template <> class Real_embeddable_traits< Gmpq > MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_q (y, x.mpq(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ - if (r == 0 && !isinf (i)) + if (r == 0 && is_finite (i)) return std::pair(i, i); else { diff --git a/Number_types/include/CGAL/Gmpz.h b/Number_types/include/CGAL/Gmpz.h index fe0dc2ef18a..f511af8c4c8 100644 --- a/Number_types/include/CGAL/Gmpz.h +++ b/Number_types/include/CGAL/Gmpz.h @@ -133,7 +133,7 @@ public: MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_z (y, x.mpz(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ - if (r == 0 && !isinf (i)) + if (r == 0 && is_finite (i)) return std::pair(i, i); else { diff --git a/Number_types/include/CGAL/mpq_class.h b/Number_types/include/CGAL/mpq_class.h index d822d657a88..80997fa3789 100644 --- a/Number_types/include/CGAL/mpq_class.h +++ b/Number_types/include/CGAL/mpq_class.h @@ -210,7 +210,7 @@ class Real_embeddable_traits< mpq_class > MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_q (y, x.get_mpq_t(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ - if (r == 0 && !isinf (i)) + if (r == 0 && is_finite (i)) return std::pair(i, i); else { diff --git a/Number_types/include/CGAL/mpz_class.h b/Number_types/include/CGAL/mpz_class.h index c19728b7651..026e6d64e60 100644 --- a/Number_types/include/CGAL/mpz_class.h +++ b/Number_types/include/CGAL/mpz_class.h @@ -274,7 +274,7 @@ public: MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_z (y, x.get_mpz_t(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ - if (r == 0 && !isinf (i)) + if (r == 0 && is_finite (i)) return std::pair(i, i); else { From 7623c8930816accd9c977b35a58c71b59526715e Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Mon, 13 Nov 2017 11:36:43 +0100 Subject: [PATCH 099/298] Re-add code for MPFR versions < 3. --- Number_types/include/CGAL/Gmpq.h | 11 +++++++++++ Number_types/include/CGAL/Gmpz.h | 28 ++++++++++++++++++--------- Number_types/include/CGAL/double.h | 3 +-- Number_types/include/CGAL/mpq_class.h | 11 +++++++++++ Number_types/include/CGAL/mpz_class.h | 11 +++++++++++ 5 files changed, 53 insertions(+), 11 deletions(-) diff --git a/Number_types/include/CGAL/Gmpq.h b/Number_types/include/CGAL/Gmpq.h index fb04302ee75..204896a6503 100644 --- a/Number_types/include/CGAL/Gmpq.h +++ b/Number_types/include/CGAL/Gmpq.h @@ -88,6 +88,7 @@ template <> class Real_embeddable_traits< Gmpq > : public CGAL::unary_function< Type, std::pair< double, double > > { public: std::pair operator()( const Type& x ) const { +#if MPFR_VERSION_MAJOR >= 3 MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_q (y, x.mpq(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ @@ -101,6 +102,16 @@ template <> class Real_embeddable_traits< Gmpq > else return std::pair(s, i); } +#else + mpfr_t y; + mpfr_init2 (y, 53); /* Assume IEEE-754 */ + mpfr_set_q (y, x.mpq(), GMP_RNDD); + double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ + mpfr_set_q (y, x.mpq(), GMP_RNDU); + double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ + mpfr_clear (y); + return std::pair(i, s); +#endif } }; }; diff --git a/Number_types/include/CGAL/Gmpz.h b/Number_types/include/CGAL/Gmpz.h index f511af8c4c8..575f89478d9 100644 --- a/Number_types/include/CGAL/Gmpz.h +++ b/Number_types/include/CGAL/Gmpz.h @@ -129,21 +129,31 @@ public: : public CGAL::unary_function< Type, std::pair< double, double > > { public: std::pair operator()( const Type& x ) const { - +#if MPFR_VERSION_MAJOR >= 3 MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_z (y, x.mpz(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ if (r == 0 && is_finite (i)) return std::pair(i, i); else - { - double s = nextafter (i, 0); - if (i < 0) - return std::pair(i, s); - else - return std::pair(s, i); - } - } + { + double s = nextafter (i, 0); + if (i < 0) + return std::pair(i, s); + else + return std::pair(s, i); + } +#else + mpfr_t y; + mpfr_init2 (y, 53); /* Assume IEEE-754 */ + mpfr_set_z (y, x.mpz(), GMP_RNDD); + double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ + mpfr_set_z (y, x.mpz(), GMP_RNDU); + double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ + mpfr_clear (y); + return std::pair(i, s); +#endif + } }; }; diff --git a/Number_types/include/CGAL/double.h b/Number_types/include/CGAL/double.h index 3c75315e4ec..6449a31b111 100644 --- a/Number_types/include/CGAL/double.h +++ b/Number_types/include/CGAL/double.h @@ -138,8 +138,7 @@ inline double sse2fabs(double a) __m128d temp = _mm_set1_pd(a); temp = _mm_and_pd(temp, absMask.m); - _mm_store_sd(&a, temp); - return a; + return _mm_cvtsd_f64 (temp); } #endif diff --git a/Number_types/include/CGAL/mpq_class.h b/Number_types/include/CGAL/mpq_class.h index 80997fa3789..25e4e743c46 100644 --- a/Number_types/include/CGAL/mpq_class.h +++ b/Number_types/include/CGAL/mpq_class.h @@ -207,6 +207,7 @@ class Real_embeddable_traits< mpq_class > : public CGAL::unary_function< mpq_class, std::pair< double, double > > { std::pair operator()( const mpq_class& x ) const { +#if MPFR_VERSION_MAJOR >= 3 MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_q (y, x.get_mpq_t(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ @@ -220,6 +221,16 @@ class Real_embeddable_traits< mpq_class > else return std::pair(s, i); } +#else + mpfr_t y; + mpfr_init2 (y, 53); /* Assume IEEE-754 */ + mpfr_set_q (y, x.get_mpq_t(), GMP_RNDD); + double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ + mpfr_set_q (y, x.get_mpq_t(), GMP_RNDU); + double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ + mpfr_clear (y); + return std::pair(i, s); +#endif } }; }; diff --git a/Number_types/include/CGAL/mpz_class.h b/Number_types/include/CGAL/mpz_class.h index 026e6d64e60..77d493fd0d6 100644 --- a/Number_types/include/CGAL/mpz_class.h +++ b/Number_types/include/CGAL/mpz_class.h @@ -271,6 +271,7 @@ public: : public CGAL::unary_function< mpz_class, std::pair< double, double > > { std::pair operator()( const mpz_class& x ) const { +#if MPFR_VERSION_MAJOR >= 3 MPFR_DECL_INIT (y, 53); /* Assume IEEE-754 */ int r = mpfr_set_z (y, x.get_mpz_t(), MPFR_RNDA); double i = mpfr_get_d (y, MPFR_RNDA); /* EXACT but can overflow */ @@ -284,6 +285,16 @@ public: else return std::pair(s, i); } +#else + mpfr_t y; + mpfr_init2 (y, 53); /* Assume IEEE-754 */ + mpfr_set_z (y, x.get_mpz_t(), GMP_RNDD); + double i = mpfr_get_d (y, GMP_RNDD); /* EXACT but can overflow */ + mpfr_set_z (y, x.get_mpz_t(), GMP_RNDU); + double s = mpfr_get_d (y, GMP_RNDU); /* EXACT but can overflow */ + mpfr_clear (y); + return std::pair(i, s); +#endif } }; }; From 838217a153e005efc6dae94e0686921db32d61ad Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 11:49:07 +0100 Subject: [PATCH 100/298] CGAL_CURRENT_SOURCE_DIR is no longer used/filled --- .../cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index 42001cc90c8..927256f64e9 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -16,7 +16,7 @@ function(create_single_source_cgal_program firstfile ) set(NO_TESTING ${create_single_source_cgal_program_NO_TESTING}) if(NOT IS_ABSOLUTE "${firstfile}") - set(firstfile "${CGAL_CURRENT_SOURCE_DIR}/${firstfile}") + set(firstfile "${CMAKE_CURRENT_SOURCE_DIR}/${firstfile}") endif() get_filename_component(exe_name ${firstfile} NAME_WE) From 474db3ffa84a8d26f01b70a212a2cf44bf29b303 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 13 Nov 2017 11:50:03 +0100 Subject: [PATCH 101/298] Check if a loading file is empty before trying to read it. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 54ca5611e29..286ca5c231e 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1093,8 +1093,17 @@ CGAL::Three::Scene_item* MainWindow::loadItem(QFileInfo fileinfo, CGAL::Three::P throw std::invalid_argument(QString("File %1 is not a readable file.") .arg(fileinfo.absoluteFilePath()).toStdString()); } + //test if the file is empty. + QFile test(fileinfo.absoluteFilePath()); + test.open( QIODevice::WriteOnly|QIODevice::Append); + if (test.pos() == 0) { + QMessageBox::warning(this, tr("Error"), + tr("The file you are trying to load is empty.\n")); + return 0; + } QApplication::setOverrideCursor(Qt::WaitCursor); + item = loader->load(fileinfo); QApplication::restoreOverrideCursor(); if(!item) { From 099b3685f62574c82e506ed6f60274a857719d56 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 11:52:33 +0100 Subject: [PATCH 102/298] Fix: the target was defined twice --- Triangulation_3/examples/Triangulation_3/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/Triangulation_3/examples/Triangulation_3/CMakeLists.txt b/Triangulation_3/examples/Triangulation_3/CMakeLists.txt index 596bd423bd4..c9673ba28b7 100644 --- a/Triangulation_3/examples/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/examples/Triangulation_3/CMakeLists.txt @@ -17,7 +17,6 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "info_insert_with_zip_iterator.cpp" ) create_single_source_cgal_program( "regular_3.cpp" ) create_single_source_cgal_program( "regular_with_info_3.cpp" ) - create_single_source_cgal_program( "sequential_parallel.cpp" ) create_single_source_cgal_program( "simple_triangulation_3.cpp" ) create_single_source_cgal_program( "simplex.cpp" ) From e8aa58627f06670936bd660b0af7a554100b5c35 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 13 Nov 2017 11:55:54 +0100 Subject: [PATCH 103/298] Add missing update when background color is changed --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 286ca5c231e..a7f842892d9 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1719,6 +1719,7 @@ void MainWindow::on_actionSetBackgroundColor_triggered() QColor c = QColorDialog::getColor(); if(c.isValid()) { viewer->setBackgroundColor(c); + viewer->update(); } } From 990c05090c4f960564cfc10e4009e8481849d39a Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 12:02:20 +0100 Subject: [PATCH 104/298] Bug fix in CMap operation --- .../CGAL/Combinatorial_map_operations.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h b/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h index 80a35dc0a79..cbe01516ab9 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_operations.h @@ -712,18 +712,18 @@ namespace CGAL typename CMap::Dart_handle d1, d2; typename CMap::Dart_handle dg1=amap.null_handle, dg2=amap.null_handle; - typename CMap::size_type mark = amap.get_new_mark(); + typename CMap::size_type amark = amap.get_new_mark(); // First we store and mark all the darts of the 1-cell to contract. std::deque to_erase; - for ( CGAL::CMap_dart_iterator_basic_of_cell it(amap,adart,mark); + for ( CGAL::CMap_dart_iterator_basic_of_cell it(amap,adart,amark); it.cont(); ++it ) { to_erase.push_back(it); if ( dg1==amap.null_handle && !amap.template is_free<0>(it) && !amap.template is_free<1>(it) ) { dg1=amap.template beta<0>(it); dg2=amap.template beta<1>(it); } - amap.mark(it, mark); + amap.mark(it, amark); ++res; } @@ -756,7 +756,8 @@ namespace CGAL if ( (*it)->beta(0)!=(*it)->beta(1) )*/ if ( amap.are_attributes_automatically_managed() && update_attributes ) { - modified_darts.push_back(amap.template beta<1>(*it)); + if (!amap.is_marked(amap.template beta<1>(*it), amark)) + { modified_darts.push_back(amap.template beta<1>(*it)); } } amap.basic_link_beta_1(amap.template beta<0>(*it), amap.template beta<1>(*it)); @@ -766,7 +767,8 @@ namespace CGAL { if ( amap.are_attributes_automatically_managed() && update_attributes ) { - modified_darts2.push_back(amap.template beta<0>(*it)); + if (!amap.is_marked(amap.template beta<0>(*it), amark)) + { modified_darts2.push_back(amap.template beta<0>(*it)); } } amap.template dart_unlink_beta<1>(amap.template beta<0>(*it)); } @@ -777,7 +779,8 @@ namespace CGAL { if ( amap.are_attributes_automatically_managed() && update_attributes ) { - modified_darts.push_back(amap.template beta<1>(*it)); + if (!amap.is_marked(amap.template beta<1>(*it), amark)) + { modified_darts.push_back(amap.template beta<1>(*it)); } } amap.template dart_unlink_beta<0>(amap.template beta<1>(*it)); } @@ -788,8 +791,8 @@ namespace CGAL for ( it=to_erase.begin(); it!=to_erase.end(); ++it ) { amap.erase_dart(*it); } - CGAL_assertion( amap.is_whole_map_unmarked(mark) ); - amap.free_mark(mark); + CGAL_assertion( amap.is_whole_map_unmarked(amark) ); + amap.free_mark(amark); if ( amap.are_attributes_automatically_managed() && update_attributes ) { From 9b72ed0b47e8bcd77562c1fdb3d80fdb65637eb4 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 12:04:10 +0100 Subject: [PATCH 105/298] Fix a warning --- Classification/examples/Classification/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classification/examples/Classification/CMakeLists.txt b/Classification/examples/Classification/CMakeLists.txt index 58170a221f0..d8edcd17208 100644 --- a/Classification/examples/Classification/CMakeLists.txt +++ b/Classification/examples/Classification/CMakeLists.txt @@ -60,7 +60,7 @@ create_single_source_cgal_program( "example_feature.cpp" CXX_FEATURES ${needed_c if( OpenCV_FOUND ) include_directories( ${OpenCV_INCLUDE_DIRS} ) create_single_source_cgal_program( "example_random_forest.cpp" CXX_FEATURES ${needed_cxx_features} ) - target_link_libraries( example_random_forest ${OpenCV_LIBS} ) + target_link_libraries( example_random_forest PRIVATE ${OpenCV_LIBS} ) else() message(STATUS "OpenCV not found, random forest example won't be compiled.") endif() From 4539948158a14b3f016e08681f695f8337254206 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 13 Nov 2017 12:06:05 +0100 Subject: [PATCH 106/298] If a point item has less than 30 points, make their initial siwe "5" --- .../demo/Polyhedron/Scene_points_with_normal_item.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp index 47e4470f5ea..ed61a4136dc 100644 --- a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp @@ -44,8 +44,8 @@ struct Scene_points_with_normal_item_priv normal_Slider = new QSlider(Qt::Horizontal); normal_Slider->setValue(20); point_Slider = new QSlider(Qt::Horizontal); - point_Slider->setValue(2); point_Slider->setMinimum(1); + point_Slider->setValue(2); point_Slider->setMaximum(25); } Scene_points_with_normal_item_priv(Scene_points_with_normal_item* parent) @@ -369,6 +369,10 @@ void Scene_points_with_normal_item_priv::compute_normals_and_vertices() const normals.resize(0); colors_points.resize(0); + if(item->point_set()->number_of_points() < 30 ) + point_Slider->setValue(5); + else + point_Slider->setValue(2); //Shuffle container to allow quick display random points std::random_shuffle (m_points->begin(), m_points->first_selected()); if (m_points->nb_selected_points() != 0) From 6c7f38445578f577a3f05ddb8f97b406023aa1c9 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 12:14:37 +0100 Subject: [PATCH 107/298] Update CMap save/load in order to allow to save/load 2D lcc --- .../CGAL/Combinatorial_map_save_load.h | 98 ++++++++++++++++--- 1 file changed, 86 insertions(+), 12 deletions(-) diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_save_load.h b/Combinatorial_map/include/CGAL/Combinatorial_map_save_load.h index 615fc65f395..0d5411f927a 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_save_load.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_save_load.h @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -39,6 +40,8 @@ namespace CGAL { + typedef Exact_predicates_inexact_constructions_kernel::Point_2 RPoint_2; + typedef Exact_predicates_exact_constructions_kernel::Point_2 EPoint_2; typedef Exact_predicates_inexact_constructions_kernel::Point_3 RPoint_3; typedef Exact_predicates_exact_constructions_kernel::Point_3 EPoint_3; @@ -125,6 +128,20 @@ namespace CGAL { const std::string& val) {node.add("v",val);} inline + void write_cmap_attribute_node(boost::property_tree::ptree & node, + const RPoint_2& val) + { + node.add("p.x",val.x()); + node.add("p.y",val.y()); + } + inline + void write_cmap_attribute_node(boost::property_tree::ptree & node, + const EPoint_2& val) + { + node.add("p.x",CGAL::to_double(val.x())); + node.add("p.y",CGAL::to_double(val.y())); + } + inline void write_cmap_attribute_node(boost::property_tree::ptree & node, const RPoint_3& val) { @@ -166,7 +183,7 @@ namespace CGAL { boost::property_tree::ptree& ndim = ptree.add("dimension", ""); ndim.put(".index", i); ndim.add("type", typeid(typename CMap::template Attribute_type::type::Info).name()); - ndim.add("type_point", typeid(RPoint_3).name()); + ndim.add("type_point", typeid(typename CMap::Point).name()); // for every attribute of the dimension for (; it_attrib!=itend_attrib; ++it_attrib) @@ -201,7 +218,7 @@ namespace CGAL { boost::property_tree::ptree& ndim = ptree.add("dimension", ""); ndim.put(".index", i); ndim.add("type", "void"); - ndim.add("type_point", typeid(RPoint_3).name()); + ndim.add("type_point", typeid(typename CMap::Point).name()); // for every attribute of the dimension for (; it_attrib!=itend_attrib; ++it_attrib) @@ -354,13 +371,26 @@ namespace CGAL { return pt; } - template < class CMap > - bool save_combinatorial_map(const CMap& amap, std::ostream & output) + struct EmptyFunctor + { + void operator() (boost::property_tree::ptree & /*node*/) const + { + // node.add("myinfo.myvalie",15); + } + }; + + template < class CMap, class Functor > + bool save_combinatorial_map(const CMap& amap, std::ostream & output, + const Functor& f) { using boost::property_tree::ptree; ptree tree; tree.put("data", ""); + /** First we save general information of the map (by default nothing, + the fuction can be specialized by users). */ + f(tree); + // map dart => number std::map myDarts; @@ -378,14 +408,29 @@ namespace CGAL { return true; } - template < class CMap > - bool save_combinatorial_map(const CMap& amap, const char* filename) + template < class CMap, class Functor > + bool save_combinatorial_map(const CMap& amap, const char* filename, + const Functor& f) { std::ofstream output(filename); if (!output) return false; - return save_combinatorial_map(amap, output); + return save_combinatorial_map(amap, output, f); } + template < class CMap > + bool save_combinatorial_map(const CMap& amap, std::ostream & output) + { + EmptyFunctor f; + return save_combinatorial_map(amap, output, f); + } + + template < class CMap > + bool save_combinatorial_map(const CMap& amap, const char* filename) + { + EmptyFunctor f; + return save_combinatorial_map(amap, filename, f); + } + // Here T is a Dart_handle so no need of & template void read_cmap_dart_node @@ -449,6 +494,14 @@ namespace CGAL { {val=boost::lexical_cast< std::string >(v.second.data());} template<> inline void read_cmap_attribute_node + (const boost::property_tree::ptree::value_type &v,RPoint_2 &val) + { + double x=v.second.get("x"); + double y=v.second.get("y"); + val = RPoint_2(x,y); + } + template<> inline + void read_cmap_attribute_node (const boost::property_tree::ptree::value_type &v,RPoint_3 &val) { double x=v.second.get("x"); @@ -770,26 +823,47 @@ namespace CGAL { >::run(pt, amap, myDarts); } - template < class CMap > - bool load_combinatorial_map(std::ifstream & input, CMap& amap) + template < class CMap, class Functor > + bool load_combinatorial_map(std::ifstream & input, CMap& amap, + Functor& f) { using boost::property_tree::ptree; ptree pt; read_xml(input, pt); + + /** First we load general information of the map (by default nothing, + the fuction can be specialized by users). */ + f(pt); + + // Then we load darts and attributes. std::vector myDarts; cmap_load_darts(pt,amap,myDarts); cmap_load_attributes(pt,amap,myDarts); return true; } - template < class CMap > - bool load_combinatorial_map(const char* filename, CMap& amap) + template < class CMap, class Functor > + bool load_combinatorial_map(const char* filename, CMap& amap, + Functor& f) { std::ifstream input(filename); if (!input) return false; - return load_combinatorial_map(input, amap); + return load_combinatorial_map(input, amap, f); } + template < class CMap > + bool load_combinatorial_map(std::ifstream & input, CMap& amap) + { + EmptyFunctor f; + return load_combinatorial_map(input, amap, f); + } + + template < class CMap > + bool load_combinatorial_map(const char* filename, CMap& amap) + { + EmptyFunctor f; + return load_combinatorial_map(filename, amap, f); + } } // namespace CGAL #endif // CGAL_COMBINATORIAL_MAP_SAVE_LOAD_H // From 5f939d33abdcb667201f32d1d4f216ac2bc238ee Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 12:17:03 +0100 Subject: [PATCH 108/298] Bug fix in CMap/GMap/LCC dart methods --- Combinatorial_map/include/CGAL/Combinatorial_map_storages.h | 2 +- Generalized_map/include/CGAL/Generalized_map_storages.h | 2 +- .../include/CGAL/CMap_linear_cell_complex_storages.h | 2 +- .../include/CGAL/GMap_linear_cell_complex_storages.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_storages.h b/Combinatorial_map/include/CGAL/Combinatorial_map_storages.h index 0edc5dec58b..59009e489e6 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_storages.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_storages.h @@ -346,7 +346,7 @@ namespace CGAL { // Get the dart of the i-cell attribute associated with the given dart template - Dart_handle & dart(Dart_handle adart) + Dart_handle dart(Dart_handle adart) { CGAL_assertion( adart!=NULL ); CGAL_assertion( attribute(adart)!=NULL ); diff --git a/Generalized_map/include/CGAL/Generalized_map_storages.h b/Generalized_map/include/CGAL/Generalized_map_storages.h index 4e682e2df74..501bc72a354 100644 --- a/Generalized_map/include/CGAL/Generalized_map_storages.h +++ b/Generalized_map/include/CGAL/Generalized_map_storages.h @@ -339,7 +339,7 @@ namespace CGAL { // Get the dart of the i-cell attribute associated with the given dart template - Dart_handle & dart(Dart_handle adart) + Dart_handle dart(Dart_handle adart) { CGAL_assertion( adart!=NULL ); CGAL_assertion( attribute(adart)!=NULL ); diff --git a/Linear_cell_complex/include/CGAL/CMap_linear_cell_complex_storages.h b/Linear_cell_complex/include/CGAL/CMap_linear_cell_complex_storages.h index 4b5e9109783..7c030092e27 100644 --- a/Linear_cell_complex/include/CGAL/CMap_linear_cell_complex_storages.h +++ b/Linear_cell_complex/include/CGAL/CMap_linear_cell_complex_storages.h @@ -366,7 +366,7 @@ namespace CGAL { // Get the dart of the i-cell attribute associated with the given dart template - Dart_handle & dart(Dart_handle adart) + Dart_handle dart(Dart_handle adart) { CGAL_assertion( adart!=NULL ); CGAL_assertion( attribute(adart)!=NULL ); diff --git a/Linear_cell_complex/include/CGAL/GMap_linear_cell_complex_storages.h b/Linear_cell_complex/include/CGAL/GMap_linear_cell_complex_storages.h index 54cafb2ce2f..d3cd09cbc25 100644 --- a/Linear_cell_complex/include/CGAL/GMap_linear_cell_complex_storages.h +++ b/Linear_cell_complex/include/CGAL/GMap_linear_cell_complex_storages.h @@ -358,7 +358,7 @@ namespace CGAL { // Get the dart of the i-cell attribute associated with the given dart template - Dart_handle & dart(Dart_handle adart) + Dart_handle dart(Dart_handle adart) { CGAL_assertion( adart!=NULL ); CGAL_assertion( attribute(adart)!=NULL ); From 0783fa824176adc1f368e9a19739a0a186856a84 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 12:24:24 +0100 Subject: [PATCH 109/298] Do not clear model before loading something; this is more generic. --- .../demo/Linear_cell_complex/MainWindow.cpp | 28 +++++-------------- .../demo/Linear_cell_complex/MainWindow.h | 11 ++++---- .../demo/Linear_cell_complex/MainWindow.ui | 6 ---- 3 files changed, 12 insertions(+), 33 deletions(-) diff --git a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp index 8a142efba25..2324fa94373 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp +++ b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp @@ -153,7 +153,6 @@ void MainWindow::connectVolumeListHandlers() void MainWindow::update_operations_entries(bool show) { actionImportOFF->setEnabled(show); - actionAddOFF->setEnabled(show); actionImport3DTDS->setEnabled(show); actionCompute_Voronoi_3D->setEnabled(show); actionClear->setEnabled(show); @@ -246,7 +245,7 @@ void MainWindow::on_actionLoad_triggered () if (!fileName.isEmpty ()) { - load(fileName, true); + load(fileName, false); } } @@ -259,7 +258,7 @@ void MainWindow::on_actionImportOFF_triggered () if (!fileName.isEmpty ()) { - load_off (fileName, true); + load_off (fileName, false); } } @@ -272,7 +271,7 @@ void MainWindow::on_actionImportMoka_triggered() if (!fileName.isEmpty ()) { - load_moka(fileName, true); + load_moka(fileName, false); } } @@ -285,25 +284,12 @@ void MainWindow::on_actionImport3DTDS_triggered () if (!fileName.isEmpty ()) { - load_3DTDS (fileName, true); + load_3DTDS (fileName, false); statusBar ()->showMessage (QString ("Import 3DTDS file") + fileName, DELAY_STATUSMSG); } } -void MainWindow::on_actionAddOFF_triggered() -{ - QString fileName = QFileDialog::getOpenFileName (this, - tr ("Add OFF"), - "./off", - tr ("off files (*.off)")); - - if (!fileName.isEmpty ()) - { - load_off (fileName, false); - } -} - void MainWindow::load_depend_on_extension(const QString & fileName, bool clear) { QString ext = QFileInfo(fileName).suffix(); @@ -467,7 +453,7 @@ void MainWindow::load_moka(const QString & fileName, bool clear) #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to load off "<showMessage (QString ("Load off file") + fileName, + statusBar ()->showMessage (QString ("Load moka file") + fileName, DELAY_STATUSMSG); else - statusBar ()->showMessage (QString ("Add off file") + fileName, + statusBar ()->showMessage (QString ("Add moka file") + fileName, DELAY_STATUSMSG); Q_EMIT (sceneChanged ()); } diff --git a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h index a423a4d3a43..dde5336c7d2 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h +++ b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h @@ -113,7 +113,6 @@ public Q_SLOTS: void on_actionSave_triggered(); void on_actionLoad_triggered(); void on_actionImportOFF_triggered(); - void on_actionAddOFF_triggered(); void on_actionImport3DTDS_triggered(); void on_actionImportMoka_triggered(); void on_actionCompute_Voronoi_3D_triggered(); @@ -147,12 +146,12 @@ public Q_SLOTS: void on_actionExtend_hidden_volumes_triggered(); // Other slots - void load_depend_on_extension(const QString& fileName, bool clear=true); - void load(const QString& fileName, bool clear=true); + void load_depend_on_extension(const QString& fileName, bool clear=false); + void load(const QString& fileName, bool clear=false); void save(const QString& fileName); - void load_off(const QString& fileName, bool clear=true); - void load_3DTDS(const QString& fileName, bool clear=true); - void load_moka(const QString& fileName, bool clear=true); + void load_off(const QString& fileName, bool clear=false); + void load_3DTDS(const QString& fileName, bool clear=false); + void load_moka(const QString& fileName, bool clear=false); void onSceneChanged(); diff --git a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.ui b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.ui index aad48e3f81f..d63b9d7c9b1 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.ui +++ b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.ui @@ -44,7 +44,6 @@ - @@ -107,11 +106,6 @@ &Import OFF - - - Add &OFF - - &Quit From c9ba6c2950ded4958feffe342199d1eee5f21043 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 12:27:48 +0100 Subject: [PATCH 110/298] Split the LCC viewer in two; to prepare a generic base for all cgal ds viewers. --- .../linear_cell_complex_3_viewer_qt.h | 1161 +---------------- 1 file changed, 52 insertions(+), 1109 deletions(-) diff --git a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h index b8d957755d2..5851bf790c4 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h +++ b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h @@ -20,32 +20,11 @@ #ifndef CGAL_LCC_3_VIEWER_QT_H #define CGAL_LCC_3_VIEWER_QT_H -#include -#include -#include -#include -#include -#include -#include -#include -#include - +#include "basic_viewer.h" #include #include -#include -#include -#include -#include -#include -#include #include -#include -#include - -#define NB_VBO_BUFFERS 8 -#define NB_VAO_BUFFERS 4 - typedef CGAL::Exact_predicates_inexact_constructions_kernel Local_kernel; typedef Local_kernel::Point_3 Local_point; typedef Local_kernel::Vector_3 Local_vector; @@ -62,137 +41,18 @@ struct DefaultColorFunctor // Here dh is the smaller dart of its face CGAL::Random random(alcc.darts().index(dh)); - return CGAL::Color(random.get_int(0,256), - random.get_int(0,256), - random.get_int(0,256)); + CGAL::Color res; + do + { + res=CGAL::Color(random.get_int(0,256), + random.get_int(0,256), + random.get_int(0,256)); + } + while(res.red()==255 && res.green()==255 && res.blue()==255); + return res; } }; -//Vertex source code -const char vertex_source_mono[] = - { - "#version 120 \n" - "attribute highp vec4 vertex;\n" - "attribute highp vec3 normal;\n" - - "uniform highp mat4 mvp_matrix;\n" - "uniform highp mat4 mv_matrix; \n" - - "varying highp vec4 fP; \n" - "varying highp vec3 fN; \n" - "void main(void)\n" - "{\n" - " fP = mv_matrix * vertex; \n" - " fN = mat3(mv_matrix)* normal; \n" - " gl_Position = mvp_matrix * vertex;\n" - "}" - }; - -const char vertex_source_multi[] = - { - "#version 120 \n" - "attribute highp vec4 vertex;\n" - "attribute highp vec3 normal;\n" - "attribute highp vec3 color;\n" - - "uniform highp mat4 mvp_matrix;\n" - "uniform highp mat4 mv_matrix; \n" - - "varying highp vec4 fP; \n" - "varying highp vec3 fN; \n" - "varying highp vec4 fColor; \n" - "void main(void)\n" - "{\n" - " fP = mv_matrix * vertex; \n" - " fN = mat3(mv_matrix)* normal; \n" - " fColor = vec4(color, 1.0); \n" - " gl_Position = mvp_matrix * vertex;\n" - "}" - }; - -//Vertex source code -const char fragment_source_mono[] = - { - "#version 120 \n" - "varying highp vec4 fP; \n" - "varying highp vec3 fN; \n" - "uniform highp vec4 color; \n" - "uniform vec4 light_pos; \n" - "uniform vec4 light_diff; \n" - "uniform vec4 light_spec; \n" - "uniform vec4 light_amb; \n" - "uniform float spec_power ; \n" - - "void main(void) { \n" - - " vec3 L = light_pos.xyz - fP.xyz; \n" - " vec3 V = -fP.xyz; \n" - - " vec3 N = normalize(fN); \n" - " L = normalize(L); \n" - " V = normalize(V); \n" - - " vec3 R = reflect(-L, N); \n" - " vec4 diffuse = max(dot(N,L), 0.0) * light_diff * color; \n" - " vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" - - "gl_FragColor = light_amb*color + diffuse ; \n" - "} \n" - "\n" - }; - -const char fragment_source_multi[] = - { - "#version 120 \n" - "varying highp vec4 fP; \n" - "varying highp vec3 fN; \n" - "varying highp vec4 fColor; \n" - "uniform vec4 light_pos; \n" - "uniform vec4 light_diff; \n" - "uniform vec4 light_spec; \n" - "uniform vec4 light_amb; \n" - "uniform float spec_power ; \n" - - "void main(void) { \n" - - " vec3 L = light_pos.xyz - fP.xyz; \n" - " vec3 V = -fP.xyz; \n" - - " vec3 N = normalize(fN); \n" - " L = normalize(L); \n" - " V = normalize(V); \n" - - " vec3 R = reflect(-L, N); \n" - " vec4 diffuse = max(dot(N,L), 0.0) * light_diff * fColor; \n" - " vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" - - "gl_FragColor = light_amb*fColor + diffuse ; \n" - "} \n" - "\n" - }; - -//Vertex source code -const char vertex_source_p_l[] = - { - "#version 120 \n" - "attribute highp vec4 vertex;\n" - "uniform highp mat4 mvp_matrix;\n" - "void main(void)\n" - "{\n" - " gl_Position = mvp_matrix * vertex;\n" - "}" - }; -//Vertex source code -const char fragment_source_p_l[] = - { - "#version 120 \n" - "uniform highp vec4 color; \n" - "void main(void) { \n" - "gl_FragColor = color; \n" - "} \n" - "\n" - }; - template struct Geom_utils; @@ -206,14 +66,6 @@ struct Geom_utils Local_point get_point(const LCC& lcc, typename LCC::Dart_const_handle dh) { return converter(lcc.point(dh)); } - Local_vector get_facet_normal(const LCC& lcc, - typename LCC::Dart_const_handle dh) - { - Local_vector n = converter(CGAL::compute_normal_of_cell_2(lcc,dh)); - n = n/(CGAL::sqrt(n*n)); - return n; - } - Local_vector get_vertex_normal(const LCC& lcc, typename LCC::Dart_const_handle dh) { @@ -239,346 +91,38 @@ struct Geom_utils Local_point get_point(const LCC& lcc, typename LCC::Dart_const_handle dh) { return get_point(lcc, lcc.vertex_attribute(dh)); } - Local_vector get_facet_normal(const LCC&, typename LCC::Dart_const_handle) - { - Local_vector n(0,1,0); - return n; - } - Local_vector get_vertex_normal(const LCC&, typename LCC::Dart_const_handle) { - Local_vector n(0,1,0); + Local_vector n(0,-1,0); return n; } protected: CGAL::Cartesian_converter converter; }; -template -CGAL::Bbox_3 bbox(const LCC& lcc) -{ - CGAL::Bbox_3 bb; - Geom_utils geomutils; - - typename LCC::Vertex_attribute_range::const_iterator - it=lcc.vertex_attributes().begin(), itend=lcc.vertex_attributes().end(); - if ( it!=itend ) - { - bb = geomutils.get_point(lcc, it).bbox(); - for( ++it; it!=itend; ++it) - { - bb = bb + geomutils.get_point(lcc, it).bbox(); - } - } - - return bb; -} - +// Viewer class for LCC template -class SimpleLCCViewerQt : public QGLViewer, public QOpenGLFunctions_2_1 +class SimpleLCCViewerQt : public Basic_viewer { + typedef Basic_viewer Base; typedef typename LCC::Dart_const_handle Dart_const_handle; - - struct Vertex_info - { - Dart_const_handle dh; - Local_vector v; - }; - - struct Face_info - { - bool exist_edge[3]; - bool is_external; - bool is_process; - }; - - typedef CGAL::Triangulation_2_projection_traits_3 P_traits; - typedef CGAL::Triangulation_vertex_base_with_info_2 Vb; - - typedef CGAL::Triangulation_face_base_with_info_2 Fb1; - - typedef CGAL::Constrained_triangulation_face_base_2 Fb; - typedef CGAL::Triangulation_data_structure_2 TDS; - // typedef CGAL::No_intersection_tag Itag; - typedef CGAL::Exact_predicates_tag Itag; - typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; - + public: - // Constructor/Destructor - SimpleLCCViewerQt(const LCC& alcc) : - QGLViewer(CGAL::Qt::createOpenGLContext()), + /// Construct the viewer. + /// @param alcc the lcc to view + /// @param title the title of the window + /// @param anofaces if true, do not draw faces (faces are not computed; this can be + /// usefull for very big LCC where this time could be long) + SimpleLCCViewerQt(const LCC& alcc, const char* title="", bool anofaces=false) : + Base(title), lcc(alcc), - wireframe(false), - flatShading(true), - edges(true), - vertices(true), - mono(false), - inverse_normal(false), - size_points(7.), - size_edges(3.1), - ambient(0.6f, 0.5f, 0.5f, 0.5f), - are_buffers_initialized(false) + m_nofaces(anofaces) { - setWindowTitle("3D lcc viewer"); - resize(500, 450); - - QGLFormat newFormat = this->format(); - newFormat.setSampleBuffers(true); - newFormat.setSamples(16); - this->setFormat(newFormat); -} - - ~SimpleLCCViewerQt() - { - for (int i=0; icompileSourceCode(vertex_source_mono)) - { - std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(vertex_source_multi)) - { - std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_mono)) - { - std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(fragment_source_multi)) - { - std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(vertex_source_p_l)) - { - std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_p_l)) - { - std::cerr<<"Compiling fragmentsource FAILED"<(pos_facets.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program.attributeLocation("vertex"); - rendering_program.bind(); - rendering_program.enableAttributeArray(vertexLocation[vaon]); - rendering_program.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; - - //normals of the facets - assert(bufn(flat_normals.size()*sizeof(float))); - normalsLocation = rendering_program.attributeLocation("normal"); - rendering_program.bind(); - rendering_program.enableAttributeArray(normalsLocation); - rendering_program.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; - - if (!mono) - { - //colors of the facets - assert(bufn(colors.size()*sizeof(float))); - colorsLocation = rendering_program.attributeLocation("color"); - rendering_program.bind(); - rendering_program.enableAttributeArray(colorsLocation); - rendering_program.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; - } - - vao[vaon].release(); - ++vaon; - - assert(vaon(pos_facets.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program.attributeLocation("vertex"); - rendering_program.bind(); - rendering_program.enableAttributeArray(vertexLocation[vaon]); - rendering_program.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; - - //normals of the facets - assert(bufn(smooth_normals.size()*sizeof(float))); - normalsLocation = rendering_program.attributeLocation("normal"); - rendering_program.bind(); - rendering_program.enableAttributeArray(normalsLocation); - rendering_program.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; - - if (!mono) - { - //colors of the facets - assert(bufn(colors.size()*sizeof(float))); - colorsLocation = rendering_program.attributeLocation("color"); - rendering_program.bind(); - rendering_program.enableAttributeArray(colorsLocation); - rendering_program.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); - buffers[bufn].release(); - - rendering_program.release(); - ++bufn; - } - - vao[vaon].release(); - ++vaon; - - //The lines - assert(vaon(pos_lines.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program_p_l.attributeLocation("vertex"); - rendering_program_p_l.bind(); - rendering_program_p_l.enableAttributeArray(vertexLocation[vaon]); - rendering_program_p_l.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program_p_l.release(); - - buffers[bufn].release(); - ++bufn; - - vao[vaon].release(); - ++vaon; - - //The points - assert(vaon(pos_points.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program_p_l.attributeLocation("vertex"); - rendering_program_p_l.bind(); - rendering_program_p_l.enableAttributeArray(vertexLocation[vaon]); - rendering_program_p_l.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program_p_l.release(); - - buffers[bufn].release(); - ++bufn; - - vao[vaon].release(); - ++vaon; - - are_buffers_initialized = true; - } - + void compute_face(Dart_const_handle dh) { // We fill only closed faces. @@ -592,252 +136,53 @@ protected: } while(cur!=dh); - double r=0.; - double g=0.; - double b=0.; - CGAL::Color c=ColorFunctor::run(lcc, dh); - r=(double)c.red()/(double)255; - g=(double)c.green()/(double)255; - b=(double)c.blue()/(double)255; - - //compute flat normals - Local_vector normal = geomutils.get_facet_normal(lcc, dh); - normal = normal/(CGAL::sqrt(normal*normal)); - if (inverse_normal) normal=normal*-1; - - if (lcc.next(lcc.next(lcc.next(dh)))!=dh) + + face_begin(c); + + cur=dh; + do { - try - { - P_traits cdt_traits(normal); - CDT cdt(cdt_traits); - - // Iterates on the vector of facet handles - typename CDT::Vertex_handle previous = NULL, first = NULL; - cur=dh; - do - { - typename CDT::Vertex_handle vh = cdt.insert(geomutils.get_point(lcc, cur)); - if(first==NULL) - { first=vh; } - vh->info().v = geomutils.get_vertex_normal(lcc, cur); - if (inverse_normal) vh->info().v=vh->info().v*-1; - - if(previous!=NULL && previous!=vh) - { cdt.insert_constraint(previous, vh); } - previous=vh; - cur=lcc.next(cur); - } - while(cur!=dh); - - if (previous!=NULL) - cdt.insert_constraint(previous, first); - - // sets mark is_external - for(typename CDT::All_faces_iterator fit = cdt.all_faces_begin(), - fitend = cdt.all_faces_end(); fit!=fitend; ++fit) - { - fit->info().is_external = true; - fit->info().is_process = false; - } - //check if the facet is external or internal - std::queue face_queue; - typename CDT::Face_handle face_internal = NULL; - face_queue.push(cdt.infinite_vertex()->face()); - while(! face_queue.empty() ) - { - typename CDT::Face_handle fh = face_queue.front(); - face_queue.pop(); - if(!fh->info().is_process) - { - fh->info().is_process = true; - for(int i = 0; i <3; ++i) - { - if(!cdt.is_constrained(std::make_pair(fh, i))) - { - face_queue.push(fh->neighbor(i)); - } - else if (face_internal==NULL) - { - face_internal = fh->neighbor(i); - } - } - } - } - - if ( face_internal!=NULL ) - face_queue.push(face_internal); - - while(! face_queue.empty() ) - { - typename CDT::Face_handle fh = face_queue.front(); - face_queue.pop(); - if(!fh->info().is_process) - { - fh->info().is_process = true; - fh->info().is_external = false; - for(int i = 0; i <3; ++i) - { - if(!cdt.is_constrained(std::make_pair(fh, i))) - { - face_queue.push(fh->neighbor(i)); - } - } - } - } - - //iterates on the internal faces to add the vertices to the positions - //and the normals to the appropriate vectors - for(typename CDT::Finite_faces_iterator ffit = cdt.finite_faces_begin(), - ffitend = cdt.finite_faces_end(); ffit != ffitend; ++ffit) - { - if(!ffit->info().is_external) - { - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); - - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); - - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); - - smooth_normals.push_back(ffit->vertex(0)->info().v.x()); - smooth_normals.push_back(ffit->vertex(0)->info().v.y()); - smooth_normals.push_back(ffit->vertex(0)->info().v.z()); - - smooth_normals.push_back(ffit->vertex(1)->info().v.x()); - smooth_normals.push_back(ffit->vertex(1)->info().v.y()); - smooth_normals.push_back(ffit->vertex(1)->info().v.z()); - - smooth_normals.push_back(ffit->vertex(2)->info().v.x()); - smooth_normals.push_back(ffit->vertex(2)->info().v.y()); - smooth_normals.push_back(ffit->vertex(2)->info().v.z()); - - pos_facets.push_back(ffit->vertex(0)->point().x()); - pos_facets.push_back(ffit->vertex(0)->point().y()); - pos_facets.push_back(ffit->vertex(0)->point().z()); - - pos_facets.push_back(ffit->vertex(1)->point().x()); - pos_facets.push_back(ffit->vertex(1)->point().y()); - pos_facets.push_back(ffit->vertex(1)->point().z()); - - pos_facets.push_back(ffit->vertex(2)->point().x()); - pos_facets.push_back(ffit->vertex(2)->point().y()); - pos_facets.push_back(ffit->vertex(2)->point().z()); - - colors.push_back(r);colors.push_back(g);colors.push_back(b); - colors.push_back(r);colors.push_back(g);colors.push_back(b); - colors.push_back(r);colors.push_back(g);colors.push_back(b); - } - } - } - catch(...) - { // Triangulation crash: the face is not filled - } + add_point_in_face(geomutils.get_point(lcc, cur), + geomutils.get_vertex_normal(lcc, cur)); + cur=lcc.next(cur); } - else - { - colors.push_back(r);colors.push_back(g);colors.push_back(b); - colors.push_back(r);colors.push_back(g);colors.push_back(b); - colors.push_back(r);colors.push_back(g);colors.push_back(b); - - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); + while(cur!=dh); - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); - - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); - - //compute Smooth normals - cur=dh; - do - { - Local_vector normal = geomutils.get_vertex_normal(lcc, cur); - normal = normal/(CGAL::sqrt(normal*normal)); - if (inverse_normal) normal=normal*-1; - - smooth_normals.push_back(normal.x()); - smooth_normals.push_back(normal.y()); - smooth_normals.push_back(normal.z()); - - Local_point p = geomutils.get_point(lcc, cur); - pos_facets.push_back(p.x()); - pos_facets.push_back(p.y()); - pos_facets.push_back(p.z()); - cur=lcc.next(cur); - } - while(cur!=dh); - } + face_end(); } void compute_edge(Dart_const_handle dh) { - Local_point p = geomutils.get_point(lcc, dh); + Local_point p1 = geomutils.get_point(lcc, dh); Dart_const_handle d2 = lcc.other_extremity(dh); if ( d2!=NULL ) { Local_point p2 = geomutils.get_point(lcc, d2); - pos_lines.push_back(p.x()); - pos_lines.push_back(p.y()); - pos_lines.push_back(p.z()); - - pos_lines.push_back(p2.x()); - pos_lines.push_back(p2.y()); - pos_lines.push_back(p2.z()); + add_segment(p1, p2); } } void compute_vertex(Dart_const_handle dh, bool& empty) { - Local_point p = geomutils.get_point(lcc, dh); - pos_points.push_back(p.x()); - pos_points.push_back(p.y()); - pos_points.push_back(p.z()); - - if ( empty ) - { - bb = p.bbox(); - empty = false; - } - else - bb = bb + p.bbox(); + Local_point p = geomutils.get_point(lcc, dh); + add_point(p); } void compute_elements() { - pos_facets.clear(); - flat_normals.clear(); - smooth_normals.clear(); - pos_lines.clear(); - pos_points.clear(); - colors.clear(); + clear(); - if ( lcc.is_empty() ) - { - bb = Local_point(CGAL::ORIGIN).bbox(); - bb = bb + Local_point(1,1,1).bbox(); // To avoid a warning from Qglviewer - return; - } - unsigned int markfaces = lcc.get_new_mark(); unsigned int markedges = lcc.get_new_mark(); unsigned int markvertices = lcc.get_new_mark(); bool empty = true; + for (typename LCC::Dart_range::const_iterator it=lcc.darts().begin(), - itend=lcc.darts().end(); it!=itend; ++it ) + itend=lcc.darts().end(); it!=itend; ++it ) { - if ( !lcc.is_marked(it, markfaces) ) + if ( !m_nofaces && !lcc.is_marked(it, markfaces) ) { compute_face(it); CGAL::mark_cell(lcc, it, markfaces); @@ -861,432 +206,30 @@ protected: lcc.free_mark(markvertices); } - void attrib_buffers(QGLViewer* viewer) - { - QMatrix4x4 mvpMatrix; - QMatrix4x4 mvMatrix; - double mat[16]; - viewer->camera()->getModelViewProjectionMatrix(mat); - for(int i=0; i < 16; i++) - { - mvpMatrix.data()[i] = (float)mat[i]; - } - viewer->camera()->getModelViewMatrix(mat); - for(int i=0; i < 16; i++) - { - mvMatrix.data()[i] = (float)mat[i]; - } - // define material - QVector4D diffuse( 0.9f, - 0.9f, - 0.9f, - 0.9f ); - - QVector4D specular( 0.0f, - 0.0f, - 0.0f, - 1.0f ); - - QVector4D position((bb.xmax()-bb.xmin())/2, (bb.ymax()-bb.ymin())/2,bb.zmax(), 0.0 ); - GLfloat shininess = 1.0f; - - rendering_program.bind(); - mvpLocation[0] = rendering_program.uniformLocation("mvp_matrix"); - mvLocation = rendering_program.uniformLocation("mv_matrix"); - lightLocation[0] = rendering_program.uniformLocation("light_pos"); - lightLocation[1] = rendering_program.uniformLocation("light_diff"); - lightLocation[2] = rendering_program.uniformLocation("light_spec"); - lightLocation[3] = rendering_program.uniformLocation("light_amb"); - lightLocation[4] = rendering_program.uniformLocation("spec_power"); - - rendering_program.setUniformValue(lightLocation[0], position); - rendering_program.setUniformValue(lightLocation[1], diffuse); - rendering_program.setUniformValue(lightLocation[2], specular); - rendering_program.setUniformValue(lightLocation[3], ambient); - rendering_program.setUniformValue(lightLocation[4], shininess); - rendering_program.setUniformValue(mvpLocation[0], mvpMatrix); - rendering_program.setUniformValue(mvLocation, mvMatrix); - - if (mono) - colorLocation2 = rendering_program.uniformLocation("color"); - - rendering_program.release(); - - rendering_program_p_l.bind(); - mvpLocation[1] = rendering_program_p_l.uniformLocation("mvp_matrix"); - colorLocation = rendering_program_p_l.uniformLocation("color"); - rendering_program.setUniformValue(mvpLocation[1], mvpMatrix); - rendering_program_p_l.release(); - } - - virtual void draw() - { - glEnable(GL_DEPTH_TEST); - if(!are_buffers_initialized) - initialize_buffers(); - - QColor color; - if ( !wireframe ) - { - if(flatShading) - { - vao[0].bind(); - attrib_buffers(this); - rendering_program.bind(); - if (mono) - { - CGAL::Color c=ColorFunctor::run(lcc, NULL); - color.setRgbF((double)c.red()/(double)255, - (double)c.green()/(double)255, - (double)c.blue()/(double)255); - rendering_program.setUniformValue(colorLocation2,color); - } - glDrawArrays(GL_TRIANGLES, 0, static_cast(pos_facets.size()/3)); - rendering_program.release(); - vao[0].release(); - } - else - { - vao[1].bind(); - attrib_buffers(this); - rendering_program.bind(); - if (mono) - { - CGAL::Color c=ColorFunctor::run(lcc, NULL); - color.setRgbF((double)c.red()/(double)255, - (double)c.green()/(double)255, - (double)c.blue()/(double)255); - rendering_program.setUniformValue(colorLocation2,color); - } - glDrawArrays(GL_TRIANGLES, 0, static_cast(pos_facets.size()/3)); - rendering_program.release(); - vao[1].release(); - } - } - if(edges) - { - vao[2].bind(); - attrib_buffers(this); - color.setRgbF(0.2f, 0.2f, 0.7f); - rendering_program_p_l.bind(); - rendering_program_p_l.setAttributeValue(colorLocation,color); - ::glLineWidth(size_edges); - glDrawArrays(GL_LINES, 0, static_cast(pos_lines.size()/3)); - rendering_program_p_l.release(); - vao[2].release(); - } - if(vertices) - { - ::glPointSize(size_points); - vao[3].bind(); - attrib_buffers(this); - color.setRgbF(.2f,.2f,.6f); - rendering_program_p_l.bind(); - rendering_program_p_l.setAttributeValue(colorLocation,color); - glDrawArrays(GL_POINTS, 0, static_cast(pos_points.size()/3)); - rendering_program_p_l.release(); - vao[3].release(); - } - } - - virtual void init() - { - // Restore previous viewer state. - restoreStateFromFile(); - - // Define 'Control+Q' as the new exit shortcut (default was 'Escape') - setShortcut(EXIT_VIEWER, Qt::CTRL+Qt::Key_Q); - - // Add custom key description (see keyPressEvent). - setKeyDescription(Qt::Key_W, "Toggles wire frame display"); - setKeyDescription(Qt::Key_F, "Toggles flat shading display"); - setKeyDescription(Qt::Key_E, "Toggles edges display"); - setKeyDescription(Qt::Key_V, "Toggles vertices display"); - setKeyDescription(Qt::Key_M, "Toggles mono color for all faces"); - setKeyDescription(Qt::Key_N, "Inverse direction of normals"); - setKeyDescription(Qt::Key_Plus, "Increase size of edges"); - setKeyDescription(Qt::Key_Minus, "Decrease size of edges"); - setKeyDescription(Qt::Key_Plus+Qt::ShiftModifier, "Increase size of vertices"); - setKeyDescription(Qt::Key_Minus+Qt::ShiftModifier, "Decrease size of vertices"); - setKeyDescription(Qt::Key_PageDown, "Increase light (all colors, use shift/alt/ctrl for one rgb component)"); - setKeyDescription(Qt::Key_PageUp, "Decrease light (all colors, use shift/alt/ctrl for one rgb component)"); - - // Light default parameters - ::glLineWidth(size_edges); - ::glPointSize(size_points); - ::glEnable(GL_POLYGON_OFFSET_FILL); - ::glPolygonOffset(1.f,1.f); - ::glClearColor(1.0f,1.0f,1.0f,0.0f); - ::glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); - - ::glEnable(GL_LIGHTING); - - ::glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - - ::glShadeModel(GL_FLAT); - ::glDisable(GL_BLEND); - ::glEnable(GL_LINE_SMOOTH); - ::glDisable(GL_POLYGON_SMOOTH_HINT); - ::glBlendFunc(GL_ONE, GL_ZERO); - ::glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST); - - initializeOpenGLFunctions(); - compile_shaders(); - compute_elements(); - - this->camera()->setSceneBoundingBox(qglviewer::Vec(bb.xmin(), - bb.ymin(), - bb.zmin()), - qglviewer::Vec(bb.xmax(), - bb.ymax(), - bb.zmax())); - - this->showEntireScene(); - } - - void keyPressEvent(QKeyEvent *e) + virtual void keyPressEvent(QKeyEvent *e) { const Qt::KeyboardModifiers modifiers = e->modifiers(); - - if ((e->key()==Qt::Key_W) && (modifiers==Qt::NoButton)) - { - wireframe = !wireframe; - if (wireframe) - { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - displayMessage("Wireframe."); - } - else - { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - displayMessage("Filled faces."); - } - updateGL(); - } - else if ((e->key()==Qt::Key_F) && (modifiers==Qt::NoButton)) - { - flatShading = !flatShading; - if (flatShading) - displayMessage("Flat shading."); - else - displayMessage("Gouraud shading."); - updateGL(); - } - else if ((e->key()==Qt::Key_E) && (modifiers==Qt::NoButton)) - { - edges = !edges; - displayMessage(QString("Draw edges=%1.").arg(edges?"true":"false")); - updateGL(); - } - else if ((e->key()==Qt::Key_V) && (modifiers==Qt::NoButton)) - { - vertices = !vertices; - displayMessage(QString("Draw vertices=%1.").arg(vertices?"true":"false")); - updateGL(); - } - else if ((e->key()==Qt::Key_M) && (modifiers==Qt::NoButton)) - { - mono = !mono; - initialize_buffers(); - compile_shaders(); - displayMessage(QString("Mono color=%1.").arg(mono?"true":"false")); - updateGL(); - } - else if ((e->key()==Qt::Key_N) && (modifiers==Qt::NoButton)) - { - inverse_normal = !inverse_normal; - compute_elements(); - initialize_buffers(); - compile_shaders(); - displayMessage(QString("Inverse normal=%1.").arg(inverse_normal?"true":"false")); - updateGL(); - } - else if ((e->key()==Qt::Key_Plus) && (modifiers==Qt::KeypadModifier)) - { - size_edges+=.5; - displayMessage(QString("Size of edges=%1.").arg(size_edges)); - updateGL(); - } - else if ((e->key()==Qt::Key_Minus) && (modifiers==Qt::KeypadModifier)) - { - if (size_edges>.5) size_edges-=.5; - displayMessage(QString("Size of edges=%1.").arg(size_edges)); - updateGL(); - } - else if ((e->key()==Qt::Key_Plus) && (modifiers==(Qt::ShiftModifier|Qt::KeypadModifier))) - { - size_points+=.5; - displayMessage(QString("Size of points=%1.").arg(size_points)); - updateGL(); - } - else if ((e->key()==Qt::Key_Minus) && (modifiers==(Qt::ShiftModifier|Qt::KeypadModifier))) - { - if (size_points>.5) size_points-=.5; - displayMessage(QString("Size of points=%1.").arg(size_points)); - updateGL(); - } - else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::NoButton)) - { - ambient.setX(ambient.x()+.1); - if (ambient.x()>1.) ambient.setX(1.); - ambient.setY(ambient.x()+.1); - if (ambient.y()>1.) ambient.setY(1.); - ambient.setZ(ambient.x()+.1); - if (ambient.z()>1.) ambient.setZ(1.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::NoButton)) - { - ambient.setX(ambient.x()-.1); - if (ambient.x()<0.) ambient.setX(0.); - ambient.setY(ambient.y()-.1); - if (ambient.y()<0.) ambient.setY(0.); - ambient.setZ(ambient.z()-.1); - if (ambient.z()<0.) ambient.setZ(0.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::ShiftModifier)) - { - ambient.setX(ambient.x()+.1); - if (ambient.x()>1.) ambient.setX(1.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::AltModifier)) - { - ambient.setY(ambient.y()+.1); - if (ambient.y()>1.) ambient.setY(1.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::ControlModifier)) - { - ambient.setZ(ambient.z()+.1); - if (ambient.z()>1.) ambient.setZ(1.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::ShiftModifier)) - { - ambient.setX(ambient.x()-.1); - if (ambient.x()<0.) ambient.setX(0.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::AltModifier)) - { - ambient.setY(ambient.y()-.1); - if (ambient.y()<0.) ambient.setY(0.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::ControlModifier)) - { - ambient.setZ(ambient.z()-.1); - if (ambient.z()<0.) ambient.setZ(0.); - displayMessage(QString("Light color=(%1 %2 %3)."). - arg(ambient.x()).arg(ambient.y()).arg(ambient.z())); - updateGL(); - } - else - QGLViewer::keyPressEvent(e); + Base::keyPressEvent(e); } - - virtual QString helpString() const - { - QString text("

L C C V i e w e r

"); - text += "Use the mouse to move the camera around the object. "; - text += "You can respectively revolve around, zoom and translate with " - "the three mouse buttons. "; - text += "Left and middle buttons pressed together rotate around the " - "camera view direction axis

"; - text += "Pressing Alt and one of the function keys " - "(F1..F12) defines a camera keyFrame. "; - text += "Simply press the function key again to restore it. " - "Several keyFrames define a "; - text += "camera path. Paths are saved when you quit the application " - "and restored at next start.

"; - text += "Press F to display the frame rate, A for the " - "world axis, "; - text += "Alt+Return for full screen mode and Control+S " - "to save a snapshot. "; - text += "See the Keyboard tab in this window for a complete " - "shortcut list.

"; - text += "Double clicks automates single click actions: A left button " - "double click aligns the closer axis with the camera (if close enough). "; - text += "A middle button double click fits the zoom of the camera and " - "the right button re-centers the scene.

"; - text += "A left button double click while holding right button pressed " - "defines the camera Revolve Around Point. "; - text += "See the Mouse tab and the documentation web pages for " - "details.

"; - text += "Press Escape to exit the viewer."; - return text; - } - -private: +protected: const LCC& lcc; - - bool wireframe; - bool flatShading; - bool edges; - bool vertices; - bool mono; - bool inverse_normal; - - double size_points; - double size_edges; - - QVector4D ambient; - - bool are_buffers_initialized; - - //Shaders elements - int vertexLocation[NB_VAO_BUFFERS]; - int normalsLocation; - int mvpLocation[2]; - int mvLocation; - int colorLocation; - int colorLocation2; - int lightLocation[5]; - - std::vector pos_points; - std::vector pos_lines; - std::vector pos_facets; - std::vector smooth_normals; - std::vector flat_normals; - std::vector colors; - - QGLBuffer buffers[NB_VBO_BUFFERS]; - QOpenGLVertexArrayObject vao[NB_VAO_BUFFERS]; - int colorsLocation; - - QOpenGLShaderProgram rendering_program; - QOpenGLShaderProgram rendering_program_p_l; - - CGAL::Bbox_3 bb; + bool m_nofaces; Geom_utils geomutils; }; + template -void display_lcc(const LCC& alcc) +void display_lcc(const LCC& alcc, + const char* title="", + bool nofill=false) { int argc=1; const char* argv[2]={"lccviewer","\0"}; QApplication app(argc,const_cast(argv)); - SimpleLCCViewerQt mainwindow(alcc); + SimpleLCCViewerQt mainwindow(alcc, title, nofill); mainwindow.show(); app.exec(); From 877e8783f56570d0d3d13747336b83219dc3324c Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 13:33:05 +0100 Subject: [PATCH 111/298] Add new file for generic viewer. --- .../Linear_cell_complex/basic_viewer.h | 1200 +++++++++++++++++ 1 file changed, 1200 insertions(+) create mode 100644 Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h diff --git a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h new file mode 100644 index 00000000000..21f88cfc1bd --- /dev/null +++ b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h @@ -0,0 +1,1200 @@ +// Copyright (c) 2011 CNRS and LIRIS' Establishments (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// +// Author(s) : Guillaume Damiand + +#ifndef CGAL_BASIC_VIEWER_H +#define CGAL_BASIC_VIEWER_H + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#define NB_VBO_BUFFERS 8 +#define NB_VAO_BUFFERS 4 + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Local_kernel; +typedef Local_kernel::Point_3 Local_point; +typedef Local_kernel::Vector_3 Local_vector; + +//Vertex source code +const char vertex_source_mono[] = + { + "#version 120 \n" + "attribute highp vec4 vertex;\n" + "attribute highp vec3 normal;\n" + + "uniform highp mat4 mvp_matrix;\n" + "uniform highp mat4 mv_matrix; \n" + + "varying highp vec4 fP; \n" + "varying highp vec3 fN; \n" + "void main(void)\n" + "{\n" + " fP = mv_matrix * vertex; \n" + " fN = mat3(mv_matrix)* normal; \n" + " gl_Position = mvp_matrix * vertex;\n" + "}" + }; + +const char vertex_source_multi[] = + { + "#version 120 \n" + "attribute highp vec4 vertex;\n" + "attribute highp vec3 normal;\n" + "attribute highp vec3 color;\n" + + "uniform highp mat4 mvp_matrix;\n" + "uniform highp mat4 mv_matrix; \n" + + "varying highp vec4 fP; \n" + "varying highp vec3 fN; \n" + "varying highp vec4 fColor; \n" + "void main(void)\n" + "{\n" + " fP = mv_matrix * vertex; \n" + " fN = mat3(mv_matrix)* normal; \n" + " fColor = vec4(color, 1.0); \n" + " gl_Position = mvp_matrix * vertex;\n" + "}" + }; + +//Vertex source code +const char fragment_source_mono[] = + { + "#version 120 \n" + "varying highp vec4 fP; \n" + "varying highp vec3 fN; \n" + "uniform highp vec4 color; \n" + "uniform vec4 light_pos; \n" + "uniform vec4 light_diff; \n" + "uniform vec4 light_spec; \n" + "uniform vec4 light_amb; \n" + "uniform float spec_power ; \n" + + "void main(void) { \n" + + " vec3 L = light_pos.xyz - fP.xyz; \n" + " vec3 V = -fP.xyz; \n" + + " vec3 N = normalize(fN); \n" + " L = normalize(L); \n" + " V = normalize(V); \n" + + " vec3 R = reflect(-L, N); \n" + " vec4 diffuse = max(dot(N,L), 0.0) * light_diff * color; \n" + " vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" + + "gl_FragColor = light_amb*color + diffuse ; \n" + "} \n" + "\n" + }; + +const char fragment_source_multi[] = + { + "#version 120 \n" + "varying highp vec4 fP; \n" + "varying highp vec3 fN; \n" + "varying highp vec4 fColor; \n" + "uniform vec4 light_pos; \n" + "uniform vec4 light_diff; \n" + "uniform vec4 light_spec; \n" + "uniform vec4 light_amb; \n" + "uniform float spec_power ; \n" + + "void main(void) { \n" + + " vec3 L = light_pos.xyz - fP.xyz; \n" + " vec3 V = -fP.xyz; \n" + + " vec3 N = normalize(fN); \n" + " L = normalize(L); \n" + " V = normalize(V); \n" + + " vec3 R = reflect(-L, N); \n" + " vec4 diffuse = max(dot(N,L), 0.0) * light_diff * fColor; \n" + " vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" + + "gl_FragColor = light_amb*fColor + diffuse ; \n" + "} \n" + "\n" + }; + +//Vertex source code +const char vertex_source_p_l[] = + { + "#version 120 \n" + "attribute highp vec4 vertex;\n" + "uniform highp mat4 mvp_matrix;\n" + "void main(void)\n" + "{\n" + " gl_Position = mvp_matrix * vertex;\n" + "}" + }; +//Vertex source code +const char fragment_source_p_l[] = + { + "#version 120 \n" + "uniform highp vec4 color; \n" + "void main(void) { \n" + "gl_FragColor = color; \n" + "} \n" + "\n" + }; + +namespace internal { + template + void newell_single_step_3(const Point& p, const Point& q, Vector& n) + { + // Compute normal of the face by using Newell's method: for each edge PQ + // Nx += (Py - Qy) * (Pz + Qz); + // Ny += (Pz - Qz) * (Px + Qx); + // Nz += (Px - Qx) * (Py + Qy); + n = Vector(n.x()+((p.y()-q.y())*(p.z()+q.z())), + n.y()+((p.z()-q.z())*(p.x()+q.x())), + n.z()+((p.x()-q.x())*(p.y()+q.y()))); + } +} // End namespace internal + +template +typename K::Vector_3 compute_normal_of_face(const std::vector& points) +{ + typename K::Vector_3 normal(CGAL::NULL_VECTOR); + unsigned int nb = 0; + for (std::size_t i=0; i0); + return (typename K::Construct_scaled_vector_3()(normal, 1.0/nb)); +} + +class Basic_viewer : public QGLViewer, public QOpenGLFunctions_2_1 +{ + struct Vertex_info + { + Local_vector v; + }; + + struct Face_info + { + bool exist_edge[3]; + bool is_external; + bool is_process; + }; + + typedef CGAL::Triangulation_2_projection_traits_3 P_traits; + typedef CGAL::Triangulation_vertex_base_with_info_2 Vb; + + typedef CGAL::Triangulation_face_base_with_info_2 Fb1; + + typedef CGAL::Constrained_triangulation_face_base_2 Fb; + typedef CGAL::Triangulation_data_structure_2 TDS; + // typedef CGAL::No_intersection_tag Itag; + typedef CGAL::Exact_predicates_tag Itag; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; + +public: + // Constructor/Destructor + Basic_viewer(const char* title="") : + QGLViewer(CGAL::Qt::createOpenGLContext()), + m_draw_vertices(true), + m_draw_edges(true), + m_draw_faces(true), + m_flatShading(true), + m_use_mono_color(false), + m_inverse_normal(false), + m_size_points(7.), + m_size_edges(3.1), + m_vertices_mono_color(51, 51, 178), + m_edges_mono_color(51, 51, 148), + m_faces_mono_color(180, 125, 200), + m_ambient_color(0.6f, 0.5f, 0.5f, 0.5f), + m_are_buffers_initialized(false), + m_face_started(false) + { + if (title[0]==0) + setWindowTitle("CGAL Basic Viewer"); + else + setWindowTitle(title); + + resize(500, 450); + + if ( is_empty() ) + { + bb=Local_point(CGAL::ORIGIN).bbox(); + bb=bb + Local_point(1,1,1).bbox(); // To avoid a warning from Qglviewer + } + } + + ~Basic_viewer() + { + for (int i=0; i(points_of_face); + + double r=(double)color_of_face.red()/(double)255; + double g=(double)color_of_face.green()/(double)255; + double b=(double)color_of_face.blue()/(double)255; + + if (points_of_face.size()==3) // Triangle: no need to triangulate + { + for (int i=0; i<3; ++i) + { + // The point + pos_faces.push_back(points_of_face[i].x()); + pos_faces.push_back(points_of_face[i].y()); + pos_faces.push_back(points_of_face[i].z()); + + // Its color + colors.push_back(r); colors.push_back(g); colors.push_back(b); + + // Its flat normal + flat_normals.push_back(normal.x()); + flat_normals.push_back(normal.y()); + flat_normals.push_back(normal.z()); + + // Its smoth normal (if given by the user) + if (vertex_normals_for_face.size()==3) + { // Here we have 3 vertex normals; we can use Gourod + smooth_normals.push_back(vertex_normals_for_face[i].x()); + smooth_normals.push_back(vertex_normals_for_face[i].y()); + smooth_normals.push_back(vertex_normals_for_face[i].z()); + } + else + { // Here user does not provide all vertex normals: we use face normal istead + // and thus we will not be able to use Gourod + smooth_normals.push_back(normal.x()); + smooth_normals.push_back(normal.y()); + smooth_normals.push_back(normal.z()); + } + } + } + else + { // More than 3 points: we triangulate + try + { + P_traits cdt_traits(normal); + CDT cdt(cdt_traits); + + bool with_vertex_normal=(vertex_normals_for_face.size()==points_of_face.size()); + + // (1) We insert all the edges as contraint in the CDT. + typename CDT::Vertex_handle previous=NULL, first=NULL; + for (int i=0; iinfo().v=vertex_normals_for_face[i]; } + else + { vh->info().v=normal; } + + if(previous!=NULL && previous!=vh) + { cdt.insert_constraint(previous, vh); } + previous=vh; + } + + if (previous!=NULL && previous!=first) + cdt.insert_constraint(previous, first); + + // (2) We mark all external triangles + // (2.1) We initialize is_external and is_process values + for(typename CDT::All_faces_iterator fit = cdt.all_faces_begin(), + fitend = cdt.all_faces_end(); fit!=fitend; ++fit) + { + fit->info().is_external = true; + fit->info().is_process = false; + } + // (2.2) We check if the facet is external or internal + std::queue face_queue; + typename CDT::Face_handle face_internal = NULL; + if (cdt.infinite_vertex()->face()!=NULL) + face_queue.push(cdt.infinite_vertex()->face()); + while(! face_queue.empty() ) + { + typename CDT::Face_handle fh = face_queue.front(); + face_queue.pop(); + if(!fh->info().is_process) + { + fh->info().is_process = true; + for(int i=0; i<3; ++i) + { + if(!cdt.is_constrained(std::make_pair(fh, i))) + { + if (fh->neighbor(i)!=NULL) + face_queue.push(fh->neighbor(i)); + } + else if (face_internal==NULL) + { + face_internal = fh->neighbor(i); + } + } + } + } + + if ( face_internal!=NULL ) + face_queue.push(face_internal); + + while(! face_queue.empty() ) + { + typename CDT::Face_handle fh = face_queue.front(); + face_queue.pop(); + if(!fh->info().is_process) + { + fh->info().is_process = true; + fh->info().is_external = false; + for(int i=0; i<3; ++i) + { + if(!cdt.is_constrained(std::make_pair(fh, i))) + { + if (fh->neighbor(i)!=NULL) + face_queue.push(fh->neighbor(i)); + } + } + } + } + + // (3) Now we iterates on the internal faces to add the vertices to the + // positions and the normals to the appropriate vectors + for(typename CDT::Finite_faces_iterator ffit=cdt.finite_faces_begin(), + ffitend = cdt.finite_faces_end(); ffit!=ffitend; ++ffit) + { + if(!ffit->info().is_external) + { + for(int i=0; i<3; ++i) + { + // The point + pos_faces.push_back(ffit->vertex(i)->point().x()); + pos_faces.push_back(ffit->vertex(i)->point().y()); + pos_faces.push_back(ffit->vertex(i)->point().z()); + + // Its color + colors.push_back(r);colors.push_back(g);colors.push_back(b); + + // Its flat normal + flat_normals.push_back(normal.x()); + flat_normals.push_back(normal.y()); + flat_normals.push_back(normal.z()); + + // Its smoth normal (if given by the user) + smooth_normals.push_back(ffit->vertex(i)->info().v.x()); + smooth_normals.push_back(ffit->vertex(i)->info().v.y()); + smooth_normals.push_back(ffit->vertex(i)->info().v.z()); + } + } + } + } + catch(...) + { // Triangulation crash: the face is not filled + std::cout<<"Catch: face not filled."<compileSourceCode(vertex_source_mono)) + { + std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(vertex_source_multi)) + { + std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_mono)) + { + std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(fragment_source_multi)) + { + std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(vertex_source_p_l)) + { + std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_p_l)) + { + std::cerr<<"Compiling fragmentsource FAILED"<(pos_faces.size()*sizeof(float))); + vertexLocation[vaon] = rendering_program.attributeLocation("vertex"); + rendering_program.bind(); + rendering_program.enableAttributeArray(vertexLocation[vaon]); + rendering_program.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); + rendering_program.release(); + + buffers[bufn].release(); + ++bufn; + + //normals of the facets + assert(bufn(flat_normals.size()*sizeof(float))); + normalsLocation = rendering_program.attributeLocation("normal"); + rendering_program.bind(); + rendering_program.enableAttributeArray(normalsLocation); + rendering_program.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); + rendering_program.release(); + + buffers[bufn].release(); + ++bufn; + + if (!m_use_mono_color) + { + //colors of the facets + assert(bufn(colors.size()*sizeof(float))); + colorsLocation = rendering_program.attributeLocation("color"); + rendering_program.bind(); + rendering_program.enableAttributeArray(colorsLocation); + rendering_program.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); + rendering_program.release(); + + buffers[bufn].release(); + ++bufn; + } + + vao[vaon].release(); + ++vaon; + + assert(vaon(pos_faces.size()*sizeof(float))); + vertexLocation[vaon] = rendering_program.attributeLocation("vertex"); + rendering_program.bind(); + rendering_program.enableAttributeArray(vertexLocation[vaon]); + rendering_program.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); + rendering_program.release(); + + buffers[bufn].release(); + ++bufn; + + //normals of the facets + assert(bufn(smooth_normals.size()*sizeof(float))); + normalsLocation = rendering_program.attributeLocation("normal"); + rendering_program.bind(); + rendering_program.enableAttributeArray(normalsLocation); + rendering_program.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); + rendering_program.release(); + + buffers[bufn].release(); + ++bufn; + + if (!m_use_mono_color) + { + //colors of the facets + assert(bufn(colors.size()*sizeof(float))); + colorsLocation = rendering_program.attributeLocation("color"); + rendering_program.bind(); + rendering_program.enableAttributeArray(colorsLocation); + rendering_program.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); + buffers[bufn].release(); + + rendering_program.release(); + ++bufn; + } + + vao[vaon].release(); + ++vaon; + + //The segments + assert(vaon(pos_segments.size()*sizeof(float))); + vertexLocation[vaon] = rendering_program_p_l.attributeLocation("vertex"); + rendering_program_p_l.bind(); + rendering_program_p_l.enableAttributeArray(vertexLocation[vaon]); + rendering_program_p_l.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); + rendering_program_p_l.release(); + + buffers[bufn].release(); + ++bufn; + + vao[vaon].release(); + ++vaon; + + //The points + assert(vaon(pos_points.size()*sizeof(float))); + vertexLocation[vaon] = rendering_program_p_l.attributeLocation("vertex"); + rendering_program_p_l.bind(); + rendering_program_p_l.enableAttributeArray(vertexLocation[vaon]); + rendering_program_p_l.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); + rendering_program_p_l.release(); + + buffers[bufn].release(); + ++bufn; + + vao[vaon].release(); + ++vaon; + + m_are_buffers_initialized = true; + } + + void attrib_buffers(QGLViewer* viewer) + { + QMatrix4x4 mvpMatrix; + QMatrix4x4 mvMatrix; + double mat[16]; + viewer->camera()->getModelViewProjectionMatrix(mat); + for(int i=0; i < 16; i++) + { + mvpMatrix.data()[i] = (float)mat[i]; + } + viewer->camera()->getModelViewMatrix(mat); + for(int i=0; i < 16; i++) + { + mvMatrix.data()[i] = (float)mat[i]; + } + // define material + QVector4D diffuse( 0.9f, + 0.9f, + 0.9f, + 0.9f ); + + QVector4D specular( 0.0f, + 0.0f, + 0.0f, + 1.0f ); + + QVector4D position((bb.xmax()-bb.xmin())/2, (bb.ymax()-bb.ymin())/2,bb.zmax(), 0.0 ); + GLfloat shininess = 1.0f; + + rendering_program.bind(); + mvpLocation[0] = rendering_program.uniformLocation("mvp_matrix"); + mvLocation = rendering_program.uniformLocation("mv_matrix"); + lightLocation[0] = rendering_program.uniformLocation("light_pos"); + lightLocation[1] = rendering_program.uniformLocation("light_diff"); + lightLocation[2] = rendering_program.uniformLocation("light_spec"); + lightLocation[3] = rendering_program.uniformLocation("light_amb"); + lightLocation[4] = rendering_program.uniformLocation("spec_power"); + + rendering_program.setUniformValue(lightLocation[0], position); + rendering_program.setUniformValue(lightLocation[1], diffuse); + rendering_program.setUniformValue(lightLocation[2], specular); + rendering_program.setUniformValue(lightLocation[3], m_ambient_color); + rendering_program.setUniformValue(lightLocation[4], shininess); + rendering_program.setUniformValue(mvpLocation[0], mvpMatrix); + rendering_program.setUniformValue(mvLocation, mvMatrix); + + if (m_use_mono_color) + colorLocation2 = rendering_program.uniformLocation("color"); + + rendering_program.release(); + + rendering_program_p_l.bind(); + mvpLocation[1] = rendering_program_p_l.uniformLocation("mvp_matrix"); + colorLocation = rendering_program_p_l.uniformLocation("color"); + rendering_program.setUniformValue(mvpLocation[1], mvpMatrix); + rendering_program_p_l.release(); + } + + virtual void draw() + { + glEnable(GL_DEPTH_TEST); + if(!m_are_buffers_initialized) + initialize_buffers(); + + QColor color; + + if(m_draw_vertices) + { + ::glPointSize(m_size_points); + vao[3].bind(); + attrib_buffers(this); + color.setRgbF((double)m_vertices_mono_color.red()/(double)255, + (double)m_vertices_mono_color.green()/(double)255, + (double)m_vertices_mono_color.blue()/(double)255); + rendering_program_p_l.bind(); + rendering_program_p_l.setAttributeValue(colorLocation,color); + glDrawArrays(GL_POINTS, 0, static_cast(pos_points.size()/3)); + rendering_program_p_l.release(); + vao[3].release(); + } + + if(m_draw_edges) + { + vao[2].bind(); + attrib_buffers(this); + color.setRgbF((double)m_edges_mono_color.red()/(double)255, + (double)m_edges_mono_color.green()/(double)255, + (double)m_edges_mono_color.blue()/(double)255); + rendering_program_p_l.bind(); + rendering_program_p_l.setAttributeValue(colorLocation,color); + ::glLineWidth(m_size_edges); + glDrawArrays(GL_LINES, 0, static_cast(pos_segments.size()/3)); + rendering_program_p_l.release(); + vao[2].release(); + } + + if (m_draw_faces) + { + if(m_flatShading) + { vao[0].bind(); } + else + { vao[1].bind(); } + + attrib_buffers(this); + rendering_program.bind(); + if (m_use_mono_color) + { + color.setRgbF((double)m_faces_mono_color.red()/(double)255, + (double)m_faces_mono_color.green()/(double)255, + (double)m_faces_mono_color.blue()/(double)255); + rendering_program.setUniformValue(colorLocation2,color); + } + glDrawArrays(GL_TRIANGLES, 0, static_cast(pos_faces.size()/3)); + rendering_program.release(); + + if(m_flatShading) + { vao[0].release(); } + else + { vao[1].release(); } + } + } + + virtual void init() + { + // Restore previous viewer state. + restoreStateFromFile(); + initializeOpenGLFunctions(); + + // Define 'Control+Q' as the new exit shortcut (default was 'Escape') + setShortcut(EXIT_VIEWER, Qt::CTRL+Qt::Key_Q); + + // Add custom key description (see keyPressEvent). + setKeyDescription(Qt::Key_E, "Toggles edges display"); + setKeyDescription(Qt::Key_F, "Toggles faces display"); + setKeyDescription(Qt::Key_G, "Switch between flat/Gouraud shading display"); + setKeyDescription(Qt::Key_M, "Toggles mono color for all faces"); + setKeyDescription(Qt::Key_N, "Inverse direction of normals"); + setKeyDescription(Qt::Key_V, "Toggles vertices display"); + setKeyDescription(Qt::Key_Plus, "Increase size of edges"); + setKeyDescription(Qt::Key_Minus, "Decrease size of edges"); + setKeyDescription(Qt::Key_Plus+Qt::ShiftModifier, "Increase size of vertices"); + setKeyDescription(Qt::Key_Minus+Qt::ShiftModifier, "Decrease size of vertices"); + setKeyDescription(Qt::Key_PageDown, "Increase light (all colors, use shift/alt/ctrl for one rgb component)"); + setKeyDescription(Qt::Key_PageUp, "Decrease light (all colors, use shift/alt/ctrl for one rgb component)"); + + // Light default parameters + ::glLineWidth(m_size_edges); + ::glPointSize(m_size_points); + ::glEnable(GL_POLYGON_OFFSET_FILL); + ::glPolygonOffset(1.f,1.f); + ::glClearColor(1.0f,1.0f,1.0f,0.0f); + ::glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); + ::glEnable(GL_LIGHTING); + ::glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); + ::glShadeModel(GL_FLAT); + ::glDisable(GL_BLEND); + ::glEnable(GL_LINE_SMOOTH); + ::glDisable(GL_POLYGON_SMOOTH_HINT); + ::glBlendFunc(GL_ONE, GL_ZERO); + ::glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST); + + compile_shaders(); + + this->camera()->setSceneBoundingBox(qglviewer::Vec(bb.xmin(), + bb.ymin(), + bb.zmin()), + qglviewer::Vec(bb.xmax(), + bb.ymax(), + bb.zmax())); + + this->showEntireScene(); + } + + void negate_all_normals() + { + for (std::size_t i=0; imodifiers(); + + if ((e->key()==Qt::Key_E) && (modifiers==Qt::NoButton)) + { + m_draw_edges=!m_draw_edges; + displayMessage(QString("Draw edges=%1.").arg(m_draw_edges?"true":"false")); + updateGL(); + } + else if ((e->key()==Qt::Key_F) && (modifiers==Qt::NoButton)) + { + m_draw_faces=!m_draw_faces; + displayMessage(QString("Draw faces=%1.").arg(m_draw_faces?"true":"false")); + updateGL(); + } + else if ((e->key()==Qt::Key_G) && (modifiers==Qt::NoButton)) + { + m_flatShading=!m_flatShading; + if (m_flatShading) + displayMessage("Flat shading."); + else + displayMessage("Gouraud shading."); + updateGL(); + } + else if ((e->key()==Qt::Key_M) && (modifiers==Qt::NoButton)) + { + m_use_mono_color=!m_use_mono_color; + initialize_buffers(); + compile_shaders(); + displayMessage(QString("Mono color=%1.").arg(m_use_mono_color?"true":"false")); + updateGL(); + } + else if ((e->key()==Qt::Key_N) && (modifiers==Qt::NoButton)) + { + m_inverse_normal=!m_inverse_normal; + negate_all_normals(); + initialize_buffers(); + compile_shaders(); + displayMessage(QString("Inverse normal=%1.").arg(m_inverse_normal?"true":"false")); + updateGL(); + } + else if ((e->key()==Qt::Key_V) && (modifiers==Qt::NoButton)) + { + m_draw_vertices=!m_draw_vertices; + displayMessage(QString("Draw vertices=%1.").arg(m_draw_vertices?"true":"false")); + updateGL(); + } + else if ((e->key()==Qt::Key_Plus) && (modifiers==Qt::KeypadModifier)) + { + m_size_edges+=.5; + displayMessage(QString("Size of edges=%1.").arg(m_size_edges)); + updateGL(); + } + else if ((e->key()==Qt::Key_Minus) && (modifiers==Qt::KeypadModifier)) + { + if (m_size_edges>.5) m_size_edges-=.5; + displayMessage(QString("Size of edges=%1.").arg(m_size_edges)); + updateGL(); + } + else if ((e->key()==Qt::Key_Plus) && (modifiers==(Qt::ShiftModifier|Qt::KeypadModifier))) + { + m_size_points+=.5; + displayMessage(QString("Size of points=%1.").arg(m_size_points)); + updateGL(); + } + else if ((e->key()==Qt::Key_Minus) && (modifiers==(Qt::ShiftModifier|Qt::KeypadModifier))) + { + if (m_size_points>.5) m_size_points-=.5; + displayMessage(QString("Size of points=%1.").arg(m_size_points)); + updateGL(); + } + else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::NoButton)) + { + m_ambient_color.setX(m_ambient_color.x()+.1); + if (m_ambient_color.x()>1.) m_ambient_color.setX(1.); + m_ambient_color.setY(m_ambient_color.x()+.1); + if (m_ambient_color.y()>1.) m_ambient_color.setY(1.); + m_ambient_color.setZ(m_ambient_color.x()+.1); + if (m_ambient_color.z()>1.) m_ambient_color.setZ(1.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::NoButton)) + { + m_ambient_color.setX(m_ambient_color.x()-.1); + if (m_ambient_color.x()<0.) m_ambient_color.setX(0.); + m_ambient_color.setY(m_ambient_color.y()-.1); + if (m_ambient_color.y()<0.) m_ambient_color.setY(0.); + m_ambient_color.setZ(m_ambient_color.z()-.1); + if (m_ambient_color.z()<0.) m_ambient_color.setZ(0.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::ShiftModifier)) + { + m_ambient_color.setX(m_ambient_color.x()+.1); + if (m_ambient_color.x()>1.) m_ambient_color.setX(1.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::AltModifier)) + { + m_ambient_color.setY(m_ambient_color.y()+.1); + if (m_ambient_color.y()>1.) m_ambient_color.setY(1.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageUp) && (modifiers==Qt::ControlModifier)) + { + m_ambient_color.setZ(m_ambient_color.z()+.1); + if (m_ambient_color.z()>1.) m_ambient_color.setZ(1.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::ShiftModifier)) + { + m_ambient_color.setX(m_ambient_color.x()-.1); + if (m_ambient_color.x()<0.) m_ambient_color.setX(0.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::AltModifier)) + { + m_ambient_color.setY(m_ambient_color.y()-.1); + if (m_ambient_color.y()<0.) m_ambient_color.setY(0.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else if ((e->key()==Qt::Key_PageDown) && (modifiers==Qt::ControlModifier)) + { + m_ambient_color.setZ(m_ambient_color.z()-.1); + if (m_ambient_color.z()<0.) m_ambient_color.setZ(0.); + displayMessage(QString("Light color=(%1 %2 %3)."). + arg(m_ambient_color.x()).arg(m_ambient_color.y()).arg(m_ambient_color.z())); + updateGL(); + } + else + QGLViewer::keyPressEvent(e); + } + + virtual QString helpString() const + { + QString text("

C G A L B a s i c V i e w e r

"); + text += "Use the mouse to move the camera around the object. "; + text += "You can respectively revolve around, zoom and translate with " + "the three mouse buttons. "; + text += "Left and middle buttons pressed together rotate around the " + "camera view direction axis

"; + text += "Pressing Alt and one of the function keys " + "(F1..F12) defines a camera keyFrame. "; + text += "Simply press the function key again to restore it. " + "Several keyFrames define a "; + text += "camera path. Paths are saved when you quit the application " + "and restored at next start.

"; + text += "Press F to display the frame rate, A for the " + "world axis, "; + text += "Alt+Return for full screen mode and Control+S " + "to save a snapshot. "; + text += "See the Keyboard tab in this window for a complete " + "shortcut list.

"; + text += "Double clicks automates single click actions: A left button " + "double click aligns the closer axis with the camera (if close enough). "; + text += "A middle button double click fits the zoom of the camera and " + "the right button re-centers the scene.

"; + text += "A left button double click while holding right button pressed " + "defines the camera Revolve Around Point. "; + text += "See the Mouse tab and the documentation web pages for " + "details.

"; + text += "Press Escape to exit the viewer."; + return text; + } + +private: + bool m_draw_vertices; + bool m_draw_edges; + bool m_draw_faces; + bool m_flatShading; + bool m_use_mono_color; + bool m_inverse_normal; + + double m_size_points; + double m_size_edges; + + CGAL::Color m_vertices_mono_color; + CGAL::Color m_edges_mono_color; + CGAL::Color m_faces_mono_color; + QVector4D m_ambient_color; + + bool m_are_buffers_initialized; + CGAL::Bbox_3 bb; + + //Shaders elements + int vertexLocation[NB_VAO_BUFFERS]; + int normalsLocation; + int mvpLocation[2]; + int mvLocation; + int colorLocation; + int colorLocation2; + int lightLocation[5]; + + std::vector pos_points; + std::vector pos_segments; + std::vector pos_faces; + std::vector smooth_normals; + std::vector flat_normals; + std::vector colors; + + QGLBuffer buffers[NB_VBO_BUFFERS]; + QOpenGLVertexArrayObject vao[NB_VAO_BUFFERS]; + int colorsLocation; + + QOpenGLShaderProgram rendering_program; + QOpenGLShaderProgram rendering_program_p_l; + + bool m_face_started; + std::vector points_of_face; + std::vector vertex_normals_for_face; + CGAL::Color color_of_face; +}; + +#endif // CGAL_BASIC_VIEWER_H From 8c44bceedd663f5a8e2ee207b235d97ae51ca68c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 13:51:23 +0100 Subject: [PATCH 112/298] Fix a typo --- Installation/cmake/modules/CGAL_setup_target_dependencies.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake b/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake index a763cbc7480..73a357b4d08 100644 --- a/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake +++ b/Installation/cmake/modules/CGAL_setup_target_dependencies.cmake @@ -10,7 +10,7 @@ function(CGAL_setup_target_dependencies target) elseif(${target} STREQUAL CGAL_Core) CGAL_setup_CGAL_Core_dependencies(${target} ${keyword}) elseif(${target} STREQUAL CGAL_ImageIO) - CGAL_setup_CGAL_Core_dependencies(${target} ${keyword}) + CGAL_setup_CGAL_ImageIO_dependencies(${target} ${keyword}) elseif(${target} STREQUAL CGAL_Qt5) CGAL_setup_CGAL_Qt5_dependencies(${target} ${keyword}) endif() From 03f84dc94b5e6c707fd56325b4354173f7f116ae Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 14:28:51 +0100 Subject: [PATCH 113/298] Handle the compiler flags That setup was previously in `Installation/CMakeLists.txt`. --- .../modules/CGAL_SetupCGALDependencies.cmake | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index e4c0a75f038..a1673d93304 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -98,10 +98,50 @@ function(CGAL_setup_CGAL_dependencies target) endif() use_CGAL_Boost_support(${target} ${keyword}) + foreach(dir ${CGAL_INCLUDE_DIRS}) target_include_directories(${target} ${keyword} $) endforeach() target_include_directories(${target} ${keyword} $) + + # Now setup compilation flags + if(MSVC) + target_compile_options(${target} ${keyword} + "-D_CRT_SECURE_NO_DEPRECATE;-D_SCL_SECURE_NO_DEPRECATE;-D_CRT_SECURE_NO_WARNINGS;-D_SCL_SECURE_NO_WARNINGS" + "/fp:strict" + "/fp:except-" + "/wd4503" # Suppress warnings C4503 about "decorated name length exceeded" + "/bigobj" # Use /bigobj by default + ) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel") + message( STATUS "Using Intel Compiler. Adding -fp-model strict" ) + if(WIN32) + target_compile_options(${target} ${keyword} "/fp:strict") + else() + target_compile_options(${target} ${keyword} "-fp-model strict") + endif() + elseif(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") + message( STATUS "Using SunPro compiler, using STLPort 4." ) + target_compile_options(${target} ${keyword} + "-features=extensions;-library=stlport4;-D_GNU_SOURCE") + target_link_libraries(${target} ${keyword} "-library=stlport4") + elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + if ( RUNNING_CGAL_AUTO_TEST ) + target_compile_options(${target} ${keyword} "-Wall") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3) + message( STATUS "Using gcc version 4 or later. Adding -frounding-math" ) + target_compile_options(${target} ${keyword} "-frounding-math") + endif() + if ( "${GCC_VERSION}" MATCHES "^4.2" ) + message( STATUS "Using gcc version 4.2. Adding -fno-strict-aliasing" ) + target_compile_options(${target} ${keyword} "-fno-strict-aliasing" ) + endif() + if ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "alpha" ) + message( STATUS "Using gcc on alpha. Adding -mieee -mfp-rounding-mode=d" ) + target_compile_options(${target} ${keyword} "-mieee -mfp-rounding-mode=d" ) + endif() + endif() endfunction() From 283f8138d80f605bf1aff663b8a305a0cd4a0ef4 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 14:41:03 +0100 Subject: [PATCH 114/298] CGAL_Core needs Boost.Thread --- .../cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake index e3df4e49141..4598ec1c078 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake @@ -51,6 +51,10 @@ endif() # added using :command:`target_link_libraries` with the ``INTERFACE`` # keyword, or ``PUBLIC`` otherwise. # + +#CGAL_Core needs Boost.Thread +find_package( Boost 1.48 REQUIRED thread system ) + function(CGAL_setup_CGAL_Core_dependencies target) if(ARGV1 STREQUAL INTERFACE) set(keyword INTERFACE) @@ -59,5 +63,5 @@ function(CGAL_setup_CGAL_Core_dependencies target) endif() use_CGAL_GMP_support(CGAL_Core ${keyword}) target_compile_definitions(${target} ${keyword} CGAL_USE_CORE=1) - target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ) + target_link_libraries( CGAL_Core ${keyword} CGAL::CGAL ${Boost_LIBRARIES}) endfunction() From d3cc5ee30d778eac3f45287db5a61fb5fe0b2d28 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 13 Nov 2017 15:11:59 +0100 Subject: [PATCH 115/298] Bump CGAL/version.h to 4.12-dev --- Installation/include/CGAL/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/include/CGAL/version.h b/Installation/include/CGAL/version.h index 0149e03cbbc..4fca07236a3 100644 --- a/Installation/include/CGAL/version.h +++ b/Installation/include/CGAL/version.h @@ -21,8 +21,8 @@ #ifndef CGAL_VERSION_H #define CGAL_VERSION_H -#define CGAL_VERSION 4.9-I-900 -#define CGAL_VERSION_NR 1040900900 +#define CGAL_VERSION 4.12-dev +#define CGAL_VERSION_NR 1041200000 #define CGAL_SVN_REVISION 99999 #include From d48bf461c7127c28486c01c830fe9c9145e8fae2 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 15:29:53 +0100 Subject: [PATCH 116/298] Use generic load_off function (in cgal/bgl/graph/) instead of my own copy. For that, add the degree function that takes a face descriptor as parameter. --- ..._Linear_cell_complex_for_combinatorial_map.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Linear_cell_complex/include/CGAL/boost/graph/graph_traits_Linear_cell_complex_for_combinatorial_map.h b/Linear_cell_complex/include/CGAL/boost/graph/graph_traits_Linear_cell_complex_for_combinatorial_map.h index 22196d4afa6..d7348f2e01b 100644 --- a/Linear_cell_complex/include/CGAL/boost/graph/graph_traits_Linear_cell_complex_for_combinatorial_map.h +++ b/Linear_cell_complex/include/CGAL/boost/graph/graph_traits_Linear_cell_complex_for_combinatorial_map.h @@ -32,7 +32,7 @@ #include #include -#include // TODO update path when small feature generic load off will be accepted +#include #include #include @@ -284,6 +284,21 @@ in_degree(typename boost::graph_traits::vertex_descriptor v, const CGAL_LCC_TYPE& lcc) { return degree(v, lcc); } +CGAL_LCC_TEMPLATE_ARGS +typename boost::graph_traits::degree_size_type +degree(typename boost::graph_traits::face_descriptor f, + const CGAL_LCC_TYPE& lcc) + +{ + typename boost::graph_traits::degree_size_type degree=0; + for (typename CGAL_LCC_TYPE::template Dart_of_cell_range<2>::const_iterator + it=lcc.template darts_of_cell<2>(f->dart()).begin(), + itend=lcc.template darts_of_cell<2>(f->dart()).end(); + it!=itend; ++it) + { ++degree; } + return degree; +} + CGAL_LCC_TEMPLATE_ARGS typename boost::graph_traits::vertex_descriptor source(typename boost::graph_traits::halfedge_descriptor h, From 4c2bb7868cd9256685e6ed1f2ba580a40bf872c3 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 15:30:11 +0100 Subject: [PATCH 117/298] Remove my copy of cgal/bgl/graph/io.h --- .../CGAL/boost/graph/cgal_bgl_graph_io.h | 222 ------------------ 1 file changed, 222 deletions(-) delete mode 100644 Linear_cell_complex/include/CGAL/boost/graph/cgal_bgl_graph_io.h diff --git a/Linear_cell_complex/include/CGAL/boost/graph/cgal_bgl_graph_io.h b/Linear_cell_complex/include/CGAL/boost/graph/cgal_bgl_graph_io.h deleted file mode 100644 index dd55137fab1..00000000000 --- a/Linear_cell_complex/include/CGAL/boost/graph/cgal_bgl_graph_io.h +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright (c) 2015 GeometryFactory (France). All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// -// Author(s) : Andreas Fabri - -#ifndef CGAL_BOOST_GRAPH_IO_H -#define CGAL_BOOST_GRAPH_IO_H - -#include // In first to avoid bug #12534 for boost 1.62 (?) -#include -#include -#include -#include -#include -#include -#include -#include - -namespace CGAL { - -template -typename boost::graph_traits::degree_size_type -degree(typename boost::graph_traits::face_descriptor f, - const FaceGraph& g) -{ - typename boost::graph_traits::degree_size_type res=0; - - typename boost::graph_traits::halfedge_descriptor - hdinit=halfedge(f, g), hd=hdinit; - - do - { - ++res; - hd=next(hd, g); - } - while(hd!=hdinit); - - return res; -} - -/*! - \ingroup PkgBGLIOFct - writes the graph `g` in the OFF format. - \sa Overloads of this function for specific models of the concept `FaceGraph`. - - */ -template -bool write_off(std::ostream& os, - const FaceGraph& g) -{ - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef typename boost::graph_traits::face_descriptor face_descriptor; - typedef typename boost::graph_traits::vertices_size_type vertices_size_type; - typedef typename boost::graph_traits::faces_size_type faces_size_type; - - typename boost::property_map::const_type vpm = get(CGAL::vertex_point,g); - vertices_size_type nv = static_cast(std::distance(vertices(g).first, vertices(g).second)); - faces_size_type nf = static_cast(std::distance(faces(g).first, faces(g).second)); - - os << "OFF\n" << nv << " " << nf << " 0\n"; - boost::container::flat_map reindex; - int n = 0; - BOOST_FOREACH(vertex_descriptor v, vertices(g)){ - os << get(vpm,v) << '\n'; - reindex[v]=n++; - } - - BOOST_FOREACH(face_descriptor f, faces(g)){ - os << degree(f,g); - BOOST_FOREACH(vertex_descriptor v, vertices_around_face(halfedge(f,g),g)){ - os << " " << reindex[v]; - } - os << '\n'; - } - return os.good(); -} - - -/*! - \ingroup PkgBGLIOFct - writes the graph `g` in the OFF format. - \sa Overloads of this function for specific models of the concept `FaceGraph`. - - */ -template -bool write_off(const char* fname, - const FaceGraph& g) -{ - std::ofstream out(fname); - if(out.good()){ - return write_off(out,g); - } - return false; -} - - - namespace internal { namespace read_off_tools { - - inline bool is_whitespace(const std::string& s) - { - for(unsigned int i=0; i < s.size(); i++){ - if(s[i] != ' ' && s[i] != '\t'){ - return false; - } - } - return true; - } - -inline std::string next_non_comment(std::istream& is) -{ - std::string line; - do { - std::getline(is, line); - }while(line[0] == '#' || is_whitespace(line)); - return line; -} - - } - } // namespace internal - - -/*! - \ingroup PkgBGLIOFct - reads the graph `g` from data in the OFF format. Ignores comment lines which start with a hash, and lines with whitespace. - \sa Overloads of this function for specific models of the concept `FaceGraph`. - \pre The data must represent a 2-manifold - \attention The graph `g` is not cleared, and the data from the stream are added. - - */ -template -bool read_off(std::istream& is, - FaceGraph& g) -{ - using namespace internal::read_off_tools; - - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef typename boost::graph_traits::vertices_size_type vertices_size_type; - typedef typename boost::graph_traits::faces_size_type faces_size_type; - - typedef typename boost::property_map::type Vpm; - typedef typename boost::property_traits::value_type Point_3; - Vpm vpm = get(CGAL::vertex_point,g); - vertices_size_type nv, nvf; - faces_size_type nf; - int ignore; - - std::string line = next_non_comment(is); - { - std::istringstream iss(line); - std::string off; - iss >> off; - CGAL_assertion(off=="OFF" || off=="COFF"); - } - line = next_non_comment(is); - { - std::istringstream iss(line); - iss >> nv >> nf >> ignore; - } - - std::vector vertices(nv); - Point_3 p; - for(vertices_size_type i=0; i < nv; i++){ - line = next_non_comment(is); - std::istringstream iss(line); - iss >> p; - vertices[i] = add_vertex(g); - put(vpm,vertices[i],p); - } - - for(faces_size_type i=0; i < nf; i++){ - line = next_non_comment(is); - std::istringstream iss(line); - iss >> nvf; - std::vector face(nvf); - for(vertices_size_type j = 0; j < nvf; j++){ - faces_size_type fvi; - iss >> fvi; - face[j] = vertices[fvi]; - } - Euler::add_face(face,g); - } - return true; -} - - -/*! - \ingroup PkgBGLIOFct - reads the graph `g` from data in the OFF format. Ignores comment lines which start with a hash, and lines with whitespace. - \sa Overloads of this function for specific models of the concept `FaceGraph`. - \pre The data must represent a 2-manifold - \attention The graph `g` is not cleared, and the data from the stream are added. - - */ -template -bool read_off(const char* fname, - FaceGraph& g) -{ - std::ifstream in(fname); - if(in.good()){ - return read_off(in, g); - } - return false; -} - - -} // namespace CGAL - -#endif // CGAL_BOOST_GRAPH_IO_H From 3072c6b8bc3f73fe89c6fb890f3e5f1acf8c08eb Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 15:30:40 +0100 Subject: [PATCH 118/298] Add read and write off taking a std::string as parameter --- BGL/include/CGAL/boost/graph/io.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BGL/include/CGAL/boost/graph/io.h b/BGL/include/CGAL/boost/graph/io.h index b1aa51f80ca..698eb6f0887 100644 --- a/BGL/include/CGAL/boost/graph/io.h +++ b/BGL/include/CGAL/boost/graph/io.h @@ -88,6 +88,10 @@ bool write_off(const char* fname, return false; } +template +bool write_off(const std::string& fname, + const FaceGraph& g) +{ return write_off(fname.c_str(), g); } namespace internal { namespace read_off_tools { @@ -197,7 +201,11 @@ bool read_off(const char* fname, return false; } - +template +bool read_off(const std::string& fname, + FaceGraph& g) +{ return read_off(fname.c_str(), g); } + template bool write_inp(std::ostream& os, const FaceGraph& g, From 8f1ff520b2a78fbcdf500a76e9c1a100a184c563 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 15:31:07 +0100 Subject: [PATCH 119/298] BGL test can now use the generic read_off function. --- BGL/test/BGL/test_Prefix.h | 24 +++++++----------------- BGL/test/BGL/test_clear.cpp | 2 +- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/BGL/test/BGL/test_Prefix.h b/BGL/test/BGL/test_Prefix.h index 444eb1c8c21..3eafc956cd8 100644 --- a/BGL/test/BGL/test_Prefix.h +++ b/BGL/test/BGL/test_Prefix.h @@ -27,6 +27,8 @@ #include #endif +#include + // ATTN: If you change this kernel remember to also hack // properties_PolyMesh_ArrayKernelT.h accordingly typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; @@ -106,18 +108,17 @@ static const char* data[] = "data/rombus.off", "data/tetrahedron.off", "data/triangle.off", "data/triangular_hole.off", "data/cube.off" }; +/* #if defined(CGAL_USE_OPENMESH) bool read_a_mesh(OMesh& s, const std::string& str) { return OpenMesh::IO::read_mesh(s, str); } #endif +*/ -#if defined(CGAL_USE_SURFACE_MESH) -// quick hack to generically read a file -bool read_a_mesh(SM& s, const std::string& str) { - return CGAL::read_off(s, str); -} -#endif +template +bool read_a_mesh(T& m, const std::string& str) +{ return CGAL::read_off(str, m); } bool read_a_mesh(Polyhedron& p, const std::string& str) { std::ifstream in(str.c_str()); @@ -128,17 +129,6 @@ bool read_a_mesh(Polyhedron& p, const std::string& str) { return success; } -bool read_a_mesh(LCC& lcc, const std::string& str) { - std::ifstream in(str.c_str()); - bool success = in.good(); - if(success) - { - CGAL::read_off(in, lcc); - assert(lcc.is_valid()); - } - return success; -} - template std::vector t_data() { diff --git a/BGL/test/BGL/test_clear.cpp b/BGL/test/BGL/test_clear.cpp index bf0840c5da7..eb733d748d4 100644 --- a/BGL/test/BGL/test_clear.cpp +++ b/BGL/test/BGL/test_clear.cpp @@ -6,7 +6,7 @@ template void test() { const std::string fname = "data/7_faces_triangle.off"; Mesh m; - if(!read_a_mesh(m, fname)) { + if(!CGAL::read_off(fname, m)) { std::cout << "Error reading file: " << fname << std::endl; } From e2a1dd87ffcd17c5ca58e8922722259198a2d772 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Mon, 13 Nov 2017 17:57:33 +0100 Subject: [PATCH 120/298] Add SVG component --- Triangulation_3/demo/Triangulation_3/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index 297ad7ded57..9a963c2b26a 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -22,7 +22,7 @@ find_package(CGAL COMPONENTS Qt5) include(${CGAL_USE_FILE}) -find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL) +find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL Svg) find_package(OpenGL) @@ -71,7 +71,7 @@ if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_ PreferenceDlg.cpp Scene.cpp ${uis} ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) - qt5_use_modules(T3_demo Xml Script OpenGL) + qt5_use_modules(T3_demo Xml Script OpenGL Svg) add_to_cached_list( CGAL_EXECUTABLE_TARGETS T3_demo ) target_link_libraries( T3_demo ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) From 7e57a9acd41d5f7817c9af9cb1b6a80687ac7bb0 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Mon, 13 Nov 2017 21:01:56 +0100 Subject: [PATCH 121/298] Add Svg module in polyhedron demo --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 0066867ccab..58b1bc40b83 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -191,7 +191,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) TextRenderer.cpp TextRenderer_moc.cpp Polyhedron_demo_plugin_helper.cpp) - qt5_use_modules(demo_framework OpenGL Gui Widgets Script Xml) + qt5_use_modules(demo_framework OpenGL Gui Widgets Script Xml Svg) target_link_libraries(demo_framework ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} From dee84a26e9ffb8cf64fdf2eb3db96f363da08e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 10:14:50 +0100 Subject: [PATCH 122/298] avoid creating a new overlapping curve if it has already been created this avoid some mismatch issues in the left events and the status line --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 45 +++++++++++++------ .../CGAL/Sweep_line_2/Sweep_line_subcurve.h | 26 +++++++++++ 2 files changed, 57 insertions(+), 14 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index b1ad937d986..c8c332753f2 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -865,22 +865,39 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, left_event->remove_curve_from_right(c2); // Allocate the new Subcurve for the overlap - Subcurve* overlap_sc; + Subcurve* overlap_sc=NULL; if (all_leaves_diff.empty()) { - CGAL_SL_PRINT_TEXT("Allocate a new subcurve for the overlap (no common subcurves)"); - CGAL_SL_PRINT_EOL(); - // no duplicate only one curve is needed - overlap_sc = this->m_subCurveAlloc.allocate(1); - this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); - overlap_sc->set_hint(this->m_statusLine.end()); - overlap_sc->init(overlap_cv); - overlap_sc->set_left_event(left_event); - overlap_sc->set_right_event(right_event); - m_overlap_subCurves.push_back(overlap_sc); - // sets the two originating subcurves of overlap_sc - overlap_sc->set_originating_subcurve1(c1); - overlap_sc->set_originating_subcurve2(c2); + // first check that an equivalent curve is not already in left_event + for (Subcurve_iterator iter = left_event->right_curves_begin(); iter != left_event->right_curves_end(); + ++iter) + { + if ( (*iter)->has_same_leaves(c1, c2) ) + { + CGAL_SL_PRINT_TEXT("Reuse overlapping curve "); + CGAL_SL_PRINT_CURVE(*iter); + CGAL_SL_PRINT_EOL(); + overlap_sc=*iter; + break; + } + } + + if (overlap_sc==NULL) + { + CGAL_SL_PRINT_TEXT("Allocate a new subcurve for the overlap (no common subcurves)"); + CGAL_SL_PRINT_EOL(); + // no duplicate only one curve is needed + overlap_sc = this->m_subCurveAlloc.allocate(1); + this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); + overlap_sc->set_hint(this->m_statusLine.end()); + overlap_sc->init(overlap_cv); + overlap_sc->set_left_event(left_event); + overlap_sc->set_right_event(right_event); + m_overlap_subCurves.push_back(overlap_sc); + // sets the two originating subcurves of overlap_sc + overlap_sc->set_originating_subcurve1(c1); + overlap_sc->set_originating_subcurve2(c2); + } } else{ CGAL_SL_PRINT_TEXT("Allocate new subcurves for the overlap (common subcurves)"); diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h index 3efbb9b7be5..5120ba27486 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_subcurve.h @@ -229,6 +229,32 @@ public: return true; } + /*! Check if the two hierarchies (s1+s2 considered as an overlapping curve not already created) contain the same leaf nodes. */ + bool has_same_leaves(Self* s1, Self* s2) + { + std::list my_leaves; + std::list other_leaves; + + this->template all_leaves(std::back_inserter(my_leaves)); + s1->template all_leaves(std::back_inserter(other_leaves)); + s2->template all_leaves(std::back_inserter(other_leaves)); + + typename std::list::iterator iter; + for (iter = my_leaves.begin(); iter != my_leaves.end(); ++iter) { + if (std::find(other_leaves.begin(), other_leaves.end(), *iter) == + other_leaves.end()) + return false; + } + + for (iter = other_leaves.begin(); iter != other_leaves.end(); ++iter) { + if (std::find(my_leaves.begin(), my_leaves.end(), *iter) == + my_leaves.end()) + return false; + } + + return true; + } + /*! Check if the two hierarchies contain a common leaf node. */ bool has_common_leaf(Self *s) { From 9dcf23d490383c81a60f05bc7f5c21cb2d51658c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 10:18:17 +0100 Subject: [PATCH 123/298] improve is_right_curve_bigger make sure all the curves were in the set of right curve of the event to compare them, fall back on geometric test if not --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 6 ++-- .../CGAL/Sweep_line_2/Sweep_line_event.h | 31 +++++++++++++------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index c8c332753f2..509a8afa99a 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -710,7 +710,7 @@ _create_intersection_point(const Point_2& xp, // The multiplicity of the intersection point is unkown or undefined: _add_curve_to_right(e, c1); _add_curve_to_right(e, c2); - if (e->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); + if (e->is_right_curve_bigger(c1, c2, this->m_traits)) std::swap(c1, c2); } else { if ((multiplicity % 2) == 1) { @@ -757,7 +757,7 @@ _create_intersection_point(const Point_2& xp, } } } - if (e->is_right_curve_bigger(c1, c2)) std::swap(c1, c2); + if (e->is_right_curve_bigger(c1, c2, this->m_traits)) std::swap(c1, c2); CGAL_SL_PRINT_EVENT_INFO(e); } @@ -951,7 +951,7 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, this->m_visitor->found_overlap(c1, c2, overlap_sc); if (!c1->is_end_point(right_event) && !c2->is_end_point(right_event)) - if (right_event->is_right_curve_bigger(c1, c2)) + if (right_event->is_right_curve_bigger(c1, c2, this->m_traits)) std::swap(c1, c2); if (event_on_overlap != NULL && event_on_overlap!=left_event) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h index fdaaa538665..b2f2fc13f90 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_event.h @@ -449,22 +449,33 @@ public: m_leftCurves.erase(left_iter, m_leftCurves.end()); } - bool is_right_curve_bigger(Subcurve* c1, Subcurve* c2) + bool is_right_curve_bigger(Subcurve* c1, Subcurve* c2, const Traits_2* tr) { + bool found_c1=false, found_c2=false; Subcurve_iterator iter; for (iter = m_rightCurves.begin(); iter != m_rightCurves.end(); ++iter) { - if ((*iter == c1) || - (static_cast((*iter)->originating_subcurve1()) == c1) || - (static_cast((*iter)->originating_subcurve2()) == c1)) - return false; + if (!found_c1 && ( (*iter == c1) || + (static_cast(*iter)->are_all_leaves_contained(c1)))) + { + if (found_c2) + return true; + else + found_c1=true; + } - if ((*iter == c2) || - (static_cast((*iter)->originating_subcurve1()) == c2) || - (static_cast((*iter)->originating_subcurve2()) == c2)) - return true; + if (!found_c2 && ( (*iter == c2) || + (static_cast(*iter)->are_all_leaves_contained(c2)))) + { + if (found_c1) + return false; + else + found_c2=true; + } } + CGAL_assertion(!found_c1 || !found_c2); - return true; + return tr->compare_y_at_x_right_2_object() + (c1->last_curve(), c2->last_curve(), m_point) == LARGER; } /*! Check if the two curves are negihbors to the left of the event. */ From 7aa680c66ac3f4145f1a0b69007fa59c0cf98a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 10:20:58 +0100 Subject: [PATCH 124/298] only call _is_right_curve_bigger only when needed --- .../include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 509a8afa99a..a659e4adf39 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -742,6 +742,15 @@ _create_intersection_point(const Point_2& xp, _add_curve_to_right(e, c2); e->set_intersection(); this->m_visitor->update_event(e, c1, c2, false); + + if (multiplicity==0) + { + if (e->is_right_curve_bigger(c1, c2, this->m_traits)) std::swap(c1, c2); + } + else + { + if (multiplicity%2==1) std::swap(c1, c2); + } } else { if (!c1->is_end_point(e) && c2->is_end_point(e)) { @@ -757,7 +766,7 @@ _create_intersection_point(const Point_2& xp, } } } - if (e->is_right_curve_bigger(c1, c2, this->m_traits)) std::swap(c1, c2); + CGAL_SL_PRINT_EVENT_INFO(e); } From a42566fd015675b0802d01262dc6da0bf350a3e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 10:28:16 +0100 Subject: [PATCH 125/298] enable new tests --- .../Arrangement_on_surface_2/test_construction.polylines.cmd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd index e4b43902d31..91908142c6d 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.polylines.cmd @@ -4,3 +4,6 @@ ./data/test_construction/polylines/test04.txt ./data/test_construction/polylines/test05.txt ./data/test_construction/polylines/test06.txt +./data/test_construction/polylines/test07.txt +./data/test_construction/polylines/test08.txt +./data/test_construction/polylines/test09.txt From 264c23294fb9e2031c0f39ea1ec47f254ef38106 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 14 Nov 2017 10:38:51 +0100 Subject: [PATCH 126/298] Ease the cross-compilation --- Installation/cmake/modules/CGAL_Macros.cmake | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Installation/cmake/modules/CGAL_Macros.cmake b/Installation/cmake/modules/CGAL_Macros.cmake index c0520f3ea44..bb322308456 100644 --- a/Installation/cmake/modules/CGAL_Macros.cmake +++ b/Installation/cmake/modules/CGAL_Macros.cmake @@ -159,16 +159,20 @@ if( NOT CGAL_MACROS_FILE_INCLUDED ) set ( ${LIB}_VERSION "unknown" ) - try_run( ${LIB}_RUN_RES - ${LIB}_COMPILE_RES - "${CMAKE_BINARY_DIR}" - "${CGAL_INSTALLATION_PACKAGE_DIR}/config/support/print_${LIB}_version.cpp" - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${${PKG}_INCLUDE_DIR};${${PKG}_DEPENDENCY_INCLUDE_DIR}" - "-DLINK_LIBRARIES:STRING=${${PKG}_LIBRARIES};${${PKG}_DEPENDENCY_LIBRARIES}" - "-DLINK_DIRECTORIES:STRING=${${PKG}_LIBRARIES_DIR};${${PKG}_DEPENDENCY_LIBRARIES_DIR}" - OUTPUT_VARIABLE ${LIB}_OUTPUT - ) - + if(NOT CMAKE_CROSSCOMPILING) + try_run( ${LIB}_RUN_RES + ${LIB}_COMPILE_RES + "${CMAKE_BINARY_DIR}" + "${CGAL_INSTALLATION_PACKAGE_DIR}/config/support/print_${LIB}_version.cpp" + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${${PKG}_INCLUDE_DIR};${${PKG}_DEPENDENCY_INCLUDE_DIR}" + "-DLINK_LIBRARIES:STRING=${${PKG}_LIBRARIES};${${PKG}_DEPENDENCY_LIBRARIES}" + "-DLINK_DIRECTORIES:STRING=${${PKG}_LIBRARIES_DIR};${${PKG}_DEPENDENCY_LIBRARIES_DIR}" + OUTPUT_VARIABLE ${LIB}_OUTPUT + ) + else() + set(${LIB}_COMPILE_RES FALSE) + message(STATUS "CROSS-COMPILING!") + endif() if ( ${LIB}_COMPILE_RES ) if ( ${LIB}_RUN_RES EQUAL "0" ) From 1d63eeb5dc32a8ff3f1d1614329a967f12c9f9ef Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 14 Nov 2017 10:39:35 +0100 Subject: [PATCH 127/298] Add support for testing on Android --- .../cmake/modules/CGAL_add_test.cmake | 83 +++++++++++++++---- .../cmake/modules/run_test_with_cin.cmake | 15 +++- 2 files changed, 77 insertions(+), 21 deletions(-) diff --git a/Installation/cmake/modules/CGAL_add_test.cmake b/Installation/cmake/modules/CGAL_add_test.cmake index 163ebfee9b9..4b2194fd66c 100644 --- a/Installation/cmake/modules/CGAL_add_test.cmake +++ b/Installation/cmake/modules/CGAL_add_test.cmake @@ -19,6 +19,11 @@ if(CGAL_CTEST_DISPLAY_MEM_AND_TIME) endif() endif() +if(ANDROID) + set(ANDROID_DIR_PREFIX /data/local/tmp/) + find_program(adb_executable adb) +endif() + # Process a list, and replace items contains a file pattern (like # `*.off`) by the sublist that corresponds to the globbing of the # pattern in the directory `${CGAL_CURRENT_SOURCE_DIR}`. @@ -78,7 +83,7 @@ function(cgal_setup_test_properties test_name) APPEND PROPERTY LABELS "${PROJECT_NAME}") # message(STATUS " working dir: ${CGAL_CURRENT_SOURCE_DIR}") set_property(TEST "${test_name}" - PROPERTY WORKING_DIRECTORY ${CGAL_CURRENT_SOURCE_DIR}) + PROPERTY WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) if(exe_name) set_property(TEST "${test_name}" APPEND PROPERTY DEPENDS "compilation_of__${exe_name}") @@ -86,20 +91,47 @@ function(cgal_setup_test_properties test_name) if(POLICY CMP0066) # CMake 3.7 or later if(NOT TEST ${PROJECT_NAME}_SetupFixture) - add_test(NAME ${PROJECT_NAME}_SetupFixture - COMMAND - ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir - ) + if(ANDROID) + add_test(NAME ${PROJECT_NAME}_SetupFixture + COMMAND + ${adb_executable} push + ${CMAKE_CURRENT_SOURCE_DIR} + ${ANDROID_DIR_PREFIX}${PROJECT_NAME} + ) + add_test(NAME ${PROJECT_NAME}_copy_GMP_MPFR + COMMAND + ${adb_executable} push + ${GMP_LIBRARIES} ${MPFR_LIBRARIES} + ${ANDROID_DIR_PREFIX}${PROJECT_NAME} + ) + set_property(TEST ${PROJECT_NAME}_copy_GMP_MPFR + APPEND PROPERTY DEPENDS ${PROJECT_NAME}_SetupFixture) + set_property(TEST ${PROJECT_NAME}_copy_GMP_MPFR + PROPERTY FIXTURES_SETUP ${PROJECT_NAME}) + else() + add_test(NAME ${PROJECT_NAME}_SetupFixture + COMMAND + ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir + ) + endif() set_property(TEST ${PROJECT_NAME}_SetupFixture PROPERTY FIXTURES_SETUP ${PROJECT_NAME}) - add_test(NAME ${PROJECT_NAME}_CleanupFixture - COMMAND - ${CMAKE_COMMAND} -E remove_directory - ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir - ) + if(ANDROID) + add_test(NAME ${PROJECT_NAME}_CleanupFixture + COMMAND + ${adb_executable} shell rm -rf + ${ANDROID_DIR_PREFIX}${PROJECT_NAME} + ) + else() + add_test(NAME ${PROJECT_NAME}_CleanupFixture + COMMAND + ${CMAKE_COMMAND} -E remove_directory + ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir + ) + endif() set_property(TEST ${PROJECT_NAME}_CleanupFixture PROPERTY FIXTURES_CLEANUP ${PROJECT_NAME}) @@ -107,15 +139,26 @@ function(cgal_setup_test_properties test_name) ${PROJECT_NAME}_CleanupFixture ${PROJECT_NAME}_SetupFixture APPEND PROPERTY LABELS "${PROJECT_NAME}") endif() - set_tests_properties("${test_name}" - PROPERTIES - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir - FIXTURES_REQUIRED "${PROJECT_NAME}") + if(NOT ANDROID) + set_property(TEST "${test_name}" + PROPERTY + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/__exec_test_dir) + endif() + set_property(TEST "${test_name}" + APPEND PROPERTY FIXTURES_REQUIRED "${PROJECT_NAME}") if(exe_name) set_property(TEST ${test_name} APPEND PROPERTY FIXTURES_REQUIRED "${exe_name}") set_property(TEST "compilation_of__${exe_name}" PROPERTY FIXTURES_SETUP "${exe_name}") + if(ANDROID) + add_test(NAME "push_of__${exe_name}" + COMMAND ${adb_executable} push $ ${ANDROID_DIR_PREFIX}${PROJECT_NAME}/${exe_name}) + set_property(TEST "push_of__${exe_name}" + APPEND PROPERTY FIXTURES_SETUP "${exe_name}") + set_property(TEST "push_of__${exe_name}" + APPEND PROPERTY DEPENDS "compilation_of__${exe_name}") + endif() endif() endif() # end CMake 3.7 or later endfunction(cgal_setup_test_properties) @@ -145,6 +188,8 @@ function(cgal_add_test exe_name) COMMAND ${TIME_COMMAND} ${CMAKE_COMMAND} -DCMD:STRING=$ -DCIN:STRING=${cin_file} + -DANDROID_DIR_PREFIX=${ANDROID_DIR_PREFIX} + -DPROJECT_NAME=${PROJECT_NAME} -P "${CGAL_MODULES_DIR}/run_test_with_cin.cmake") # message(STATUS "add test: ${exe_name} < ${cin_file}") else() @@ -171,7 +216,11 @@ function(cgal_add_test exe_name) endif() endif() # message(STATUS "add test: ${exe_name} ${ARGS}") - add_test(NAME ${test_name} COMMAND ${TIME_COMMAND} $ ${ARGS}) + if(ANDROID) + add_test(NAME ${test_name} COMMAND ${TIME_COMMAND} ${adb_executable} shell cd ${ANDROID_DIR_PREFIX}${PROJECT_NAME} && LD_LIBRARY_PATH=${ANDROID_DIR_PREFIX}${PROJECT_NAME} ${ANDROID_DIR_PREFIX}${PROJECT_NAME}/${exe_name} ${ARGS}) + else() + add_test(NAME ${test_name} COMMAND ${TIME_COMMAND} $ ${ARGS}) + endif() endif() cgal_setup_test_properties(${test_name} ${exe_name}) return() diff --git a/Installation/cmake/modules/run_test_with_cin.cmake b/Installation/cmake/modules/run_test_with_cin.cmake index c5218fc8141..1877beb096d 100644 --- a/Installation/cmake/modules/run_test_with_cin.cmake +++ b/Installation/cmake/modules/run_test_with_cin.cmake @@ -8,10 +8,17 @@ if(NOT CIN OR NOT EXISTS ${CIN}) "The variable `CIN` should be defined to the input file for the test!") endif() -execute_process( - COMMAND ${CMD} - INPUT_FILE ${CIN} - RESULT_VARIABLE error_result) +if(ANDROID) + execute_process( + COMMAND adb shell "cd ${ANDROID_DIR_PREFIX}${PROJECT_NAME} && ${ANDROID_DIR_PREFIX}${CMD}" + INPUT_FILE ${CIN} + RESULT_VARIABLE error_result) +else() + execute_process( + COMMAND ${CMD} + INPUT_FILE ${CIN} + RESULT_VARIABLE error_result) +endif() if(error_result) message(SEND_ERROR From 6b300501aaf2ce18c05a42fc9db0d7f28e14eb42 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Tue, 14 Nov 2017 11:13:17 +0100 Subject: [PATCH 128/298] T3 demo does not need script --- Triangulation_3/demo/Triangulation_3/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index 9a963c2b26a..a5719e96996 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -22,7 +22,7 @@ find_package(CGAL COMPONENTS Qt5) include(${CGAL_USE_FILE}) -find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL Svg) +find_package(Qt5 QUIET COMPONENTS Xml OpenGL Svg) find_package(OpenGL) @@ -71,7 +71,7 @@ if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_ PreferenceDlg.cpp Scene.cpp ${uis} ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) - qt5_use_modules(T3_demo Xml Script OpenGL Svg) + qt5_use_modules(T3_demo Xml OpenGL Svg) add_to_cached_list( CGAL_EXECUTABLE_TARGETS T3_demo ) target_link_libraries( T3_demo ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) From fe24a4db68c28588daff3471b40c07c35edfe1bc Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 14 Nov 2017 14:08:55 +0100 Subject: [PATCH 129/298] Explicit the dependencies of QGLViewer --- Installation/cmake/modules/FindQGLViewer.cmake | 8 ++++++-- Installation/lib/cmake/CGAL/CGALConfig.cmake | 3 +++ Triangulation_3/demo/Triangulation_3/CMakeLists.txt | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Installation/cmake/modules/FindQGLViewer.cmake b/Installation/cmake/modules/FindQGLViewer.cmake index e769d9e196f..0e63355b7c2 100644 --- a/Installation/cmake/modules/FindQGLViewer.cmake +++ b/Installation/cmake/modules/FindQGLViewer.cmake @@ -7,6 +7,8 @@ # QGLVIEWER_DEFINITIONS - Compiler switches required for using QGLViewer # +find_package(Qt5 QUIET COMPONENTS OpenGL Xml) + # first look in user defined locations find_path(QGLVIEWER_INCLUDE_DIR NAMES QGLViewer/qglviewer.h @@ -50,15 +52,17 @@ endif() if(QGLVIEWER_LIBRARY_RELEASE) if(QGLVIEWER_LIBRARY_DEBUG) - set(QGLVIEWER_LIBRARIES_ optimized ${QGLVIEWER_LIBRARY_RELEASE} debug ${QGLVIEWER_LIBRARY_DEBUG}) + set(QGLVIEWER_LIBRARIES_ Qt5::Xml Qt5::OpenGL optimized ${QGLVIEWER_LIBRARY_RELEASE} debug ${QGLVIEWER_LIBRARY_DEBUG}) else() - set(QGLVIEWER_LIBRARIES_ ${QGLVIEWER_LIBRARY_RELEASE}) + set(QGLVIEWER_LIBRARIES_ Qt5::Xml Qt5::OpenGL ${QGLVIEWER_LIBRARY_RELEASE}) endif() set(QGLVIEWER_LIBRARIES ${QGLVIEWER_LIBRARIES_} CACHE FILEPATH "The QGLViewer library") endif() +message("QGLViewer: ${QGLVIEWER_LIBRARIES}") + IF(QGLVIEWER_INCLUDE_DIR AND QGLVIEWER_LIBRARIES) SET(QGLVIEWER_FOUND TRUE) ENDIF(QGLVIEWER_INCLUDE_DIR AND QGLVIEWER_LIBRARIES) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 2b4a7c73132..594c3730d91 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -14,6 +14,8 @@ get_filename_component(CGAL_CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) set(CGAL_HEADER_ONLY TRUE) +set( CGAL_REQUESTED_COMPONENTS ${CGAL_FIND_COMPONENTS} ) + # Save the current source directory. That variable can be changed by # a `CMakeLists.txt`, for `CMakeLists.txt` files that are created in # the binary directory. @@ -75,6 +77,7 @@ endforeach() # Define the CGAL targets and theirs CGAL:: aliases # foreach(cgal_lib CGAL CGAL_Core CGAL_ImageIO CGAL_Qt5) + set(WITH_${cgal_lib} TRUE) if(${cgal_lib}_FOUND AND NOT TARGET ${cgal_lib}) add_library(${cgal_lib} INTERFACE) if(NOT TARGET CGAL::${cgal_lib}) diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index a5719e96996..d3fba6b9b2a 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -22,7 +22,7 @@ find_package(CGAL COMPONENTS Qt5) include(${CGAL_USE_FILE}) -find_package(Qt5 QUIET COMPONENTS Xml OpenGL Svg) +find_package(Qt5 QUIET COMPONENTS OpenGL) find_package(OpenGL) From 14e7091e1c2caeec88cf608feaa2782238119c46 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 14 Nov 2017 14:09:37 +0100 Subject: [PATCH 130/298] Remove the need for the Qt5 Xml and Svg libraries --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 21 ++++++++----------- .../implicit_functions/CMakeLists.txt | 4 ++-- .../Polyhedron/polyhedron_demo_macros.cmake | 2 +- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 58b1bc40b83..5e9c27f129f 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -58,7 +58,7 @@ include( ${CGAL_USE_FILE} ) find_package(Qt5 QUIET - COMPONENTS OpenGL Script Svg Xml + COMPONENTS OpenGL Script OPTIONAL_COMPONENTS ScriptTools) # Find OpenGL @@ -147,8 +147,8 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) qt5_add_resources(gl_splat_rc GlSplat/glsplat.qrc) add_library(gl_splat SHARED GlSplat/GlSplat.cpp GlSplat/Shader.cpp ${gl_splat_rc}) - qt5_use_modules(gl_splat OpenGL Gui Xml) - target_link_libraries(gl_splat ${OPENGL_gl_LIBRARY}) + qt5_use_modules(gl_splat OpenGL Gui) + target_link_libraries(gl_splat ${OPENGL_gl_LIBRARY} ${QGLVIEWER_LIBRARIES}) find_path(CGAL_THREE_HEADERS_PATH NAME CGAL/Three/Scene_item.h @@ -191,7 +191,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) TextRenderer.cpp TextRenderer_moc.cpp Polyhedron_demo_plugin_helper.cpp) - qt5_use_modules(demo_framework OpenGL Gui Widgets Script Xml Svg) + qt5_use_modules(demo_framework OpenGL Gui Widgets Script) target_link_libraries(demo_framework ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} @@ -214,17 +214,17 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) ${OPENGL_glu_LIBRARY} gl_splat ) - qt5_use_modules(scene_basic_objects OpenGL Gui Xml Script Widgets) + qt5_use_modules(scene_basic_objects OpenGL Gui Script Widgets) add_library(scene_color_ramp SHARED Color_ramp.cpp) qt5_use_modules(scene_color_ramp Core) add_library(point_dialog SHARED Show_point_dialog.cpp Show_point_dialog.ui ${Show_point_dialogUI_FILES}) - qt5_use_modules(point_dialog OpenGL Gui Xml Script Widgets) + qt5_use_modules(point_dialog OpenGL Gui Script Widgets) macro(add_item item_name) add_library(${item_name} SHARED ${ARGN}) - qt5_use_modules(${item_name} OpenGL Gui Xml Script Widgets) + qt5_use_modules(${item_name} OpenGL Gui Script Widgets) target_link_libraries(${item_name} demo_framework ${CGAL_LIBRARIES} ${Boost_LIBRARIES}) endmacro(add_item) @@ -279,10 +279,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) if(EIGEN3_FOUND ) add_item(scene_textured_polyhedron_item Scene_textured_polyhedron_item.cpp texture.cpp) - qt5_use_modules( scene_textured_polyhedron_item Svg ) add_item(scene_textured_surface_mesh_item Scene_textured_surface_mesh_item.cpp texture.cpp) - qt5_use_modules( scene_textured_surface_mesh_item Svg ) - qt5_wrap_ui( editionUI_FILES Plugins/Surface_mesh_deformation/Deform_mesh.ui ) add_item(scene_edit_polyhedron_item Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp ${editionUI_FILES}) @@ -333,7 +330,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES} ${FileLoaderDialogUI_files} ${MainWindowUI_files} ${PreferencesUI_FILES} ${statisticsUI_FILES}) target_link_libraries(polyhedron_demo demo_framework point_dialog) - qt5_use_modules(polyhedron_demo Gui OpenGL Xml Widgets Script Svg ) + qt5_use_modules(polyhedron_demo Gui OpenGL Widgets Script) add_executable ( Polyhedron_3 Polyhedron_3.cpp ) target_link_libraries( Polyhedron_3 polyhedron_demo ) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Polyhedron_3 ) @@ -370,7 +367,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) # Exporting # if(TARGET CGAL_Qt5) - export(TARGETS CGAL CGAL_Qt5 FILE polyhedron_demo_targets.cmake NAMESPACE Polyhedron_) + export(TARGETS CGAL CGAL_Qt5 CGAL_ImageIO FILE polyhedron_demo_targets.cmake NAMESPACE Polyhedron_) else() export(TARGETS FILE polyhedron_demo_targets.cmake NAMESPACE Polyhedron_) endif() diff --git a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt index 00c1bd837be..321b2b8a2d1 100644 --- a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt @@ -23,7 +23,7 @@ set( QT_USE_QTXML TRUE ) set( QT_USE_QTMAIN TRUE ) set( QT_USE_QTSCRIPT TRUE ) set( QT_USE_QTOPENGL TRUE ) -find_package(Qt5 QUIET COMPONENTS Xml Script OpenGL ScriptTools ) +find_package(Qt5 QUIET COMPONENTS Script OpenGL ScriptTools ) if(CGAL_Qt5_FOUND AND Qt5_FOUND) @@ -50,7 +50,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) add_file_dependencies( ${plugin_implementation_base_name}.moc "${CMAKE_CURRENT_SOURCE_DIR}/${plugin_implementation_base_name}.cpp" ) add_library(${plugin_name} MODULE ${option} ${plugin_implementation_base_name}.moc ${plugin_implementation_base_name}.cpp ${other_sources}) - qt5_use_modules(${plugin_name} Widgets Script OpenGL Gui Xml) + qt5_use_modules(${plugin_name} Widgets Script OpenGL Gui) add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${plugin_name} ) # Link with Qt target_link_libraries( ${plugin_name} ${QT_LIBRARIES} ) diff --git a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake index fe32b0522a1..f85f8ad927a 100644 --- a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake +++ b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake @@ -23,7 +23,7 @@ include (CGAL_Macros) endif() add_library(${plugin_name} MODULE ${option} ${moc_file_name} ${plugin_implementation_base_name}.cpp ${other_sources}) - qt5_use_modules(${plugin_name} Widgets Script OpenGL Gui Xml ) + qt5_use_modules(${plugin_name} Widgets Script OpenGL Gui) set_property(TARGET ${plugin_name} PROPERTY LIBRARY_OUTPUT_DIRECTORY "${CGAL_POLYHEDRON_DEMO_PLUGINS_DIR}") From 261bd95fc7bbf348ea77b36759d3e3650786d44f Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Tue, 14 Nov 2017 17:52:15 +0200 Subject: [PATCH 131/298] Initialize the hint (pointer to the status line) when the curve is removed from the status line --- Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h | 1 + Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h index 0cc93082487..9a56082cb72 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Basic_sweep_line_2_impl.h @@ -589,6 +589,7 @@ _remove_curve_from_status_line(Subcurve* sc) // The position of the next event can be right after the deleted subcurve. m_status_line_insert_hint = sl_iter; ++m_status_line_insert_hint; + sc->set_hint(m_statusLine.end()); // Erase the subcurve from the status line. CGAL_SL_PRINT_ERASE(*sl_iter); diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index a659e4adf39..1e9dac1e9e1 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -373,6 +373,7 @@ _remove_curve_from_status_line(Subcurve* leftCurve, bool remove_for_good) Status_line_iterator sliter = leftCurve->hint(); this->m_status_line_insert_hint = sliter; ++(this->m_status_line_insert_hint); + leftCurve->set_hint(this->m_statusLine.end()); if (! remove_for_good) { // the subcurve is not removed for good, so we dont need to intersect From 5fbd297a8985b80dfbe34b5e82ee7a2d59d85418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 18:04:16 +0100 Subject: [PATCH 132/298] remove comments --- .../include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h | 2 +- .../include/CGAL/Sweep_line_2/Sweep_line_2_impl.h | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h index 65ba5ba1f46..f42dcfdb572 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Arr_insertion_traits_2.h @@ -108,7 +108,7 @@ public: { if(cv1.halfedge_handle() != invalid_he && cv2.halfedge_handle() != invalid_he && - cv1.halfedge_handle()!=cv2.halfedge_handle()) //SL_SAYS check with Efi + cv1.halfedge_handle()!=cv2.halfedge_handle()) { // The curves are interior-disjoint as both of them are already in // the arrangement. diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index 1e9dac1e9e1..b2939e28037 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -504,7 +504,7 @@ void Sweep_line_2::_intersect(Subcurve* c1, _add_curve_to_right(left_event, first_parent); right_event->add_curve_to_left(first_parent); - this->m_visitor->found_overlap(c1, c2, first_parent); // SL_SAYS check with Efi + this->m_visitor->found_overlap(c1, c2, first_parent); CGAL_SL_PRINT_END_EOL("computing intersection"); return; @@ -828,7 +828,6 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Arr_parameter_space ps_y_l = this->m_traits->parameter_space_in_y_2_object()(overlap_cv, ARR_MIN_END); if ((ps_x_l != ARR_INTERIOR) || (ps_y_l != ARR_INTERIOR)) { - // SL_SAYS check with Efi CGAL_assertion(c1->left_event() == c2->left_event()); left_event=(Event*)(c1->left_event()); } @@ -844,7 +843,6 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, Arr_parameter_space ps_y_r = this->m_traits->parameter_space_in_y_2_object()(overlap_cv, ARR_MAX_END); if ((ps_x_r != ARR_INTERIOR) || (ps_y_r != ARR_INTERIOR)) { - // SL_SAYS check with Efi CGAL_assertion(c1->right_event() == c2->right_event()); right_event = (Event*)(c1->right_event()); } @@ -855,7 +853,7 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, if (!c1->is_start_point(left_event)) { - // here we do no add a curve on the left if there wasn't a curve before + // here we do not add a curve on the left if there wasn't a curve before // it might happen that a curve will be added on the left while // it should have been an overlapping curve (that will be detected // upon handling of an event with no left curve). @@ -918,7 +916,7 @@ _create_overlapping_curve(const X_monotone_curve_2& overlap_cv, sc_it!=all_leaves_diff.end(); ++sc_it) { - overlap_sc = this->m_subCurveAlloc.allocate(1); // SL_SAYS: allocate all at once? + overlap_sc = this->m_subCurveAlloc.allocate(1); this->m_subCurveAlloc.construct(overlap_sc, this->m_masterSubcurve); overlap_sc->set_hint(this->m_statusLine.end()); overlap_sc->init(overlap_cv); From 8df4fb911fffd199948864911dc7d1d0e3710c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 18:23:36 +0100 Subject: [PATCH 133/298] add more comments about why we do it incrementaly --- .../CGAL/Sweep_line_2/Sweep_line_2_impl.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h index b2939e28037..f4b99477433 100644 --- a/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h +++ b/Sweep_line_2/include/CGAL/Sweep_line_2/Sweep_line_2_impl.h @@ -512,17 +512,25 @@ void Sweep_line_2::_intersect(Subcurve* c1, else{ CGAL_SL_PRINT_TEXT("Overlap with common ancestors"); CGAL_SL_PRINT_EOL(); + + // iteratively create the final overlapping (geometric) curve. + // This is needed rather than simply computing the intersection of + // the last curves of first_parent and second_parent as some traits + // classes (such as Arr_curve_data_traits_2) override the Intersect_2 + // functor and expects the curve to have no common ancesters + // (Arr_curve_data_traits_2 is used in the testsuite to sum up + // the overlapping degree of a curve) X_monotone_curve_2 xc = first_parent->last_curve(); for (typename Subcurve_vector::iterator sc_it=all_leaves_diff.begin(); sc_it!=all_leaves_diff.end(); ++sc_it) { std::vector inter_res; - vector_inserter vi(inter_res) ; - vector_inserter vi_end(inter_res); + ; - this->m_traits->intersect_2_object()(xc, (*sc_it)->last_curve(), vi); - // SL_SAYS: we need to check that the following assertions are always valid - CGAL_assertion(inter_res.empty() || inter_res.size()==1); + this->m_traits->intersect_2_object()(xc, + (*sc_it)->last_curve(), + vector_inserter(inter_res)); + CGAL_assertion(inter_res.size()==1); CGAL_assertion( CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front())!=NULL ); xc = *CGAL::object_cast< X_monotone_curve_2 >(&inter_res.front()); } From f0a44e2483f54bad7c5db40a3cb1701db0ffcd60 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Tue, 14 Nov 2017 19:12:10 +0100 Subject: [PATCH 134/298] update basic viewer to allow to draw mono and color faces --- .../Linear_cell_complex/basic_viewer.h | 635 +++++++++--------- 1 file changed, 333 insertions(+), 302 deletions(-) diff --git a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h index 21f88cfc1bd..41541c15f94 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h +++ b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h @@ -67,7 +67,7 @@ const char vertex_source_mono[] = "}" }; -const char vertex_source_multi[] = +const char vertex_source_color[] = { "#version 120 \n" "attribute highp vec4 vertex;\n" @@ -120,7 +120,7 @@ const char fragment_source_mono[] = "\n" }; -const char fragment_source_multi[] = +const char fragment_source_color[] = { "#version 120 \n" "varying highp vec4 fP; \n" @@ -237,6 +237,7 @@ public: m_flatShading(true), m_use_mono_color(false), m_inverse_normal(false), + m_empty(true), m_size_points(7.), m_size_edges(3.1), m_vertices_mono_color(51, 51, 178), @@ -271,53 +272,63 @@ public: void clear() { - pos_points.clear(); - pos_segments.clear(); - pos_faces.clear(); - smooth_normals.clear(); - flat_normals.clear(); - colors.clear(); + for (unsigned int i=0; i& point_vector) { - pos_points.push_back(p.x()); - pos_points.push_back(p.y()); - pos_points.push_back(p.z()); + point_vector.push_back(p.x()); + point_vector.push_back(p.y()); + point_vector.push_back(p.z()); if (is_empty()) - { bb=p.bbox(); } + { bb=p.bbox(); m_empty=false; } else { bb=bb+p.bbox(); } } - - void add_segment(const Local_point& p1, const Local_point& p2) + + void add_color(const CGAL::Color& acolor, std::vector& color_vector) { - pos_segments.push_back(p1.x()); - pos_segments.push_back(p1.y()); - pos_segments.push_back(p1.z()); - - pos_segments.push_back(p2.x()); - pos_segments.push_back(p2.y()); - pos_segments.push_back(p2.z()); - - if (is_empty()) - { bb=p1.bbox(); } - else - { bb=bb+p1.bbox(); } - - bb=bb+p2.bbox(); + color_vector.push_back((double)color_of_face.red()/(double)255); + color_vector.push_back((double)color_of_face.green()/(double)255); + color_vector.push_back((double)color_of_face.blue()/(double)255); } - /// Start a new face. Its color will be the m_faces_mono_color. - void face_begin() - { face_begin(m_faces_mono_color); } + void add_normal(const Local_vector& n, std::vector& normal_vector) + { + normal_vector.push_back(n.x()); + normal_vector.push_back(n.y()); + normal_vector.push_back(n.z()); + } + + void add_mono_point(const Local_point& p) + { add_point(p, arrays[POS_MONO_POINTS]); } - /// Start a new face, with a given color. - void face_begin(const CGAL::Color& acolor) + void add_colored_point(const Local_point& p, const CGAL::Color& acolor) + { + add_point(p, arrays[POS_COLORED_POINTS]); + add_color(acolor, arrays[COLOR_POINTS]); + } + + void add_mono_segment(const Local_point& p1, const Local_point& p2) + { + add_point(p1, arrays[POS_MONO_SEGMENTS]); + add_point(p2, arrays[POS_MONO_SEGMENTS]); + } + + void add_colored_segment(const Local_point& p1, const Local_point& p2, + const CGAL::Color& acolor) + { + add_point(p1, arrays[POS_COLORED_SEGMENTS]); + add_point(p2, arrays[POS_COLORED_SEGMENTS]); + add_color(acolor, arrays[COLOR_SEGMENTS]); + } + + void face_begin() { if (m_face_started) { @@ -325,10 +336,23 @@ public: return; } - color_of_face=acolor; m_face_started=true; } + void mono_face_begin() + { + m_started_face_is_colored=false; + face_begin(); + } + + /// Start a new face, with a given color. + void colored_face_begin(const CGAL::Color& acolor) + { + color_of_face=acolor; + m_started_face_is_colored=true; + face_begin(); + } + /// Add a point at the end of the current face /// With this method, it is not possible to use the Gourod shading. /// @param p the point to add @@ -339,12 +363,6 @@ public: if (points_of_face.empty() || points_of_face.back()!=p) { points_of_face.push_back(p); - - if (is_empty()) - { bb=p.bbox(); } - else - { bb=bb+p.bbox(); } - return true; } return false; @@ -380,43 +398,42 @@ public: Local_vector normal=compute_normal_of_face(points_of_face); - double r=(double)color_of_face.red()/(double)255; - double g=(double)color_of_face.green()/(double)255; - double b=(double)color_of_face.blue()/(double)255; - if (points_of_face.size()==3) // Triangle: no need to triangulate { for (int i=0; i<3; ++i) { // The point - pos_faces.push_back(points_of_face[i].x()); - pos_faces.push_back(points_of_face[i].y()); - pos_faces.push_back(points_of_face[i].z()); + add_point(points_of_face[i], arrays[m_started_face_is_colored? + POS_COLORED_FACES: + POS_MONO_FACES]); // Its color - colors.push_back(r); colors.push_back(g); colors.push_back(b); + if (m_started_face_is_colored) + { add_color(color_of_face, arrays[COLOR_FACES]); } // Its flat normal - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); + add_normal(normal, arrays[m_started_face_is_colored? + FLAT_NORMAL_COLORED_FACES: + FLAT_NORMAL_MONO_FACES]); // Its smoth normal (if given by the user) if (vertex_normals_for_face.size()==3) { // Here we have 3 vertex normals; we can use Gourod - smooth_normals.push_back(vertex_normals_for_face[i].x()); - smooth_normals.push_back(vertex_normals_for_face[i].y()); - smooth_normals.push_back(vertex_normals_for_face[i].z()); + add_normal(vertex_normals_for_face[i], arrays[m_started_face_is_colored? + SMOOTH_NORMAL_COLORED_FACES: + SMOOTH_NORMAL_MONO_FACES]); } else { // Here user does not provide all vertex normals: we use face normal istead // and thus we will not be able to use Gourod - smooth_normals.push_back(normal.x()); - smooth_normals.push_back(normal.y()); - smooth_normals.push_back(normal.z()); + add_normal(normal, arrays[m_started_face_is_colored? + SMOOTH_NORMAL_COLORED_FACES: + SMOOTH_NORMAL_MONO_FACES]); } } } + // TODO CASE OF 4 POINTS ? PB HOW TO FIND (EASILY) THE TWO POINTS TO LINK ? + // else if (points_of_face.size()==4) else { // More than 3 points: we triangulate try @@ -514,22 +531,23 @@ public: for(int i=0; i<3; ++i) { // The point - pos_faces.push_back(ffit->vertex(i)->point().x()); - pos_faces.push_back(ffit->vertex(i)->point().y()); - pos_faces.push_back(ffit->vertex(i)->point().z()); + add_point(ffit->vertex(i)->point(), arrays[m_started_face_is_colored? + POS_COLORED_FACES: + POS_MONO_FACES]); // Its color - colors.push_back(r);colors.push_back(g);colors.push_back(b); - + if (m_started_face_is_colored) + { add_color(color_of_face, arrays[COLOR_FACES]); } + // Its flat normal - flat_normals.push_back(normal.x()); - flat_normals.push_back(normal.y()); - flat_normals.push_back(normal.z()); + add_normal(normal, arrays[m_started_face_is_colored? + FLAT_NORMAL_COLORED_FACES: + FLAT_NORMAL_MONO_FACES]); // Its smoth normal (if given by the user) - smooth_normals.push_back(ffit->vertex(i)->info().v.x()); - smooth_normals.push_back(ffit->vertex(i)->info().v.y()); - smooth_normals.push_back(ffit->vertex(i)->info().v.z()); + add_normal(ffit->vertex(i)->info().v, arrays[m_started_face_is_colored? + SMOOTH_NORMAL_COLORED_FACES: + SMOOTH_NORMAL_MONO_FACES]); } } } @@ -549,241 +567,211 @@ protected: void compile_shaders() { - rendering_program.removeAllShaders(); - rendering_program_p_l.removeAllShaders(); + rendering_program_mono.removeAllShaders(); + rendering_program_color.removeAllShaders(); + /*rendering_program_p_l_mono.removeAllShaders(); + rendering_program_p_l_color.removeAllShaders(); */ // Create the buffers for (int i=0; icompileSourceCode(vertex_source_mono)) - { - std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(vertex_source_multi)) - { - std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_mono)) - { - std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(fragment_source_multi)) - { - std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(vertex_source_mono)) + { std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_mono)) + { std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(vertex_source_p_l)) + if(!rendering_program_mono.addShader(vertex_shader_mono)) + { std::cerr<<"adding vertex shader FAILED"<compileSourceCode(vertex_source_mono)) + { std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_mono)) + { std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(vertex_source_color)) + { std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_color)) + { std::cerr<<"Compiling fragmentsource FAILED"<compileSourceCode(vertex_source_p_l)) + { std::cerr<<"Compiling vertex source FAILED"<compileSourceCode(fragment_source_p_l)) - { - std::cerr<<"Compiling fragmentsource FAILED"<(pos_faces.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program.attributeLocation("vertex"); - rendering_program.bind(); - rendering_program.enableAttributeArray(vertexLocation[vaon]); - rendering_program.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program.release(); + buffers[bufn].allocate(arrays[POS_MONO_FACES].data(), + static_cast(arrays[POS_MONO_FACES].size()*sizeof(float))); + vertexLocation[vaon] = rendering_program_mono.attributeLocation("vertex"); + rendering_program_mono.bind(); + rendering_program_mono.enableAttributeArray(vertexLocation[vaon]); + rendering_program_mono.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); + rendering_program_mono.release(); buffers[bufn].release(); ++bufn; - //normals of the facets + // 3.1.2) normals of the mono faces assert(bufn(flat_normals.size()*sizeof(float))); - normalsLocation = rendering_program.attributeLocation("normal"); - rendering_program.bind(); - rendering_program.enableAttributeArray(normalsLocation); - rendering_program.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; - - if (!m_use_mono_color) + if (m_flatShading) { - //colors of the facets - assert(bufn(colors.size()*sizeof(float))); - colorsLocation = rendering_program.attributeLocation("color"); - rendering_program.bind(); - rendering_program.enableAttributeArray(colorsLocation); - rendering_program.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); - rendering_program.release(); - - buffers[bufn].release(); - ++bufn; + buffers[bufn].allocate(arrays[FLAT_NORMAL_MONO_FACES].data(), + static_cast(arrays[FLAT_NORMAL_MONO_FACES].size()* + sizeof(float))); } + else + { + buffers[bufn].allocate(arrays[SMOOTH_NORMAL_MONO_FACES].data(), + static_cast(arrays[SMOOTH_NORMAL_MONO_FACES].size()* + sizeof(float))); + } + normalsLocation = rendering_program_mono.attributeLocation("normal"); + rendering_program_mono.bind(); + rendering_program_mono.enableAttributeArray(normalsLocation); + rendering_program_mono.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); + rendering_program_mono.release(); + buffers[bufn].release(); + ++bufn; + vao[vaon].release(); ++vaon; - + + // 3.2) Color faces assert(vaon(pos_faces.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program.attributeLocation("vertex"); - rendering_program.bind(); - rendering_program.enableAttributeArray(vertexLocation[vaon]); - rendering_program.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program.release(); - + buffers[bufn].allocate(arrays[POS_COLORED_FACES].data(), + static_cast(arrays[POS_COLORED_FACES].size()*sizeof(float))); + vertexLocation[vaon] = rendering_program_color.attributeLocation("vertex"); + rendering_program_color.bind(); + rendering_program_color.enableAttributeArray(vertexLocation[vaon]); + rendering_program_color.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); + rendering_program_color.release(); + buffers[bufn].release(); ++bufn; - - //normals of the facets + + // 3.2.2) normals of the color faces assert(bufn(smooth_normals.size()*sizeof(float))); - normalsLocation = rendering_program.attributeLocation("normal"); - rendering_program.bind(); - rendering_program.enableAttributeArray(normalsLocation); - rendering_program.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); - rendering_program.release(); - + if (m_flatShading) + { + buffers[bufn].allocate(arrays[FLAT_NORMAL_COLORED_FACES].data(), + static_cast(arrays[FLAT_NORMAL_COLORED_FACES].size()* + sizeof(float))); + } + else + { + buffers[bufn].allocate(arrays[SMOOTH_NORMAL_COLORED_FACES].data(), + static_cast(arrays[SMOOTH_NORMAL_COLORED_FACES].size()* + sizeof(float))); + } + normalsLocation = rendering_program_color.attributeLocation("normal"); + rendering_program_color.bind(); + rendering_program_color.enableAttributeArray(normalsLocation); + rendering_program_color.setAttributeBuffer(normalsLocation,GL_FLOAT,0,3); + rendering_program_color.release(); + buffers[bufn].release(); ++bufn; - + + // 3.2.3) colors of the faces if (!m_use_mono_color) { - //colors of the facets assert(bufn(colors.size()*sizeof(float))); - colorsLocation = rendering_program.attributeLocation("color"); - rendering_program.bind(); - rendering_program.enableAttributeArray(colorsLocation); - rendering_program.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); + buffers[bufn].allocate(arrays[COLOR_FACES].data(), + static_cast(arrays[COLOR_FACES].size()*sizeof(float))); + colorsLocation = rendering_program_color.attributeLocation("color"); + rendering_program_color.bind(); + rendering_program_color.enableAttributeArray(colorsLocation); + rendering_program_color.setAttributeBuffer(colorsLocation,GL_FLOAT,0,3); + rendering_program_color.release(); + buffers[bufn].release(); - - rendering_program.release(); ++bufn; } - - vao[vaon].release(); - ++vaon; - - //The segments - assert(vaon(pos_segments.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program_p_l.attributeLocation("vertex"); - rendering_program_p_l.bind(); - rendering_program_p_l.enableAttributeArray(vertexLocation[vaon]); - rendering_program_p_l.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program_p_l.release(); - - buffers[bufn].release(); - ++bufn; - - vao[vaon].release(); - ++vaon; - - //The points - assert(vaon(pos_points.size()*sizeof(float))); - vertexLocation[vaon] = rendering_program_p_l.attributeLocation("vertex"); - rendering_program_p_l.bind(); - rendering_program_p_l.enableAttributeArray(vertexLocation[vaon]); - rendering_program_p_l.setAttributeBuffer(vertexLocation[vaon],GL_FLOAT,0,3); - rendering_program_p_l.release(); - - buffers[bufn].release(); - ++bufn; vao[vaon].release(); - ++vaon; - + ++vaon; + m_are_buffers_initialized = true; } @@ -816,33 +804,52 @@ protected: QVector4D position((bb.xmax()-bb.xmin())/2, (bb.ymax()-bb.ymin())/2,bb.zmax(), 0.0 ); GLfloat shininess = 1.0f; - rendering_program.bind(); - mvpLocation[0] = rendering_program.uniformLocation("mvp_matrix"); - mvLocation = rendering_program.uniformLocation("mv_matrix"); - lightLocation[0] = rendering_program.uniformLocation("light_pos"); - lightLocation[1] = rendering_program.uniformLocation("light_diff"); - lightLocation[2] = rendering_program.uniformLocation("light_spec"); - lightLocation[3] = rendering_program.uniformLocation("light_amb"); - lightLocation[4] = rendering_program.uniformLocation("spec_power"); + rendering_program_mono.bind(); + mvpLocation[0] = rendering_program_mono.uniformLocation("mvp_matrix"); + mvLocation = rendering_program_mono.uniformLocation("mv_matrix"); + lightLocation[0] = rendering_program_mono.uniformLocation("light_pos"); + lightLocation[1] = rendering_program_mono.uniformLocation("light_diff"); + lightLocation[2] = rendering_program_mono.uniformLocation("light_spec"); + lightLocation[3] = rendering_program_mono.uniformLocation("light_amb"); + lightLocation[4] = rendering_program_mono.uniformLocation("spec_power"); - rendering_program.setUniformValue(lightLocation[0], position); - rendering_program.setUniformValue(lightLocation[1], diffuse); - rendering_program.setUniformValue(lightLocation[2], specular); - rendering_program.setUniformValue(lightLocation[3], m_ambient_color); - rendering_program.setUniformValue(lightLocation[4], shininess); - rendering_program.setUniformValue(mvpLocation[0], mvpMatrix); - rendering_program.setUniformValue(mvLocation, mvMatrix); + rendering_program_mono.setUniformValue(lightLocation[0], position); + rendering_program_mono.setUniformValue(lightLocation[1], diffuse); + rendering_program_mono.setUniformValue(lightLocation[2], specular); + rendering_program_mono.setUniformValue(lightLocation[3], m_ambient_color); + rendering_program_mono.setUniformValue(lightLocation[4], shininess); + rendering_program_mono.setUniformValue(mvpLocation[0], mvpMatrix); + rendering_program_mono.setUniformValue(mvLocation, mvMatrix); + + colorLocation1 = rendering_program_mono.uniformLocation("color"); + rendering_program_mono.release(); + + rendering_program_color.bind(); + mvpLocation[0] = rendering_program_color.uniformLocation("mvp_matrix"); + mvLocation = rendering_program_color.uniformLocation("mv_matrix"); + lightLocation[0] = rendering_program_color.uniformLocation("light_pos"); + lightLocation[1] = rendering_program_color.uniformLocation("light_diff"); + lightLocation[2] = rendering_program_color.uniformLocation("light_spec"); + lightLocation[3] = rendering_program_color.uniformLocation("light_amb"); + lightLocation[4] = rendering_program_color.uniformLocation("spec_power"); + + rendering_program_color.setUniformValue(lightLocation[0], position); + rendering_program_color.setUniformValue(lightLocation[1], diffuse); + rendering_program_color.setUniformValue(lightLocation[2], specular); + rendering_program_color.setUniformValue(lightLocation[3], m_ambient_color); + rendering_program_color.setUniformValue(lightLocation[4], shininess); + rendering_program_color.setUniformValue(mvpLocation[0], mvpMatrix); + rendering_program_color.setUniformValue(mvLocation, mvMatrix); if (m_use_mono_color) - colorLocation2 = rendering_program.uniformLocation("color"); - - rendering_program.release(); + { colorLocation2 = rendering_program_color.uniformLocation("color"); } + rendering_program_color.release(); - rendering_program_p_l.bind(); + /* rendering_program_p_l_.bind(); mvpLocation[1] = rendering_program_p_l.uniformLocation("mvp_matrix"); colorLocation = rendering_program_p_l.uniformLocation("color"); rendering_program.setUniformValue(mvpLocation[1], mvpMatrix); - rendering_program_p_l.release(); + rendering_program_p_l.release();*/ } virtual void draw() @@ -853,7 +860,7 @@ protected: QColor color; - if(m_draw_vertices) + /* if(m_draw_vertices) { ::glPointSize(m_size_points); vao[3].bind(); @@ -863,7 +870,7 @@ protected: (double)m_vertices_mono_color.blue()/(double)255); rendering_program_p_l.bind(); rendering_program_p_l.setAttributeValue(colorLocation,color); - glDrawArrays(GL_POINTS, 0, static_cast(pos_points.size()/3)); + // glDrawArrays(GL_POINTS, 0, static_cast(pos_points.size()/3)); rendering_program_p_l.release(); vao[3].release(); } @@ -878,34 +885,37 @@ protected: rendering_program_p_l.bind(); rendering_program_p_l.setAttributeValue(colorLocation,color); ::glLineWidth(m_size_edges); - glDrawArrays(GL_LINES, 0, static_cast(pos_segments.size()/3)); + // glDrawArrays(GL_LINES, 0, static_cast(pos_segments.size()/3)); rendering_program_p_l.release(); vao[2].release(); - } + }*/ if (m_draw_faces) { - if(m_flatShading) - { vao[0].bind(); } - else - { vao[1].bind(); } - + vao[0].bind(); attrib_buffers(this); - rendering_program.bind(); + rendering_program_mono.bind(); + color.setRgbF((double)m_faces_mono_color.red()/(double)255, + (double)m_faces_mono_color.green()/(double)255, + (double)m_faces_mono_color.blue()/(double)255); + rendering_program_mono.setUniformValue(colorLocation1,color); + glDrawArrays(GL_TRIANGLES, 0, static_cast(arrays[POS_MONO_FACES].size()/3)); + rendering_program_mono.release(); + vao[0].release(); + + vao[1].bind(); + attrib_buffers(this); + rendering_program_color.bind(); if (m_use_mono_color) { color.setRgbF((double)m_faces_mono_color.red()/(double)255, (double)m_faces_mono_color.green()/(double)255, (double)m_faces_mono_color.blue()/(double)255); - rendering_program.setUniformValue(colorLocation2,color); + rendering_program_color.setUniformValue(colorLocation2,color); } - glDrawArrays(GL_TRIANGLES, 0, static_cast(pos_faces.size()/3)); - rendering_program.release(); - - if(m_flatShading) - { vao[0].release(); } - else - { vao[1].release(); } + glDrawArrays(GL_TRIANGLES, 0, static_cast(arrays[POS_COLORED_FACES].size()/3)); + rendering_program_color.release(); + vao[1].release(); } } @@ -962,11 +972,11 @@ protected: void negate_all_normals() { - for (std::size_t i=0; ikey()==Qt::Key_M) && (modifiers==Qt::NoButton)) { m_use_mono_color=!m_use_mono_color; - initialize_buffers(); - compile_shaders(); displayMessage(QString("Mono color=%1.").arg(m_use_mono_color?"true":"false")); + compile_shaders(); + initialize_buffers(); updateGL(); } else if ((e->key()==Qt::Key_N) && (modifiers==Qt::NoButton)) { m_inverse_normal=!m_inverse_normal; negate_all_normals(); - initialize_buffers(); compile_shaders(); + initialize_buffers(); displayMessage(QString("Inverse normal=%1.").arg(m_inverse_normal?"true":"false")); updateGL(); } @@ -1156,7 +1168,8 @@ private: bool m_flatShading; bool m_use_mono_color; bool m_inverse_normal; - + bool m_empty; + double m_size_points; double m_size_edges; @@ -1173,25 +1186,43 @@ private: int normalsLocation; int mvpLocation[2]; int mvLocation; - int colorLocation; + int colorLocation1; int colorLocation2; int lightLocation[5]; - std::vector pos_points; - std::vector pos_segments; - std::vector pos_faces; - std::vector smooth_normals; - std::vector flat_normals; - std::vector colors; + enum + { POS_MONO_POINTS=0, + POS_COLORED_POINTS, + POS_MONO_SEGMENTS, + POS_COLORED_SEGMENTS, + POS_MONO_FACES, + POS_COLORED_FACES, + BEGIN_NORMAL, + SMOOTH_NORMAL_MONO_FACES=BEGIN_NORMAL, + FLAT_NORMAL_MONO_FACES, + SMOOTH_NORMAL_COLORED_FACES, + FLAT_NORMAL_COLORED_FACES, + END_NORMAL, + COLOR_POINTS=END_NORMAL, + COLOR_SEGMENTS, + COLOR_FACES, + LAST_INDEX + }; + + std::vector arrays[LAST_INDEX]; QGLBuffer buffers[NB_VBO_BUFFERS]; QOpenGLVertexArrayObject vao[NB_VAO_BUFFERS]; int colorsLocation; - QOpenGLShaderProgram rendering_program; - QOpenGLShaderProgram rendering_program_p_l; + QOpenGLShaderProgram rendering_program_mono; + QOpenGLShaderProgram rendering_program_color; + QOpenGLShaderProgram rendering_program_p_l_mono; + QOpenGLShaderProgram rendering_program_p_l_color; + // Local variables, used when we started a new face. bool m_face_started; + bool m_started_face_is_colored; std::vector points_of_face; std::vector vertex_normals_for_face; CGAL::Color color_of_face; From 2f0f97fa47fadef6fbe6b1395cdf0c959783b00a Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Wed, 15 Nov 2017 12:16:13 +0100 Subject: [PATCH 135/298] Update basic viewer to use a generic name. --- ...LCCViewerQt.inc => CMakeBasicViewerQt.inc} | 16 +++++------ .../Linear_cell_complex/CMakeLists.txt | 28 ++++++++++++------- .../linear_cell_complex_3_operations.cpp | 10 +++---- .../linear_cell_complex_3_viewer_qt.h | 9 ++++-- .../Linear_cell_complex/voronoi_2.cpp | 6 ++-- .../Linear_cell_complex/voronoi_3.cpp | 6 ++-- 6 files changed, 43 insertions(+), 32 deletions(-) rename Linear_cell_complex/examples/Linear_cell_complex/{CMakeLCCViewerQt.inc => CMakeBasicViewerQt.inc} (61%) diff --git a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLCCViewerQt.inc b/Linear_cell_complex/examples/Linear_cell_complex/CMakeBasicViewerQt.inc similarity index 61% rename from Linear_cell_complex/examples/Linear_cell_complex/CMakeLCCViewerQt.inc rename to Linear_cell_complex/examples/Linear_cell_complex/CMakeBasicViewerQt.inc index 467af4ff419..5dd94c1e7f9 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLCCViewerQt.inc +++ b/Linear_cell_complex/examples/Linear_cell_complex/CMakeBasicViewerQt.inc @@ -1,9 +1,9 @@ -# This file must be included in your CMakeLists.txt to use cgal_map_viewer_qt.h. +# This file must be included in your CMakeLists.txt to use the basic viewer # You need to link the libraries in your executable by using -# TARGET_LINK_LIBRARIES( myexec ${MAP_VIEWER_LIBRARIES}) +# TARGET_LINK_LIBRARIES( myexec ${BASIC_VIEWER_LIBRARIES}) if ( NOT CGAL_FOUND OR NOT CGAL_Qt5_FOUND) - message(STATUS "NOTICE: Libraries for lcc_viewer not found " + message(STATUS "NOTICE: Libraries for basic viewer not found " "(CGAL, Qt5, QGLViewer).") endif( NOT CGAL_FOUND OR NOT CGAL_Qt5_FOUND) @@ -20,14 +20,14 @@ add_definitions(-DQT_NO_KEYWORDS) include_directories( ${QGLVIEWER_INCLUDE_DIR} ) add_definitions(${QGLVIEWER_DEFINITIONS}) -set (MAP_VIEWER_LIBRARIES ${QT_LIBRARIES} ${QGLVIEWER_LIBRARIES} +set (BASIC_VIEWER_LIBRARIES ${QT_LIBRARIES} ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY}) # ${OPENGL_glu_LIBRARY} -set(MAP_VIEWER_MODULES Xml OpenGL) +set(BASIC_VIEWER_MODULES Xml OpenGL) -ADD_DEFINITIONS("-DCGAL_LCC_USE_VIEWER -DCGAL_LCC_USE_QT") +ADD_DEFINITIONS("-DCGAL_USE_BASIC_VIEWER") message(STATUS "Libraries for lcc_viewer found. You need to link them " "in your executable by using " - "TARGET_LINK_LIBRARIES( myexec \${MAP_VIEWER_LIBRARIES})") + "TARGET_LINK_LIBRARIES( myexec \${BASIC_VIEWER_LIBRARIES})") -set(LCC_VIEWER true) +set(USE_BASIC_VIEWER true) diff --git a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt b/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt index 22358aaf17c..620838e007b 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt +++ b/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt @@ -11,14 +11,16 @@ if(POLICY CMP0043) cmake_policy(SET CMP0043 OLD) endif() +ADD_DEFINITIONS("-std=c++11") + # If you want to visualize a linear cell complex, you can use the following viewer # based on qt. Just uncomment the following two lines, plus the lines qt5_use_modules below -# find_package(CGAL COMPONENTS Qt5) -# include("CMakeLCCViewerQt.inc") +find_package(CGAL COMPONENTS Qt5) +include("CMakeBasicViewerQt.inc") # If you don't want to visualize, use the following line (otherwise comment it) -find_package(CGAL QUIET) +# find_package(CGAL QUIET) # For Gprof. # ADD_DEFINITIONS("-pg") @@ -45,21 +47,27 @@ if ( CGAL_FOUND ) add_executable(voronoi_2 voronoi_2.cpp) target_link_libraries(voronoi_2 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} - ${MAP_VIEWER_LIBRARIES}) -# qt5_use_modules(voronoi_2 ${MAP_VIEWER_MODULES}) + ${BASIC_VIEWER_LIBRARIES}) + if (USE_BASIC_VIEWER) + qt5_use_modules(voronoi_2 ${BASIC_VIEWER_MODULES}) + endif(USE_BASIC_VIEWER) add_executable(voronoi_3 voronoi_3.cpp) target_link_libraries(voronoi_3 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} - ${MAP_VIEWER_LIBRARIES}) -# qt5_use_modules(voronoi_3 ${MAP_VIEWER_MODULES}) + ${BASIC_VIEWER_LIBRARIES}) + if (USE_BASIC_VIEWER) + qt5_use_modules(voronoi_3 ${BASIC_VIEWER_MODULES}) + endif(USE_BASIC_VIEWER) + create_single_source_cgal_program( "gmap_linear_cell_complex_3.cpp" ) add_executable(linear_cell_complex_3_operations linear_cell_complex_3_operations.cpp) target_link_libraries(linear_cell_complex_3_operations ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} - ${MAP_VIEWER_LIBRARIES}) -# qt5_use_modules(linear_cell_complex_3_operations ${MAP_VIEWER_MODULES}) - + ${BASIC_VIEWER_LIBRARIES}) + if (USE_BASIC_VIEWER) + qt5_use_modules(linear_cell_complex_3_operations ${BASIC_VIEWER_MODULES}) + endif(USE_BASIC_VIEWER) else() diff --git a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_operations.cpp b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_operations.cpp index 64a2002ddba..e5646197f9b 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_operations.cpp +++ b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_operations.cpp @@ -3,7 +3,7 @@ #include /* If you want to use a viewer, you can use qglviewer. */ -#ifdef CGAL_LCC_USE_QT +#ifdef CGAL_USE_BASIC_VIEWER #include "linear_cell_complex_3_viewer_qt.h" #endif @@ -54,9 +54,9 @@ void run_test() lcc.template sew<3>(lcc.template opposite<2>(lcc.next(dh1)), lcc.other_orientation(lcc.template opposite<2>(lcc.previous(dh3)))); -#ifdef CGAL_LCC_USE_VIEWER +#ifdef CGAL_USE_BASIC_VIEWER display_lcc(lcc); -#endif // CGAL_LCC_USE_VIEWER +#endif // CGAL_USE_BASIC_VIEWER lcc.insert_cell_1_in_cell_2(lcc.next(dh1), Alpha1::run(lcc, lcc.previous(dh1))); @@ -75,9 +75,9 @@ void run_test() lcc.display_characteristics(std::cout) << ", valid=" << lcc.is_valid() << std::endl; -#ifdef CGAL_LCC_USE_VIEWER +#ifdef CGAL_USE_BASIC_VIEWER display_lcc(lcc); -#endif // CGAL_LCC_USE_VIEWER +#endif // CGAL_USE_BASIC_VIEWER } diff --git a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h index 5851bf790c4..e5435528447 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h +++ b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3_viewer_qt.h @@ -138,7 +138,10 @@ protected: CGAL::Color c=ColorFunctor::run(lcc, dh); - face_begin(c); + if (c.red()<60 || c.green()<60 || c.blue()<60) + mono_face_begin(); + else + colored_face_begin(c); cur=dh; do @@ -159,14 +162,14 @@ protected: if ( d2!=NULL ) { Local_point p2 = geomutils.get_point(lcc, d2); - add_segment(p1, p2); + add_mono_segment(p1, p2); } } void compute_vertex(Dart_const_handle dh, bool& empty) { Local_point p = geomutils.get_point(lcc, dh); - add_point(p); + add_mono_point(p); } void compute_elements() diff --git a/Linear_cell_complex/examples/Linear_cell_complex/voronoi_2.cpp b/Linear_cell_complex/examples/Linear_cell_complex/voronoi_2.cpp index 7045b188ab1..43ac93a3327 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/voronoi_2.cpp +++ b/Linear_cell_complex/examples/Linear_cell_complex/voronoi_2.cpp @@ -7,7 +7,7 @@ #include /* If you want to use a viewer, you can use qglviewer. */ -#ifdef CGAL_LCC_USE_QT +#ifdef CGAL_USE_BASIC_VIEWER #include "linear_cell_complex_3_viewer_qt.h" #endif @@ -57,9 +57,9 @@ void display_voronoi(LCC_2& alcc, Dart_handle adart) << alcc.is_valid() << std::endl; -#ifdef CGAL_LCC_USE_VIEWER +#ifdef CGAL_USE_BASIC_VIEWER display_lcc(alcc); -#endif // CGAL_LCC_USE_VIEWER +#endif // CGAL_USE_BASIC_VIEWER } template diff --git a/Linear_cell_complex/examples/Linear_cell_complex/voronoi_3.cpp b/Linear_cell_complex/examples/Linear_cell_complex/voronoi_3.cpp index 9506bb8e9fc..28bf93b0f12 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/voronoi_3.cpp +++ b/Linear_cell_complex/examples/Linear_cell_complex/voronoi_3.cpp @@ -6,7 +6,7 @@ #include /* If you want to use a viewer, you can use one qglviewer. */ -#ifdef CGAL_LCC_USE_QT +#ifdef CGAL_USE_BASIC_VIEWER #include "linear_cell_complex_3_viewer_qt.h" #endif @@ -60,9 +60,9 @@ void display_voronoi(LCC_3& alcc, Dart_handle adart) << alcc.is_valid() << std::endl; -#ifdef CGAL_LCC_USE_VIEWER +#ifdef CGAL_USE_BASIC_VIEWER display_lcc(alcc); -#endif // CGAL_LCC_USE_VIEWER +#endif // CGAL_USE_BASIC_VIEWER } template From 4c893ef009dfec9340b0082d54c41088b816a1a3 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Wed, 15 Nov 2017 14:19:43 +0100 Subject: [PATCH 136/298] Add missing #include --- Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h index 41541c15f94..b992f7271b0 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h +++ b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h @@ -39,6 +39,7 @@ #include #include +#include #define NB_VBO_BUFFERS 8 #define NB_VAO_BUFFERS 4 From e17736a9d941683279c1359cec1d0a12a5e624fc Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 14:30:43 +0100 Subject: [PATCH 137/298] Change the default INSTALL_CMAKE_DIR --- Installation/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index c8b8c95dc52..1986cc48be8 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -766,7 +766,7 @@ set ( CGAL_INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING "The folder where CGAL user-side scripts will be installed, relative to CMAKE_INSTALL_PREFIX" ) -set ( CGAL_INSTALL_CMAKE_DIR "${CGAL_INSTALL_LIB_DIR}/CGAL" +set ( CGAL_INSTALL_CMAKE_DIR "${CGAL_INSTALL_LIB_DIR}/cmake/CGAL" CACHE STRING "The folder where CGAL CMake modules will be installed, relative to CMAKE_INSTALL_PREFIX" ) From 3f3f5b1a52a290109de8d70400f718337d8adcf5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 14:45:12 +0100 Subject: [PATCH 138/298] Do not rely on CMAKE_MODULE_PATH --- Installation/cmake/modules/CGAL_Common.cmake | 4 ++-- .../modules/CGAL_CreateSingleSourceCGALProgram.cmake | 2 +- .../cmake/modules/CGAL_Locate_CGAL_TAUCS.cmake | 2 +- Installation/cmake/modules/CGAL_SetupBoost.cmake | 2 +- .../cmake/modules/CGAL_SetupCGALDependencies.cmake | 6 +++--- .../modules/CGAL_SetupCGAL_CoreDependencies.cmake | 2 +- .../cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake | 2 +- .../cmake/modules/CGAL_SetupDependencies.cmake | 4 ++-- Installation/cmake/modules/CGAL_UseRS.cmake | 2 +- Installation/cmake/modules/CGAL_UseRS3.cmake | 4 ++-- Installation/cmake/modules/FindBLAS.cmake | 6 +++--- Installation/cmake/modules/FindF2C.cmake | 2 +- Installation/cmake/modules/FindGMP.cmake | 2 +- Installation/cmake/modules/FindLAPACK.cmake | 6 +++--- Installation/cmake/modules/FindMKL.cmake | 4 ++-- Installation/cmake/modules/FindMPFR.cmake | 2 +- Installation/cmake/modules/FindNTL.cmake | 2 +- Installation/cmake/modules/FindRS.cmake | 2 +- Installation/cmake/modules/FindRS3.cmake | 2 +- Installation/cmake/modules/FindTAUCS.cmake | 4 ++-- Installation/cmake/modules/UseCGAL.cmake | 10 +++++----- 21 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Installation/cmake/modules/CGAL_Common.cmake b/Installation/cmake/modules/CGAL_Common.cmake index 2110d9c3aa1..68a9791fde7 100644 --- a/Installation/cmake/modules/CGAL_Common.cmake +++ b/Installation/cmake/modules/CGAL_Common.cmake @@ -1,4 +1,4 @@ -include(CGAL_Macros) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Macros.cmake) if(RUNNING_CGAL_AUTO_TEST) # Just to avoid a warning from CMake if that variable is set on the command line... @@ -43,7 +43,7 @@ if( NOT CGAL_COMMON_FILE_INCLUDED ) hide_variable(CMAKE_UNAME) # Optionally setup the Visual Leak Detector - include(CGAL_SetupVLD) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupVLD.cmake) CGAL_SetupVLD() if(VLD_FOUND) message(STATUS "Visual Leak Detector (VLD) is enabled.") diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index 927256f64e9..d5e2d3ad340 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -3,7 +3,7 @@ if(CGAL_CreateSingleSourceCGALProgram_included) endif(CGAL_CreateSingleSourceCGALProgram_included) set(CGAL_CreateSingleSourceCGALProgram_included TRUE) -include(CGAL_add_test) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_add_test.cmake) include(CMakeParseArguments) function(create_single_source_cgal_program firstfile ) diff --git a/Installation/cmake/modules/CGAL_Locate_CGAL_TAUCS.cmake b/Installation/cmake/modules/CGAL_Locate_CGAL_TAUCS.cmake index 9dac365114f..ca4470a2124 100644 --- a/Installation/cmake/modules/CGAL_Locate_CGAL_TAUCS.cmake +++ b/Installation/cmake/modules/CGAL_Locate_CGAL_TAUCS.cmake @@ -12,7 +12,7 @@ # CGAL_TAUCS_LIBRARIES_DIR -list of folders (using full path name) containing # TAUCS (and optionaly BLAS and LAPACK) libraries -include(CGAL_Macros) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Macros.cmake) if ( NOT CGAL_TAUCS_FOUND ) diff --git a/Installation/cmake/modules/CGAL_SetupBoost.cmake b/Installation/cmake/modules/CGAL_SetupBoost.cmake index 09b794a2914..d0c0ab4e68c 100644 --- a/Installation/cmake/modules/CGAL_SetupBoost.cmake +++ b/Installation/cmake/modules/CGAL_SetupBoost.cmake @@ -15,7 +15,7 @@ if ( CGAL_Boost_Setup ) endif() set ( CGAL_Boost_Setup TRUE ) -include(CGAL_TweakFindBoost) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_TweakFindBoost.cmake) set ( CGAL_requires_Boost_libs TRUE ) if ( DEFINED MSVC_VERSION AND "${MSVC_VERSION}" GREATER 1800) diff --git a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake index a1673d93304..3b7077f3b21 100644 --- a/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGALDependencies.cmake @@ -38,18 +38,18 @@ set(CGAL_SetupCGALDependencies_included TRUE) # ^^^^^^^^^^^^ # - :module:`CGAL_SetupGMP` if(NOT CGAL_DISABLE_GMP) - include(CGAL_SetupGMP) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupGMP.cmake) endif() #.rst: # - :module:`CGAL_SetupLEDA` if(WITH_LEDA) - include(CGAL_SetupLEDA) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupLEDA.cmake) endif() #.rst: # - :module:`CGAL_SetupBoost` -include(CGAL_SetupBoost) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupBoost.cmake) #.rst: # Result Variables diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake index 4598ec1c078..f75afef66ea 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_CoreDependencies.cmake @@ -30,7 +30,7 @@ set(CGAL_SetupCGAL_CoreDependencies_included TRUE) # Set to `TRUE` if the dependencies of `CGAL_Core` were found. if(NOT CGAL_DISABLE_GMP) - include(CGAL_SetupGMP) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupGMP.cmake) if(GMP_FOUND) set(CGAL_Core_FOUND TRUE) endif() diff --git a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake index b8be3141991..08280e9632c 100644 --- a/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupCGAL_Qt5Dependencies.cmake @@ -95,4 +95,4 @@ function(CGAL_setup_CGAL_Qt5_dependencies target) target_link_libraries( ${target} ${keyword} Qt5::OpenGL Qt5::Svg ${OPENGL_LIBRARIES}) endfunction() -include(Use_CGAL_Qt5_headers) +include(${CMAKE_CURRENT_LIST_DIR}/Use_CGAL_Qt5_headers.cmake) diff --git a/Installation/cmake/modules/CGAL_SetupDependencies.cmake b/Installation/cmake/modules/CGAL_SetupDependencies.cmake index 6575cdf542d..1c0135b155a 100644 --- a/Installation/cmake/modules/CGAL_SetupDependencies.cmake +++ b/Installation/cmake/modules/CGAL_SetupDependencies.cmake @@ -1,4 +1,4 @@ -include(CGAL_Macros) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Macros.cmake) message ( STATUS "External libraries supported: ${CGAL_SUPPORTING_3RD_PARTY_LIBRARIES}") @@ -82,4 +82,4 @@ if( NOT GMP_FOUND ) endif( NOT GMP_FOUND ) # finally setup Boost -include(CGAL_SetupBoost) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupBoost.cmake) diff --git a/Installation/cmake/modules/CGAL_UseRS.cmake b/Installation/cmake/modules/CGAL_UseRS.cmake index 5104bdd7549..d638ff0f12a 100644 --- a/Installation/cmake/modules/CGAL_UseRS.cmake +++ b/Installation/cmake/modules/CGAL_UseRS.cmake @@ -9,7 +9,7 @@ if( RS_FOUND AND NOT RS_SETUP ) message( STATUS "RS libraries: ${RS_LIBRARIES}" ) if( APPLE AND CMAKE_COMPILER_IS_GNUCXX ) - include( CGAL_VersionUtils ) + include( ${CMAKE_CURRENT_LIST_DIR}/CGAL_VersionUtils.cmake ) EXEC_PROGRAM( ${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE RS_GXX_VERSION ) diff --git a/Installation/cmake/modules/CGAL_UseRS3.cmake b/Installation/cmake/modules/CGAL_UseRS3.cmake index 77a4065ad44..3a560aecd72 100644 --- a/Installation/cmake/modules/CGAL_UseRS3.cmake +++ b/Installation/cmake/modules/CGAL_UseRS3.cmake @@ -3,7 +3,7 @@ if( RS3_FOUND AND NOT RS3_SETUP ) - include( CGAL_UseRS ) + include( ${CMAKE_CURRENT_LIST_DIR}/CGAL_UseRS.cmake ) # add rs3 parameters, if necessary (rs3 must be always after rsexport) message( STATUS "UseRS3" ) @@ -40,7 +40,7 @@ if( RS3_FOUND AND NOT RS3_SETUP ) message( STATUS "Using old RS signatures" ) endif( RS3_OLD_INCLUDES ) - include(CGAL_UseMPFI) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_UseMPFI.cmake) set (RS3_SETUP TRUE) diff --git a/Installation/cmake/modules/FindBLAS.cmake b/Installation/cmake/modules/FindBLAS.cmake index f00a896d66f..34f5bb5fdf2 100644 --- a/Installation/cmake/modules/FindBLAS.cmake +++ b/Installation/cmake/modules/FindBLAS.cmake @@ -32,8 +32,8 @@ include(CheckFunctionExists) -include(CGAL_GeneratorSpecificSettings) -include(CGAL_Macros) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Macros.cmake) # This macro checks for the existence of the combination of fortran libraries @@ -161,7 +161,7 @@ else() # Look first for the TAUCS library distributed with CGAL in auxiliary/taucs. # Set CGAL_TAUCS_FOUND, CGAL_TAUCS_INCLUDE_DIR and CGAL_TAUCS_LIBRARIES_DIR. - include(CGAL_Locate_CGAL_TAUCS) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Locate_CGAL_TAUCS.cmake) # Search for BLAS in CGAL_TAUCS_INCLUDE_DIR/CGAL_TAUCS_LIBRARIES_DIR (TAUCS shipped with CGAL)... if(CGAL_TAUCS_FOUND AND CGAL_AUTO_LINK_ENABLED) diff --git a/Installation/cmake/modules/FindF2C.cmake b/Installation/cmake/modules/FindF2C.cmake index b677ec18218..105a31632d2 100644 --- a/Installation/cmake/modules/FindF2C.cmake +++ b/Installation/cmake/modules/FindF2C.cmake @@ -15,7 +15,7 @@ else(F2C_LIBRARIES) # F2C shipped with CGAL (as part of TAUCS)? # If found, we will search for f2c library in ${CGAL_TAUCS_LIBRARIES_DIR}. - include(CGAL_Locate_CGAL_TAUCS) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Locate_CGAL_TAUCS.cmake) find_library(F2C_LIBRARIES NAMES f2c g2c vcf2c PATHS ${CGAL_TAUCS_LIBRARIES_DIR} diff --git a/Installation/cmake/modules/FindGMP.cmake b/Installation/cmake/modules/FindGMP.cmake index 9f2ac1802b1..1cd156da92f 100644 --- a/Installation/cmake/modules/FindGMP.cmake +++ b/Installation/cmake/modules/FindGMP.cmake @@ -9,7 +9,7 @@ # TODO: support MacOSX include(FindPackageHandleStandardArgs) -include(CGAL_GeneratorSpecificSettings) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) if(GMP_INCLUDE_DIR) set(GMP_in_cache TRUE) diff --git a/Installation/cmake/modules/FindLAPACK.cmake b/Installation/cmake/modules/FindLAPACK.cmake index 660429c0756..8612095f14e 100644 --- a/Installation/cmake/modules/FindLAPACK.cmake +++ b/Installation/cmake/modules/FindLAPACK.cmake @@ -31,8 +31,8 @@ include(CheckFunctionExists) -include(CGAL_GeneratorSpecificSettings) -include(CGAL_Macros) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Macros.cmake) # This macro checks for the existence of the combination of fortran libraries @@ -172,7 +172,7 @@ else() # Look first for the TAUCS library distributed with CGAL in auxiliary/taucs. # Set CGAL_TAUCS_FOUND, CGAL_TAUCS_INCLUDE_DIR and CGAL_TAUCS_LIBRARIES_DIR. - include(CGAL_Locate_CGAL_TAUCS) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Locate_CGAL_TAUCS.cmake) # Search for LAPACK in CGAL_TAUCS_INCLUDE_DIR/CGAL_TAUCS_LIBRARIES_DIR (TAUCS shipped with CGAL)... if(CGAL_TAUCS_FOUND AND CGAL_AUTO_LINK_ENABLED) diff --git a/Installation/cmake/modules/FindMKL.cmake b/Installation/cmake/modules/FindMKL.cmake index 92def59f19c..391c7b1d082 100644 --- a/Installation/cmake/modules/FindMKL.cmake +++ b/Installation/cmake/modules/FindMKL.cmake @@ -15,8 +15,8 @@ include(CheckFunctionExists) -include(CGAL_GeneratorSpecificSettings) -include(CGAL_Macros) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Macros.cmake) # This macro checks for the existence of the combination of fortran libraries diff --git a/Installation/cmake/modules/FindMPFR.cmake b/Installation/cmake/modules/FindMPFR.cmake index c01948fb188..f108294cb6f 100644 --- a/Installation/cmake/modules/FindMPFR.cmake +++ b/Installation/cmake/modules/FindMPFR.cmake @@ -8,7 +8,7 @@ # TODO: support MacOSX include(FindPackageHandleStandardArgs) -include(CGAL_GeneratorSpecificSettings) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) if(MPFR_INCLUDE_DIR) set(MPFR_in_cache TRUE) diff --git a/Installation/cmake/modules/FindNTL.cmake b/Installation/cmake/modules/FindNTL.cmake index 1a76114b2b3..55d671bd1c1 100644 --- a/Installation/cmake/modules/FindNTL.cmake +++ b/Installation/cmake/modules/FindNTL.cmake @@ -10,7 +10,7 @@ if( (TARGET CGAL AND NOT WITH_GMP) OR NOT GMP_FOUND ) else( (TARGET CGAL AND NOT WITH_GMP) OR NOT GMP_FOUND ) - include( CGAL_VersionUtils ) + include( ${CMAKE_CURRENT_LIST_DIR}/CGAL_VersionUtils.cmake ) get_dependency_version( GMP ) diff --git a/Installation/cmake/modules/FindRS.cmake b/Installation/cmake/modules/FindRS.cmake index 9ddba75c32c..00eac97e03b 100644 --- a/Installation/cmake/modules/FindRS.cmake +++ b/Installation/cmake/modules/FindRS.cmake @@ -11,7 +11,7 @@ endif() if( MPFI_FOUND ) - include( CGAL_VersionUtils ) + include( ${CMAKE_CURRENT_LIST_DIR}/CGAL_VersionUtils.cmake ) find_path(RS_INCLUDE_DIR NAMES rs_exports.h diff --git a/Installation/cmake/modules/FindRS3.cmake b/Installation/cmake/modules/FindRS3.cmake index d2d1753e83b..fbb782bac6a 100644 --- a/Installation/cmake/modules/FindRS3.cmake +++ b/Installation/cmake/modules/FindRS3.cmake @@ -9,7 +9,7 @@ if ( RS_FOUND ) if( MPFI_FOUND ) - include( CGAL_VersionUtils ) + include( ${CMAKE_CURRENT_LIST_DIR}/CGAL_VersionUtils.cmake ) find_path(RS3_INCLUDE_DIR NAMES rs3_fncts.h diff --git a/Installation/cmake/modules/FindTAUCS.cmake b/Installation/cmake/modules/FindTAUCS.cmake index d6625e7471c..f45c51dd9d6 100644 --- a/Installation/cmake/modules/FindTAUCS.cmake +++ b/Installation/cmake/modules/FindTAUCS.cmake @@ -11,7 +11,7 @@ # TAUCS_USE_FILE - The name of the cmake module to include to compile # applications or libraries using TAUCS. -include(CGAL_GeneratorSpecificSettings) +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) # TAUCS requires LAPACK if(TAUCS_FIND_QUIETLY OR NOT TAUCS_FIND_REQUIRED) @@ -43,7 +43,7 @@ else() # Look first for the TAUCS library distributed with CGAL in auxiliary/taucs. # Set CGAL_TAUCS_FOUND, CGAL_TAUCS_INCLUDE_DIR and CGAL_TAUCS_LIBRARIES_DIR. - include(CGAL_Locate_CGAL_TAUCS) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Locate_CGAL_TAUCS.cmake) # Search for TAUCS headers in ${CGAL_TAUCS_INCLUDE_DIR} (TAUCS shipped with CGAL), # else in $TAUCS_INC_DIR environment variable. diff --git a/Installation/cmake/modules/UseCGAL.cmake b/Installation/cmake/modules/UseCGAL.cmake index c3dac852dc4..ada87290488 100644 --- a/Installation/cmake/modules/UseCGAL.cmake +++ b/Installation/cmake/modules/UseCGAL.cmake @@ -17,16 +17,16 @@ set(CGAL_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT USE_CGAL_FILE_INCLUDED) set(USE_CGAL_FILE_INCLUDED 1) - include(CGAL_Common) - include(CGAL_SetupFlags) - include(CGAL_GeneratorSpecificSettings) - include(CGAL_TweakFindBoost) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_Common.cmake) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SetupFlags.cmake) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_GeneratorSpecificSettings.cmake) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_TweakFindBoost.cmake) set(CGAL_INSTALLED_SCM_BRANCH_NAME ${CGAL_SCM_BRANCH_NAME}) set(CGAL_SCM_BRANCH_NAME "") if( NOT "${CGAL_INSTALLED_SCM_BRANCH_NAME}" STREQUAL "" ) - include(CGAL_SCM) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_SCM.cmake) CGAL_detect_git(${CMAKE_SOURCE_DIR}) if ( NOT "${CGAL_SCM_BRANCH_NAME}" STREQUAL "" ) message ( STATUS "Code taken from Git branch: ${CGAL_SCM_BRANCH_NAME}" ) From 7cff890473d5a499b81fe4a9eb347e6a3d55ef10 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 14:45:23 +0100 Subject: [PATCH 139/298] Change the installation of CGALConfig.cmake --- Installation/CMakeLists.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 1986cc48be8..28d82aa8ad1 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -898,10 +898,17 @@ if ( ZLIB_IN_AUXILIARY ) endif() -install(FILES - ${CMAKE_BINARY_DIR}/CGALConfigVersion.cmake - ${CMAKE_BINARY_DIR}/config/CGALConfig.cmake - DESTINATION ${CGAL_INSTALL_CMAKE_DIR} ) +if(NOT CGAL_HEADER_ONLY_STEP_2) + install(FILES + ${CMAKE_BINARY_DIR}/CGALConfigVersion.cmake + ${CMAKE_BINARY_DIR}/config/CGALConfig.cmake + DESTINATION ${CGAL_INSTALL_CMAKE_DIR} ) +else() + install(FILES + ${CMAKE_BINARY_DIR}/CGALConfigVersion.cmake + ${CMAKE_CURRENT_LIST_DIR}/lib/cmake/CGAL/CGALConfig.cmake + DESTINATION ${CGAL_INSTALL_CMAKE_DIR} ) +endif() if(CGAL_INSTALL_MAN_DIR) install(FILES auxiliary/cgal_create_cmake_script.1 DESTINATION ${CGAL_INSTALL_MAN_DIR} ) From 489e1b2ae1652c035161016507c48c3cf58622d3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 14:47:34 +0100 Subject: [PATCH 140/298] Remove debug message --- Installation/cmake/modules/FindQGLViewer.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/Installation/cmake/modules/FindQGLViewer.cmake b/Installation/cmake/modules/FindQGLViewer.cmake index 0e63355b7c2..aae632f8332 100644 --- a/Installation/cmake/modules/FindQGLViewer.cmake +++ b/Installation/cmake/modules/FindQGLViewer.cmake @@ -61,8 +61,6 @@ if(QGLVIEWER_LIBRARY_RELEASE) endif() -message("QGLViewer: ${QGLVIEWER_LIBRARIES}") - IF(QGLVIEWER_INCLUDE_DIR AND QGLVIEWER_LIBRARIES) SET(QGLVIEWER_FOUND TRUE) ENDIF(QGLVIEWER_INCLUDE_DIR AND QGLVIEWER_LIBRARIES) From 5c32e0ab623291ef6298df74b045852d11d137c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 15 Nov 2017 15:12:41 +0100 Subject: [PATCH 141/298] turn some #ifndef that should be #ifdef --- .../CGAL/Polygon_mesh_processing/internal/refine_impl.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_impl.h index 621cc53c154..d21f49f2145 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/refine_impl.h @@ -169,7 +169,7 @@ private: collect_interior_edges(faces, border_edges, interior_edges, included_map); collect_interior_edges(new_faces, border_edges, interior_edges, included_map); - #ifndef CGAL_PMP_REFINE_DEBUG + #ifdef CGAL_PMP_REFINE_DEBUG std::cerr << "Test " << interior_edges.size() << " edges " << std::endl; #endif //do not just use std::set (included_map) for iteration, the order effects the output (we like to make it deterministic) @@ -180,7 +180,7 @@ private: } } - #ifndef CGAL_PMP_REFINE_DEBUG + #ifdef CGAL_PMP_REFINE_DEBUG std::cerr << "|flips| = " << flips << std::endl; #endif return flips > 0; From 67ab9d124da22e1d52f8bb2c34cb461485773f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 14 Nov 2017 18:37:38 +0100 Subject: [PATCH 142/298] correctly handle the case of faces with more than one cc of the boundary --- .../convert_nef_polyhedron_to_polygon_mesh.h | 134 ++++++++++++++++-- 1 file changed, 119 insertions(+), 15 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/convert_nef_polyhedron_to_polygon_mesh.h b/BGL/include/CGAL/boost/graph/convert_nef_polyhedron_to_polygon_mesh.h index ed36806bc5c..163a9427b60 100644 --- a/BGL/include/CGAL/boost/graph/convert_nef_polyhedron_to_polygon_mesh.h +++ b/BGL/include/CGAL/boost/graph/convert_nef_polyhedron_to_polygon_mesh.h @@ -26,6 +26,11 @@ #include #include #include +#include +#include +#include +#include + namespace CGAL{ @@ -62,6 +67,12 @@ struct Shell_vertex_index_visitor {} }; +struct FaceInfo2 +{ + FaceInfo2() : visited(false) {} + bool visited; +}; + //Visitor used to collect polygons template struct Shell_polygons_visitor @@ -87,21 +98,113 @@ struct Shell_polygons_visitor typename Nef_polyhedron::Halffacet_const_handle f = opposite_facet->twin(); - typename Nef_polyhedron::SHalfedge_around_facet_const_circulator - sfc1(f->facet_cycles_begin()); + if (cpp11::next(f->facet_cycles_begin())==f->facet_cycles_end()) + { + // create a new polygon + polygons.push_back( std::vector() ); + fc = f->facet_cycles_begin(); + se = typename Nef_polyhedron::SHalfedge_const_handle(fc); + CGAL_assertion(se!=0); + typename Nef_polyhedron::SHalfedge_around_facet_const_circulator + hc_start(se), hc_end(hc_start); + // insert the vertex indices of the new polygon + CGAL_For_all(hc_start,hc_end) + polygons.back().push_back(vertex_indices[hc_start->source()->center_vertex()]); + if (!is_marked) + std::reverse(polygons.back().begin(), polygons.back().end()); + } + else{ + typedef typename Nef_polyhedron::Kernel Kernel; + typedef Triangulation_2_projection_traits_3 P_traits; + typedef Triangulation_vertex_base_with_info_2 Vb; + typedef Triangulation_face_base_with_info_2 Fbb; + typedef Constrained_triangulation_face_base_2 Fb; + typedef Triangulation_data_structure_2 TDS; + typedef Exact_predicates_tag Itag; + typedef Constrained_Delaunay_triangulation_2 CDT; - // create a new polygon - polygons.push_back( std::vector() ); - fc = f->facet_cycles_begin(); - se = typename Nef_polyhedron::SHalfedge_const_handle(fc); - CGAL_assertion(se!=0); - typename Nef_polyhedron::SHalfedge_around_facet_const_circulator - hc_start(se), hc_end(hc_start); - // insert the vertex indices of the new polygon - CGAL_For_all(hc_start,hc_end) - polygons.back().push_back(vertex_indices[hc_start->source()->center_vertex()]); - if (!is_marked) - std::reverse(polygons.back().begin(), polygons.back().end()); + P_traits p_traits(opposite_facet->plane().orthogonal_vector()); + CDT cdt(p_traits); + + // insert each connected component of the boundary of the face as + // a polygonal constraints + typename Nef_polyhedron::Halffacet_cycle_const_iterator + hfc_start=f->facet_cycles_begin(), hfc_end=f->facet_cycles_end(); + CGAL_For_all(hfc_start, hfc_end) + { + fc=hfc_start; + se = typename Nef_polyhedron::SHalfedge_const_handle(fc); + CGAL_assertion(se!=0); + typename Nef_polyhedron::SHalfedge_around_facet_const_circulator + hc_start(se), hc_end(hc_start); + // collect contour vertices + std::vector< typename CDT::Vertex_handle > polygon; + CGAL_For_all(hc_start,hc_end) + { + typename CDT::Vertex_handle vh=cdt.insert(hc_start->source()->center_vertex()->point()); + vh->info() = vertex_indices[hc_start->source()->center_vertex()]; + polygon.push_back(vh); + } + std::size_t nb_constraints = polygon.size(); + polygon.push_back(polygon.front()); + for(std::size_t i=0; iinfo().visited=true; + std::vector queue; + for (int i=0; i<3; ++i) + queue.push_back(typename CDT::Edge(fh, i) ); + while(true) + { + typename CDT::Edge e = queue.back(); + queue.pop_back(); + e=cdt.mirror_edge(e); + if (e.first->info().visited) continue; + if (cdt.is_constrained(e)) + { + queue.clear(); + queue.push_back(e); + break; + } + else + { + for(int i=1; i<3; ++i) + { + typename CDT::Edge candidate(e.first, (e.second+i)%3); + if (!candidate.first->neighbor(candidate.second)->info().visited) + queue.push_back( candidate ); + } + e.first->info().visited=true; + } + } + // now extract triangles inside the face + while(!queue.empty()) + { + typename CDT::Edge e = queue.back(); + queue.pop_back(); + if (e.first->info().visited) continue; + e.first->info().visited=true; + polygons.resize(polygons.size()+1); + if (is_marked) + for (int i=2; i>=0; --i) + polygons.back().push_back(e.first->vertex(i)->info()); + else + for (int i=0; i<3; ++i) + polygons.back().push_back(e.first->vertex(i)->info()); + + for(int i=1; i<3; ++i) + { + typename CDT::Edge candidate(e.first, (e.second+i)%3); + if (!cdt.is_constrained(candidate) && + !candidate.first->neighbor(candidate.second)->info().visited) + { + queue.push_back( cdt.mirror_edge(candidate) ); + } + } + } + } } void visit(typename Nef_polyhedron::SFace_const_handle) @@ -138,7 +241,8 @@ void collect_polygon_mesh_info( /// \ingroup PkgBGL /// Converts an objet of type `Nef_polyhedron_3` into a polygon mesh model of `MutableFaceGraph`. -/// Note that contrary to `Nef_polyhedron_3::convert_to_polyhedron()`, the output is not triangulated. +/// Note that contrary to `Nef_polyhedron_3::convert_to_polyhedron()`, the output is not triangulated +/// (but faces with more than one connected component of the boundary). /// The polygon mesh can be triangulated using the function `triangulate_faces()`. /// \pre `Polygon_mesh` must have an internal point property map with value type being `Nef_polyhedron_3::Point_3`. /// \pre `nef.simple()` From 0681ac6dbc5d0ea42c51bcfa50bf47d09ec870c3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 17:00:02 +0100 Subject: [PATCH 143/298] Fix the TBB_USE_FILE warnings --- .../examples/Classification/CMakeLists.txt | 8 +- .../test/Classification/CMakeLists.txt | 7 +- .../cmake/modules/CGAL_target_use_TBB.cmake | 6 +- Installation/cmake/modules/FindTBB.cmake | 2 +- Installation/test/Installation/CMakeLists.txt | 7 +- Mesh_3/benchmark/Mesh_3/CMakeLists.txt | 8 +- Mesh_3/examples/Mesh_3/CMakeLists.txt | 27 ++++-- Mesh_3/test/Mesh_3/CMakeLists.txt | 22 ++++- .../Point_set_processing_3/CMakeLists.txt | 17 +++- .../Point_set_processing_3/CMakeLists.txt | 17 +++- .../Polygon_mesh_processing/CMakeLists.txt | 6 +- .../Polygon_mesh_processing/CMakeLists.txt | 12 +-- Polyhedron/demo/Polyhedron/CMakeLists.txt | 94 +++++++++---------- .../Plugins/AABB_tree/CMakeLists.txt | 5 +- .../Plugins/Camera_position/CMakeLists.txt | 2 +- .../Plugins/Classification/CMakeLists.txt | 7 +- .../Convex_decomposition/CMakeLists.txt | 2 +- .../Plugins/Convex_hull/CMakeLists.txt | 5 +- .../Polyhedron/Plugins/Display/CMakeLists.txt | 2 +- .../demo/Polyhedron/Plugins/IO/CMakeLists.txt | 32 +++---- .../Polyhedron/Plugins/Mesh_2/CMakeLists.txt | 9 +- .../Polyhedron/Plugins/Mesh_3/CMakeLists.txt | 26 +++-- .../Operations_on_polyhedra/CMakeLists.txt | 6 +- .../Polyhedron/Plugins/PCA/CMakeLists.txt | 14 +-- .../Polyhedron/Plugins/PMP/CMakeLists.txt | 74 ++++++++------- .../Plugins/Point_set/CMakeLists.txt | 56 +++++++---- .../Subdivision_methods/CMakeLists.txt | 2 +- .../Plugins/Surface_mesh/CMakeLists.txt | 20 ++-- .../Surface_mesh_deformation/CMakeLists.txt | 4 +- .../implicit_functions/CMakeLists.txt | 23 +---- .../Polyhedron/polyhedron_demo_macros.cmake | 9 +- .../CMakeLists.txt | 28 ++---- .../test/STL_Extension/CMakeLists.txt | 8 +- .../CMakeLists.txt | 11 ++- TDS_3/test/TDS_3/CMakeLists.txt | 31 +----- .../demo/Triangulation_3/CMakeLists.txt | 14 ++- .../test/Triangulation_3/CMakeLists.txt | 14 ++- 37 files changed, 333 insertions(+), 304 deletions(-) diff --git a/Classification/examples/Classification/CMakeLists.txt b/Classification/examples/Classification/CMakeLists.txt index d8edcd17208..80a80c42062 100644 --- a/Classification/examples/Classification/CMakeLists.txt +++ b/Classification/examples/Classification/CMakeLists.txt @@ -32,11 +32,6 @@ if ( NOT Boost_FOUND ) endif() find_package( TBB ) -if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) -endif() - find_package(OpenCV QUIET) @@ -54,6 +49,9 @@ include( CGAL_CreateSingleSourceCGALProgram ) set(needed_cxx_features cxx_rvalue_references cxx_variadic_templates) create_single_source_cgal_program( "example_classification.cpp" CXX_FEATURES ${needed_cxx_features} ) +if(TBB_FOUND) + CGAL_target_use_TBB(example_classification) +endif() create_single_source_cgal_program( "example_generation_and_training.cpp" CXX_FEATURES ${needed_cxx_features} ) create_single_source_cgal_program( "example_feature.cpp" CXX_FEATURES ${needed_cxx_features} ) diff --git a/Classification/test/Classification/CMakeLists.txt b/Classification/test/Classification/CMakeLists.txt index 7d085c187a2..30b903bf36c 100644 --- a/Classification/test/Classification/CMakeLists.txt +++ b/Classification/test/Classification/CMakeLists.txt @@ -38,10 +38,6 @@ if ( NOT Boost_FOUND ) endif() find_package( TBB ) -if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) -endif() # include for local directory include_directories( BEFORE include ) @@ -60,3 +56,6 @@ include( CGAL_CreateSingleSourceCGALProgram ) set(needed_cxx_features cxx_rvalue_references cxx_variadic_templates) create_single_source_cgal_program( "test_classification_point_set.cpp" CXX_FEATURES ${needed_cxx_features} ) +if(TBB_FOUND) + CGAL_target_use_TBB( test_classification_point_set ) +endif() diff --git a/Installation/cmake/modules/CGAL_target_use_TBB.cmake b/Installation/cmake/modules/CGAL_target_use_TBB.cmake index 0e3e3f8c803..99b4e6de38c 100644 --- a/Installation/cmake/modules/CGAL_target_use_TBB.cmake +++ b/Installation/cmake/modules/CGAL_target_use_TBB.cmake @@ -6,7 +6,7 @@ set(CGAL_target_use_TBB_included TRUE) function(CGAL_target_use_TBB target) set(keyword PUBLIC) - target_include_directories ( ${target} SYSTEM ${keyword} ${TBB_INCLUDE_DIRS} ) - target_link_libraries( ${target} ${keyword} ${TBB_LIBRARIES} ) - target_compile_options( ${target} ${keyword} -DNOMINMAX -DCGAL_LINKED_WITH_TBB ) + target_include_directories ( ${target} SYSTEM PRIVATE ${TBB_INCLUDE_DIRS} ) + target_link_libraries( ${target} PUBLIC ${TBB_LIBRARIES} ) + target_compile_options( ${target} PRIVATE -DNOMINMAX -DCGAL_LINKED_WITH_TBB ) endfunction() diff --git a/Installation/cmake/modules/FindTBB.cmake b/Installation/cmake/modules/FindTBB.cmake index 13f4d9292a2..0d9a135cd52 100644 --- a/Installation/cmake/modules/FindTBB.cmake +++ b/Installation/cmake/modules/FindTBB.cmake @@ -418,7 +418,7 @@ if (TBB_FOUND) endif (TBB_FOUND) set(TBB_USE_FILE "UseTBB") - +include(${CMAKE_CURRENT_LIST_DIR}/CGAL_target_use_TBB.cmake) ### ** Emacs settings ** ### Local Variables: ### cmake-tab-width: 4 diff --git a/Installation/test/Installation/CMakeLists.txt b/Installation/test/Installation/CMakeLists.txt index ca9a06d013b..ce85c54f412 100644 --- a/Installation/test/Installation/CMakeLists.txt +++ b/Installation/test/Installation/CMakeLists.txt @@ -46,11 +46,10 @@ if ( CGAL_FOUND ) endif() find_package( TBB QUIET ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() create_single_source_cgal_program( "test_TBB.cpp" ) + if(TBB_FOUND) + CGAL_target_use_TBB(test_TBB) + endif() create_link_to_program(CGAL) diff --git a/Mesh_3/benchmark/Mesh_3/CMakeLists.txt b/Mesh_3/benchmark/Mesh_3/CMakeLists.txt index 77e16344a65..9222bff6fe1 100644 --- a/Mesh_3/benchmark/Mesh_3/CMakeLists.txt +++ b/Mesh_3/benchmark/Mesh_3/CMakeLists.txt @@ -68,11 +68,6 @@ if ( CGAL_FOUND ) find_package( TBB ) endif( LINK_WITH_TBB ) endif() - - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() # Link with Boost.ProgramOptions (optional) find_package(Boost QUIET COMPONENTS program_options) @@ -91,6 +86,9 @@ if ( CGAL_FOUND ) # Compilable benchmark set (BENCHMARK_SOURCE_FILES "concurrency.cpp") + if(TBB_FOUND) + CGAL_target_use_TBB(concurrency) + endif() ADD_MSVC_PRECOMPILED_HEADER("StdAfx.h" "StdAfx.cpp" BENCHMARK_SOURCE_FILES) create_single_source_cgal_program( ${BENCHMARK_SOURCE_FILES} ) diff --git a/Mesh_3/examples/Mesh_3/CMakeLists.txt b/Mesh_3/examples/Mesh_3/CMakeLists.txt index 4aa7648ef55..bd3429d445d 100644 --- a/Mesh_3/examples/Mesh_3/CMakeLists.txt +++ b/Mesh_3/examples/Mesh_3/CMakeLists.txt @@ -39,12 +39,6 @@ if ( CGAL_FOUND ) endif( LINK_WITH_TBB ) endif() - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - - set(VTK_LIBS "") find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE) if(VTK_FOUND) @@ -107,6 +101,27 @@ if ( CGAL_FOUND ) # create_single_source_cgal_program( "mesh_polyhedral_surface_tolerance_region.cpp" ) # create_single_source_cgal_program( "mesh_polyhedral_edge_tolerance_region.cpp" ) + foreach(target + mesh_3D_image_with_features + mesh_3D_image + mesh_polyhedral_domain + mesh_3D_image_with_custom_initialization + mesh_two_implicit_spheres_with_balls + mesh_optimization_lloyd_example + mesh_optimization_example + mesh_implicit_sphere + mesh_polyhedral_complex_sm + mesh_implicit_sphere_variable_size + mesh_polyhedral_domain_sm + mesh_polyhedral_domain_with_lipschitz_sizing + mesh_polyhedral_complex + mesh_polyhedral_domain_with_features + mesh_3D_image_variable_size) + if(TBB_FOUND AND TARGET ${target}) + CGAL_target_use_TBB(${target}) + endif() + endforeach() + else() message(STATUS "NOTICE: This program requires Boost >= 1.34.1, and will not be compiled.") endif() diff --git a/Mesh_3/test/Mesh_3/CMakeLists.txt b/Mesh_3/test/Mesh_3/CMakeLists.txt index ab7b3690533..9eb5f4fb69a 100644 --- a/Mesh_3/test/Mesh_3/CMakeLists.txt +++ b/Mesh_3/test/Mesh_3/CMakeLists.txt @@ -14,11 +14,6 @@ if ( CGAL_FOUND ) find_package( TBB QUIET ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - include( CGAL_CreateSingleSourceCGALProgram ) include_directories (BEFORE ../../include) @@ -57,6 +52,23 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "test_mesh_3_issue_1554.cpp" ) create_single_source_cgal_program( "test_mesh_polyhedral_domain_with_features_deprecated.cpp" ) + foreach(target + test_meshing_polyhedron_with_features + test_meshing_utilities.h + test_mesh_implicit_domains + test_meshing_implicit_function + test_meshing_3D_image + test_meshing_3D_gray_image + test_meshing_unit_tetrahedron + test_backward_compatibility + test_meshing_polyhedron + test_meshing_polyhedral_complex + ) + if(TBB_FOUND AND TARGET ${target}) + CGAL_target_use_TBB(${target}) + endif() + endforeach() + else() message(STATUS "This program requires the CGAL library, and will not be compiled.") diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index 07b25c695c3..f207c30c23b 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -36,10 +36,6 @@ if ( CGAL_FOUND ) if( ACTIVATE_CONCURRENT_PSP3 OR ENV{ACTIVATE_CONCURRENT_PSP3} ) find_package( TBB REQUIRED ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() endif() # Executables that do *not* require EIGEN or LAPACK @@ -96,6 +92,19 @@ if ( CGAL_FOUND ) endif(EIGEN3_FOUND OR LAPACK_FOUND) + foreach(target + scale_estimation_example + wlop_simplify_and_regularize_point_set_example + bilateral_smooth_point_set_example + edge_aware_upsample_point_set_example + average_spacing_example + normals_example + jet_smoothing_example + normal_estimation) + if(TBB_FOUND AND TARGET ${target}) + CGAL_target_use_TBB(${target}) + endif() + endforeach() else() message(STATUS "NOTICE: This program requires the CGAL library, and will not be compiled.") diff --git a/Point_set_processing_3/test/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/test/Point_set_processing_3/CMakeLists.txt index 8907cb6e9a7..3059bda82c5 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/test/Point_set_processing_3/CMakeLists.txt @@ -32,11 +32,6 @@ if ( CGAL_FOUND ) find_package( TBB QUIET ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - # Executables that do *not* require LAPACK create_single_source_cgal_program( "read_test.cpp" ) create_single_source_cgal_program( "read_test_with_different_pmaps.cpp" ) @@ -74,6 +69,18 @@ if ( CGAL_FOUND ) endif(EIGEN3_FOUND OR LAPACK_FOUND) + foreach(target + analysis_test + smoothing_test + bilateral_smoothing_test + wlop_simplify_and_regularize_test + edge_aware_upsample_test + normal_estimation_test) + if(TBB_FOUND AND TARGET ${target}) + CGAL_target_use_TBB(${target}) + endif() + endforeach() + else() message(STATUS "NOTICE: This program requires the CGAL library, and will not be compiled.") diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 8a20bbc6c96..2cffcc102aa 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -62,13 +62,13 @@ find_package(Eigen3 3.2.0) #(requires 3.2.0 or greater) include( CGAL_CreateSingleSourceCGALProgram ) find_package( TBB ) +create_single_source_cgal_program( "hausdorff_distance_remeshing_example.cpp") if( TBB_FOUND ) - include( ${TBB_USE_FILE} ) - list( APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES} ) + CGAL_target_use_TBB(hausdorff_distance_remeshing_example) else() message( STATUS "NOTICE: Intel TBB was not found. hausdorff_distance_example will use sequential code." ) endif() -create_single_source_cgal_program( "hausdorff_distance_remeshing_example.cpp") + if (EIGEN3_FOUND) # Executables that require Eigen 3.2 include( ${EIGEN3_USE_FILE} ) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index 758084def30..c1f236dbac9 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -47,12 +47,6 @@ include_directories( BEFORE ../../include ) find_package(Eigen3 3.2.0) #(requires 3.2.0 or greater) find_package( TBB ) -if( TBB_FOUND ) - include( ${TBB_USE_FILE} ) - list( APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES} ) -else() - message( STATUS "NOTICE: Intel TBB was not found. test_pmp_distance will use sequential code." ) -endif() include( CGAL_CreateSingleSourceCGALProgram ) if (EIGEN3_FOUND) @@ -101,6 +95,12 @@ endif() create_single_source_cgal_program("triangulate_hole_polyline_test.cpp") create_single_source_cgal_program("surface_intersection_sm_poly.cpp" ) + if( TBB_FOUND ) + CGAL_target_use_TBB(test_pmp_distance) + else() + message( STATUS "NOTICE: Intel TBB was not found. test_pmp_distance will use sequential code." ) + endif() + if(OpenMesh_FOUND) create_single_source_cgal_program("remeshing_test_P_SM_OM.cpp" ) target_link_libraries( remeshing_test_P_SM_OM ${OPENMESH_LIBRARIES} ) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 5e9c27f129f..7ae8aeae2f0 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -85,10 +85,7 @@ option(POLYHEDRON_DEMO_ACTIVATE_CONCURRENCY if( POLYHEDRON_DEMO_ACTIVATE_CONCURRENCY ) find_package( TBB ) - if( TBB_FOUND ) - include( ${TBB_USE_FILE} ) - list( APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES} ) - else() + if( NOT TBB_FOUND ) message( STATUS "NOTICE: Intel TBB was not found. Bilateral smoothing and WLOP plugins are faster if TBB is linked." ) endif() endif() @@ -104,10 +101,7 @@ if( ACTIVATE_CONCURRENT_MESH_3 OR ENV{ACTIVATE_CONCURRENT_MESH_3} ) add_definitions( -DCGAL_CONCURRENT_MESH_3 ) if(NOT TBB_FOUND) find_package( TBB REQUIRED ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - else() + if( NOT TBB_FOUND ) message(STATUS "NOTICE: Intel TBB was not found. Mesh_3 is faster if TBB is linked.") endif() endif() @@ -146,9 +140,9 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) qt5_add_resources ( CGAL_Qt5_RESOURCE_FILES Polyhedron_3.qrc ) qt5_add_resources(gl_splat_rc GlSplat/glsplat.qrc) add_library(gl_splat SHARED - GlSplat/GlSplat.cpp GlSplat/Shader.cpp ${gl_splat_rc}) - qt5_use_modules(gl_splat OpenGL Gui) - target_link_libraries(gl_splat ${OPENGL_gl_LIBRARY} ${QGLVIEWER_LIBRARIES}) + GlSplat/GlSplat.cpp GlSplat/Shader.cpp ${gl_splat_rc}) + target_link_libraries(gl_splat PRIVATE Qt5::OpenGL Qt5::Gui) + target_link_libraries(gl_splat PRIVATE ${OPENGL_gl_LIBRARY} ${QGLVIEWER_LIBRARIES}) find_path(CGAL_THREE_HEADERS_PATH NAME CGAL/Three/Scene_item.h @@ -191,8 +185,8 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) TextRenderer.cpp TextRenderer_moc.cpp Polyhedron_demo_plugin_helper.cpp) - qt5_use_modules(demo_framework OpenGL Gui Widgets Script) target_link_libraries(demo_framework + PUBLIC Qt5::OpenGL Qt5::Widgets Qt5::Gui Qt5::Script ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} @@ -205,32 +199,33 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) add_library(scene_basic_objects SHARED Scene_plane_item.cpp Scene_spheres_item.cpp -) - target_link_libraries(scene_basic_objects + ) + target_link_libraries(scene_basic_objects + PUBLIC demo_framework ${CGAL_LIBRARIES} ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} gl_splat - ) - qt5_use_modules(scene_basic_objects OpenGL Gui Script Widgets) - + Qt5::OpenGL Qt5::Gui Qt5::Script Qt5::Widgets) add_library(scene_color_ramp SHARED Color_ramp.cpp) - qt5_use_modules(scene_color_ramp Core) + target_link_libraries(scene_color_ramp PRIVATE Qt5::Core) add_library(point_dialog SHARED Show_point_dialog.cpp Show_point_dialog.ui ${Show_point_dialogUI_FILES}) - qt5_use_modules(point_dialog OpenGL Gui Script Widgets) + target_link_libraries(point_dialog + PUBLIC Qt5::OpenGL Qt5::Gui Qt5::Script Qt5::Widgets) macro(add_item item_name) add_library(${item_name} SHARED ${ARGN}) - qt5_use_modules(${item_name} OpenGL Gui Script Widgets) - target_link_libraries(${item_name} demo_framework ${CGAL_LIBRARIES} ${Boost_LIBRARIES}) + target_link_libraries(${item_name} + PUBLIC demo_framework ${CGAL_LIBRARIES} ${Boost_LIBRARIES} + Qt5::OpenGL Qt5::Gui Qt5::Script Qt5::Widgets) endmacro(add_item) add_item(scene_c2t3_item Scene_c2t3_item.cpp) add_item(scene_c3t3_item Scene_c3t3_item.cpp) - target_link_libraries(scene_c3t3_item scene_polyhedron_item scene_polygon_soup_item scene_basic_objects ${TBB_LIBRARIES}) + target_link_libraries(scene_c3t3_item PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_basic_objects ${TBB_LIBRARIES}) add_item(scene_polyhedron_item Scene_polyhedron_item.cpp) add_item(scene_polyhedron_transform_item Plugins/PCA/Scene_facegraph_transform_item.cpp ) add_item(scene_sm_transform_item Plugins/PCA/Scene_facegraph_transform_item.cpp ) @@ -245,56 +240,56 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) # special add_item(scene_polylines_item Scene_polylines_item.cpp) - target_link_libraries(scene_polylines_item scene_basic_objects) + target_link_libraries(scene_polylines_item PUBLIC scene_basic_objects) add_item(scene_polyhedron_item_decorator Scene_polyhedron_item_decorator.cpp ) - target_link_libraries(scene_polyhedron_item_decorator scene_polyhedron_item) + target_link_libraries(scene_polyhedron_item_decorator PUBLIC scene_polyhedron_item) add_item(scene_surface_mesh_item_decorator Scene_polyhedron_item_decorator.cpp ) - target_link_libraries(scene_surface_mesh_item_decorator scene_surface_mesh_item) + target_link_libraries(scene_surface_mesh_item_decorator PUBLIC scene_surface_mesh_item) target_compile_definitions(scene_surface_mesh_item_decorator PUBLIC "-DUSE_SURFACE_MESH" ) add_item(scene_polyhedron_and_sm_item_k_ring_selection Scene_polyhedron_item_k_ring_selection.cpp) - target_link_libraries(scene_polyhedron_and_sm_item_k_ring_selection scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(scene_polyhedron_and_sm_item_k_ring_selection PUBLIC scene_polyhedron_item scene_surface_mesh_item) add_item(scene_poly_item_k_ring_selection Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp) - target_link_libraries(scene_poly_item_k_ring_selection scene_polyhedron_item) + target_link_libraries(scene_poly_item_k_ring_selection PUBLIC scene_polyhedron_item) add_item(scene_sm_item_k_ring_selection Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp) - target_link_libraries(scene_sm_item_k_ring_selection scene_surface_mesh_item) + target_link_libraries(scene_sm_item_k_ring_selection PUBLIC scene_surface_mesh_item) target_compile_definitions(scene_sm_item_k_ring_selection PUBLIC "-DUSE_SURFACE_MESH" ) add_item(scene_polyhedron_selection_item Scene_polyhedron_selection_item.cpp) - target_link_libraries(scene_polyhedron_selection_item scene_polyhedron_item_decorator scene_poly_item_k_ring_selection) + target_link_libraries(scene_polyhedron_selection_item PUBLIC scene_polyhedron_item_decorator scene_poly_item_k_ring_selection) add_item(scene_surface_mesh_selection_item Scene_polyhedron_selection_item.cpp) - target_link_libraries(scene_surface_mesh_selection_item scene_surface_mesh_item_decorator scene_sm_item_k_ring_selection) + target_link_libraries(scene_surface_mesh_selection_item PUBLIC scene_surface_mesh_item_decorator scene_sm_item_k_ring_selection) target_compile_definitions(scene_surface_mesh_selection_item PUBLIC "-DUSE_SURFACE_MESH" ) add_item(scene_polyhedron_shortest_path_item Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.cpp) - target_link_libraries(scene_polyhedron_shortest_path_item scene_polyhedron_item_decorator scene_polyhedron_item scene_polylines_item) + target_link_libraries(scene_polyhedron_shortest_path_item PUBLIC scene_polyhedron_item_decorator scene_polyhedron_item scene_polylines_item) add_item(scene_sm_shortest_path_item Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.cpp) - target_link_libraries(scene_sm_shortest_path_item scene_surface_mesh_item_decorator scene_surface_mesh_item scene_polylines_item) + target_link_libraries(scene_sm_shortest_path_item PUBLIC scene_surface_mesh_item_decorator scene_surface_mesh_item scene_polylines_item) if(EIGEN3_FOUND ) add_item(scene_textured_polyhedron_item Scene_textured_polyhedron_item.cpp texture.cpp) add_item(scene_textured_surface_mesh_item Scene_textured_surface_mesh_item.cpp texture.cpp) qt5_wrap_ui( editionUI_FILES Plugins/Surface_mesh_deformation/Deform_mesh.ui ) add_item(scene_edit_polyhedron_item Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp - ${editionUI_FILES}) - target_link_libraries(scene_edit_polyhedron_item scene_polyhedron_item scene_surface_mesh_item scene_polyhedron_and_sm_item_k_ring_selection - scene_basic_objects) + ${editionUI_FILES}) + target_link_libraries(scene_edit_polyhedron_item PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polyhedron_and_sm_item_k_ring_selection + scene_basic_objects) endif() add_item(scene_implicit_function_item Scene_implicit_function_item.cpp ) - target_link_libraries(scene_implicit_function_item scene_color_ramp) + target_link_libraries(scene_implicit_function_item PUBLIC scene_color_ramp) add_item(scene_polygon_soup_item Scene_polygon_soup_item.cpp) - target_link_libraries(scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(scene_polygon_soup_item PUBLIC scene_polyhedron_item scene_surface_mesh_item) add_item(scene_nef_polyhedron_item Scene_nef_polyhedron_item.cpp) - target_link_libraries(scene_nef_polyhedron_item scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(scene_nef_polyhedron_item PUBLIC scene_polyhedron_item scene_surface_mesh_item) find_package(LASLIB) if (LASLIB_FOUND) @@ -302,13 +297,16 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) include_directories(${LASLIB_INCLUDE_DIR}) include_directories(${LASZIP_INCLUDE_DIR}) add_item(scene_points_with_normal_item Scene_points_with_normal_item.cpp) - target_link_libraries( scene_points_with_normal_item gl_splat ${LASLIB_LIBRARIES}) + target_link_libraries( scene_points_with_normal_item PUBLIC gl_splat ${LASLIB_LIBRARIES}) else() add_item(scene_points_with_normal_item Scene_points_with_normal_item.cpp) - target_link_libraries( scene_points_with_normal_item gl_splat ) + target_link_libraries( scene_points_with_normal_item PUBLIC gl_splat ) + endif() + if(TBB_FOUND) + CGAL_target_use_TBB(scene_points_with_normal_item) endif() - target_link_libraries( demo_framework gl_splat) + target_link_libraries( demo_framework PUBLIC gl_splat) @@ -329,26 +327,26 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) File_loader_dialog_moc.cpp ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES} ${FileLoaderDialogUI_files} ${MainWindowUI_files} ${PreferencesUI_FILES} ${statisticsUI_FILES}) - target_link_libraries(polyhedron_demo demo_framework point_dialog) - qt5_use_modules(polyhedron_demo Gui OpenGL Widgets Script) + target_link_libraries(polyhedron_demo PUBLIC + demo_framework point_dialog Qt5::Gui Qt5::OpenGL Qt5::Widgets Qt5::Script) add_executable ( Polyhedron_3 Polyhedron_3.cpp ) - target_link_libraries( Polyhedron_3 polyhedron_demo ) + target_link_libraries( Polyhedron_3 PRIVATE polyhedron_demo ) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Polyhedron_3 ) if( POLYHEDRON_QTSCRIPT_DEBUGGER ) if(TARGET Qt5::ScriptTools) - qt5_use_modules(polyhedron_demo ScriptTools) + target_link_libraries(polyhedron_demo PUBLIC Qt5::ScriptTools) else() message(STATUS "POLYHEDRON_QTSCRIPT_DEBUGGER is set to TRUE but the Qt5 ScriptTools library was not found.") endif() endif() - target_link_libraries( Polyhedron_3 demo_framework ) + target_link_libraries( Polyhedron_3 PRIVATE demo_framework ) # Link with CGAL - target_link_libraries( Polyhedron_3 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) + target_link_libraries( Polyhedron_3 PUBLIC ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) # Link with libQGLViewer, OpenGL - target_link_libraries( Polyhedron_3 ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY}) + target_link_libraries( Polyhedron_3 PUBLIC ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY}) add_to_cached_list( CGAL_EXECUTABLE_TARGETS Polyhedron_3 ) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt index 1dfd56f2e66..367251c51fe 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt @@ -1,4 +1,7 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(cut_plugin Cut_plugin ) -target_link_libraries(cut_plugin scene_polyhedron_item scene_surface_mesh_item scene_basic_objects scene_color_ramp) +target_link_libraries(cut_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_basic_objects scene_color_ramp) +if(TBB_FOUND) + CGAL_target_use_TBB(cut_plugin) +endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt index 78d186744e2..cc5cc80dd7b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Camera_position/CMakeLists.txt @@ -5,5 +5,5 @@ include( polyhedron_demo_macros ) Camera_positions_list ${cameraUI_FILES}) - target_link_libraries( camera_positions_plugin ${QGLVIEWER_LIBRARIES} demo_framework) + target_link_libraries( camera_positions_plugin PUBLIC ${QGLVIEWER_LIBRARIES} demo_framework) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt index d13c4722d85..a54a9832d13 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt @@ -8,12 +8,15 @@ if(EIGEN3_FOUND) if(OpenCV_FOUND) message(STATUS "Found OpenCV ${OpenCV_VERSION}") include_directories(${OpenCV_INCLUDE_DIRS}) - target_link_libraries(classification_plugin scene_points_with_normal_item scene_polylines_item scene_polygon_soup_item scene_color_ramp ${OpenCV_LIBS}) + target_link_libraries(classification_plugin PUBLIC scene_points_with_normal_item scene_polylines_item scene_polygon_soup_item scene_color_ramp ${OpenCV_LIBS}) target_compile_definitions(classification_plugin PUBLIC "-DCGAL_LINKED_WITH_OPENCV") else() - target_link_libraries(classification_plugin scene_points_with_normal_item scene_polylines_item scene_polygon_soup_item scene_color_ramp) + target_link_libraries(classification_plugin PUBLIC scene_points_with_normal_item scene_polylines_item scene_polygon_soup_item scene_color_ramp) message(STATUS "NOTICE: OpenCV was not found. Random forest predicate for classification will not be available.") endif() + if(TBB_FOUND) + CGAL_target_use_TBB(classification_plugin) + endif() else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Classification plugin will not be available.") diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/CMakeLists.txt index beba465bedf..8c621c0b873 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/CMakeLists.txt @@ -1,4 +1,4 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(nef_plugin Nef_plugin) - target_link_libraries(nef_plugin scene_nef_polyhedron_item) + target_link_libraries(nef_plugin PUBLIC scene_nef_polyhedron_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt index 4c93c3097ee..a0f11636ede 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt @@ -1,6 +1,7 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(convex_hull_plugin Convex_hull_plugin) -target_link_libraries(convex_hull_plugin scene_polyhedron_item scene_points_with_normal_item scene_polylines_item scene_polyhedron_selection_item scene_surface_mesh_item) +target_link_libraries(convex_hull_plugin PUBLIC scene_polyhedron_item scene_points_with_normal_item scene_polylines_item scene_polyhedron_selection_item scene_surface_mesh_item) + polyhedron_demo_plugin(kernel_plugin Kernel_plugin) -target_link_libraries(kernel_plugin scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(kernel_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt index f454d3ea496..37d87fc5580 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/CMakeLists.txt @@ -2,4 +2,4 @@ include( polyhedron_demo_macros ) qt5_wrap_ui( display_propertyUI_FILES Display_property.ui ) polyhedron_demo_plugin(display_property_plugin Display_property_plugin ${display_propertyUI_FILES}) -target_link_libraries(display_property_plugin scene_surface_mesh_item scene_color_ramp) +target_link_libraries(display_property_plugin PUBLIC scene_surface_mesh_item scene_color_ramp) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt index 8b5b7db9c1f..a1fa6892011 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt @@ -1,38 +1,38 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(gocad_plugin GOCAD_io_plugin) -target_link_libraries(gocad_plugin scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(gocad_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) qt5_wrap_ui( funcUI_FILES Function_dialog.ui ) polyhedron_demo_plugin(io_implicit_function_plugin Implicit_function_io_plugin ${funcUI_FILES}) -target_link_libraries(io_implicit_function_plugin scene_implicit_function_item) +target_link_libraries(io_implicit_function_plugin PUBLIC scene_implicit_function_item) polyhedron_demo_plugin(nef_io_plugin Nef_io_plugin) -target_link_libraries(nef_io_plugin scene_nef_polyhedron_item) +target_link_libraries(nef_io_plugin PUBLIC scene_nef_polyhedron_item) polyhedron_demo_plugin(off_plugin OFF_io_plugin) -target_link_libraries(off_plugin scene_polyhedron_item scene_polygon_soup_item scene_points_with_normal_item) +target_link_libraries(off_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_points_with_normal_item) polyhedron_demo_plugin(off_to_nef_plugin OFF_to_nef_io_plugin) -target_link_libraries(off_to_nef_plugin scene_nef_polyhedron_item) +target_link_libraries(off_to_nef_plugin PUBLIC scene_nef_polyhedron_item) polyhedron_demo_plugin(polylines_io_plugin Polylines_io_plugin) -target_link_libraries(polylines_io_plugin scene_polylines_item) +target_link_libraries(polylines_io_plugin PUBLIC scene_polylines_item) polyhedron_demo_plugin(selection_io_plugin Selection_io_plugin) -target_link_libraries(selection_io_plugin scene_polyhedron_selection_item) +target_link_libraries(selection_io_plugin PUBLIC scene_polyhedron_selection_item) polyhedron_demo_plugin(selection_io_sm_plugin Selection_io_plugin) -target_link_libraries(selection_io_sm_plugin scene_surface_mesh_selection_item) +target_link_libraries(selection_io_sm_plugin PUBLIC scene_surface_mesh_selection_item) polyhedron_demo_plugin(stl_plugin STL_io_plugin) -target_link_libraries(stl_plugin scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item) +target_link_libraries(stl_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item) polyhedron_demo_plugin(surface_mesh_io_plugin Surface_mesh_io_plugin) -target_link_libraries(surface_mesh_io_plugin scene_surface_mesh_item scene_polygon_soup_item) +target_link_libraries(surface_mesh_io_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item) polyhedron_demo_plugin(surf_io_plugin Surf_io_plugin) -target_link_libraries(surf_io_plugin scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(surf_io_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) @@ -43,12 +43,12 @@ if (VTK_FOUND) if ("${VTK_VERSION_MAJOR}" GREATER "5") if(VTK_LIBRARIES) polyhedron_demo_plugin(vtk_plugin VTK_io_plugin) - target_link_libraries(vtk_plugin scene_polyhedron_item scene_polylines_item scene_c3t3_item + target_link_libraries(vtk_plugin PUBLIC scene_polyhedron_item scene_polylines_item scene_c3t3_item vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML vtkFiltersCore vtkFiltersSources) polyhedron_demo_plugin(vtk_sm_plugin VTK_io_plugin) - target_link_libraries(vtk_sm_plugin scene_surface_mesh_item scene_polylines_item scene_c3t3_item + target_link_libraries(vtk_sm_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_c3t3_item vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML vtkFiltersCore vtkFiltersSources) target_compile_definitions(vtk_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) @@ -63,7 +63,7 @@ else() message(STATUS "NOTICE : the vtk IO plugin needs VTK 6.0 or greater and will not be compiled.") endif() polyhedron_demo_plugin(xyz_plugin XYZ_io_plugin) -target_link_libraries(xyz_plugin scene_points_with_normal_item) +target_link_libraries(xyz_plugin PUBLIC scene_points_with_normal_item) list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_rvalue_references has_cxx_rvalues) list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_variadic_templates has_cxx_variadic) @@ -74,12 +74,12 @@ else() set(needed_cxx_features cxx_rvalue_references cxx_variadic_templates) polyhedron_demo_plugin(ply_plugin PLY_io_plugin) - target_link_libraries(ply_plugin scene_points_with_normal_item scene_polygon_soup_item scene_surface_mesh_item scene_polygon_soup_item) + target_link_libraries(ply_plugin PUBLIC scene_points_with_normal_item scene_polygon_soup_item scene_surface_mesh_item scene_polygon_soup_item) target_compile_features(ply_plugin PRIVATE ${needed_cxx_features}) if (LASLIB_FOUND) polyhedron_demo_plugin(las_plugin LAS_io_plugin) - target_link_libraries(las_plugin scene_points_with_normal_item ${LASLIB_LIBRARIES}) + target_link_libraries(las_plugin PUBLIC scene_points_with_normal_item ${LASLIB_LIBRARIES}) target_compile_features(las_plugin PRIVATE ${needed_cxx_features}) else() message(STATUS "NOTICE : the LAS IO plugin needs LAS libraries and will not be compiled.") diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt index 749469868f5..4efa4d8d677 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt @@ -3,7 +3,8 @@ include( polyhedron_demo_macros ) qt5_wrap_ui( mesh_2UI_FILES mesh_2_dialog.ui) polyhedron_demo_plugin(mesh_2_plugin Mesh_2_plugin ${mesh_2UI_FILES}) #if the plugin uses external libraries like scene_items -target_link_libraries(mesh_2_plugin scene_polyhedron_item - scene_surface_mesh_item - scene_polylines_item - scene_points_with_normal_item) +target_link_libraries(mesh_2_plugin PUBLIC + scene_polyhedron_item + scene_surface_mesh_item + scene_polylines_item + scene_points_with_normal_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt index 8e1847ebfa5..5b182a95c53 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt @@ -10,7 +10,7 @@ if ( Boost_VERSION GREATER 103400 ) polyhedron_demo_plugin(mesh_3_plugin Mesh_3_plugin Mesh_3_plugin_cgal_code.cpp Meshing_thread.cpp split_polylines.cpp ${meshingUI_FILES}) - target_link_libraries(mesh_3_plugin scene_polyhedron_item scene_polygon_soup_item scene_polylines_item scene_implicit_function_item scene_image_item + target_link_libraries(mesh_3_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_polylines_item scene_implicit_function_item scene_image_item scene_surface_mesh_item scene_c3t3_item ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} ) set(VTK_LIBS "") @@ -34,22 +34,28 @@ if ( Boost_VERSION GREATER 103400 ) if(Boost_FILESYSTEM_FOUND) qt5_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui) polyhedron_demo_plugin(io_image_plugin Io_image_plugin Volume_plane_intersection.cpp Raw_image_dialog.cpp ${imgUI_FILES} ${VOLUME_MOC_OUTFILES}) - target_link_libraries(io_image_plugin scene_image_item ${VTK_LIBS} ) + target_link_libraries(io_image_plugin PUBLIC scene_image_item ${VTK_LIBS} ) else() message( STATUS "NOTICE : the Io_image_plugin needs boost-filesystem to work and will not be compiled") endif() polyhedron_demo_plugin(mesh_3_optimization_plugin Optimization_plugin Optimization_plugin_cgal_code.cpp Optimizer_thread.cpp ${meshingUI_FILES}) - target_link_libraries(mesh_3_optimization_plugin scene_c3t3_item scene_polyhedron_item scene_surface_mesh_item scene_image_item scene_implicit_function_item ) + target_link_libraries(mesh_3_optimization_plugin PUBLIC scene_c3t3_item scene_polyhedron_item scene_surface_mesh_item scene_image_item scene_implicit_function_item ) polyhedron_demo_plugin(c3t3_io_plugin C3t3_io_plugin) - target_link_libraries(c3t3_io_plugin scene_c3t3_item) - else( Boost_VERSION GREATER 103400 ) - message(STATUS "warning: the plugin mesh_3_plugin requires Boost>=1.34.1 and will not be compiled.") - endif( Boost_VERSION GREATER 103400 ) - qt5_wrap_ui( ribUI_FILES Rib_dialog.ui) - polyhedron_demo_plugin(c3t3_rib_exporter_plugin C3t3_rib_exporter_plugin ${ribUI_FILES}) - target_link_libraries(c3t3_rib_exporter_plugin scene_c3t3_item) + target_link_libraries(c3t3_io_plugin PUBLIC scene_c3t3_item) +else( Boost_VERSION GREATER 103400 ) + message(STATUS "warning: the plugin mesh_3_plugin requires Boost>=1.34.1 and will not be compiled.") +endif( Boost_VERSION GREATER 103400 ) + +qt5_wrap_ui( ribUI_FILES Rib_dialog.ui) +polyhedron_demo_plugin(c3t3_rib_exporter_plugin C3t3_rib_exporter_plugin ${ribUI_FILES}) +target_link_libraries(c3t3_rib_exporter_plugin PUBLIC scene_c3t3_item) + +if(TBB_FOUND) + CGAL_target_use_TBB(mesh_3_plugin) + CGAL_target_use_TBB(mesh_3_optimization_plugin) +endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt index e7f69876464..6f5771530c9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt @@ -1,11 +1,11 @@ include( polyhedron_demo_macros ) qt5_wrap_ui( clip_polyhedronUI_FILES Clip_polyhedron_plugin.ui ) polyhedron_demo_plugin(clip_polyhedron_plugin Clip_polyhedron_plugin ${clip_polyhedronUI_FILES}) - target_link_libraries(clip_polyhedron_plugin scene_surface_mesh_item scene_polyhedron_item scene_basic_objects) + target_link_libraries(clip_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_basic_objects) polyhedron_demo_plugin(point_set_from_vertices_plugin Point_set_from_vertices_plugin) - target_link_libraries(point_set_from_vertices_plugin scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item scene_points_with_normal_item) + target_link_libraries(point_set_from_vertices_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item scene_points_with_normal_item) polyhedron_demo_plugin(surface_mesh_to_polyhedron_plugin Surface_mesh_to_polyhedron_plugin) - target_link_libraries(surface_mesh_to_polyhedron_plugin scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(surface_mesh_to_polyhedron_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt index 2dfcf9fcb0f..978cbfa2c0b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt @@ -1,25 +1,25 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(pca_plugin Pca_plugin) -target_link_libraries(pca_plugin scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item scene_basic_objects) +target_link_libraries(pca_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item scene_basic_objects) qt5_wrap_ui( transformUI_FILES Transformation_widget.ui ) polyhedron_demo_plugin(affine_transform_plugin Affine_transform_plugin ${transformUI_FILES}) -target_link_libraries(affine_transform_plugin scene_polyhedron_item scene_polyhedron_transform_item scene_points_with_normal_item) +target_link_libraries(affine_transform_plugin PUBLIC scene_polyhedron_item scene_polyhedron_transform_item scene_points_with_normal_item) polyhedron_demo_plugin(affine_transform_sm_plugin Affine_transform_plugin ${transformUI_FILES}) -target_link_libraries(affine_transform_sm_plugin scene_surface_mesh_item scene_sm_transform_item scene_points_with_normal_item) +target_link_libraries(affine_transform_sm_plugin PUBLIC scene_surface_mesh_item scene_sm_transform_item scene_points_with_normal_item) target_compile_definitions(affine_transform_sm_plugin PUBLIC "-DCGAL_USE_SURFACE_MESH" ) polyhedron_demo_plugin(edit_box_plugin Edit_box_plugin) -target_link_libraries(edit_box_plugin scene_edit_box_item scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(edit_box_plugin PUBLIC scene_edit_box_item scene_surface_mesh_item scene_polyhedron_item) qt5_wrap_ui( clipUI_FILES Clipping_box_widget.ui ) polyhedron_demo_plugin(clipping_box_plugin Clipping_box_plugin ${clipUI_FILES}) -target_link_libraries(clipping_box_plugin scene_edit_box_item ) +target_link_libraries(clipping_box_plugin PUBLIC scene_edit_box_item ) polyhedron_demo_plugin(create_bbox_mesh_plugin Create_bbox_mesh_plugin) -target_link_libraries(create_bbox_mesh_plugin scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(create_bbox_mesh_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item) qt5_wrap_ui( volumesUI_FILES Basic_generator_widget.ui) polyhedron_demo_plugin(basic_generator_plugin Basic_generator_plugin ${volumesUI_FILES}) -target_link_libraries(basic_generator_plugin scene_surface_mesh_item scene_polyhedron_item scene_points_with_normal_item scene_polylines_item) +target_link_libraries(basic_generator_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_points_with_normal_item scene_polylines_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index 0c603e0ea30..f335f63cdfa 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -2,7 +2,7 @@ include( polyhedron_demo_macros ) if(EIGEN3_FOUND) polyhedron_demo_plugin(jet_fitting_plugin Jet_fitting_plugin) - target_link_libraries(jet_fitting_plugin scene_polyhedron_item scene_surface_mesh_item scene_polylines_item) + target_link_libraries(jet_fitting_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polylines_item) else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Jet fitting plugin will not be available.") @@ -13,23 +13,23 @@ if(EIGEN3_FOUND) qt5_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui) polyhedron_demo_plugin(hole_filling_plugin Hole_filling_plugin ${hole_fillingUI_FILES}) - target_link_libraries(hole_filling_plugin scene_polyhedron_item scene_polylines_item scene_polyhedron_selection_item) + target_link_libraries(hole_filling_plugin PUBLIC scene_polyhedron_item scene_polylines_item scene_polyhedron_selection_item) qt5_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui) polyhedron_demo_plugin(hole_filling_sm_plugin Hole_filling_plugin ${hole_fillingUI_FILES}) - target_link_libraries(hole_filling_sm_plugin scene_surface_mesh_item scene_polylines_item scene_surface_mesh_selection_item) + target_link_libraries(hole_filling_sm_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_surface_mesh_selection_item) target_compile_definitions(hole_filling_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) qt5_wrap_ui( fairingUI_FILES Fairing_widget.ui) polyhedron_demo_plugin(fairing_plugin Fairing_plugin ${fairingUI_FILES}) - target_link_libraries(fairing_plugin scene_polyhedron_selection_item) + target_link_libraries(fairing_plugin PUBLIC scene_polyhedron_selection_item) polyhedron_demo_plugin(fairing_sm_plugin Fairing_plugin ${fairingUI_FILES}) - target_link_libraries(fairing_sm_plugin scene_surface_mesh_selection_item) + target_link_libraries(fairing_sm_plugin PUBLIC scene_surface_mesh_selection_item) target_compile_definitions(fairing_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) polyhedron_demo_plugin(hole_filling_polyline_plugin Hole_filling_polyline_plugin) - target_link_libraries(hole_filling_polyline_plugin scene_surface_mesh_item scene_polyhedron_item scene_polylines_item) + target_link_libraries(hole_filling_polyline_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_polylines_item) else() message(STATUS "NOTICE: The hole filling and fairing plugins require Eigen 3.2 (or higher) and will not be available.") endif() @@ -39,22 +39,22 @@ endif() polyhedron_demo_plugin(orient_soup_plugin Orient_soup_plugin) -target_link_libraries(orient_soup_plugin scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(orient_soup_plugin PUBLIC scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item) polyhedron_demo_plugin(inside_out_plugin Inside_out_plugin) -target_link_libraries(inside_out_plugin scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item) +target_link_libraries(inside_out_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item) polyhedron_demo_plugin(join_and_split_polyhedra_plugin Join_and_split_polyhedra_plugin) -target_link_libraries(join_and_split_polyhedra_plugin scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(join_and_split_polyhedra_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(join_and_split_sm_plugin Join_and_split_polyhedra_plugin) -target_link_libraries(join_and_split_sm_plugin scene_surface_mesh_item scene_surface_mesh_selection_item) +target_link_libraries(join_and_split_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) target_compile_definitions(join_and_split_sm_plugin PUBLIC "-DUSE_SURFACE_MESH") qt5_wrap_ui( Mean_curvature_flow_skeleton_pluginUI_FILES Mean_curvature_flow_skeleton_plugin.ui) polyhedron_demo_plugin(mean_curvature_flow_skeleton_plugin Mean_curvature_flow_skeleton_plugin ${Mean_curvature_flow_skeleton_pluginUI_FILES}) -target_link_libraries(mean_curvature_flow_skeleton_plugin +target_link_libraries(mean_curvature_flow_skeleton_plugin PUBLIC scene_polyhedron_item scene_points_with_normal_item scene_polylines_item @@ -66,6 +66,7 @@ target_link_libraries(mean_curvature_flow_skeleton_plugin qt5_wrap_ui( Mean_curvature_flow_skeleton_pluginUI_FILES Mean_curvature_flow_skeleton_plugin.ui) polyhedron_demo_plugin(mean_curvature_flow_skeleton_sm_plugin Mean_curvature_flow_skeleton_plugin ${Mean_curvature_flow_skeleton_pluginUI_FILES}) target_link_libraries(mean_curvature_flow_skeleton_sm_plugin + PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polylines_item @@ -76,79 +77,88 @@ target_compile_definitions(mean_curvature_flow_skeleton_sm_plugin PUBLIC "-DUSE_ qt5_wrap_ui( point_inside_polyhedronUI_FILES Point_inside_polyhedron_widget.ui) polyhedron_demo_plugin(point_inside_polyhedron_plugin Point_inside_polyhedron_plugin ${point_inside_polyhedronUI_FILES}) -target_link_libraries(point_inside_polyhedron_plugin scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item) +target_link_libraries(point_inside_polyhedron_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item) qt5_wrap_ui( polyhedron_slicerUI_FILES Polyhedron_slicer_widget.ui) polyhedron_demo_plugin(polyhedron_slicer_plugin Polyhedron_slicer_plugin ${polyhedron_slicerUI_FILES}) -target_link_libraries(polyhedron_slicer_plugin scene_polyhedron_item scene_surface_mesh_item scene_basic_objects scene_polylines_item) +target_link_libraries(polyhedron_slicer_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_basic_objects scene_polylines_item) polyhedron_demo_plugin(polyhedron_stitching_plugin Polyhedron_stitching_plugin) -target_link_libraries(polyhedron_stitching_plugin scene_polyhedron_item scene_surface_mesh_item scene_polylines_item) +target_link_libraries(polyhedron_stitching_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polylines_item) qt5_wrap_ui( selectionUI_FILES Selection_widget.ui) polyhedron_demo_plugin(selection_plugin Selection_plugin ${selectionUI_FILES}) -target_link_libraries(selection_plugin scene_polyhedron_selection_item scene_points_with_normal_item scene_polylines_item) +target_link_libraries(selection_plugin PUBLIC scene_polyhedron_selection_item scene_points_with_normal_item scene_polylines_item) qt5_wrap_ui( selectionUI_FILES Selection_widget.ui) polyhedron_demo_plugin(selection_sm_plugin Selection_plugin ${selectionUI_FILES}) -target_link_libraries(selection_sm_plugin scene_surface_mesh_selection_item scene_points_with_normal_item scene_polylines_item) +target_link_libraries(selection_sm_plugin PUBLIC scene_surface_mesh_selection_item scene_points_with_normal_item scene_polylines_item) target_compile_definitions(selection_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) polyhedron_demo_plugin(self_intersection_plugin Self_intersection_plugin) -target_link_libraries(self_intersection_plugin scene_polyhedron_item scene_polyhedron_selection_item ) +target_link_libraries(self_intersection_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item ) polyhedron_demo_plugin(self_intersection_sm_plugin Self_intersection_plugin) -target_link_libraries(self_intersection_sm_plugin scene_surface_mesh_selection_item scene_surface_mesh_item) +target_link_libraries(self_intersection_sm_plugin PUBLIC scene_surface_mesh_selection_item scene_surface_mesh_item) target_compile_definitions(self_intersection_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) polyhedron_demo_plugin(triangulate_facets_plugin Triangulate_facets_plugin) -target_link_libraries(triangulate_facets_plugin scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(triangulate_facets_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) polyhedron_demo_plugin(corefinement_plugin Corefinement_plugin) -target_link_libraries(corefinement_plugin scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(corefinement_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item) polyhedron_demo_plugin(surface_intersection_plugin Surface_intersection_plugin) -target_link_libraries(surface_intersection_plugin scene_polyhedron_item scene_polylines_item) +target_link_libraries(surface_intersection_plugin PUBLIC scene_polyhedron_item scene_polylines_item) polyhedron_demo_plugin(surface_intersection_sm_plugin Surface_intersection_plugin) -target_link_libraries(surface_intersection_sm_plugin scene_surface_mesh_item scene_polylines_item) +target_link_libraries(surface_intersection_sm_plugin PUBLIC scene_surface_mesh_item scene_polylines_item) target_compile_definitions(surface_intersection_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) polyhedron_demo_plugin(repair_polyhedron_plugin Repair_polyhedron_plugin) -target_link_libraries(repair_polyhedron_plugin scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(repair_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item) qt5_wrap_ui( isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin ${isotropicRemeshingUI_FILES}) -target_link_libraries(isotropic_remeshing_plugin scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(isotropic_remeshing_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(isotropic_remeshing_sm_plugin Isotropic_remeshing_plugin ${isotropicRemeshingUI_FILES}) -target_link_libraries(isotropic_remeshing_sm_plugin scene_surface_mesh_item scene_surface_mesh_selection_item) +target_link_libraries(isotropic_remeshing_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) target_compile_definitions(isotropic_remeshing_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +if(TBB_FOUND) + CGAL_target_use_TBB(isotropic_remeshing_sm_plugin) + CGAL_target_use_TBB(isotropic_remeshing_plugin) +endif() + polyhedron_demo_plugin(distance_plugin Distance_plugin) -target_link_libraries(distance_plugin scene_polyhedron_item scene_color_ramp) +target_link_libraries(distance_plugin PUBLIC scene_polyhedron_item scene_color_ramp) + +if(TBB_FOUND) + CGAL_target_use_TBB(distance_plugin) +endif() polyhedron_demo_plugin(detect_sharp_edges_plugin Detect_sharp_edges_plugin) -target_link_libraries(detect_sharp_edges_plugin scene_polyhedron_item) +target_link_libraries(detect_sharp_edges_plugin PUBLIC scene_polyhedron_item) polyhedron_demo_plugin(detect_sharp_edges_sm_plugin Detect_sharp_edges_plugin) -target_link_libraries(detect_sharp_edges_sm_plugin scene_surface_mesh_item) +target_link_libraries(detect_sharp_edges_sm_plugin PUBLIC scene_surface_mesh_item) target_compile_definitions(detect_sharp_edges_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) polyhedron_demo_plugin(distance_sm_plugin Distance_plugin) -target_link_libraries(distance_sm_plugin scene_surface_mesh_item scene_color_ramp) +target_link_libraries(distance_sm_plugin PUBLIC scene_surface_mesh_item scene_color_ramp) target_compile_definitions(distance_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) qt5_wrap_ui( randomPerturbationUI_FILES Random_perturbation_dialog.ui) polyhedron_demo_plugin(random_perturbation_plugin Random_perturbation_plugin ${randomPerturbationUI_FILES}) -target_link_libraries(random_perturbation_plugin scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(random_perturbation_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(degenerated_faces_poly_plugin Degenerated_faces_plugin) -target_link_libraries(degenerated_faces_poly_plugin scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(degenerated_faces_poly_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(degenerated_faces_sm_plugin Degenerated_faces_plugin) -target_link_libraries(degenerated_faces_sm_plugin scene_surface_mesh_item scene_surface_mesh_selection_item) +target_link_libraries(degenerated_faces_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) target_compile_definitions(degenerated_faces_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index ee960521b4a..d538c96e658 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -2,21 +2,21 @@ include( polyhedron_demo_macros ) if(EIGEN3_FOUND) qt5_wrap_ui( surface_reconstructionUI_FILES Surface_reconstruction_plugin.ui) polyhedron_demo_plugin(surface_reconstruction_plugin Surface_reconstruction_plugin Surface_reconstruction_plugin_impl ${surface_reconstructionUI_FILES}) - target_link_libraries(surface_reconstruction_plugin scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item) + target_link_libraries(surface_reconstruction_plugin PUBLIC scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item) qt5_wrap_ui( point_set_normal_estimationUI_FILES Point_set_normal_estimation_plugin.ui) polyhedron_demo_plugin(point_set_normal_estimation_plugin Point_set_normal_estimation_plugin ${point_set_normal_estimationUI_FILES}) - target_link_libraries(point_set_normal_estimation_plugin scene_points_with_normal_item) + target_link_libraries(point_set_normal_estimation_plugin PUBLIC scene_points_with_normal_item) qt5_wrap_ui( features_detection_pluginUI_FILES Features_detection_plugin.ui) polyhedron_demo_plugin(features_detection_plugin Features_detection_plugin ${features_detection_pluginUI_FILES}) - target_link_libraries(features_detection_plugin scene_points_with_normal_item) + target_link_libraries(features_detection_plugin PUBLIC scene_points_with_normal_item) polyhedron_demo_plugin(point_set_smoothing_plugin Point_set_smoothing_plugin) - target_link_libraries(point_set_smoothing_plugin scene_points_with_normal_item) + target_link_libraries(point_set_smoothing_plugin PUBLIC scene_points_with_normal_item) polyhedron_demo_plugin(point_set_average_spacing_plugin Point_set_average_spacing_plugin) - target_link_libraries(point_set_average_spacing_plugin scene_points_with_normal_item) + target_link_libraries(point_set_average_spacing_plugin PUBLIC scene_points_with_normal_item) else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Surface reconstruction plugin will not be available.") @@ -29,43 +29,67 @@ endif() qt5_wrap_ui(point_set_bilateral_smoothingUI_FILES Point_set_bilateral_smoothing_plugin.ui) polyhedron_demo_plugin(point_set_bilateral_smoothing_plugin Point_set_bilateral_smoothing_plugin ${point_set_bilateral_smoothingUI_FILES}) - target_link_libraries(point_set_bilateral_smoothing_plugin scene_points_with_normal_item) + target_link_libraries(point_set_bilateral_smoothing_plugin PUBLIC scene_points_with_normal_item) qt5_wrap_ui( ps_outliers_removal_UI_FILES Point_set_outliers_removal_plugin.ui) polyhedron_demo_plugin(point_set_outliers_removal_plugin Point_set_outliers_removal_plugin ${ps_outliers_removal_UI_FILES}) - target_link_libraries(point_set_outliers_removal_plugin scene_points_with_normal_item) + target_link_libraries(point_set_outliers_removal_plugin PUBLIC scene_points_with_normal_item) qt5_wrap_ui( point_set_selectionUI_FILES Point_set_selection_widget.ui) polyhedron_demo_plugin(point_set_selection_plugin Point_set_selection_plugin ${point_set_selectionUI_FILES}) - target_link_libraries(point_set_selection_plugin scene_points_with_normal_item scene_polylines_item scene_edit_box_item) + target_link_libraries(point_set_selection_plugin PUBLIC scene_points_with_normal_item scene_polylines_item scene_edit_box_item) qt5_wrap_ui(point_set_shape_detectionUI_FILES Point_set_shape_detection_plugin.ui) polyhedron_demo_plugin(point_set_shape_detection_plugin Point_set_shape_detection_plugin ${point_set_shape_detectionUI_FILES}) - target_link_libraries(point_set_shape_detection_plugin scene_surface_mesh_item scene_polyhedron_item scene_points_with_normal_item scene_polygon_soup_item) + target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_points_with_normal_item scene_polygon_soup_item) qt5_wrap_ui(point_set_simplificationUI_FILES Point_set_simplification_plugin.ui) polyhedron_demo_plugin(point_set_simplification_plugin Point_set_simplification_plugin ${point_set_simplificationUI_FILES}) - target_link_libraries(point_set_simplification_plugin scene_points_with_normal_item) + target_link_libraries(point_set_simplification_plugin PUBLIC scene_points_with_normal_item) qt5_wrap_ui(point_set_upsamplingUI_FILES Point_set_upsampling_plugin.ui) polyhedron_demo_plugin(point_set_upsampling_plugin Point_set_upsampling_plugin ${point_set_upsamplingUI_FILES}) - target_link_libraries(point_set_upsampling_plugin scene_points_with_normal_item) + target_link_libraries(point_set_upsampling_plugin PUBLIC scene_points_with_normal_item) qt5_wrap_ui(point_set_wlopFILES Point_set_wlop_plugin.ui) polyhedron_demo_plugin(point_set_wlop_plugin Point_set_wlop_plugin ${point_set_wlopFILES}) - target_link_libraries(point_set_wlop_plugin scene_points_with_normal_item) + target_link_libraries(point_set_wlop_plugin PUBLIC scene_points_with_normal_item) polyhedron_demo_plugin(merge_point_sets_plugin Merge_point_sets_plugin) - target_link_libraries(merge_point_sets_plugin scene_points_with_normal_item) + target_link_libraries(merge_point_sets_plugin PUBLIC scene_points_with_normal_item) polyhedron_demo_plugin(point_set_interference_plugin Point_set_interference_plugin) - target_link_libraries(point_set_interference_plugin scene_points_with_normal_item) + target_link_libraries(point_set_interference_plugin PUBLIC scene_points_with_normal_item) qt5_wrap_ui( alpha_shapeUI_FILES Alpha_shape_widget.ui ) polyhedron_demo_plugin(alpha_shape_plugin Alpha_shape_plugin ${alpha_shapeUI_FILES}) - target_link_libraries(alpha_shape_plugin scene_points_with_normal_item scene_c3t3_item) + target_link_libraries(alpha_shape_plugin PUBLIC scene_points_with_normal_item scene_c3t3_item) qt5_wrap_ui( distanceUI_FILES Point_set_to_mesh_distance_widget.ui ) polyhedron_demo_plugin(point_set_to_mesh_distance_plugin Point_set_to_mesh_distance_plugin ${distanceUI_FILES}) - target_link_libraries(point_set_to_mesh_distance_plugin scene_points_with_normal_item scene_surface_mesh_item scene_polyhedron_item scene_color_ramp) + target_link_libraries(point_set_to_mesh_distance_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item scene_polyhedron_item scene_color_ramp) + + if(TBB_FOUND) + foreach(plugin + surface_reconstruction_plugin + point_set_normal_estimation_plugin + features_detection_plugin + point_set_smoothing_plugin + point_set_average_spacing_plugin + point_set_bilateral_smoothing_plugin + point_set_outliers_removal_plugin + point_set_selection_plugin + point_set_shape_detection_plugin + point_set_simplification_plugin + point_set_upsampling_plugin + point_set_wlop_plugin + merge_point_sets_plugin + point_set_interference_plugin + alpha_shape_plugin + point_set_to_mesh_distance_plugin) + if(TARGET ${plugin}) + CGAL_target_use_TBB(${plugin}) + endif() + endforeach() + endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt index 5d5af0d0897..bc42a9f5411 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt @@ -2,4 +2,4 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(subdivision_methods_plugin Subdivision_methods_plugin) -target_link_libraries(subdivision_methods_plugin scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(subdivision_methods_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt index 2843c19884f..cc67a42ec0a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt @@ -8,10 +8,10 @@ if(EIGEN3_FOUND) if(CGAL_Core_FOUND) qt5_wrap_ui( parameterizationUI_FILES Parameterization_widget.ui ARAP_dialog.ui OTE_dialog.ui) polyhedron_demo_plugin(parameterization_plugin Parameterization_plugin ${parameterizationUI_FILES}) - target_link_libraries(parameterization_plugin ${CGAL_Core_LIBRARY} ${CGAL_Core_3RD_PARTY_LIBRARIES} scene_polyhedron_item scene_textured_polyhedron_item scene_polyhedron_selection_item) + target_link_libraries(parameterization_plugin PUBLIC ${CGAL_Core_LIBRARY} ${CGAL_Core_3RD_PARTY_LIBRARIES} scene_polyhedron_item scene_textured_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(parameterization_sm_plugin Parameterization_plugin ${parameterizationUI_FILES}) - target_link_libraries(parameterization_sm_plugin ${CGAL_Core_LIBRARY} ${CGAL_Core_3RD_PARTY_LIBRARIES} scene_surface_mesh_item scene_textured_surface_mesh_item scene_surface_mesh_selection_item) + target_link_libraries(parameterization_sm_plugin PUBLIC ${CGAL_Core_LIBRARY} ${CGAL_Core_3RD_PARTY_LIBRARIES} scene_surface_mesh_item scene_textured_surface_mesh_item scene_surface_mesh_selection_item) target_compile_definitions(parameterization_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) else(CGAL_Core_FOUND) @@ -24,30 +24,30 @@ endif(EIGEN3_FOUND) qt5_wrap_ui( segmentationUI_FILES Mesh_segmentation_widget.ui) polyhedron_demo_plugin(mesh_segmentation_plugin Mesh_segmentation_plugin ${segmentationUI_FILES}) -target_link_libraries(mesh_segmentation_plugin scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(mesh_segmentation_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) qt5_wrap_ui( mesh_plane_detectionUI_FILES Mesh_plane_detection_dialog.ui) polyhedron_demo_plugin(mesh_plane_detection_plugin Mesh_plane_detection_plugin ${mesh_plane_detectionUI_FILES}) -target_link_libraries(mesh_plane_detection_plugin scene_polyhedron_item) +target_link_libraries(mesh_plane_detection_plugin PUBLIC scene_polyhedron_item) qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) -target_link_libraries(mesh_simplification_plugin scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(mesh_simplification_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(mesh_simplification_sm_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) -target_link_libraries(mesh_simplification_sm_plugin scene_surface_mesh_item scene_surface_mesh_selection_item) +target_link_libraries(mesh_simplification_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) target_compile_definitions(mesh_simplification_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) qt5_wrap_ui( remeshingUI_FILES Remeshing_dialog.ui) polyhedron_demo_plugin(remeshing_plugin Remeshing_plugin Remeshing_plugin_cgal_code.cpp Mesher_base.cpp ${remeshingUI_FILES}) -target_link_libraries(remeshing_plugin scene_polyhedron_item scene_polygon_soup_item scene_c2t3_item) +target_link_libraries(remeshing_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_c2t3_item) polyhedron_demo_plugin(offset_meshing_plugin Offset_meshing_plugin ${remeshingUI_FILES}) -target_link_libraries(offset_meshing_plugin scene_polyhedron_item scene_polygon_soup_item scene_c2t3_item) +target_link_libraries(offset_meshing_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_c2t3_item) qt5_wrap_ui( shortestPathUI_FILES Shortest_path_widget.ui ) polyhedron_demo_plugin(shortest_path_plugin Shortest_path_plugin ${shortestPathUI_FILES}) -target_link_libraries(shortest_path_plugin scene_polyhedron_item scene_polyhedron_shortest_path_item scene_basic_objects) +target_link_libraries(shortest_path_plugin PUBLIC scene_polyhedron_item scene_polyhedron_shortest_path_item scene_basic_objects) polyhedron_demo_plugin(shortest_path_sm_plugin Shortest_path_plugin ${shortestPathUI_FILES}) -target_link_libraries(shortest_path_sm_plugin scene_surface_mesh_item scene_sm_shortest_path_item scene_basic_objects) +target_link_libraries(shortest_path_sm_plugin PUBLIC scene_surface_mesh_item scene_sm_shortest_path_item scene_basic_objects) target_compile_definitions(shortest_path_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt index 44851f87498..cb951c59918 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt @@ -1,9 +1,9 @@ include( polyhedron_demo_macros ) if ( EIGEN3_FOUND AND "${EIGEN3_VERSION}" VERSION_GREATER "3.1.90" ) polyhedron_demo_plugin(edit_polyhedron_plugin Edit_polyhedron_plugin Deform_mesh.ui) - target_link_libraries(edit_polyhedron_plugin scene_polyhedron_item scene_edit_polyhedron_item scene_polyhedron_selection_item) + target_link_libraries(edit_polyhedron_plugin PUBLIC scene_polyhedron_item scene_edit_polyhedron_item scene_polyhedron_selection_item) polyhedron_demo_plugin(edit_sm_plugin Edit_polyhedron_plugin Deform_mesh.ui) - target_link_libraries(edit_sm_plugin scene_surface_mesh_item scene_edit_polyhedron_item scene_surface_mesh_selection_item) + target_link_libraries(edit_sm_plugin PUBLIC scene_surface_mesh_item scene_edit_polyhedron_item scene_surface_mesh_selection_item) target_compile_definitions(edit_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) else() message(STATUS "NOTICE: The polyhedron edit plugin require Eigen 3.2 (or higher) and will not be available.") diff --git a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt index 321b2b8a2d1..4b2382a5315 100644 --- a/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/implicit_functions/CMakeLists.txt @@ -2,6 +2,8 @@ project( Mesh_3_implicit_functions ) +include( polyhedron_demo_macros ) + cmake_minimum_required(VERSION 3.1) if(NOT POLICY CMP0070 AND POLICY CMP0053) # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning. @@ -37,27 +39,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND) include(AddFileDependencies) remove_definitions(-DQT_STATICPLUGIN) - # polyhedron_demo_plugin is a macro copied from demo/Polyhedron/CMakeLists.txt - macro(polyhedron_demo_plugin plugin_name plugin_implementation_base_name) - list_split(option ARGN_TAIL ${ARGN} ) - if(NOT ${option} STREQUAL "EXCLUDE_FROM_ALL") - set(other_sources ${ARGN}) - set(option "") - else() - set(other_sources ${ARGN_TAIL}) - endif() - qt5_generate_moc( "${CMAKE_CURRENT_SOURCE_DIR}/${plugin_implementation_base_name}.cpp" ${plugin_implementation_base_name}.moc ) - add_file_dependencies( ${plugin_implementation_base_name}.moc "${CMAKE_CURRENT_SOURCE_DIR}/${plugin_implementation_base_name}.cpp" ) - - add_library(${plugin_name} MODULE ${option} ${plugin_implementation_base_name}.moc ${plugin_implementation_base_name}.cpp ${other_sources}) - qt5_use_modules(${plugin_name} Widgets Script OpenGL Gui) - add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${plugin_name} ) - # Link with Qt - target_link_libraries( ${plugin_name} ${QT_LIBRARIES} ) - # Link with CGAL - target_link_libraries( ${plugin_name} ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) - endmacro(polyhedron_demo_plugin) - polyhedron_demo_plugin(p_sphere_function_plugin Sphere_implicit_function) polyhedron_demo_plugin(p_tanglecube_function_plugin Tanglecube_implicit_function) polyhedron_demo_plugin(p_klein_function_plugin Klein_implicit_function) diff --git a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake index f85f8ad927a..43359274eb2 100644 --- a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake +++ b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake @@ -23,22 +23,21 @@ include (CGAL_Macros) endif() add_library(${plugin_name} MODULE ${option} ${moc_file_name} ${plugin_implementation_base_name}.cpp ${other_sources}) - qt5_use_modules(${plugin_name} Widgets Script OpenGL Gui) set_property(TARGET ${plugin_name} PROPERTY LIBRARY_OUTPUT_DIRECTORY "${CGAL_POLYHEDRON_DEMO_PLUGINS_DIR}") add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${plugin_name} ) # Link with Qt - target_link_libraries( ${plugin_name} ${QT_LIBRARIES} ) + target_link_libraries( ${plugin_name} PUBLIC ${QT_LIBRARIES} ) # Link with the demo_framework if(TARGET demo_framework) - target_link_libraries( ${plugin_name} demo_framework) + target_link_libraries( ${plugin_name} PUBLIC demo_framework) else() - target_link_libraries( ${plugin_name} Polyhedron_demo_framework) + target_link_libraries( ${plugin_name} PUBLIC Polyhedron_demo_framework) endif() # Link with CGAL - target_link_libraries( ${plugin_name} ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) + target_link_libraries( ${plugin_name} PUBLIC ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) if(TARGET Polyhedron_3) add_dependencies( ${plugin_name} Polyhedron_3 ) endif() diff --git a/STL_Extension/benchmark/compact_container_benchmark/CMakeLists.txt b/STL_Extension/benchmark/compact_container_benchmark/CMakeLists.txt index 6a289eda421..bb3785edbd3 100644 --- a/STL_Extension/benchmark/compact_container_benchmark/CMakeLists.txt +++ b/STL_Extension/benchmark/compact_container_benchmark/CMakeLists.txt @@ -1,31 +1,15 @@ -# Created by the script cgal_create_cmake_script -# This is the CMake script for compiling a CGAL application. - project( Compact_container_benchmark ) -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 3.1) - -find_package(CGAL QUIET COMPONENTS Core ) +find_package(CGAL QUIET) if ( CGAL_FOUND ) - include( ${CGAL_USE_FILE} ) - find_package( TBB ) - - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - - include( CGAL_CreateSingleSourceCGALProgram ) - - include_directories (BEFORE "../../include") - create_single_source_cgal_program( "cc_benchmark.cpp" ) - + if(TBB_FOUND) + CGAL_target_use_TBB(cc_benchmark) + endif() else() - - message(STATUS "This program requires the CGAL library, and will not be compiled.") - + message(STATUS "This program requires the CGAL library, and will not be compiled.") endif() diff --git a/STL_Extension/test/STL_Extension/CMakeLists.txt b/STL_Extension/test/STL_Extension/CMakeLists.txt index 22896684eb1..5b5d39ddaeb 100644 --- a/STL_Extension/test/STL_Extension/CMakeLists.txt +++ b/STL_Extension/test/STL_Extension/CMakeLists.txt @@ -15,11 +15,6 @@ if ( CGAL_FOUND ) find_package( TBB QUIET ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - include( CGAL_CreateSingleSourceCGALProgram ) include_directories (BEFORE "../../include") @@ -32,6 +27,9 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "test_composition.cpp" ) create_single_source_cgal_program( "test_Concatenate_iterator.cpp" ) create_single_source_cgal_program( "test_Concurrent_compact_container.cpp" ) + if(TBB_FOUND) + CGAL_target_use_TBB(test_Concurrent_compact_container) + endif() create_single_source_cgal_program( "test_dispatch_output.cpp" ) create_single_source_cgal_program( "test_Flattening_iterator.cpp" ) create_single_source_cgal_program( "test_Handle_with_policy.cpp" ) diff --git a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/CMakeLists.txt b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/CMakeLists.txt index 33f0413b270..8da2fc16bb8 100644 --- a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/CMakeLists.txt +++ b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/CMakeLists.txt @@ -14,10 +14,7 @@ if ( CGAL_FOUND ) if( ACTIVATE_CONCURRENCY ) find_package( TBB ) - if( TBB_FOUND ) - include( ${TBB_USE_FILE} ) - list( APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES} ) - else() + if( NOT TBB_FOUND ) message( STATUS "NOTICE: Intel TBB NOT found! The example is faster if TBB is linked." ) endif() endif() @@ -31,6 +28,12 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "scale_space_incremental.cpp" ) create_single_source_cgal_program( "scale_space_manifold.cpp" ) create_single_source_cgal_program( "scale_space_advancing_front.cpp" ) + if(ACTIVATE_CONCURRENCY AND TBB_FOUND) + CGAL_target_use_TBB(scale_space) + CGAL_target_use_TBB(scale_space_incremental) + CGAL_target_use_TBB(scale_space_manifold) + CGAL_target_use_TBB(scale_space_advancing_front) + endif() else() message( STATUS "NOTICE: The example needs Eigen 3.1 (or greater) and will not be compiled." ) endif() diff --git a/TDS_3/test/TDS_3/CMakeLists.txt b/TDS_3/test/TDS_3/CMakeLists.txt index 9a6961743ba..cdfb56a795c 100644 --- a/TDS_3/test/TDS_3/CMakeLists.txt +++ b/TDS_3/test/TDS_3/CMakeLists.txt @@ -1,36 +1,15 @@ -# Created by the script cgal_create_cmake_script -# This is the CMake script for compiling a CGAL application. - - project( TDS_3_Tests ) -cmake_minimum_required(VERSION 2.8.11) - +cmake_minimum_required(VERSION 3.1) find_package(CGAL QUIET) if ( CGAL_FOUND ) - - include( ${CGAL_USE_FILE} ) - find_package( TBB QUIET ) - - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - - include( CGAL_CreateSingleSourceCGALProgram ) - - include_directories (BEFORE "../../include") - - include_directories (BEFORE "include") - create_single_source_cgal_program( "test_triangulation_tds_3.cpp" ) - + if(TBB_FOUND) + CGAL_target_use_TBB(test_triangulation_tds_3) + endif() else() - - message(STATUS "This program requires the CGAL library, and will not be compiled.") - + message(STATUS "This program requires the CGAL library, and will not be compiled.") endif() - diff --git a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt index d3fba6b9b2a..832f3672a0d 100644 --- a/Triangulation_3/demo/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/demo/Triangulation_3/CMakeLists.txt @@ -49,10 +49,6 @@ else( ACTIVATE_CONCURRENT_TRIANGULATION_3 ) endif( LINK_WITH_TBB ) endif() -if( TBB_FOUND ) - include(${TBB_USE_FILE}) -endif() - if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND ) include_directories (${QGLVIEWER_INCLUDE_DIR}) @@ -71,12 +67,14 @@ if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_ PreferenceDlg.cpp Scene.cpp ${uis} ${CGAL_Qt5_RESOURCE_FILES} ${CGAL_Qt5_MOC_FILES}) - qt5_use_modules(T3_demo Xml OpenGL Svg) add_to_cached_list( CGAL_EXECUTABLE_TARGETS T3_demo ) - target_link_libraries( T3_demo ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) - target_link_libraries( T3_demo ${QT_LIBRARIES} ${QGLVIEWER_LIBRARIES} ${TBB_LIBRARIES}) - target_link_libraries( T3_demo ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) + target_link_libraries( T3_demo PRIVATE ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) + target_link_libraries( T3_demo PRIVATE Qt5::OpenGL ${QGLVIEWER_LIBRARIES}) + target_link_libraries( T3_demo PRIVATE ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) + if(TBB_FOUND) + CGAL_target_use_TBB(T3_demo) + endif() else( CGAL_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND ) diff --git a/Triangulation_3/test/Triangulation_3/CMakeLists.txt b/Triangulation_3/test/Triangulation_3/CMakeLists.txt index b2fefe5017c..26494983c37 100644 --- a/Triangulation_3/test/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/test/Triangulation_3/CMakeLists.txt @@ -15,11 +15,6 @@ if ( CGAL_FOUND ) find_package( TBB QUIET ) - if( TBB_FOUND ) - include(${TBB_USE_FILE}) - list(APPEND CGAL_3RD_PARTY_LIBRARIES ${TBB_LIBRARIES}) - endif() - include( CGAL_CreateSingleSourceCGALProgram ) include_directories (BEFORE "../../include") @@ -40,6 +35,15 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "test_static_filters.cpp" ) create_single_source_cgal_program( "test_triangulation_3.cpp" ) + if(TBB_FOUND) + foreach(target + test_delaunay_3 + test_regular_3 + test_regular_insert_range_with_info) + CGAL_target_use_TBB(${target}) + endforeach() + endif() + if(BUILD_TESTING) set_tests_properties( execution___of__test_delaunay_hierarchy_3 From ffe500eb29f4c96f0f75bc7a83ae1df79c19a717 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 17:29:45 +0100 Subject: [PATCH 144/298] Remove the deprecation warning, for now. --- .../cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake index d5e2d3ad340..01f1fd3c68c 100644 --- a/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake +++ b/Installation/cmake/modules/CGAL_CreateSingleSourceCGALProgram.cmake @@ -65,7 +65,6 @@ function(create_single_source_cgal_program firstfile ) target_link_libraries(${exe_name} PRIVATE CGAL::CGAL) if(CGAL_3RD_PARTY_LIBRARIES) - message(DEPRECATION "Deprecated use of CGAL_3RD_PARTY_LIBRARIES: " ${CGAL_3RD_PARTY_LIBRARIES}) target_link_libraries(${exe_name} PRIVATE ${CGAL_3RD_PARTY_LIBRARIES}) endif() From a8a7f6b13369b0e2d152a473aeefff3c6504d1b9 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sat, 4 Nov 2017 13:38:26 +0200 Subject: [PATCH 145/298] Cleaned up --- .../include/CGAL/Arr_curve_data_traits_2.h | 390 +++++++----------- 1 file changed, 151 insertions(+), 239 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h index 1374fad7133..720325aba0d 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h @@ -16,16 +16,14 @@ // $Id$ // SPDX-License-Identifier: GPL-3.0+ // -// // Author(s) : Ron Wein -// Efi Fogel +// Efi Fogel #ifndef CGAL_ARR_CURVE_DATA_TRAITS_2_H #define CGAL_ARR_CURVE_DATA_TRAITS_2_H #include - /*! \file * Definition of the Arr_curve_data_traits_2<> class template. */ @@ -50,183 +48,148 @@ namespace CGAL { * the overlapping subcurve is obtained from the merge functor. * All other functors are inherited from the base ordinary traits class. */ -template , - class CurveData_ = XMonotoneCurveData_, - class Convert_ = _Default_convert_func > -class Arr_curve_data_traits_2 : public Traits_ -{ +template , + typename CurveData_ = XMonotoneCurveData_, + typename Convert_ = + _Default_convert_func > +class Arr_curve_data_traits_2 : public Traits_ { public: + typedef Traits_ Base_traits_2; + typedef XMonotoneCurveData_ X_monotone_curve_data; + typedef Merge_ Merge; + typedef CurveData_ Curve_data; + typedef Convert_ Convert; - typedef Traits_ Base_traits_2; - typedef XMonotoneCurveData_ X_monotone_curve_data; - typedef Merge_ Merge; - typedef CurveData_ Curve_data; - typedef Convert_ Convert; - - typedef typename Base_traits_2::Curve_2 Base_curve_2; - typedef typename Base_traits_2::X_monotone_curve_2 Base_x_monotone_curve_2; - typedef typename Base_traits_2::Point_2 Point_2; + typedef typename Base_traits_2::Curve_2 Base_curve_2; + typedef typename Base_traits_2::X_monotone_curve_2 Base_x_monotone_curve_2; + typedef typename Base_traits_2::Point_2 Point_2; - typedef typename Base_traits_2::Has_left_category Has_left_category; - typedef typename Base_traits_2::Has_merge_category Base_has_merge_category; - typedef Tag_true Has_merge_category; + typedef typename Base_traits_2::Has_left_category Has_left_category; + typedef typename Base_traits_2::Has_merge_category Base_has_merge_category; + typedef Tag_true Has_merge_category; typedef typename Base_traits_2::Has_do_intersect_category - Has_do_intersect_category; + Has_do_intersect_category; - typedef typename internal::Arr_complete_left_side_category< Base_traits_2 >::Category - Left_side_category; - typedef typename internal::Arr_complete_bottom_side_category< Base_traits_2 >::Category - Bottom_side_category; - typedef typename internal::Arr_complete_top_side_category< Base_traits_2 >::Category - Top_side_category; - typedef typename internal::Arr_complete_right_side_category< Base_traits_2 >::Category - Right_side_category; + typedef typename internal::Arr_complete_left_side_category:: + Category Left_side_category; + typedef typename internal::Arr_complete_bottom_side_category:: + Category Bottom_side_category; + typedef typename internal::Arr_complete_top_side_category:: + Category Top_side_category; + typedef typename internal::Arr_complete_right_side_category:: + Category Right_side_category; // Representation of a curve with an addtional data field: - typedef _Curve_data_ex Curve_2; - - // Representation of an x-monotone curve with an addtional data field: - typedef _Curve_data_ex X_monotone_curve_2; + typedef _Curve_data_ex Curve_2; + + // Representation of an x-monotone curve with an addtional data field: + typedef _Curve_data_ex + X_monotone_curve_2; + + typedef typename Base_traits_2::Multiplicity Multiplicity; - typedef typename Base_traits_2::Multiplicity Multiplicity; - public: - /// \name Construction. //@{ /*! Default constructor. */ - Arr_curve_data_traits_2 () - {} - + Arr_curve_data_traits_2() {} + /*! Constructor from a base-traits class. */ - Arr_curve_data_traits_2 (const Base_traits_2 & traits) : - Base_traits_2 (traits) - {} + Arr_curve_data_traits_2(const Base_traits_2& traits) : Base_traits_2(traits) {} //@} /// \name Overriden functors. //@{ - class Make_x_monotone_2 - { + class Make_x_monotone_2 { private: - const Base_traits_2 * base; + const Base_traits_2& m_base; public: - /*! Constructor. */ - Make_x_monotone_2 (const Base_traits_2 * _base) : - base (_base) - {} - - /*! - * Cut the given curve into x-monotone subcurves and insert them to the + Make_x_monotone_2(const Base_traits_2& base) : m_base(base) {} + + /*! Cut the given curve into x-monotone subcurves and insert them to the * given output iterator. As segments are always x_monotone, only one * x-monotone curve will be contained in the iterator. * \param cv The curve. * \param oi The output iterator, whose value-type is X_monotone_curve_2. * \return The past-the-end iterator. */ - template - OutputIterator operator() (const Curve_2& cv, OutputIterator oi) const + template + OutputIterator operator()(const Curve_2& cv, OutputIterator oi) const { // Make the original curve x-monotone. - std::list base_objects; - - base->make_x_monotone_2_object() (cv, - std::back_inserter (base_objects)); + std::list base_objects; + m_base.make_x_monotone_2_object()(cv, std::back_inserter(base_objects)); // Attach the data to each of the resulting x-monotone curves. - typename std::list::const_iterator it; - const Base_x_monotone_curve_2 *base_x_curve; - X_monotone_curve_data xdata = Convert()(cv.data()); - - for (it = base_objects.begin(); it != base_objects.end(); ++it) + const Base_x_monotone_curve_2* base_x_curve; + X_monotone_curve_data xdata = Convert()(cv.data()); + for (typename std::list::const_iterator it = + base_objects.begin(); it != base_objects.end(); ++it) { - base_x_curve = object_cast (&(*it)); - if (base_x_curve != NULL) - { + base_x_curve = object_cast(&(*it)); + if (base_x_curve != NULL) { // Current object is an x-monotone curve: Attach data to it. - *oi = make_object (X_monotone_curve_2 (*base_x_curve, - xdata)); + *oi++ = make_object(X_monotone_curve_2(*base_x_curve, xdata)); } - else - { + else { // Current object is an isolated point: Leave it as is. - CGAL_assertion (object_cast (&(*it)) != NULL); - *oi = *it; + CGAL_assertion(object_cast(&(*it)) != NULL); + *oi++ = *it; } - ++oi; } - return (oi); + return oi; } }; - /*! Get a Make_x_monotone_2 functor object. */ - Make_x_monotone_2 make_x_monotone_2_object () const - { - return Make_x_monotone_2 (this); - } + /*! Obtain a Make_x_monotone_2 functor object. */ + Make_x_monotone_2 make_x_monotone_2_object() const + { return Make_x_monotone_2(*this); } - class Split_2 - { + class Split_2 { private: - const Base_traits_2 * base; + const Base_traits_2& m_base; public: - /*! Constructor. */ - Split_2 (const Base_traits_2 * _base) : - base (_base) - {} + Split_2(const Base_traits_2& base) : m_base(base) {} - /*! - * Split a given x-monotone curve at a given point into two sub-curves. + /*! Split a given x-monotone curve at a given point into two sub-curves. * \param cv The curve to split * \param p The split point. * \param c1 Output: The left resulting subcurve (p is its right endpoint). * \param c2 Output: The right resulting subcurve (p is its left endpoint). * \pre p lies on cv but is not one of its end-points. */ - void operator() (const X_monotone_curve_2& cv, const Point_2 & p, - X_monotone_curve_2& c1, X_monotone_curve_2& c2) const + void operator()(const X_monotone_curve_2& cv, const Point_2& p, + X_monotone_curve_2& c1, X_monotone_curve_2& c2) const { // Split the original curve. - base->split_2_object() (cv, p, c1, c2); + m_base.split_2_object()(cv, p, c1, c2); // Attach data to the split curves. - c1.set_data (cv.data()); - c2.set_data (cv.data()); - - return; + c1.set_data(cv.data()); + c2.set_data(cv.data()); } }; - /*! Get a Split_2 functor object. */ - Split_2 split_2_object () const - { - return Split_2 (this); - } + /*! Obtain a Split_2 functor object. */ + Split_2 split_2_object() const { return Split_2(*this); } - class Intersect_2 - { + class Intersect_2 { private: - const Base_traits_2 * base; + const Base_traits_2& m_base; public: - /*! Constructor. */ - Intersect_2 (const Base_traits_2 * _base) : - base (_base) - {} + Intersect_2(const Base_traits_2& base) : m_base(base) {} - /*! - * Find the intersections of the two given curves and insert them to the + /*! Find the intersections of the two given curves and insert them to the * given output iterator. As two segments may itersect only once, only a * single will be contained in the iterator. * \param cv1 The first curve. @@ -234,221 +197,170 @@ public: * \param oi The output iterator. * \return The past-the-end iterator. */ - template - OutputIterator operator() (const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - OutputIterator oi) const + template + OutputIterator operator()(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2, + OutputIterator oi) const { // Use the base functor to obtain all intersection objects. - std::list base_objects; - - base->intersect_2_object() (cv1, cv2, - std::back_inserter (base_objects)); + std::list base_objects; + m_base.intersect_2_object()(cv1, cv2, std::back_inserter(base_objects)); // Stop if the list is empty: - if (base_objects.empty()) - return (oi); + if (base_objects.empty()) return oi; // Go over all intersection objects and prepare the output. - typename std::list::const_iterator it; - const Base_x_monotone_curve_2 *base_cv; - - for (it = base_objects.begin(); it != base_objects.end(); ++it) + const Base_x_monotone_curve_2* base_cv; + for (typename std::list::const_iterator it = + base_objects.begin(); it != base_objects.end(); ++it) { - if ((base_cv = object_cast (&(*it))) != NULL) - { + if ((base_cv = object_cast(&(*it))) != NULL) { // The current intersection object is an overlapping x-monotone // curve: Merge the data fields of both intersecting curves and // associate the result with the overlapping curve. - X_monotone_curve_2 cv (*base_cv, - Merge() (cv1.data(), cv2.data())); - - *oi = make_object (cv); + X_monotone_curve_2 cv(*base_cv, Merge() (cv1.data(), cv2.data())); + *oi++ = make_object(cv); } - else - { + else { // The current intersection object is an intersection point: // Copy it as is. - *oi = *it; + *oi++ = *it; } - ++oi; } - return (oi); + return oi; } }; - /*! Get an Intersect_2 functor object. */ - Intersect_2 intersect_2_object () const - { - return Intersect_2 (this); - } + /*! Obtain an Intersect_2 functor object. */ + Intersect_2 intersect_2_object() const { return Intersect_2(*this); } - class Are_mergeable_2 - { + class Are_mergeable_2 { private: - const Base_traits_2 * base; + const Base_traits_2& m_base; public: - /*! Constructor. */ - Are_mergeable_2 (const Base_traits_2 * _base) : - base (_base) - {} + Are_mergeable_2(const Base_traits_2& base) : m_base(base) {} - /*! - * Check whether it is possible to merge two given x-monotone curves. + /*! Check whether it is possible to merge two given x-monotone curves. * \param cv1 The first curve. * \param cv2 The second curve. * \return (true) if the two curves are mergeable; (false) otherwise. */ - bool operator() (const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2) const - { - return (_are_mergeable_base_imp (cv1, cv2, Base_has_merge_category())); - } + bool operator()(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2) const + { return (_are_mergeable_base_imp(cv1, cv2, Base_has_merge_category())); } private: - - /*! - * Implementation of the base predicate in case the HasMerge tag is true. + /*! Implementation of the base predicate in case the HasMerge tag is true. */ - bool _are_mergeable_base_imp (const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - Tag_true) const + bool _are_mergeable_base_imp(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2, + Tag_true) const { // In case the two base curves are not mergeable, the extended curves // are not mergeable as well. - if (! (base->are_mergeable_2_object() (cv1, cv2))) - return (false); + if (! (m_base.are_mergeable_2_object()(cv1, cv2))) return false; // In case the two base curves are mergeable, check that they have the // same data fields. return (cv1.data() == cv2.data()); } - /*! - * Implementation of the base predicate in case the HasMerge tag is false. + /*! Implementation of the base predicate in case the HasMerge tag is false. */ - bool _are_mergeable_base_imp (const X_monotone_curve_2& , - const X_monotone_curve_2& , - Tag_false) const - { - // Curve merging is not supported: - return (false); - } + bool _are_mergeable_base_imp(const X_monotone_curve_2& /* cv1 */, + const X_monotone_curve_2& /* cv2 */, + Tag_false) const + { return false; } }; - - /*! Get an Are_mergeable_2 functor object. */ - Are_mergeable_2 are_mergeable_2_object () const - { - return Are_mergeable_2 (this); - } + + /*! Obtain an Are_mergeable_2 functor object. */ + Are_mergeable_2 are_mergeable_2_object() const + { return Are_mergeable_2(*this); } /*! \class Merge_2 * A functor that merges two x-monotone arcs into one. */ - class Merge_2 - { + class Merge_2 { private: - const Base_traits_2 * base; + const Base_traits_2& m_base; public: - /*! Constructor. */ - Merge_2 (const Base_traits_2 * _base) : - base (_base) - {} + Merge_2(const Base_traits_2& base) : m_base(base) {} - /*! - * Merge two given x-monotone curves into a single curve (segment). + /*! Merge two given x-monotone curves into a single curve (segment). * \param cv1 The first curve. * \param cv2 The second curve. * \param c Output: The merged curve. * \pre The two curves are mergeable. */ - void operator() (const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - X_monotone_curve_2& c) const + void operator()(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2, + X_monotone_curve_2& c) const { - // The function is implemented based on the base Has_merge category. - _merge_imp (cv1, cv2, c, Base_has_merge_category()); + // Dispatch based on the base Has_merge category. + _merge_imp(cv1, cv2, c, Base_has_merge_category()); } private: - - /*! - * Implementation of the operator() in case the HasMerge tag is true. + /*! Implementation of the operator() in case the HasMerge tag is true. */ - void _merge_imp (const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - X_monotone_curve_2& c, - Tag_true) const - { + void _merge_imp(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2, + X_monotone_curve_2& c, + Tag_true) const + { // Merge the two base curve. - Base_x_monotone_curve_2 base_cv; + Base_x_monotone_curve_2 base_cv; - base->merge_2_object() (cv1, cv2, base_cv); + m_base.merge_2_object()(cv1, cv2, base_cv); // Attach data from one of the curves. - CGAL_precondition (cv1.data() == cv2.data()); + CGAL_precondition(cv1.data() == cv2.data()); - c = X_monotone_curve_2 (base_cv, cv1.data()); - return; + c = X_monotone_curve_2(base_cv, cv1.data()); } - /*! - * Implementation of the operator() in case the HasMerge tag is false. + /*! Implementation of the operator() in case the HasMerge tag is false. + * This function should never be called! */ - void _merge_imp (const X_monotone_curve_2& , - const X_monotone_curve_2& , - X_monotone_curve_2& , - Tag_false) const - { - // This function should never be called! - CGAL_error_msg("Merging curves is not supported."); - } + void _merge_imp(const X_monotone_curve_2& /* cv1 */, + const X_monotone_curve_2& /* cv2 */, + X_monotone_curve_2& /* c */, Tag_false) const + { CGAL_error_msg("Merging curves is not supported."); } }; - /*! Get a Merge_2 functor object. */ - Merge_2 merge_2_object () const - { - return Merge_2 (this); - } + /*! Obtain a Merge_2 functor object. */ + Merge_2 merge_2_object() const { return Merge_2(*this); } - class Construct_x_monotone_curve_2 - { + class Construct_x_monotone_curve_2 { private: - const Base_traits_2 * base; + const Base_traits_2& m_base; public: - /*! Constructor. */ - Construct_x_monotone_curve_2 (const Base_traits_2 * _base) : - base (_base) - {} + Construct_x_monotone_curve_2(const Base_traits_2& base) : m_base(base) {} - /*! - * Return an x-monotone curve connecting the two given endpoints. + /*! Obtain an x-monotone curve connecting the two given endpoints. * \param p The first point. * \param q The second point. * \pre p and q must not be the same. * \return An x-monotone curve connecting p and q. */ - X_monotone_curve_2 operator() (const Point_2& p, const Point_2& q) const + X_monotone_curve_2 operator()(const Point_2& p, const Point_2& q) const { Base_x_monotone_curve_2 base_cv = - base->construct_x_monotone_curve_2_object() (p, q); - - return (X_monotone_curve_2 (base_cv, X_monotone_curve_data())); + m_base.construct_x_monotone_curve_2_object()(p, q); + return (X_monotone_curve_2(base_cv, X_monotone_curve_data())); } }; - /*! Get a Construct_x_monotone_curve_2 functor object. */ - Construct_x_monotone_curve_2 construct_x_monotone_curve_2_object () const - { - return Construct_x_monotone_curve_2 (this); - } + /*! Obtain a Construct_x_monotone_curve_2 functor object. */ + Construct_x_monotone_curve_2 construct_x_monotone_curve_2_object() const + { return Construct_x_monotone_curve_2(*this); } //@} }; From 2d6ec8e1829d7c139b0481eb85b62e1913b78493 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 5 Nov 2017 16:39:18 +0200 Subject: [PATCH 146/298] Added new test test_data_traits, which tests the Arr_curve_data_traits_2 class template --- .../Arrangement_on_surface_2/cgal_test.cmake | 2 + .../Arrangement_on_surface_2/cgal_test_base | 2 + .../test_data_traits.cpp | 38 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake index a4e1696e28c..d5a1f31d677 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test.cmake @@ -1358,6 +1358,8 @@ test_algebraic_traits_core() test_algebraic_traits_gmp() test_algebraic_traits_leda() +compile_and_run(test_data_traits) + compile_and_run(test_insertion) compile_and_run(test_unbounded_rational_insertion) compile_and_run(test_unbounded_rational_direct_insertion) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base index 65b8e559807..7718ab59338 100755 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/cgal_test_base @@ -1686,6 +1686,8 @@ test_algebraic_traits_core test_algebraic_traits_gmp test_algebraic_traits_leda +compile_and_run test_data_traits + compile_and_run test_insertion compile_and_run test_unbounded_rational_insertion compile_and_run test_unbounded_rational_direct_insertion diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp new file mode 100644 index 00000000000..886f8fb72d3 --- /dev/null +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp @@ -0,0 +1,38 @@ +#include +#include +#include + +typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel; +typedef Kernel::Point_2 Point_2; +typedef Kernel::Segment_2 Segment_2; +typedef CGAL::Arr_segment_traits_2 Segment_traits_2; +typedef CGAL::Arr_curve_data_traits_2 Traits_2; +typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2; + +int main() +{ + Point_2 p1 = Point_2(0.0, 0.0); + Point_2 p2 = Point_2(1.0, 0.0); + Point_2 p3 = Point_2(2.0, 0.0); + Segment_2 s1 = Segment_2(p1, p2); + Segment_2 s2 = Segment_2(p2, p3); + + Traits_2 traits; + X_monotone_curve_2 c1 = X_monotone_curve_2(s1, 1); + X_monotone_curve_2 fc1 = traits.construct_opposite_2_object()(c1); + + if (c1.data() != fc1.data()) return 1; + + X_monotone_curve_2 c2 = X_monotone_curve_2(s2, 1); + X_monotone_curve_2 mc; + if (!traits.are_mergeable_2_object()(c1, c2)) return 1; + traits.merge_2_object()(c1, c2, mc); + if (c1.data() != mc.data()) return 1; + + X_monotone_curve_2 sc1, sc2; + traits.split_2_object()(mc, p2, sc1, sc2); + if (mc.data() != sc1.data()) return 1; + if (sc1.data() != sc2.data()) return 1; + + return 0; +} From 5dac09329e1e7cb581c4af27f9c1321fee40f412 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 5 Nov 2017 16:45:14 +0200 Subject: [PATCH 147/298] Added Construct_opposite_2. Used generic meta functionality to check whether the base geometry traits has the respective nested functor defined, and dispatched accordingly. --- .../include/CGAL/Arr_curve_data_traits_2.h | 216 +++++++++++++----- 1 file changed, 157 insertions(+), 59 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h index 720325aba0d..256c99748d5 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h @@ -28,11 +28,13 @@ * Definition of the Arr_curve_data_traits_2<> class template. */ -#include -#include -#include -#include -#include +#include +#include + +#include +#include +#include +#include namespace CGAL { @@ -93,10 +95,10 @@ public: /// \name Construction. //@{ - /*! Default constructor. */ + /*! Construct default. */ Arr_curve_data_traits_2() {} - /*! Constructor from a base-traits class. */ + /*! Construct from a base-traits class. */ Arr_curve_data_traits_2(const Base_traits_2& traits) : Base_traits_2(traits) {} //@} @@ -160,10 +162,10 @@ public: Split_2(const Base_traits_2& base) : m_base(base) {} /*! Split a given x-monotone curve at a given point into two sub-curves. - * \param cv The curve to split - * \param p The split point. - * \param c1 Output: The left resulting subcurve (p is its right endpoint). - * \param c2 Output: The right resulting subcurve (p is its left endpoint). + * \param cv[in] The curve to split + * \param p[in] The split point. + * \param c1[out] The left resulting subcurve (p is its right endpoint). + * \param c2[out] The right resulting subcurve (p is its left endpoint). * \pre p lies on cv but is not one of its end-points. */ void operator()(const X_monotone_curve_2& cv, const Point_2& p, @@ -239,25 +241,28 @@ public: private: const Base_traits_2& m_base; - public: - /*! Constructor. */ - Are_mergeable_2(const Base_traits_2& base) : m_base(base) {} - - /*! Check whether it is possible to merge two given x-monotone curves. - * \param cv1 The first curve. - * \param cv2 The second curve. - * \return (true) if the two curves are mergeable; (false) otherwise. + /*! Helper class template to find out whether the base geometry traits has + * a nested type named Are_mergeable_2. */ - bool operator()(const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2) const - { return (_are_mergeable_base_imp(cv1, cv2, Base_has_merge_category())); } + template + struct has_are_mergeable_2 { + typedef char yes[1]; + typedef char no[2]; - private: - /*! Implementation of the base predicate in case the HasMerge tag is true. + template static yes& test(typename U::Are_mergeable_2*); + template static no& test(...); + + static const bool value = (sizeof(test(0)) == sizeof(yes)); + }; + + /*! Implementation of the predicate in case the base geometry traits class + * has a nested type named Are_mergeable_2. */ - bool _are_mergeable_base_imp(const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - Tag_true) const + template + typename boost::enable_if_c::value, + bool>::type + are_mergeable(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2) const { // In case the two base curves are not mergeable, the extended curves // are not mergeable as well. @@ -268,12 +273,32 @@ public: return (cv1.data() == cv2.data()); } - /*! Implementation of the base predicate in case the HasMerge tag is false. + /*! Implementation of the predicate in case the base geometry traits class + * does not have a nested type named Are_mergeable_2. + * This function should never be called! */ - bool _are_mergeable_base_imp(const X_monotone_curve_2& /* cv1 */, - const X_monotone_curve_2& /* cv2 */, - Tag_false) const - { return false; } + template + typename boost::enable_if_c::value, + bool>::type + are_mergeable(const X_monotone_curve_2& /* cv1 */, + const X_monotone_curve_2& /* cv2 */) const + { + CGAL_error_msg("Are mergeable is not supported."); + return false; + } + + public: + /*! Constructor. */ + Are_mergeable_2(const Base_traits_2& base) : m_base(base) {} + + /*! Check whether it is possible to merge two given x-monotone curves. + * \param cv1[in] The first curve. + * \param cv2[in] The second curve. + * \return (true) if the two curves are mergeable; (false) otherwise. + */ + bool operator()(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2) const + { return are_mergeable(cv1, cv2); } }; /*! Obtain an Are_mergeable_2 functor object. */ @@ -287,31 +312,27 @@ public: private: const Base_traits_2& m_base; - public: - /*! Constructor. */ - Merge_2(const Base_traits_2& base) : m_base(base) {} - - /*! Merge two given x-monotone curves into a single curve (segment). - * \param cv1 The first curve. - * \param cv2 The second curve. - * \param c Output: The merged curve. - * \pre The two curves are mergeable. + /*! Helper class template to find out whether the base geometry traits has + * a nested type named Merge_2. */ - void operator()(const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - X_monotone_curve_2& c) const - { - // Dispatch based on the base Has_merge category. - _merge_imp(cv1, cv2, c, Base_has_merge_category()); - } + template + struct has_merge_2 { + typedef char yes[1]; + typedef char no[2]; - private: - /*! Implementation of the operator() in case the HasMerge tag is true. + template static yes& test(typename U::Merge_2*); + template static no& test(...); + + static const bool value = (sizeof(test(0)) == sizeof(yes)); + }; + + /*! Implementation of the predicate in case the base geometry traits class + * has a nested type named Merge_2. */ - void _merge_imp(const X_monotone_curve_2& cv1, - const X_monotone_curve_2& cv2, - X_monotone_curve_2& c, - Tag_true) const + template + typename boost::enable_if_c::value, void>::type + merge(const X_monotone_curve_2& cv1, const X_monotone_curve_2& cv2, + X_monotone_curve_2& c) const { // Merge the two base curve. Base_x_monotone_curve_2 base_cv; @@ -324,13 +345,31 @@ public: c = X_monotone_curve_2(base_cv, cv1.data()); } - /*! Implementation of the operator() in case the HasMerge tag is false. + /*! Implementation of the predicate in case the base geometry traits class + * does not have a nested type named Merge_2. * This function should never be called! */ - void _merge_imp(const X_monotone_curve_2& /* cv1 */, - const X_monotone_curve_2& /* cv2 */, - X_monotone_curve_2& /* c */, Tag_false) const + template + typename boost::enable_if_c::value, void>::type + merge(const X_monotone_curve_2& /* cv1 */, + const X_monotone_curve_2& /* cv2 */, + X_monotone_curve_2& /* c */) const { CGAL_error_msg("Merging curves is not supported."); } + + public: + /*! Constructor. */ + Merge_2(const Base_traits_2& base) : m_base(base) {} + + /*! Merge two given x-monotone curves into a single curve (segment). + * \param[in] cv1 The first curve. + * \param[in] cv2 The second curve. + * \param[out] c The merged curve. + * \pre The two curves are mergeable. + */ + void operator()(const X_monotone_curve_2& cv1, + const X_monotone_curve_2& cv2, + X_monotone_curve_2& c) const + { merge(cv1, cv2, c); } }; /*! Obtain a Merge_2 functor object. */ @@ -361,8 +400,67 @@ public: /*! Obtain a Construct_x_monotone_curve_2 functor object. */ Construct_x_monotone_curve_2 construct_x_monotone_curve_2_object() const { return Construct_x_monotone_curve_2(*this); } - //@} + class Construct_opposite_2 { + private: + const Base_traits_2& m_base; + + /*! Helper class template to find out whether the base geometry traits has + * a nested type named Construct_opposite_2. + */ + template + struct has_construct_opposite_2 { + typedef char yes[1]; + typedef char no[2]; + + template static yes& test(typename U::Construct_opposite_2*); + template static no& test(...); + + static const bool value = (sizeof(test(0)) == sizeof(yes)); + }; + + /*! Implementation of the predicate in case the base geometry traits class + * has a nested type named Construct_opposite_2. + */ + template + typename boost::enable_if_c::value, + X_monotone_curve_2>::type + construct_opposite(const X_monotone_curve_2& cv) const + { + X_monotone_curve_2 new_cv = m_base.construct_opposite_2_object()(cv); + new_cv.set_data(cv.data()); + return new_cv; + } + + /*! Implementation of the predicate in case the base geometry traits class + * does not have a nested type named Construct_opposite_2. + * This function should never be called! + */ + template + typename boost::enable_if_c::value, + X_monotone_curve_2>::type + construct_opposite(const X_monotone_curve_2& cv) const + { + CGAL_error_msg("Construct opposite curve is not supported!"); + return X_monotone_curve_2(); + } + + public: + /*! Constructor. */ + Construct_opposite_2(const Base_traits_2& base) : m_base(base) {} + + /*! Construct an opposite x-monotone (with swapped source and target). + * \param cv The curve. + * \return The opposite curve. + */ + X_monotone_curve_2 operator()(const X_monotone_curve_2& cv) const + { return construct_opposite(cv); } + }; + + /*! Obtain a Construct_opposite_2 functor object. */ + Construct_opposite_2 construct_opposite_2_object() const + { return Construct_opposite_2(*this); } + //@} }; } //namespace CGAL From 7aac8c64a9eb24cb9aa1ce423a46bcf3cd703541 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 5 Nov 2017 21:14:25 +0200 Subject: [PATCH 148/298] Added a note about the fix to the release notes --- Installation/changes.html | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Installation/changes.html b/Installation/changes.html index 6b01b59a253..c3cc79326ba 100644 --- a/Installation/changes.html +++ b/Installation/changes.html @@ -183,7 +183,7 @@ and src/ directories).

3D Surface Mesh Generation

  • - Add the function facets_in_complex_2_to_triangle_mesh() + Add the function facets_in_complex_2_to_triangle_mesh() that exports Surface_mesh_complex_2_in_triangulation_3 facets into a MutableFaceGraph.
  • @@ -191,7 +191,7 @@ and src/ directories).

    3D Mesh Generation

    • - Add the function facets_in_complex_3_to_triangle_mesh() + Add the function facets_in_complex_3_to_triangle_mesh() that exports Mesh_complex_3_in_triangulation_3 facets into a MutableFaceGraph.
    • @@ -247,6 +247,14 @@ and src/ directories).
    +

    2D Arrangements

    +
      +
    • Fixed the Construct_opposite_2 functor required by the + concept ArrangementDirectionalXMonotoneTraits_2 when using + the Arr_curve_data_traits_2 class template to attach data + to curves. +
    • +

    Release 4.11

    @@ -547,7 +555,7 @@ and src/ directories). concept MutableFaceGraph. This class can thus now be used in all BGL functions and algorithms. -
  • Helper functions to create an icosahedron, a regular prism and a +
  • Helper functions to create an icosahedron, a regular prism and a pyramid have been added.
  • From 6779e2cb351fa5691ce11e5aeb3f0da9b4670531 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 15 Nov 2017 13:24:48 +0200 Subject: [PATCH 149/298] Added error and informative messages --- .../test_data_traits.cpp | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp index 886f8fb72d3..68749b53009 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_data_traits.cpp @@ -18,21 +18,40 @@ int main() Segment_2 s2 = Segment_2(p2, p3); Traits_2 traits; - X_monotone_curve_2 c1 = X_monotone_curve_2(s1, 1); + X_monotone_curve_2 c1 = X_monotone_curve_2(s1, 1234); X_monotone_curve_2 fc1 = traits.construct_opposite_2_object()(c1); - if (c1.data() != fc1.data()) return 1; + if (c1.data() != fc1.data()) { + std::cerr << "Construct opposite failed: " + << c1.data() << " != " << fc1.data() << std::endl; + return 1; + } + std::cout << "Construct opposite data: " << c1.data() << std::endl; - X_monotone_curve_2 c2 = X_monotone_curve_2(s2, 1); + X_monotone_curve_2 c2 = X_monotone_curve_2(s2, 1234); X_monotone_curve_2 mc; if (!traits.are_mergeable_2_object()(c1, c2)) return 1; traits.merge_2_object()(c1, c2, mc); - if (c1.data() != mc.data()) return 1; + if (c1.data() != mc.data()) { + std::cerr << "Merge failed: " + << c1.data() << " != " << mc.data() << std::endl; + return 1; + } + std::cout << "Merge data: " << c1.data() << std::endl; X_monotone_curve_2 sc1, sc2; traits.split_2_object()(mc, p2, sc1, sc2); - if (mc.data() != sc1.data()) return 1; - if (sc1.data() != sc2.data()) return 1; + if (mc.data() != sc1.data()) { + std::cerr << "Split failed (original curve and split curve data differ): " + << mc.data() << " != " << sc1.data() << std::endl; + return 1; + } + if (sc1.data() != sc2.data()) { + std::cerr << "Split failed (data of split curves differ): " + << sc1.data() << " != " << sc2.data() << std::endl; + return 1; + } + std::cout << "Split data: " << sc1.data() << std::endl; return 0; } From e60ec0ac3e5a863c9b42d71fca2e2a685c36fac4 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 15 Nov 2017 15:01:54 +0200 Subject: [PATCH 150/298] Small enhansment to the construct-opposite functor --- .../include/CGAL/Arr_curve_data_traits_2.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h index 256c99748d5..fc2d58a2be8 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h @@ -427,8 +427,8 @@ public: X_monotone_curve_2>::type construct_opposite(const X_monotone_curve_2& cv) const { - X_monotone_curve_2 new_cv = m_base.construct_opposite_2_object()(cv); - new_cv.set_data(cv.data()); + X_monotone_curve_2 new_cv(m_base.construct_opposite_2_object()(cv), + cv.data()); return new_cv; } From 2cedf1bcc0255ccd302c055a45a566f8323cddff Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Wed, 15 Nov 2017 17:36:38 +0200 Subject: [PATCH 151/298] Used BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF --- .../include/CGAL/Arr_curve_data_traits_2.h | 48 +++++-------------- 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h index fc2d58a2be8..b8b5ab5c530 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_curve_data_traits_2.h @@ -30,6 +30,7 @@ #include #include +#include #include #include @@ -241,19 +242,11 @@ public: private: const Base_traits_2& m_base; - /*! Helper class template to find out whether the base geometry traits has - * a nested type named Are_mergeable_2. + /*! Generate a helper class template to find out whether the base geometry + * traits has a nested type named Are_mergeable_2. */ - template - struct has_are_mergeable_2 { - typedef char yes[1]; - typedef char no[2]; - - template static yes& test(typename U::Are_mergeable_2*); - template static no& test(...); - - static const bool value = (sizeof(test(0)) == sizeof(yes)); - }; + BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_are_mergeable_2, + Are_mergeable_2, false) /*! Implementation of the predicate in case the base geometry traits class * has a nested type named Are_mergeable_2. @@ -312,19 +305,10 @@ public: private: const Base_traits_2& m_base; - /*! Helper class template to find out whether the base geometry traits has - * a nested type named Merge_2. + /*! Generate a helper class template to find out whether the base geometry + * traits has a nested type named Merge_2. */ - template - struct has_merge_2 { - typedef char yes[1]; - typedef char no[2]; - - template static yes& test(typename U::Merge_2*); - template static no& test(...); - - static const bool value = (sizeof(test(0)) == sizeof(yes)); - }; + BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_merge_2, Are_mergeable_2, false) /*! Implementation of the predicate in case the base geometry traits class * has a nested type named Merge_2. @@ -405,19 +389,11 @@ public: private: const Base_traits_2& m_base; - /*! Helper class template to find out whether the base geometry traits has - * a nested type named Construct_opposite_2. + /*! Generate a helper class template to find out whether the base geometry + * traits has a nested type named Construct_opposite_2. */ - template - struct has_construct_opposite_2 { - typedef char yes[1]; - typedef char no[2]; - - template static yes& test(typename U::Construct_opposite_2*); - template static no& test(...); - - static const bool value = (sizeof(test(0)) == sizeof(yes)); - }; + BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_construct_opposite_2, + Construct_opposite_2, false) /*! Implementation of the predicate in case the base geometry traits class * has a nested type named Construct_opposite_2. From 97988d3976df0b9e43be79705d1ab1919daebd2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 15 Nov 2017 17:40:00 +0100 Subject: [PATCH 152/298] do not try to link nested members --- BGL/doc/BGL/Concepts/FaceGraph.h | 2 +- BGL/doc/BGL/Concepts/FaceListGraph.h | 2 +- BGL/doc/BGL/Concepts/HalfedgeGraph.h | 2 +- BGL/doc/BGL/Concepts/HalfedgeListGraph.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BGL/doc/BGL/Concepts/FaceGraph.h b/BGL/doc/BGL/Concepts/FaceGraph.h index de04ba092b1..438632ff511 100644 --- a/BGL/doc/BGL/Concepts/FaceGraph.h +++ b/BGL/doc/BGL/Concepts/FaceGraph.h @@ -10,7 +10,7 @@ face.

    Associated Types:

    -`boost::graph_traits::face_descriptor` +`boost::graph_traits::%face_descriptor` A face descriptor corresponds to a unique face in an abstract graph instance. A face descriptor must be `DefaultConstructible`, `Assignable`, and `EqualityComparable`. diff --git a/BGL/doc/BGL/Concepts/FaceListGraph.h b/BGL/doc/BGL/Concepts/FaceListGraph.h index 783026f9308..49d34bb1f4d 100644 --- a/BGL/doc/BGL/Concepts/FaceListGraph.h +++ b/BGL/doc/BGL/Concepts/FaceListGraph.h @@ -7,7 +7,7 @@ the requirement for traversal of all faces in a graph.

    Associated Types:

    -`boost::graph_traits::face_iterator` +`boost::graph_traits::%face_iterator` A face iterator (obtained via `faces(g)`) provides access to all of the faces in a graph. A face iterator type must meet the requirements of `MultiPassInputIterator`. The value type of the face iterator must be the same as the face descriptor of the graph. diff --git a/BGL/doc/BGL/Concepts/HalfedgeGraph.h b/BGL/doc/BGL/Concepts/HalfedgeGraph.h index e2a05e433a9..1146d9e1e27 100644 --- a/BGL/doc/BGL/Concepts/HalfedgeGraph.h +++ b/BGL/doc/BGL/Concepts/HalfedgeGraph.h @@ -17,7 +17,7 @@ iterators and circulators for these halfedge cycles.

    Associated Types:

    -`boost::graph_traits::halfedge_descriptor` +`boost::graph_traits::%halfedge_descriptor` A halfedge descriptor corresponds to a unique halfedge in an abstract graph instance. A halfedge descriptor must be `DefaultConstructible`, `Assignable`, and `EqualityComparable`. diff --git a/BGL/doc/BGL/Concepts/HalfedgeListGraph.h b/BGL/doc/BGL/Concepts/HalfedgeListGraph.h index c5d0ba1cc99..6f7406e5681 100644 --- a/BGL/doc/BGL/Concepts/HalfedgeListGraph.h +++ b/BGL/doc/BGL/Concepts/HalfedgeListGraph.h @@ -7,7 +7,7 @@ and adds the requirements for traversal of all halfedges in the graph.

    Associated Types:

    -`boost::graph_traits::halfedge_iterator` +`boost::graph_traits::%halfedge_iterator` A halfedge iterator (obtained via `halfedges(g)`) provides access to all of the halfedges in a graph. A halfedge iterator type must meet the requirements of `MultiPassInputIterator`. The value type of the halfedge iterator must be the same as the halfedge descriptor of the graph. From 6aae344f9cddf930431ef83157e50fff60d145ed Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 18:43:44 +0100 Subject: [PATCH 153/298] Enable CTest from sub-directories of CGAL --- Installation/cmake/modules/CGAL_add_test.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Installation/cmake/modules/CGAL_add_test.cmake b/Installation/cmake/modules/CGAL_add_test.cmake index 4b2194fd66c..e3b5a9beb45 100644 --- a/Installation/cmake/modules/CGAL_add_test.cmake +++ b/Installation/cmake/modules/CGAL_add_test.cmake @@ -3,6 +3,8 @@ if(CGAL_add_test_included) endif(CGAL_add_test_included) set(CGAL_add_test_included TRUE) +include(CTest) + if(POLICY CMP0064) cmake_policy(SET CMP0064 NEW) endif() From 6804eadd98cce07ea7b2f1b0b677db3b74c2f950 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 18:55:25 +0100 Subject: [PATCH 154/298] Fill the CMAKE_CONFIGURE_DEPENDS directory property ... with each `.cin` and `.cmd` files that are used. --- Installation/cmake/modules/CGAL_add_test.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Installation/cmake/modules/CGAL_add_test.cmake b/Installation/cmake/modules/CGAL_add_test.cmake index e3b5a9beb45..10fc5efa338 100644 --- a/Installation/cmake/modules/CGAL_add_test.cmake +++ b/Installation/cmake/modules/CGAL_add_test.cmake @@ -193,6 +193,8 @@ function(cgal_add_test exe_name) -DANDROID_DIR_PREFIX=${ANDROID_DIR_PREFIX} -DPROJECT_NAME=${PROJECT_NAME} -P "${CGAL_MODULES_DIR}/run_test_with_cin.cmake") + set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${cin_file}) # message(STATUS "add test: ${exe_name} < ${cin_file}") else() if(NOT ARGS AND NOT cgal_add_test_TEST_NAME) @@ -215,6 +217,8 @@ function(cgal_add_test exe_name) list(APPEND ARGS ${CMD_LINE_ARGS}) endforeach() expand_list_with_globbing(ARGS) + set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${cmd_file}) endif() endif() # message(STATUS "add test: ${exe_name} ${ARGS}") From 92a0fc24f80dc703336357a92c022259a376f509 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 15 Nov 2017 18:39:49 +0000 Subject: [PATCH 155/298] Document Hashable as requirement for the descriptors --- BGL/doc/BGL/Concepts/FaceGraph.h | 2 +- BGL/doc/BGL/Concepts/HalfedgeGraph.h | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/BGL/doc/BGL/Concepts/FaceGraph.h b/BGL/doc/BGL/Concepts/FaceGraph.h index 438632ff511..425609027f2 100644 --- a/BGL/doc/BGL/Concepts/FaceGraph.h +++ b/BGL/doc/BGL/Concepts/FaceGraph.h @@ -12,7 +12,7 @@ face. `boost::graph_traits::%face_descriptor` A face descriptor corresponds to a unique face in an abstract graph instance. -A face descriptor must be `DefaultConstructible`, `Assignable`, and `EqualityComparable`. +A face descriptor must be `DefaultConstructible`, `Assignable`, `EqualityComparable`, and `Hashable`. \cgalRefines `HalfedgeGraph` \cgalHasModel `CGAL::Polyhedron_3` diff --git a/BGL/doc/BGL/Concepts/HalfedgeGraph.h b/BGL/doc/BGL/Concepts/HalfedgeGraph.h index 1146d9e1e27..064a2ce5557 100644 --- a/BGL/doc/BGL/Concepts/HalfedgeGraph.h +++ b/BGL/doc/BGL/Concepts/HalfedgeGraph.h @@ -17,9 +17,19 @@ iterators and circulators for these halfedge cycles.

    Associated Types:

    + +`boost::graph_traits::%vertex_descriptor` +A vertex descriptor corresponds to a unique vertex in an abstract graph instance. +A vertex descriptor must be `DefaultConstructible`, `Assignable`, `EqualityComparable`, and `Hashable`. + `boost::graph_traits::%halfedge_descriptor` + A halfedge descriptor corresponds to a unique halfedge in an abstract graph instance. -A halfedge descriptor must be `DefaultConstructible`, `Assignable`, and `EqualityComparable`. +A halfedge descriptor must be `DefaultConstructible`, `Assignable`, `EqualityComparable`, and `Hashable`. + +`boost::graph_traits::%edge_descriptor` +An edge descriptor corresponds to a unique edge in an abstract graph instance. +An edge descriptor must be `DefaultConstructible`, `Assignable`, `EqualityComparable`, and `Hashable`. \cgalRefines `IncidenceGraph` \cgalRefines `PropertyGraph` From 379f5b3bb3493fa27e348e533ec9b0fdb3a59a7a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 19:44:26 +0100 Subject: [PATCH 156/298] Remove unused module --- Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake index 43359274eb2..1f85a3f1017 100644 --- a/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake +++ b/Polyhedron/demo/Polyhedron/polyhedron_demo_macros.cmake @@ -1,5 +1,4 @@ include(AddFileDependencies) -include (CGAL_Macros) macro(polyhedron_demo_plugin plugin_name plugin_implementation_base_name) list_split(option ARGN_TAIL ${ARGN} ) From 49a138a9a4139e0901844eaff954ff3a793747fc Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 15 Nov 2017 21:36:37 +0100 Subject: [PATCH 157/298] Fix compilations of Polyhedron demo --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 7ae8aeae2f0..81e00423303 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -45,8 +45,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") include_directories( BEFORE ./ ./include ../../include ./CGAL_demo ) list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}") -add_subdirectory( implicit_functions ) - # Find CGAL option( POLYHEDRON_QTSCRIPT_DEBUGGER @@ -132,7 +130,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) qt5_wrap_ui( Show_point_dialogUI_FILES Show_point_dialog.ui ) qt5_wrap_ui( ViewerUI_FILES ImageInterface.ui) qt5_generate_moc( "File_loader_dialog.h" "${CMAKE_CURRENT_BINARY_DIR}/File_loader_dialog_moc.cpp" ) - add_file_dependencies( File_loader_dialog_moc.cpp "${CMAKE_CURRENT_SOURCE_DIR}/File_loader_dialog.h" ) include( ${CMAKE_CURRENT_SOURCE_DIR}/polyhedron_demo_macros.cmake ) @@ -141,7 +138,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) qt5_add_resources(gl_splat_rc GlSplat/glsplat.qrc) add_library(gl_splat SHARED GlSplat/GlSplat.cpp GlSplat/Shader.cpp ${gl_splat_rc}) - target_link_libraries(gl_splat PRIVATE Qt5::OpenGL Qt5::Gui) + target_link_libraries(gl_splat PUBLIC ${QGLVIEWER_LIBRARIES} Qt5::OpenGL Qt5::Gui) target_link_libraries(gl_splat PRIVATE ${OPENGL_gl_LIBRARY} ${QGLVIEWER_LIBRARIES}) find_path(CGAL_THREE_HEADERS_PATH @@ -361,6 +358,9 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/Plugins/${SUB_DIR}") ENDFOREACH() + add_subdirectory( implicit_functions ) + + # # Exporting # From 8d44f82212cdbd2ecd2268c84b82d3e9d4d17626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Nov 2017 13:49:42 +0100 Subject: [PATCH 158/298] update doc for SPDX and URL/Id tags --- .../Developer_manual/Chapter_code_format.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Documentation/doc/Documentation/Developer_manual/Chapter_code_format.txt b/Documentation/doc/Documentation/Developer_manual/Chapter_code_format.txt index c8ec1c39d90..95d48ac7bc9 100644 --- a/Documentation/doc/Documentation/Developer_manual/Chapter_code_format.txt +++ b/Documentation/doc/Documentation/Developer_manual/Chapter_code_format.txt @@ -320,14 +320,13 @@ employing the authors) of this work, are allowed in \cgal), and a pointer to the file containing its text in the \cgal distribution,
  • a disclaimer notice, -
  • then, there are 2 keywords, which are automatically expanded by SVN -(there are options in SVN to suppress these expansions if you need): +
  • then, there are 2 keywords, which are automatically expanded at the creation of a new release:
      -
    • \$URL: \$ : the name of the source file in the repository, it also -helps figuring out which package the file comes from, -
    • \$Id: \$ : the SVN revision number of the file, the date of this revision, -and the author of the last commit. +
    • \$URL\$ : canonical path to the file on github, +
    • \$Id\$ : the release version the file is from.
    +
  • Then [SPDX license identifier](https://spdx.org/). For GPL-3+ it should be `SPDX-License-Identifier: GPL-3.0+`, +and `SPDX-License-Identifier: LGPL-3.0+` for LGPL-3+.
  • Then the authors of (non-negligible parts of) this file are listed, with optional affiliation or e-mail address.
From b21b9e21c9d688b0ef8eb5b32904697ae5207f97 Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Thu, 16 Nov 2017 15:20:23 +0100 Subject: [PATCH 159/298] By default, disable the use of viewer in LCC examples. --- .../examples/Linear_cell_complex/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt b/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt index 620838e007b..6a0dc262fe0 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt +++ b/Linear_cell_complex/examples/Linear_cell_complex/CMakeLists.txt @@ -16,11 +16,11 @@ ADD_DEFINITIONS("-std=c++11") # If you want to visualize a linear cell complex, you can use the following viewer # based on qt. Just uncomment the following two lines, plus the lines qt5_use_modules below -find_package(CGAL COMPONENTS Qt5) -include("CMakeBasicViewerQt.inc") +# find_package(CGAL COMPONENTS Qt5) +# include("CMakeBasicViewerQt.inc") # If you don't want to visualize, use the following line (otherwise comment it) -# find_package(CGAL QUIET) +find_package(CGAL QUIET) # For Gprof. # ADD_DEFINITIONS("-pg") From 3f0614cf66cd811a1710b2de490d58e22abc3090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Nov 2017 16:43:02 +0100 Subject: [PATCH 160/298] remove all doxygen configuration files --- .../Arrangement_on_surface_2.dxy | 1218 ----------------- .../Boolean_set_operations.dxy | 1218 ----------------- Envelope_2/Envelope_2.dxy | 1218 ----------------- Envelope_3/Envelope_3.dxy | 1218 ----------------- Inscribed_areas/Largest_empty_rect_2.dxy | 1218 ----------------- Minkowski_sum_2/Minkowski_sum_2.dxy | 1218 ----------------- Snap_rounding_2/Snap_rounding_2.dxy | 1218 ----------------- 7 files changed, 8526 deletions(-) delete mode 100644 Arrangement_on_surface_2/Arrangement_on_surface_2.dxy delete mode 100644 Boolean_set_operations_2/Boolean_set_operations.dxy delete mode 100644 Envelope_2/Envelope_2.dxy delete mode 100644 Envelope_3/Envelope_3.dxy delete mode 100644 Inscribed_areas/Largest_empty_rect_2.dxy delete mode 100644 Minkowski_sum_2/Minkowski_sum_2.dxy delete mode 100644 Snap_rounding_2/Snap_rounding_2.dxy diff --git a/Arrangement_on_surface_2/Arrangement_on_surface_2.dxy b/Arrangement_on_surface_2/Arrangement_on_surface_2.dxy deleted file mode 100644 index d4578f75263..00000000000 --- a/Arrangement_on_surface_2/Arrangement_on_surface_2.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Arrangement_on_surface_2 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Arrangement_on_surface_2 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Boolean_set_operations_2/Boolean_set_operations.dxy b/Boolean_set_operations_2/Boolean_set_operations.dxy deleted file mode 100644 index 705df357d38..00000000000 --- a/Boolean_set_operations_2/Boolean_set_operations.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Boolean_set_operations_2 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL examples/Boolean_set_operations_2 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Boolean_set_operations_2 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Envelope_2/Envelope_2.dxy b/Envelope_2/Envelope_2.dxy deleted file mode 100644 index 7df4443090e..00000000000 --- a/Envelope_2/Envelope_2.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Envelope_2 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Envelope_3 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Envelope_3/Envelope_3.dxy b/Envelope_3/Envelope_3.dxy deleted file mode 100644 index 5610bc6ece4..00000000000 --- a/Envelope_3/Envelope_3.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Envelope_3 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Envelope_3 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Inscribed_areas/Largest_empty_rect_2.dxy b/Inscribed_areas/Largest_empty_rect_2.dxy deleted file mode 100644 index 7a3270454d5..00000000000 --- a/Inscribed_areas/Largest_empty_rect_2.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Largest_empty_rect_2 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Largest_empty_rect_2 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Minkowski_sum_2/Minkowski_sum_2.dxy b/Minkowski_sum_2/Minkowski_sum_2.dxy deleted file mode 100644 index 6f6d99e3651..00000000000 --- a/Minkowski_sum_2/Minkowski_sum_2.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Minkowski_sum_2 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Minkowski_sum_2 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Snap_rounding_2/Snap_rounding_2.dxy b/Snap_rounding_2/Snap_rounding_2.dxy deleted file mode 100644 index 79b1c4499a2..00000000000 --- a/Snap_rounding_2/Snap_rounding_2.dxy +++ /dev/null @@ -1,1218 +0,0 @@ -# Doxyfile 1.4.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Snap_rounding_2 - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include/CGAL - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = examples/Snap_rounding_2 - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO From 700351d0931003211408ba3970164e8a9728a10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Nov 2017 16:50:52 +0100 Subject: [PATCH 161/298] remove useless files --- Three/dont_submit | 1 - wininst/dont_submit | 9 --------- 2 files changed, 10 deletions(-) delete mode 100644 Three/dont_submit delete mode 100644 wininst/dont_submit diff --git a/Three/dont_submit b/Three/dont_submit deleted file mode 100644 index 8e695ec83aa..00000000000 --- a/Three/dont_submit +++ /dev/null @@ -1 +0,0 @@ -doc diff --git a/wininst/dont_submit b/wininst/dont_submit deleted file mode 100644 index 27fd2a93eea..00000000000 --- a/wininst/dont_submit +++ /dev/null @@ -1,9 +0,0 @@ -CGAL.bmp -cgal.ico -cgal_very_small_FFFFFF.bmp -default_variants.ini -environment_variables.ini -fixup_projects.ini -TextLog.nsh -WriteEnvStr.nsh -zirkel.bmp From 8b72eacb8ba141ddb0376c3b81b27036aa215118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Nov 2017 17:10:05 +0100 Subject: [PATCH 162/298] use a uniform name for TODO files --- Arrangement_on_surface_2/{todo => TODO} | 0 .../test/Arrangement_on_surface_2/{todo => TODO} | 0 Inscribed_areas/{todo.txt => TODO} | 0 Kinetic_data_structures/{todo => TODO} | 0 Polyhedron/demo/Polyhedron/{TODO.txt => TODO} | 0 Skin_surface_3/{TODO.txt => TODO} | 0 Spatial_searching/{TODO.txt => TODO} | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename Arrangement_on_surface_2/{todo => TODO} (100%) rename Arrangement_on_surface_2/test/Arrangement_on_surface_2/{todo => TODO} (100%) rename Inscribed_areas/{todo.txt => TODO} (100%) rename Kinetic_data_structures/{todo => TODO} (100%) rename Polyhedron/demo/Polyhedron/{TODO.txt => TODO} (100%) rename Skin_surface_3/{TODO.txt => TODO} (100%) rename Spatial_searching/{TODO.txt => TODO} (100%) diff --git a/Arrangement_on_surface_2/todo b/Arrangement_on_surface_2/TODO similarity index 100% rename from Arrangement_on_surface_2/todo rename to Arrangement_on_surface_2/TODO diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/todo b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/TODO similarity index 100% rename from Arrangement_on_surface_2/test/Arrangement_on_surface_2/todo rename to Arrangement_on_surface_2/test/Arrangement_on_surface_2/TODO diff --git a/Inscribed_areas/todo.txt b/Inscribed_areas/TODO similarity index 100% rename from Inscribed_areas/todo.txt rename to Inscribed_areas/TODO diff --git a/Kinetic_data_structures/todo b/Kinetic_data_structures/TODO similarity index 100% rename from Kinetic_data_structures/todo rename to Kinetic_data_structures/TODO diff --git a/Polyhedron/demo/Polyhedron/TODO.txt b/Polyhedron/demo/Polyhedron/TODO similarity index 100% rename from Polyhedron/demo/Polyhedron/TODO.txt rename to Polyhedron/demo/Polyhedron/TODO diff --git a/Skin_surface_3/TODO.txt b/Skin_surface_3/TODO similarity index 100% rename from Skin_surface_3/TODO.txt rename to Skin_surface_3/TODO diff --git a/Spatial_searching/TODO.txt b/Spatial_searching/TODO similarity index 100% rename from Spatial_searching/TODO.txt rename to Spatial_searching/TODO From abf157819c4ae9fbae6f5f2a7f75a60b1e668a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Nov 2017 17:15:06 +0100 Subject: [PATCH 163/298] remove unused doxygen files --- Skin_surface_3/Doxyfile | 1222 --------------------------------------- Surface_mesher/Doxyfile | 225 ------- 2 files changed, 1447 deletions(-) delete mode 100644 Skin_surface_3/Doxyfile delete mode 100644 Surface_mesher/Doxyfile diff --git a/Skin_surface_3/Doxyfile b/Skin_surface_3/Doxyfile deleted file mode 100644 index e1b94af44bb..00000000000 --- a/Skin_surface_3/Doxyfile +++ /dev/null @@ -1,1222 +0,0 @@ -# Doxyfile 1.4.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "Skin_surface_3" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 0.9 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doxygen/ - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is YES. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = /proj/geometrica/home/CGAL/CGAL-I/include/ - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = "CGAL_USE_GMP CGAL_USE_QT" - - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Surface_mesher/Doxyfile b/Surface_mesher/Doxyfile deleted file mode 100644 index 826c532e3c0..00000000000 --- a/Surface_mesher/Doxyfile +++ /dev/null @@ -1,225 +0,0 @@ -# Doxyfile 1.4.4 - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = "Chew for surfaces" -PROJECT_NUMBER = 1.2 -OUTPUT_DIRECTORY = doxygen/ -CREATE_SUBDIRS = NO -OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = NO -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -STRIP_FROM_INC_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = YES -INHERIT_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 8 -ALIASES = -OPTIMIZE_OUTPUT_FOR_C = NO -OPTIMIZE_OUTPUT_JAVA = NO -SUBGROUPING = YES -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_STATIC = NO -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = YES -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = NO -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -SORT_BRIEF_DOCS = NO -SORT_BY_SCOPE_NAME = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = YES -SHOW_DIRECTORIES = YES -FILE_VERSION_FILTER = -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = include -FILE_PATTERNS = *.h -RECURSIVE = YES -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = YES -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = YES -REFERENCES_RELATION = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = NO -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -BINARY_TOC = NO -TOC_EXPAND = NO -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NO -TREEVIEW_WIDTH = 250 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = YES -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -LATEX_BATCHMODE = YES -LATEX_HIDE_INDICES = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = -XML_PROGRAMLISTING = YES -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = /absinthe/CGAL-testsuites/CGAL-I/include/CGAL \ - /0/prisme_util/CGAL/CGAL-I/include/CGAL \ - /home/lrineau/CGAL-3.1-I-49/include \ - /home/rineau/CGAL/CGAL-3.2-I-340/include/ -INCLUDE_FILE_PATTERNS = -PREDEFINED = "CGAL_USE_GMP CGAL_USE_QT" -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -GROUP_GRAPHS = YES -UML_LOOK = YES -TEMPLATE_RELATIONS = YES -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = YES -CALL_GRAPH = YES -GRAPHICAL_HIERARCHY = YES -DIRECTORY_GRAPH = YES -DOT_IMAGE_FORMAT = png -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1024 -MAX_DOT_GRAPH_DEPTH = 0 -DOT_TRANSPARENT = YES -DOT_MULTI_TARGETS = YES -GENERATE_LEGEND = YES -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO From b2f65226fdc52872927a0502fa3229ec1637b6fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 16 Nov 2017 17:19:24 +0100 Subject: [PATCH 164/298] remove unused file --- .../svn_server/hooks/Mail/Sender/CType/Ext.pm | 208 ------------------ 1 file changed, 208 deletions(-) delete mode 100644 Maintenance/svn_server/hooks/Mail/Sender/CType/Ext.pm diff --git a/Maintenance/svn_server/hooks/Mail/Sender/CType/Ext.pm b/Maintenance/svn_server/hooks/Mail/Sender/CType/Ext.pm deleted file mode 100644 index 957e9929d74..00000000000 --- a/Maintenance/svn_server/hooks/Mail/Sender/CType/Ext.pm +++ /dev/null @@ -1,208 +0,0 @@ -package Mail::Sender; -%Mail::Sender::CTypes = -( -#------------------------------------------ -'HTML', "text/html", -'HTM', "text/html", -'STM', "text/html", -'SHTML', "text/html", -'TXT', "text/plain", -'PREF', "text/plain", -'AIS', "text/plain", -'RTX', "text/richtext", -'TSV', "text/tab-separated-values", -'NFO', "text/warez-info", -'ETX', "text/x-setext", -'SGML', "text/x-sgml", -'SGM', "text/x-sgml", -'TALK', "text/x-speech", -'CGI', "text/plain", # we want these two as text files -'PL', "text/plain", # and not application/x-httpd-cgi -#----------------------------------------- -'COD', "image/cis-cod", -'FID', "image/fif", -'GIF', "image/gif", -'ICO', "image/ico", -'IEF', "image/ief", -'JPEG', "image/jpeg", -'JPG', "image/jpeg", -'JPE', "image/jpeg", -'PNG', "image/png", -'TIF', "image/tiff", -'TIFF', "image/tiff", -'MCF', "image/vasa", -'RAS', "image/x-cmu-raster", -'CMX', "image/x-cmx", -'PCD', "image/x-photo-cd", -'PNM', "image/x-portable-anymap", -'PBM', "image/x-portable-bitmap", -'PGM', "image/x-portable-graymap", -'PPM', "image/x-portable-pixmap", -'RGB', "image/x-rgb", -'XBM', "image/x-xbitmap", -'XPM', "image/x-xpixmap", -'XWD', "image/x-xwindowdump", -#------------------------------------------ -'EXE', "application/octet-stream", -'BIN', "application/octet-stream", -'DMS', "application/octet-stream", -'LHA', "application/octet-stream", -'CLASS', "application/octet-stream", -'DLL', "application/octet-stream", -'AAM', "application/x-authorware-map", -'AAS', "application/x-authorware-seg", -'AAB', "application/x-authorware-bin", -'VMD', "application/vocaltec-media-desc", -'VMF', "application/vocaltec-media-file", -'ASD', "application/astound", -'ASN', "application/astound", -'DWG', "application/autocad", -'DSP', "application/dsptype", -'DFX', "application/dsptype", -'EVY', "application/envoy", -'SPL', "application/futuresplash", -'IMD', "application/immedia", -'HQX', "application/mac-binhex40", -'CPT', "application/mac-compactpro", -'DOC', "application/msword", -'ODA', "application/oda", -'PDF', "application/pdf", -'AI', "application/postscript", -'EPS', "application/postscript", -'PS', "application/postscript", -'PPT', "application/powerpoint", -'RTF', "application/rtf", -'APM', "application/studiom", -'XAR', "application/vnd.xara", -'ANO', "application/x-annotator", -'ASP', "application/x-asap", -'CHAT', "application/x-chat", -'BCPIO', "application/x-bcpio", -'VCD', "application/x-cdlink", -'TGZ', "application/x-compressed", -'Z', "application/x-compress", -'CPIO', "application/x-cpio", -'PUZ', "application/x-crossword", -'CSH', "application/x-csh", -'DCR', "application/x-director", -'DIR', "application/x-director", -'DXR', "application/x-director", -'FGD', "application/x-director", -'DVI', "application/x-dvi", -'LIC', "application/x-enterlicense", -'EPB', "application/x-epublisher", -'FAXMGR', "application/x-fax-manager", -'FAXMGRJOB', "application/x-fax-manager-job", -'FM', "application/x-framemaker", -'FRAME', "application/x-framemaker", -'FRM', "application/x-framemaker", -'MAKER', "application/x-framemaker", -'GTAR', "application/x-gtar", -'GZ', "application/x-gzip", -'HDF', "application/x-hdf", -'INS', "application/x-insight", -'INSIGHT', "application/x-insight", -'INST', "application/x-install", -'IV', "application/x-inventor", -'JS', "application/x-javascript", -'SKP', "application/x-koan", -'SKD', "application/x-koan", -'SKT', "application/x-koan", -'SKM', "application/x-koan", -'LATEX', "application/x-latex", -'LICMGR', "application/x-licensemgr", -'MAIL', "application/x-mailfolder", -'MIF', "application/x-mailfolder", -'NC', "application/x-netcdf", -'CDF', "application/x-netcdf", -'SDS', "application/x-onlive", -'SGI-LPR', "application/x-sgi-lpr", -'SH', "application/x-sh", -'SHAR', "application/x-shar", -'SWF', "application/x-shockwave-flash", -'SPRITE', "application/x-sprite", -'SPR', "application/x-sprite", -'SIT', "application/x-stuffit", -'SV4CPIO', "application/x-sv4cpio", -'SV4CRC', "application/x-sv4crc", -'TAR', "application/x-tar", -'TARDIST', "application/x-tardist", -'TCL', "application/x-tcl", -'TEX', "application/x-tex", -'TEXINFO', "application/x-texinfo", -'TEXI', "application/x-texinfo", -'T', "application/x-troff", -'TR', "application/x-troff", -'TROFF', "application/x-troff", -'MAN', "application/x-troff-man", -'ME', "application/x-troff-me", -'MS', "application/x-troff-ms", -'TVM', "application/x-tvml", -'TVM', "application/x-tvml", -'USTAR', "application/x-ustar", -'SRC', "application/x-wais-source", -'WKZ', "application/x-wingz", -'ZIP', "application/x-zip-compressed", -'ZTARDIST', "application/x-ztardist", -#-------------------------------------