From c28c0a4b2d82d8342af73d705ee004bc18441303 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 19 Nov 2018 14:33:54 +0100 Subject: [PATCH 01/74] Fix a bug with CTest in non-header-only The pull-request https://github.com/CGAL/cgal/pull/3413 has introduced a side-effect: CTest was broken when `CGAL_HEADER_ONLY=OFF`, for all tests using a `.cin` or `.cmd` file. That is due to the variable `CGAL_CURRENT_SOURCE_DIR` that was only filled by `UseCGAL.cmake`. Now that we forbid CGAL directories without `CMakeLists.txt`, that variable `CGAL_CURRENT_SOURCE_DIR` is now useless, and can be removed: `CMAKE_CURRENT_SOURCE_DIR` is sufficient. That fixes the bug with CTest, and also makes the CMake code a bit simpler. --- .../test/Arrangement_on_surface_2/cgal_test.cmake | 2 +- Installation/cmake/modules/CGAL_add_test.cmake | 14 +++++++------- Installation/cmake/modules/UseCGAL.cmake | 5 ----- Installation/lib/cmake/CGAL/CGALConfig.cmake | 5 ----- 4 files changed, 8 insertions(+), 18 deletions(-) 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 1baad5bed5f..fc61895ed77 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 @@ -197,7 +197,7 @@ function(run_test_alt name datafile) set(command ${name} ${datafile} ${ARGN}) string(MAKE_C_IDENTIFIER "${name} ${ARGV4} ${ARGV5}" test_name) add_test(NAME ${test_name} COMMAND ${command} - WORKING_DIRECTORY ${CGAL_CURRENT_SOURCE_DIR}) + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) set_property(TEST "${test_name}" APPEND PROPERTY DEPENDS "compilation_of__${name}") if(POLICY CMP0066) # CMake 3.7 or later diff --git a/Installation/cmake/modules/CGAL_add_test.cmake b/Installation/cmake/modules/CGAL_add_test.cmake index 79bef011112..2f0aec7163a 100644 --- a/Installation/cmake/modules/CGAL_add_test.cmake +++ b/Installation/cmake/modules/CGAL_add_test.cmake @@ -42,7 +42,7 @@ 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}`. +# pattern in the directory `${CMAKE_CURRENT_SOURCE_DIR}`. # # # For example: the `file @@ -71,7 +71,7 @@ function(expand_list_with_globbing list_name) list(GET input_list ${n} item_n) # message(STATUS "argument ${n} is ${item_n}") if(item_n MATCHES ".*\\*.*") - file(GLOB files RELATIVE ${CGAL_CURRENT_SOURCE_DIR} ${item_n}) + file(GLOB files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${item_n}) list(APPEND output_list ${files}) else() list(APPEND output_list ${item_n}) @@ -97,7 +97,7 @@ function(cgal_setup_test_properties test_name) endif() set_property(TEST "${test_name}" APPEND PROPERTY LABELS "${PROJECT_NAME}") - # message(STATUS " working dir: ${CGAL_CURRENT_SOURCE_DIR}") + # message(STATUS " working dir: ${CMAKE_CURRENT_SOURCE_DIR}") set_property(TEST "${test_name}" PROPERTY WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) if(exe_name) @@ -198,7 +198,7 @@ function(cgal_add_test exe_name) return() endif() # message("Add test ${test_name}") - set(cin_file "${CGAL_CURRENT_SOURCE_DIR}/${exe_name}.cin") + set(cin_file "${CMAKE_CURRENT_SOURCE_DIR}/${exe_name}.cin") if(NOT ARGS AND EXISTS ${cin_file}) add_test(NAME ${test_name} COMMAND ${TIME_COMMAND} ${CMAKE_COMMAND} @@ -213,11 +213,11 @@ function(cgal_add_test exe_name) else() if(NOT ARGS AND NOT cgal_add_test_TEST_NAME) if(ARGC GREATER 2 AND ARGV2) - set(cmd_file "${CGAL_CURRENT_SOURCE_DIR}/${ARGV2}.cmd") + set(cmd_file "${CMAKE_CURRENT_SOURCE_DIR}/${ARGV2}.cmd") elseif(ARGC GREATER 1 AND ARGV1 AND NOT EXISTS ${cmd_file}) - set(cmd_file "${CGAL_CURRENT_SOURCE_DIR}/${ARGV1}.cmd") + set(cmd_file "${CMAKE_CURRENT_SOURCE_DIR}/${ARGV1}.cmd") elseif(NOT EXISTS ${cmd_file}) - set(cmd_file "${CGAL_CURRENT_SOURCE_DIR}/${exe_name}.cmd") + set(cmd_file "${CMAKE_CURRENT_SOURCE_DIR}/${exe_name}.cmd") endif() if(EXISTS ${cmd_file}) file(STRINGS "${cmd_file}" CMD_LINES) diff --git a/Installation/cmake/modules/UseCGAL.cmake b/Installation/cmake/modules/UseCGAL.cmake index 5128023cc5d..0187802b524 100644 --- a/Installation/cmake/modules/UseCGAL.cmake +++ b/Installation/cmake/modules/UseCGAL.cmake @@ -9,11 +9,6 @@ include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) cgal_setup_module_path() -# 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}) - if(NOT USE_CGAL_FILE_INCLUDED) set(USE_CGAL_FILE_INCLUDED 1) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index 486f1ff6746..958dcee2454 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -11,11 +11,6 @@ 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(cgal_detect_branch_build VAR_NAME) if(IS_DIRECTORY ${CGAL_CONFIG_DIR}/../../../../Installation/package_info/Installation/) set(${VAR_NAME} TRUE PARENT_SCOPE) From 6e06f20382b1c81bdf5762f152cf14f168c9bcc2 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 19 Nov 2018 14:37:08 +0100 Subject: [PATCH 02/74] Small improvement to that script I hijack the PR to slip a small improvement to that script. --- Scripts/developer_scripts/git-show-content | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Scripts/developer_scripts/git-show-content b/Scripts/developer_scripts/git-show-content index 5ccd986a7ac..72051e849c2 100755 --- a/Scripts/developer_scripts/git-show-content +++ b/Scripts/developer_scripts/git-show-content @@ -5,7 +5,8 @@ set -e git=git -base=${1:-HEAD} +commit=${1:-HEAD} +base=${2:-cgal/master} function reset() { git update-ref -d refs/cgal/git-show-content @@ -14,7 +15,7 @@ function reset() { trap reset ERR EXIT KILL TERM INT -for c in $(git log --pretty='%h' --first-parent cgal/master..$base); do +for c in $(git log --pretty='%h' --first-parent ${base}..${commit}); do git update-ref refs/cgal/git-show-content $c git bundle create bundle ${c}^..refs/cgal/git-show-content > /dev/null 2>&1 gzip -f bundle From 0027fc7a4ef04266fdae21366dd1490f6dc287b2 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 20 Nov 2018 15:42:48 +0100 Subject: [PATCH 03/74] Add a usage --- Scripts/developer_scripts/git-show-content | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Scripts/developer_scripts/git-show-content b/Scripts/developer_scripts/git-show-content index 72051e849c2..deb2c942270 100755 --- a/Scripts/developer_scripts/git-show-content +++ b/Scripts/developer_scripts/git-show-content @@ -3,7 +3,21 @@ zmodload zsh/stat set -e -git=git +if [ "x$1" = "x--help" -o "x$1" = "x-h" ]; then + cat < Date: Sat, 24 Nov 2018 10:37:38 +0100 Subject: [PATCH 04/74] fix initialization warning --- .../CGAL/Algebraic_kernel_d/Curve_pair_analysis_2.h | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_pair_analysis_2.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_pair_analysis_2.h index cc8ba6b58cb..8c338f83e35 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_pair_analysis_2.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_pair_analysis_2.h @@ -1524,17 +1524,11 @@ compute_intermediate_values_and_slices() const { #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Prepare intermediate slices.." << std::flush; #endif + std::size_t size = event_x_coordinates().size()+1; this->ptr()->intermediate_values=std::vector(); this->ptr()->intermediate_slices=std::vector(); - - for(size_type i=0; - i<=static_cast(event_x_coordinates().size()); - i++) { - this->ptr()->intermediate_values.get().push_back(Lazy_bound()); - this->ptr()->intermediate_slices.get().push_back - (Lazy_status_line_CPA_1()); - } - + this->ptr()->intermediate_values.get().resize(size); + this->ptr()->intermediate_slices.get().resize(size); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif From cd7ae286fe92e1c585c26f0c7ee14c741c3e023f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sat, 24 Nov 2018 13:42:07 +0100 Subject: [PATCH 05/74] fix warning in a probably not acceptable way warnings trigger when compiling: - skin_surface_subdiv - skin_surface_subdiv_with_normals - union_of_balls_subdiv - nef_2_polylines This comes from a call in the incremental builder to `current_face = decorator.faces_push_back( Face());` in `begin_facet()` --- STL_Extension/include/CGAL/In_place_list.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/STL_Extension/include/CGAL/In_place_list.h b/STL_Extension/include/CGAL/In_place_list.h index face144af5e..25c8aed4c57 100644 --- a/STL_Extension/include/CGAL/In_place_list.h +++ b/STL_Extension/include/CGAL/In_place_list.h @@ -58,6 +58,10 @@ public: template < class T > class In_place_list_base { public: + In_place_list_base() + : next_link(NULL), prev_link(NULL) + {} + T* next_link; // forward pointer T* prev_link; // backwards pointer //friend class internal::In_place_list_iterator; From c2f7814f19de8616915660ee2cb56acee29128ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sat, 24 Nov 2018 14:42:26 +0100 Subject: [PATCH 06/74] prevent maybe-uninitialized warnings they were triggered by `l1 = t.line_walk(POINT(xr_left, yr_top), POINT(xr_right, yr_top), hface1);` in `CGAL/apply_to_range.h` Seen when compiling targets: Constrained_Delaunay_triangulation_2 Polyline_simplification_2 Delaunay_triangulation_2 --- .../include/CGAL/Triangulation_line_face_circulator_2.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h b/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h index 12d7220fdbc..2572e4fdbc2 100644 --- a/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h +++ b/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h @@ -266,7 +266,7 @@ Triangulation_line_face_circulator_2(const Point& pp, int in; switch(pqs) { case LEFT_TURN: - *this = Line_face_circulator(); + pos = Face_handle(); return; case COLLINEAR: fn = fc->neighbor(i); @@ -306,7 +306,7 @@ Triangulation_line_face_circulator_2(const Point& pp, // if line (p,q) does not intersect the convex hull in an edge // the circulator has a singular value - *this=Line_face_circulator(); + pos=Face_handle(); return; } @@ -368,7 +368,7 @@ Triangulation_line_face_circulator_2(const Point& pp, return; } else { // singular value - *this = Line_face_circulator(); + pos=Face_handle(); return; } case LEFT_TURN : From 82d4479d2176827b5a08bdeed1f6e0d413a6e6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sat, 24 Nov 2018 14:48:37 +0100 Subject: [PATCH 07/74] fix maybe uninit warning triggered when compiling target Bounding_volumes --- Bounding_volumes/include/CGAL/Min_ellipse_2.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Bounding_volumes/include/CGAL/Min_ellipse_2.h b/Bounding_volumes/include/CGAL/Min_ellipse_2.h index 3a15bef505b..4348f8a5f80 100644 --- a/Bounding_volumes/include/CGAL/Min_ellipse_2.h +++ b/Bounding_volumes/include/CGAL/Min_ellipse_2.h @@ -360,7 +360,20 @@ class Min_ellipse_2 { // default constructor inline - Min_ellipse_2( const Traits& traits = Traits()) + Min_ellipse_2() + : n_support_points( 0) + { + // allocate support points' array + support_points = new Point[ 5]; + + // initialize ellipse + tco.ellipse.set(); + + CGAL_optimisation_postcondition( is_empty()); + } + + inline + Min_ellipse_2( const Traits& traits ) : tco( traits), n_support_points( 0) { // allocate support points' array From 6c3e3252a953609d33a9eb77f3958c77cbba0bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sat, 24 Nov 2018 15:00:02 +0100 Subject: [PATCH 08/74] brute force fix for uninitialize warning --- Generator/include/CGAL/point_generators_d.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Generator/include/CGAL/point_generators_d.h b/Generator/include/CGAL/point_generators_d.h index 1cc01033b5d..e082cf42cce 100644 --- a/Generator/include/CGAL/point_generators_d.h +++ b/Generator/include/CGAL/point_generators_d.h @@ -156,6 +156,9 @@ generate_point() { coord[i]=RT(this->d_range * ( 2 * this->_rnd.get_double() - 1.0)); P p(dimension, coord.begin(), coord.end() ); + #ifdef BOOST_GCC + #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + #endif this->d_item = p; } From 7ac3dcd63ba209b3364e92d832e88d85be463c15 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 27 Nov 2018 10:04:32 +0100 Subject: [PATCH 09/74] Add write_wrl() for FaceGraph --- BGL/doc/BGL/PackageDescription.txt | 1 + BGL/include/CGAL/boost/graph/io.h | 88 ++++++++++++++++++++++++++++++ BGL/test/BGL/CMakeLists.txt | 2 + BGL/test/BGL/test_wrl.cpp | 18 ++++++ 4 files changed, 109 insertions(+) create mode 100644 BGL/test/BGL/test_wrl.cpp diff --git a/BGL/doc/BGL/PackageDescription.txt b/BGL/doc/BGL/PackageDescription.txt index 6ba2f1ba2d6..d069c70ee55 100644 --- a/BGL/doc/BGL/PackageDescription.txt +++ b/BGL/doc/BGL/PackageDescription.txt @@ -708,6 +708,7 @@ user might encounter. ## I/O Functions ## - \link PkgBGLIOFct CGAL::read_off() \endlink - \link PkgBGLIOFct CGAL::write_off() \endlink +- \link PkgBGLIOFct CGAL::write_wrl() \endlink */ diff --git a/BGL/include/CGAL/boost/graph/io.h b/BGL/include/CGAL/boost/graph/io.h index 2ad04ff8fe8..f5775e63662 100644 --- a/BGL/include/CGAL/boost/graph/io.h +++ b/BGL/include/CGAL/boost/graph/io.h @@ -36,6 +36,94 @@ #include namespace CGAL { + /*! + \ingroup PkgBGLIOFct + writes the graph `g` in the wrl format (VRML 2.0). + + \cgalNamedParamsBegin + * \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `g`. + * If this parameter is omitted, an internal property map for + * `CGAL::vertex_point_t` should be available in `FaceGraph`\cgalParamEnd + * \cgalNamedParamsEnd + */ +template +bool write_wrl(std::ostream& os, + const FaceGraph& g, + const NamedParameters& np) +{ + 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 Polygon_mesh_processing::GetVertexPointMap::const_type + vpm = choose_param(get_param(np, internal_np::vertex_point), + get_const_property_map(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)); + + boost::container::flat_map reindex; + int n = 0; + + os << "#VRML V2.0 utf8\n" + "Group {\n" + "children [\n" + "Shape {\n" + "appearance DEF A1 Appearance {\n" + "material Material {\n" + "diffuseColor .6 .5 .9\n" + "}\n" + "}\n" + "appearance\n" + "Appearance {\n" + "material DEF Material Material {}\n" + "}\n" + "}\n" + "Group {\n" + "children [\n" + "Shape {\n" + "appearance Appearance { material USE Material }\n" + "geometry IndexedFaceSet {\n" + "convex FALSE\n" + "solid FALSE\n" + "coord Coordinate {\n" + "point [\n"; + + BOOST_FOREACH(vertex_descriptor v, vertices(g)){ + os << get(vpm,v) << ",\n"; + reindex[v]=n++; + } + os << "] #point\n" + "} #coord Coordinate\n" + "coordIndex [\n"; + BOOST_FOREACH(face_descriptor f, faces(g)){ + BOOST_FOREACH(vertex_descriptor v, vertices_around_face(halfedge(f,g),g)){ + os << reindex[v] << ","; + } + os << "-1,\n"; + } + + os << "] #coordIndex\n" + "} #geometry\n" + "} #Shape\n" + "] #children\n" + "} #group\n" + "]\n" + "}\n"; + + return os.good(); +} + +template +bool write_wrl(std::ostream& os, + const FaceGraph& g) +{ + return write_wrl(os, g, + parameters::all_default()); +} + /*! \ingroup PkgBGLIOFct writes the graph `g` in the OFF format. diff --git a/BGL/test/BGL/CMakeLists.txt b/BGL/test/BGL/CMakeLists.txt index 8b6ef06e78d..0949c353647 100644 --- a/BGL/test/BGL/CMakeLists.txt +++ b/BGL/test/BGL/CMakeLists.txt @@ -97,6 +97,8 @@ create_single_source_cgal_program( "test_graph_traits.cpp" ) create_single_source_cgal_program( "test_Properties.cpp" ) +create_single_source_cgal_program( "test_wrl.cpp" ) + if(OpenMesh_FOUND) target_link_libraries( test_clear PRIVATE ${OPENMESH_LIBRARIES}) target_link_libraries( test_Euler_operations PRIVATE ${OPENMESH_LIBRARIES}) diff --git a/BGL/test/BGL/test_wrl.cpp b/BGL/test/BGL/test_wrl.cpp new file mode 100644 index 00000000000..f8a29ee8533 --- /dev/null +++ b/BGL/test/BGL/test_wrl.cpp @@ -0,0 +1,18 @@ +#include +#include +#include +#include +#include + +typedef CGAL::Simple_cartesian Kernel; +typedef Kernel::Point_3 Point; +typedef CGAL::Surface_mesh Mesh; + +int main() +{ + Mesh sm; + + CGAL::make_tetrahedron(Point(0,0,0), Point(1,0,0), Point(1,1,0), Point(0,0,1), sm); + CGAL::write_wrl(std::cout, sm); + return 0; +} From db9204acedc8e666c9f558fd7e98e7773072242f Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 27 Nov 2018 15:51:19 +0100 Subject: [PATCH 10/74] Update kernel_ftC2.h Simplify expression as we know that `b == 0` --- Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h b/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h index 48dba7821ae..144ec2695d2 100644 --- a/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h +++ b/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h @@ -284,7 +284,7 @@ line_get_pointC2(const FT &a, const FT &b, const FT &c, int i, { if (CGAL_NTS is_zero(b)) { - x = (-b-c)/a + i * b; + x = -c/a; y = 1 - i * a; } else From 5f007da4615d34e7f177210477b7c6a644d6c908 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 28 Nov 2018 07:56:14 +0100 Subject: [PATCH 11/74] Remove unused variables --- BGL/include/CGAL/boost/graph/io.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/io.h b/BGL/include/CGAL/boost/graph/io.h index f5775e63662..71bb55def86 100644 --- a/BGL/include/CGAL/boost/graph/io.h +++ b/BGL/include/CGAL/boost/graph/io.h @@ -61,9 +61,6 @@ bool write_wrl(std::ostream& os, vpm = choose_param(get_param(np, internal_np::vertex_point), get_const_property_map(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)); - boost::container::flat_map reindex; int n = 0; From 6cc109f7c42b5ade5f53fbeeca2d5d46c7f361f1 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 28 Nov 2018 09:07:36 +0100 Subject: [PATCH 12/74] AABB Tree testsuite --- .../CGAL/internal/AABB_tree/AABB_ray_intersection.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/AABB_tree/include/CGAL/internal/AABB_tree/AABB_ray_intersection.h b/AABB_tree/include/CGAL/internal/AABB_tree/AABB_ray_intersection.h index c5c388d4304..ccebce05bb8 100644 --- a/AABB_tree/include/CGAL/internal/AABB_tree/AABB_ray_intersection.h +++ b/AABB_tree/include/CGAL/internal/AABB_tree/AABB_ray_intersection.h @@ -31,10 +31,18 @@ #include #include #if BOOST_VERSION >= 105000 -#include +# if defined(BOOST_MSVC) +# pragma warning(push) +# pragma warning(disable: 4996) +# endif +# include +# if defined(BOOST_MSVC) +# pragma warning(pop) +# endif #else -#include +# include #endif + #include namespace CGAL { From 04bbc7c6ef39d3ae8ed9ee6d2e355c9499764f54 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 28 Nov 2018 09:17:35 +0100 Subject: [PATCH 13/74] Suppress boost::bimap warning --- Mesher_level/include/CGAL/Double_map.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Mesher_level/include/CGAL/Double_map.h b/Mesher_level/include/CGAL/Double_map.h index 517cb223b13..3fd229693c7 100644 --- a/Mesher_level/include/CGAL/Double_map.h +++ b/Mesher_level/include/CGAL/Double_map.h @@ -40,8 +40,14 @@ #endif #ifdef CGAL_USE_BOOST_BIMAP +# if defined(BOOST_MSVC) +# pragma warning(push) +# pragma warning(disable: 4996) +# endif #include #include +# if defined(BOOST_MSVC) +# pragma warning(pop) #endif namespace CGAL { From a6b6fd6a7fddd4583aa923f7d59caf8827da1c0b Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 28 Nov 2018 10:23:28 +0100 Subject: [PATCH 14/74] Fix error --- Mesher_level/include/CGAL/Double_map.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Mesher_level/include/CGAL/Double_map.h b/Mesher_level/include/CGAL/Double_map.h index 3fd229693c7..7de1f9d66e6 100644 --- a/Mesher_level/include/CGAL/Double_map.h +++ b/Mesher_level/include/CGAL/Double_map.h @@ -48,6 +48,7 @@ #include # if defined(BOOST_MSVC) # pragma warning(pop) +# endif #endif namespace CGAL { From d2c5e1c210c737fd6299665e236e1e0d63bba325 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 28 Nov 2018 13:29:19 +0100 Subject: [PATCH 15/74] Suppress warning concerning td::fpos::seekpos() --- .../include/CGAL/Classification/ETHZ_random_forest_classifier.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Classification/include/CGAL/Classification/ETHZ_random_forest_classifier.h b/Classification/include/CGAL/Classification/ETHZ_random_forest_classifier.h index cf3ae810df9..1587baf4b9b 100644 --- a/Classification/include/CGAL/Classification/ETHZ_random_forest_classifier.h +++ b/Classification/include/CGAL/Classification/ETHZ_random_forest_classifier.h @@ -38,6 +38,7 @@ # pragma warning(disable:4267) # pragma warning(disable:4275) # pragma warning(disable:4251) +# pragma warning(disable:4996) #endif #include From c570e86661610857447f8a2e6c37bbfafa95f85b Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 29 Nov 2018 08:12:26 +0100 Subject: [PATCH 16/74] Removed unused typedef; Added to CHANGES.md --- BGL/include/CGAL/boost/graph/io.h | 2 -- Installation/CHANGES.md | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/io.h b/BGL/include/CGAL/boost/graph/io.h index 71bb55def86..60dcfca72ad 100644 --- a/BGL/include/CGAL/boost/graph/io.h +++ b/BGL/include/CGAL/boost/graph/io.h @@ -54,8 +54,6 @@ bool write_wrl(std::ostream& os, 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 Polygon_mesh_processing::GetVertexPointMap::const_type vpm = choose_param(get_param(np, internal_np::vertex_point), diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 672d71541a4..86dd48044b6 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -54,6 +54,10 @@ Release date: March 2019 `Arr_polyline_traits_2`, `Arr_polycurve_traits_2`, and `Arr_polycurve_basic_traits_2`. +### CGAL and the Boost Graph Library (BGL) + +- Add function `write_wrl()` for writing into VRML 2.0 format. + Release 4.13 ------------ From 44addb1f83bf5757b4efe6fe74cd867afd689975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 30 Nov 2018 09:56:33 +0100 Subject: [PATCH 17/74] two halfedges with the same target and source points are non-manifold --- .../Polygon_mesh_processing/stitch_borders.h | 6 ++++-- .../Polygon_mesh_processing/test_stitching.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index 89a6af30e02..fc256aae135 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -110,13 +110,15 @@ collect_duplicated_stitchable_boundary_edges ++set_it->second.first; // increase the multiplicity if(set_it->second.first == 2) { + set_it->second.second = halfedge_pairs.size(); // set the id of the pair in the vector + halfedge_pairs.push_back( std::make_pair(set_it->first, he) ); if ( get(vpmap, source(he,pmesh))==get(vpmap, target(set_it->first,pmesh)) && get(vpmap, target(he,pmesh))==get(vpmap, source(set_it->first,pmesh)) ) { - set_it->second.second = halfedge_pairs.size(); // set the id of the pair in the vector - halfedge_pairs.push_back( std::make_pair(set_it->first, he) ); manifold_halfedge_pairs.push_back(true); } + else + manifold_halfedge_pairs.push_back(false); } else if ( set_it->second.first > 2 ) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp index 14fc54b703e..2d34bf8b60f 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp @@ -59,6 +59,20 @@ void test_surface_mesh(const char* fname) std::cout << "OK\n"; } +void bug_test() +{ + typedef Epic K; + typedef K::Point_3 Point_3; + CGAL::Surface_mesh tm; + + CGAL::make_triangle(Point_3(0,0,0), Point_3(1,0,0), Point_3(0,1,0), tm); + CGAL::make_triangle(Point_3(0,0,0), Point_3(1,0,0), Point_3(0,1,0), tm); + CGAL::make_triangle(Point_3(0,0,0), Point_3(1,0,0), Point_3(0,1,0), tm); + CGAL::make_triangle(Point_3(0,0,0), Point_3(1,0,0), Point_3(0,1,0), tm); + + CGAL::Polygon_mesh_processing::stitch_borders(tm); +} + int main() { test_polyhedron("data_stitching/full_border.off"); @@ -88,6 +102,8 @@ int main() test_surface_mesh("data_stitching/non_manifold.off"); test_surface_mesh("data_stitching/non_manifold2.off"); + bug_test(); + return 0; } From 3069612c37f55b7d9e39173cc8f198161065d18b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 30 Nov 2018 10:01:01 +0100 Subject: [PATCH 18/74] two halfedges with the same target and source points are non-manifold similar as 44addb1 from 4.12-branch --- .../include/CGAL/Polygon_mesh_processing/stitch_borders.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index 830cca479a0..17ee46b260b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -109,13 +109,15 @@ void fill_pairs(const Halfedge& he, ++set_it->second.first; // increase the multiplicity if(set_it->second.first == 2) { + set_it->second.second = halfedge_pairs.size(); // set the id of the pair in the vector + halfedge_pairs.push_back( std::make_pair(set_it->first, he) ); if ( get(vpmap, source(he,pmesh))==get(vpmap, target(set_it->first,pmesh)) && get(vpmap, target(he,pmesh))==get(vpmap, source(set_it->first,pmesh)) ) { - set_it->second.second = halfedge_pairs.size(); // set the id of the pair in the vector - halfedge_pairs.push_back( std::make_pair(set_it->first, he) ); manifold_halfedge_pairs.push_back(true); } + else + manifold_halfedge_pairs.push_back(false); } else if ( set_it->second.first > 2 ) From 879c7c3605886df3fd549f8c5f72cd19b02013cf Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 30 Nov 2018 12:42:58 +0100 Subject: [PATCH 19/74] Suppress warning concerning boost in demo plugin --- Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index 1e363259796..8d6d8648199 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -1,5 +1,8 @@ #ifdef _MSC_VER # pragma warning(disable:4244) // conversion with loss of data +# pragma warning(disable:4996) // boost_1_65_1\boost/iostreams/positioning.hpp(96): + // warning C4996: 'std::fpos<_Mbstatet>::seekpos': warning STL4019: + // The member std::fpos::seekpos() is non-Standard #endif #include "Volume_plane.h" From b29dcaaf63ed2099b9e18856b9a33767e3dcea72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 3 Dec 2018 09:47:38 +0100 Subject: [PATCH 20/74] add missing documented function --- Nef_S2/include/CGAL/Nef_polyhedron_S2.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h index 7a5dc5ffc9d..29e4ae47c89 100644 --- a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h +++ b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h @@ -350,6 +350,11 @@ public: f->mark() == true); } + bool is_sphere() const + { + return is_plane(); + } + void extract_complement() { CGAL_NEF_TRACEN("extract complement"); if ( this->is_shared() ) clone_rep(); From 881fdab58d7d5e678acb0417fa540e009517658d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 3 Dec 2018 09:57:43 +0100 Subject: [PATCH 21/74] fix setting of mark --- Nef_S2/include/CGAL/Nef_polyhedron_S2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h index 29e4ae47c89..71eb311e6a1 100644 --- a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h +++ b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h @@ -395,7 +395,7 @@ public: CGAL_forall_svertices(v,D) v->mark() = true; CGAL_forall_sedges(e,D) e->mark() = true; CGAL_forall_sfaces(f,D) f->mark() = false; - if ( D.has_sloop() ) D.shalfloop()->mark() = D.shalfoop()->twin() = true; + if ( D.has_sloop() ) D.shalfloop()->mark() = D.shalfoop()->twin()->mark() = true; D.simplify(); } From 7c6450192e8f9fdb4837bc3105ead9a5d56eae9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 3 Dec 2018 10:16:58 +0100 Subject: [PATCH 22/74] add a function that convert to double and do the normalization --- .../include/CGAL/Nef_S2/Sphere_geometry_OGL.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h b/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h index e7904529787..fa177c9c0bc 100644 --- a/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h +++ b/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h @@ -71,6 +71,23 @@ VVector convert(const CGAL::Vector_3& v) CGAL::to_double(v.y()), CGAL::to_double(v.z())); } +template +VVector normalize_and_convert(const CGAL::Vector_3& v) +{ + typename R::FT xa = CGAL::abs(v.x()); + typename R::FT ya = CGAL::abs(v.y()); + typename R::FT za = CGAL::abs(v.z()); + typename R::FT m = (std::max)((std::max)(xa,ya),za); + if (m==0) { + return VVector(0,0,0); + } else { + double xd = CGAL::to_double(v.x()/m); + double yd = CGAL::to_double(v.y()/m); + double zd = CGAL::to_double(v.z()/m); + VVector u(xd,yd,zd); + return u / CGAL_NTS sqrt(u*u) ; // normalize + } +} const double refinement_angle = 0.1; const double shrink_fac = 0.995; From 4d3b5ce0c739dc9ccf76019a47031550bc045a7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 3 Dec 2018 10:32:59 +0100 Subject: [PATCH 23/74] use convert_and_normalize() --- Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h b/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h index fa177c9c0bc..f0527bb932b 100644 --- a/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h +++ b/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h @@ -97,8 +97,7 @@ class Approximator { public: static VPoint approximate(const CGAL::Sphere_point& p) { - VVector v = convert(p-CGAL::ORIGIN); - v = v / CGAL_NTS sqrt(v*v) ; // normalize + VVector v = normalize_and_convert(p-CGAL::ORIGIN); return CGAL::ORIGIN+v; } From 20899df7a7066485f258397a7eed80ea7ceb119c Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 4 Dec 2018 11:26:32 +0100 Subject: [PATCH 24/74] Make the hexahedron creation clearer and fix examples and tests --- BGL/examples/BGL_surface_mesh/gwdwg.cpp | 4 ++-- BGL/include/CGAL/boost/graph/helpers.h | 10 +++++----- BGL/test/BGL/test_helpers.cpp | 2 +- Generator/test/Generator/generic_random_test.cpp | 6 ++++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/BGL/examples/BGL_surface_mesh/gwdwg.cpp b/BGL/examples/BGL_surface_mesh/gwdwg.cpp index b857d5a774d..07ed87cc639 100644 --- a/BGL/examples/BGL_surface_mesh/gwdwg.cpp +++ b/BGL/examples/BGL_surface_mesh/gwdwg.cpp @@ -25,10 +25,10 @@ int main() Point_3(1,-1,-1), Point_3(1,1,-1), Point_3(-1,1,-1), + Point_3(-1,1,1), Point_3(-1,-1,1), Point_3(1,-1,1), Point_3(1,1,1), - Point_3(-1,1,1), sm ); @@ -45,10 +45,10 @@ int main() Point_3(0.5,-0.5,-0.5), Point_3(0.5,0.5,-0.5), Point_3(-0.5,0.5,-0.5), + Point_3(-0.5,0.5,0.5), Point_3(-0.5,-0.5,0.5), Point_3(0.5,-0.5,0.5), Point_3(0.5,0.5,0.5), - Point_3(-0.5,0.5,0.5), poly ); pvertex_descriptor pvd = * vertices(pmesh).first; diff --git a/BGL/include/CGAL/boost/graph/helpers.h b/BGL/include/CGAL/boost/graph/helpers.h index 7ed5fbf1447..7f2b5d3d0eb 100644 --- a/BGL/include/CGAL/boost/graph/helpers.h +++ b/BGL/include/CGAL/boost/graph/helpers.h @@ -868,16 +868,16 @@ make_hexahedron(const P& p0, const P& p1, const P& p2, const P& p3, ppmap[v6] = p6; ppmap[v7] = p7; - halfedge_descriptor ht = internal::make_quad(v7, v4, v5, v6, g); - halfedge_descriptor hb = prev(internal::make_quad(v1, v0, v3, v2, g),g); + halfedge_descriptor ht = internal::make_quad(v4, v5, v6, v7, g); + halfedge_descriptor hb = prev(internal::make_quad(v0, v3, v2, v1, g),g); for(int i=0; i <4; i++){ halfedge_descriptor h = halfedge(add_edge(g),g); set_target(h,target(hb,g),g); set_next(h,opposite(hb,g),g); - set_next(opposite(next(ht,g),g),h,g); + set_next(opposite(prev(ht,g),g),h,g); h = opposite(h,g); - set_target(h,target(ht,g),g); - set_next(h,opposite(ht,g),g); + set_target(h,source(prev(ht,g),g),g); + set_next(h,opposite(next(next(ht,g),g),g),g); set_next(opposite(next(hb,g),g),h,g); hb = next(hb,g); ht = prev(ht,g); diff --git a/BGL/test/BGL/test_helpers.cpp b/BGL/test/BGL/test_helpers.cpp index e4d0e145829..3ba16eb4d6e 100644 --- a/BGL/test/BGL/test_helpers.cpp +++ b/BGL/test/BGL/test_helpers.cpp @@ -132,7 +132,7 @@ int main() assert(CGAL::is_triangle_mesh(m)); assert(CGAL::is_valid_polygon_mesh(m)); m.clear(); - hd = CGAL::make_hexahedron(a,b,c,d,aa,bb,cc,dd,m); + hd = CGAL::make_hexahedron(a,b,c,d,dd,aa,bb,cc,m); assert(CGAL::is_hexahedron(hd,m)); assert(CGAL::is_quad_mesh(m)); assert(CGAL::is_valid_polygon_mesh(m)); diff --git a/Generator/test/Generator/generic_random_test.cpp b/Generator/test/Generator/generic_random_test.cpp index 7ea066f4233..3090ddbfc80 100644 --- a/Generator/test/Generator/generic_random_test.cpp +++ b/Generator/test/Generator/generic_random_test.cpp @@ -288,8 +288,10 @@ int main() Polyhedron polyhedron; // A cube - make_hexahedron(Point_3(-0.5,-0.5,-0.5), Point_3(0.5,-0.5,-0.5), Point_3(0.5,0.5,-0.5), Point_3(-0.5,0.5,-0.5), - Point_3(-0.5,0.5,0.5), Point_3(-0.5,-0.5,0.5), Point_3(0.5,-0.5,0.5), Point_3(0.5,0.5,0.5), + make_hexahedron( + Point_3(-0.5,-0.5,-0.5), Point_3(0.5,-0.5,-0.5), Point_3(0.5,0.5,-0.5), + Point_3(-0.5,0.5,-0.5), Point_3(-0.5,0.5,0.5), Point_3(-0.5,-0.5,0.5), + Point_3(0.5,-0.5,0.5), Point_3(0.5,0.5,0.5), polyhedron); boost::graph_traits::halfedge_descriptor facets[6]; From b04523f8c3c9d9726a14de6de623d96d12e58cda Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 4 Dec 2018 12:59:43 +0100 Subject: [PATCH 25/74] add images to doc --- BGL/doc/BGL/fig/hexahedron.png | Bin 0 -> 7755 bytes BGL/doc/BGL/fig/tetrahedron.png | Bin 0 -> 5828 bytes BGL/include/CGAL/boost/graph/helpers.h | 6 +++++- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 BGL/doc/BGL/fig/hexahedron.png create mode 100644 BGL/doc/BGL/fig/tetrahedron.png diff --git a/BGL/doc/BGL/fig/hexahedron.png b/BGL/doc/BGL/fig/hexahedron.png new file mode 100644 index 0000000000000000000000000000000000000000..34a4fb17085ec3010f696ba04701b0eb755ba519 GIT binary patch literal 7755 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 literal 0 HcmV?d00001 diff --git a/BGL/doc/BGL/fig/tetrahedron.png b/BGL/doc/BGL/fig/tetrahedron.png new file mode 100644 index 0000000000000000000000000000000000000000..b0cb6a42259b4ebe4a5a13fbe6b155ec010ec6ca GIT binary patch literal 5828 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 O0000 @@ -892,6 +894,8 @@ make_hexahedron(const P& p0, const P& p1, const P& p2, const P& p3, * \ingroup PkgBGLHelperFct * \brief Creates an isolated tetrahedron * with its vertices initialized to `p0`, `p1`, `p2`, and `p3`, and adds it to the graph `g`. + * \image html tetrahedron.png + * \image latex tetrahedron.png * \returns the halfedge that has the target vertex associated with `p0`, in the face with the vertices with the points `p0`, `p1`, and `p2`. **/ template @@ -989,7 +993,7 @@ make_tetrahedron(const P& p0, const P& p1, const P& p2, const P& p3, Graph& g) * having `nb_vertices` vertices in each of its bases and adds it to the graph `g`. * If `center` is (0, 0, 0), then the first point of the prism is (`radius`, `height`, 0) * \param nb_vertices the number of vertices per base. It must be greater than or equal to 3. - * \param g the graph in which the regular prism will be created. + * \param g the graph in which the regular prism will be created.https://cgal.geometryfactory.com/~mgimeno/BGL_helpers/BGL/group__PkgBGLRef.html * \param base_center the center of the circle in which the lower base is inscribed. * \param height the distance between the two bases. * \param radius the radius of the circles in which the bases are inscribed. From 665c66e5579536ee979ea5eeb99b4e478ec67fce Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 5 Dec 2018 10:15:49 +0100 Subject: [PATCH 26/74] Fix warning in PLY_reader --- Point_set_3/include/CGAL/Point_set_3/IO.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Point_set_3/include/CGAL/Point_set_3/IO.h b/Point_set_3/include/CGAL/Point_set_3/IO.h index 93117799195..f2d14227ec9 100644 --- a/Point_set_3/include/CGAL/Point_set_3/IO.h +++ b/Point_set_3/include/CGAL/Point_set_3/IO.h @@ -156,7 +156,7 @@ private: virtual void assign (PLY_reader& reader, typename Point_set::Index index) { - Type t; + Type t{}; reader.assign (t, m_name.c_str()); put(m_pmap, index, t); } From 629b41e69de32721cca2ef48751a056f14101b17 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 5 Dec 2018 16:33:44 +0100 Subject: [PATCH 27/74] Remove garbage --- BGL/include/CGAL/boost/graph/helpers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BGL/include/CGAL/boost/graph/helpers.h b/BGL/include/CGAL/boost/graph/helpers.h index 73f2687d9bb..d574d7cc9ca 100644 --- a/BGL/include/CGAL/boost/graph/helpers.h +++ b/BGL/include/CGAL/boost/graph/helpers.h @@ -993,7 +993,7 @@ make_tetrahedron(const P& p0, const P& p1, const P& p2, const P& p3, Graph& g) * having `nb_vertices` vertices in each of its bases and adds it to the graph `g`. * If `center` is (0, 0, 0), then the first point of the prism is (`radius`, `height`, 0) * \param nb_vertices the number of vertices per base. It must be greater than or equal to 3. - * \param g the graph in which the regular prism will be created.https://cgal.geometryfactory.com/~mgimeno/BGL_helpers/BGL/group__PkgBGLRef.html + * \param g the graph in which the regular prism will be created. * \param base_center the center of the circle in which the lower base is inscribed. * \param height the distance between the two bases. * \param radius the radius of the circles in which the bases are inscribed. From 722f8e18d0d98325095e4d43edce3d7e6b2fc9d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 5 Dec 2018 17:53:09 +0100 Subject: [PATCH 28/74] init variables to avoid warnings --- .../examples/Segment_Delaunay_graph_2/sdg-filtered-traits.cpp | 3 ++- .../Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Segment_Delaunay_graph_2/examples/Segment_Delaunay_graph_2/sdg-filtered-traits.cpp b/Segment_Delaunay_graph_2/examples/Segment_Delaunay_graph_2/sdg-filtered-traits.cpp index 6945fb1c3a5..13e05eb5087 100644 --- a/Segment_Delaunay_graph_2/examples/Segment_Delaunay_graph_2/sdg-filtered-traits.cpp +++ b/Segment_Delaunay_graph_2/examples/Segment_Delaunay_graph_2/sdg-filtered-traits.cpp @@ -26,7 +26,8 @@ int main() assert( ifs ); SDG2 sdg; - SDG2::Site_2 site; + SDG2::Site_2 site = + SDG2::Site_2::construct_site_2(K::Point_2(CGAL::ORIGIN)); // read the sites and insert them in the segment Delaunay graph while ( ifs >> site ) { diff --git a/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp b/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp index 1b1777855a0..c3ad58dd8ee 100644 --- a/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp +++ b/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp @@ -30,7 +30,8 @@ int main( int argc, char *argv[] ) assert( ifs ); SDG2 sdg; - SDG2::Site_2 site; + SDG2::Site_2 site = + SDG2::Site_2::construct_site_2(Rep::Point_2(CGAL::ORIGIN));; // read the sites and insert them in the segment Delaunay graph while ( ifs >> site ) { From aecbd80d203074d2a059d4cba7773392526e6665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 5 Dec 2018 17:56:30 +0100 Subject: [PATCH 29/74] avoid Wmaybe-uninitialized Triggered when compiling the target Simple_cartesian @lrineau do you think it is an acceptable fix (I tend not to like it). --- Kernel_23/test/Kernel_23/include/CGAL/_test_io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kernel_23/test/Kernel_23/include/CGAL/_test_io.h b/Kernel_23/test/Kernel_23/include/CGAL/_test_io.h index bf7dacd2f97..765527e0a58 100644 --- a/Kernel_23/test/Kernel_23/include/CGAL/_test_io.h +++ b/Kernel_23/test/Kernel_23/include/CGAL/_test_io.h @@ -40,7 +40,7 @@ _test_io_for(const T& t) } std::ifstream iFile(TEST_FILENAME, std::ios::in); - T u; + T u = t; iFile >> u; assert(!iFile.fail()); assert(u == t); From 846f19f401f5dfbd09081745585a1fa57d4a598f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 5 Dec 2018 18:20:06 +0100 Subject: [PATCH 30/74] init variables --- Kernel_23/test/Kernel_23/issue_129.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kernel_23/test/Kernel_23/issue_129.cpp b/Kernel_23/test/Kernel_23/issue_129.cpp index cb9ae603e25..06b6c674782 100644 --- a/Kernel_23/test/Kernel_23/issue_129.cpp +++ b/Kernel_23/test/Kernel_23/issue_129.cpp @@ -28,7 +28,7 @@ int main() { try { - CGAL::Point_3 a, b, c, d; + CGAL::Point_3 a(CGAL::ORIGIN), b(a), c(a), d(a); CGAL::squared_radius(a, b, c, d); } catch(...) {} return EXIT_SUCCESS; From db4be1db6a5179c71947be3f85d5bf5a4dfa4387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 5 Dec 2018 18:20:24 +0100 Subject: [PATCH 31/74] fix Wmaybe-uninitialiazed warnings --- .../test/Segment_Delaunay_graph_2/include/test_info.h | 3 ++- .../Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Segment_Delaunay_graph_2/test/Segment_Delaunay_graph_2/include/test_info.h b/Segment_Delaunay_graph_2/test/Segment_Delaunay_graph_2/include/test_info.h index 3db6956d14b..9ba280559d7 100644 --- a/Segment_Delaunay_graph_2/test/Segment_Delaunay_graph_2/include/test_info.h +++ b/Segment_Delaunay_graph_2/test/Segment_Delaunay_graph_2/include/test_info.h @@ -17,7 +17,8 @@ bool test_info(SDG& sdg, const char* fname) assert( ifs ); sdg.clear(); - typename SDG::Site_2 site; + typename SDG::Site_2 site = + SDG::Site_2::construct_site_2(typename SDG::Point_2(CGAL::ORIGIN)); // read the sites and insert them in the segment Delaunay graph int info_id = 1; diff --git a/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp b/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp index c3ad58dd8ee..b7f9642ab6b 100644 --- a/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp +++ b/Segment_Delaunay_graph_Linf_2/examples/Segment_Delaunay_graph_Linf_2/sdg-filtered-traits-linf.cpp @@ -31,7 +31,7 @@ int main( int argc, char *argv[] ) SDG2 sdg; SDG2::Site_2 site = - SDG2::Site_2::construct_site_2(Rep::Point_2(CGAL::ORIGIN));; + SDG2::Site_2::construct_site_2(Rep::Point_2(CGAL::ORIGIN)); // read the sites and insert them in the segment Delaunay graph while ( ifs >> site ) { From 474ec90f4a84222e66eda0b2191d03b4dec8da81 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 5 Dec 2018 19:08:17 +0100 Subject: [PATCH 32/74] Do not include --- .../AABB_custom_indexed_triangle_set_array_example.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AABB_tree/examples/AABB_tree/AABB_custom_indexed_triangle_set_array_example.cpp b/AABB_tree/examples/AABB_tree/AABB_custom_indexed_triangle_set_array_example.cpp index 8505b99ed49..87dfc24553f 100644 --- a/AABB_tree/examples/AABB_tree/AABB_custom_indexed_triangle_set_array_example.cpp +++ b/AABB_tree/examples/AABB_tree/AABB_custom_indexed_triangle_set_array_example.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include From cf0909ef51477d8388d1e7070716eff3e65791be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Dec 2018 08:43:32 +0100 Subject: [PATCH 33/74] fix maybe-uninitialized warning thanks @mglisse --- Generator/include/CGAL/point_generators_d.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Generator/include/CGAL/point_generators_d.h b/Generator/include/CGAL/point_generators_d.h index e082cf42cce..c7f40cbf5a7 100644 --- a/Generator/include/CGAL/point_generators_d.h +++ b/Generator/include/CGAL/point_generators_d.h @@ -151,14 +151,12 @@ void Random_points_in_cube_d

:: generate_point() { typedef typename Kernel_traits

::Kernel::RT RT; + CGAL_assume(dimension>0); std::vector coord(dimension); for(int i=0; id_range * ( 2 * this->_rnd.get_double() - 1.0)); P p(dimension, coord.begin(), coord.end() ); - #ifdef BOOST_GCC - #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" - #endif this->d_item = p; } From 5a2857d4510f381b2eec76209c28d2b97fac70de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Dec 2018 09:23:06 +0100 Subject: [PATCH 34/74] fix maybe uninitialized warning triggered by target Orthogonal_incremental_neighbor_search --- Spatial_searching/include/CGAL/Kd_tree_rectangle.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Spatial_searching/include/CGAL/Kd_tree_rectangle.h b/Spatial_searching/include/CGAL/Kd_tree_rectangle.h index 1eb6efad609..042dbb088f0 100644 --- a/Spatial_searching/include/CGAL/Kd_tree_rectangle.h +++ b/Spatial_searching/include/CGAL/Kd_tree_rectangle.h @@ -166,6 +166,7 @@ namespace CGAL { inline FT min_coord(int i) const { + CGAL_assume(i Date: Thu, 6 Dec 2018 12:39:04 +0100 Subject: [PATCH 35/74] Suppress boost PP related warnings --- .../include/CGAL/optimize_periodic_3_mesh_3.h | 9 +++++++++ .../include/CGAL/refine_periodic_3_mesh_3.h | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/Periodic_3_mesh_3/include/CGAL/optimize_periodic_3_mesh_3.h b/Periodic_3_mesh_3/include/CGAL/optimize_periodic_3_mesh_3.h index 31f5fb4b8cc..8aeb4874ea2 100644 --- a/Periodic_3_mesh_3/include/CGAL/optimize_periodic_3_mesh_3.h +++ b/Periodic_3_mesh_3/include/CGAL/optimize_periodic_3_mesh_3.h @@ -33,6 +33,11 @@ namespace CGAL { +#if defined(BOOST_MSVC) +# pragma warning(push) +# pragma warning(disable:4003) // not enough actual parameters for macro +#endif + // see CGAL_PRAGMA_DIAG_PUSH // see @@ -120,6 +125,10 @@ BOOST_PARAMETER_FUNCTION( CGAL_PRAGMA_DIAG_POP +#if defined(BOOST_MSVC) +# pragma warning(pop) +#endif + } // namespace CGAL #endif // CGAL_OPTIMIZE_PERIODIC_3_MESH_3_H diff --git a/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h b/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h index c39ed5d3d6b..8447b3d47cf 100644 --- a/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h +++ b/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h @@ -144,6 +144,11 @@ void project_points(C3T3& c3t3, } // namespace internal +#if defined(BOOST_MSVC) +# pragma warning(push) +# pragma warning(disable:4003) // not enough actual parameters for macro +#endif + // see CGAL_PRAGMA_DIAG_PUSH // see @@ -181,6 +186,10 @@ BOOST_PARAMETER_FUNCTION( CGAL_PRAGMA_DIAG_POP +#if defined(BOOST_MSVC) +# pragma warning(pop) +#endif + /** * @brief This function refines the mesh c3t3 wrt domain & criteria * From 864d4cd0c163cb1f8bc4981e2738467db71842ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Dec 2018 14:17:19 +0100 Subject: [PATCH 36/74] fix maybe-uninitialized warning --- NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h b/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h index 2a80ddf7e41..4f99858df63 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h @@ -70,7 +70,8 @@ template struct Array_vector { CGAL_assertion(d<=d_); //TODO: optimize for forward iterators Vector a; - std::copy(f,e,a.begin()); + CGAL_assume(f!=e); + std::copy(f,e,a.begin()); return a; } }; From 055072829278e6efeb705184a854ae21c5667e3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 6 Dec 2018 14:19:33 +0100 Subject: [PATCH 37/74] fix indentation --- NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h b/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h index 4f99858df63..6f9aa5bb3f2 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Vector/array.h @@ -70,8 +70,8 @@ template struct Array_vector { CGAL_assertion(d<=d_); //TODO: optimize for forward iterators Vector a; - CGAL_assume(f!=e); - std::copy(f,e,a.begin()); + CGAL_assume(f!=e); + std::copy(f,e,a.begin()); return a; } }; From 1f51c8ab10583fe50188e05c7bd60b7d5c1c9bb2 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 26 Nov 2018 15:44:17 +0100 Subject: [PATCH 38/74] has_sloop() -> has_shalfloop() --- Nef_S2/include/CGAL/Nef_polyhedron_S2.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h index 71eb311e6a1..c980fabd6f3 100644 --- a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h +++ b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h @@ -380,7 +380,7 @@ public: SHalfedge_iterator e; CGAL_forall_svertices(v,D) v->mark() = false; CGAL_forall_sedges(e,D) e->mark() = false; - if ( D.has_sloop() ) D.shalfloop()->mark() = false; + if ( D.has_shalfloop() ) D.shalfloop()->mark() = false; D.simplify(); } @@ -395,7 +395,7 @@ public: CGAL_forall_svertices(v,D) v->mark() = true; CGAL_forall_sedges(e,D) e->mark() = true; CGAL_forall_sfaces(f,D) f->mark() = false; - if ( D.has_sloop() ) D.shalfloop()->mark() = D.shalfoop()->twin()->mark() = true; + if ( D.has_shalfloop() ) D.shalfloop()->mark() = D.shalfoop()->twin()->mark() = true; D.simplify(); } From 8634fc94e964f7af7af94aeeba7483048e037db1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 7 Dec 2018 12:01:39 +0100 Subject: [PATCH 39/74] Fix a warning when `FT` is `int` https://cgal.geometryfactory.com/CGAL/testsuite/CGAL-4.14-Ic-63/Arrangement_on_surface_2_Examples/TestReport_Blake_Windows_MSVCPreview-Release-64bits.gz --- .../include/CGAL/constructions/kernel_ftC2.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h b/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h index 144ec2695d2..f9bd5290086 100644 --- a/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h +++ b/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h @@ -28,6 +28,7 @@ #include #include +#include namespace CGAL { @@ -284,6 +285,15 @@ line_get_pointC2(const FT &a, const FT &b, const FT &c, int i, { if (CGAL_NTS is_zero(b)) { + // Laurent Rineau, 2018/12/07: I had this CGAL_assume to calm + // down a warning from MSVC 2017: + // > include\cgal\constructions\kernel_ftc2.h(287) : + // > warning C4723: potential divide by 0 + // The test `!boost::is_integral::value` is there to avoid + // that `a != 0` is tested on anything but integral types, for + // performance reasons. + CGAL_assume(!boost::is_integral::value || a != FT(0)); + x = -c/a; y = 1 - i * a; } From 212944baf6a7c3fda575f41b010013291ec9a2ba Mon Sep 17 00:00:00 2001 From: Mael Date: Fri, 7 Dec 2018 12:13:55 +0100 Subject: [PATCH 40/74] Update Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h Co-Authored-By: lrineau --- Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h b/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h index f9bd5290086..9373f9feeda 100644 --- a/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h +++ b/Cartesian_kernel/include/CGAL/constructions/kernel_ftC2.h @@ -285,7 +285,7 @@ line_get_pointC2(const FT &a, const FT &b, const FT &c, int i, { if (CGAL_NTS is_zero(b)) { - // Laurent Rineau, 2018/12/07: I had this CGAL_assume to calm + // Laurent Rineau, 2018/12/07: I add this CGAL_assume to calm // down a warning from MSVC 2017: // > include\cgal\constructions\kernel_ftc2.h(287) : // > warning C4723: potential divide by 0 From 66359c5d1303e1ee84170c73ede427c7dc6c9d71 Mon Sep 17 00:00:00 2001 From: albert-github Date: Sat, 8 Dec 2018 13:28:28 +0100 Subject: [PATCH 41/74] XHTML address of dtd The address of the dtd for checking has changed from http -> https --- Documentation/doc/resources/1.8.13/deprecated.html | 2 +- Documentation/doc/resources/1.8.13/header.html | 2 +- Documentation/doc/resources/1.8.13/header_package.html | 2 +- Documentation/doc/resources/1.8.14/deprecated.html | 2 +- Documentation/doc/resources/1.8.14/header.html | 2 +- Documentation/doc/resources/1.8.14/header_package.html | 2 +- Documentation/doc/resources/1.8.4/deprecated.html | 2 +- Documentation/doc/resources/1.8.4/header.html | 2 +- Documentation/doc/resources/1.8.4/header_package.html | 2 +- Documentation/doc/scripts/html_output_post_processing.py | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Documentation/doc/resources/1.8.13/deprecated.html b/Documentation/doc/resources/1.8.13/deprecated.html index 4d8329a9fb2..823d7ea093c 100644 --- a/Documentation/doc/resources/1.8.13/deprecated.html +++ b/Documentation/doc/resources/1.8.13/deprecated.html @@ -1,4 +1,4 @@ - + diff --git a/Documentation/doc/resources/1.8.13/header.html b/Documentation/doc/resources/1.8.13/header.html index ea550ad48c8..f5ed0edf20d 100644 --- a/Documentation/doc/resources/1.8.13/header.html +++ b/Documentation/doc/resources/1.8.13/header.html @@ -1,5 +1,5 @@ - + diff --git a/Documentation/doc/resources/1.8.13/header_package.html b/Documentation/doc/resources/1.8.13/header_package.html index c8e2578351f..46521a96a54 100644 --- a/Documentation/doc/resources/1.8.13/header_package.html +++ b/Documentation/doc/resources/1.8.13/header_package.html @@ -1,5 +1,5 @@ - + diff --git a/Documentation/doc/resources/1.8.14/deprecated.html b/Documentation/doc/resources/1.8.14/deprecated.html index 60d1c4e90bc..a8baa72c005 100644 --- a/Documentation/doc/resources/1.8.14/deprecated.html +++ b/Documentation/doc/resources/1.8.14/deprecated.html @@ -1,4 +1,4 @@ - + diff --git a/Documentation/doc/resources/1.8.14/header.html b/Documentation/doc/resources/1.8.14/header.html index ea550ad48c8..f5ed0edf20d 100644 --- a/Documentation/doc/resources/1.8.14/header.html +++ b/Documentation/doc/resources/1.8.14/header.html @@ -1,5 +1,5 @@ - + diff --git a/Documentation/doc/resources/1.8.14/header_package.html b/Documentation/doc/resources/1.8.14/header_package.html index 7adad539ace..df3a1bcba36 100644 --- a/Documentation/doc/resources/1.8.14/header_package.html +++ b/Documentation/doc/resources/1.8.14/header_package.html @@ -1,5 +1,5 @@ - + diff --git a/Documentation/doc/resources/1.8.4/deprecated.html b/Documentation/doc/resources/1.8.4/deprecated.html index 4d8329a9fb2..823d7ea093c 100644 --- a/Documentation/doc/resources/1.8.4/deprecated.html +++ b/Documentation/doc/resources/1.8.4/deprecated.html @@ -1,4 +1,4 @@ - + diff --git a/Documentation/doc/resources/1.8.4/header.html b/Documentation/doc/resources/1.8.4/header.html index 890229ec02c..4b0aae2bff8 100644 --- a/Documentation/doc/resources/1.8.4/header.html +++ b/Documentation/doc/resources/1.8.4/header.html @@ -1,4 +1,4 @@ - + diff --git a/Documentation/doc/resources/1.8.4/header_package.html b/Documentation/doc/resources/1.8.4/header_package.html index 051c01002f6..37a9f67fdca 100644 --- a/Documentation/doc/resources/1.8.4/header_package.html +++ b/Documentation/doc/resources/1.8.4/header_package.html @@ -1,4 +1,4 @@ - + diff --git a/Documentation/doc/scripts/html_output_post_processing.py b/Documentation/doc/scripts/html_output_post_processing.py index c2a0b34941f..e89c7e7b61a 100755 --- a/Documentation/doc/scripts/html_output_post_processing.py +++ b/Documentation/doc/scripts/html_output_post_processing.py @@ -62,7 +62,7 @@ def conceptify_ns(d): def write_out_html(d, fn): f = codecs.open(fn, 'w', encoding='utf-8') # this is the normal doxygen doctype, which is thrown away by pyquery - f.write('\n') + f.write('\n') f.write('') f.write(d.html()) f.write('\n') From 14560b8e3c2920c90d89613aa5044bbf51d9e5ed Mon Sep 17 00:00:00 2001 From: albert-github Date: Sat, 8 Dec 2018 15:15:27 +0100 Subject: [PATCH 42/74] XHTML problem regarding TOC definition Form the doxygen documentation: Normally the contents between \htmlonly and \endhtmlonly is inserted as-is. When you want to insert a HTML fragment that has block scope like a table or list which should appear outside

..

, this can lead to invalid HTML. You can use \htmlonly[block] to make doxygen end the current paragraph and restart it after \endhtmlonly. --- Documentation/doc/resources/1.8.14/BaseDoxyfile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in index 9bc583f5cd8..265cbe2ea4d 100644 --- a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in @@ -287,7 +287,7 @@ ALIASES = "sc{1}=\1 \endhtmlonly \latexonly END MODIFICATIONS \endlatexonly" \ "cgalPkgBib{1}=BibTeX: \1-${CGAL_RELEASE_YEAR_ID}
" \ "cgalFootnote{1}=\1" \ - "cgalAutoToc=\htmlonly
\endhtmlonly" \ + "cgalAutoToc=\htmlonly[block]
\endhtmlonly" \ "cgalTagTrue=\link CGAL::Tag_true `CGAL::Tag_true`\endlink" \ "cgalTagFalse=\link CGAL::Tag_false `CGAL::Tag_false`\endlink" \ "cgalHeading{1}= \1
" \ From dd0acafcf28c78df87a25281d146ab408ae9852b Mon Sep 17 00:00:00 2001 From: albert-github Date: Sat, 8 Dec 2018 15:22:44 +0100 Subject: [PATCH 43/74] XHTML incorrect tag sequence with figure Due to the extra empty line an wrong sequence of tags appeared in the HTML output. --- Visibility_2/doc/Visibility_2/visibility_2.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/Visibility_2/doc/Visibility_2/visibility_2.txt b/Visibility_2/doc/Visibility_2/visibility_2.txt index 34fa2d8674e..c72f5d03f29 100644 --- a/Visibility_2/doc/Visibility_2/visibility_2.txt +++ b/Visibility_2/doc/Visibility_2/visibility_2.txt @@ -129,7 +129,6 @@ does not require preprocessing is advantageous. The following example shows how to obtain the regularized and non-regularized visibility regions. \cgalFigureBegin{simple_example, simple_example.png} - The visibility region of \f$ q \f$ in a simple polygon: (1) non-regularized visibility; and (2) regularized visibility. \cgalFigureEnd \cgalExample{Visibility_2/simple_polygon_visibility_2.cpp} From d6641b569f33ee9c99e7c6073feb9de727b041f7 Mon Sep 17 00:00:00 2001 From: albert-github Date: Sun, 9 Dec 2018 18:31:13 +0100 Subject: [PATCH 44/74] Problems with formulas in documentation There were some problems with formulas in the documentation most of them resulting in 'Undefined control sequence ' (MathJax output) Note problem with the Bounding Volumes has not been resolved, separate issue created #3522 --- .../Boolean_set_operations_2.txt | 2 +- Generator/doc/Generator/Generator.txt | 2 +- .../CGAL/Monge_via_jet_fitting.h | 2 +- .../doc/Jet_fitting_3/Jet_fitting_3.txt | 34 ++++------ .../doc/Kernel_d/CGAL/Kernel_d/Vector_d.h | 4 +- QP_solver/doc/QP_solver/CGAL/QP_solution.h | 12 ++-- QP_solver/doc/QP_solver/QP_solver.txt | 4 +- Ridges_3/doc/Ridges_3/Ridges_3.txt | 12 ++-- .../doc/Spatial_searching/CGAL/Splitters.h | 2 +- .../Surface_mesh_deformation.txt | 66 +++++++------------ 10 files changed, 52 insertions(+), 88 deletions(-) diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt b/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt index f62ef5d35b8..ff6ffd789b8 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt @@ -74,7 +74,7 @@ polygon vertices is referred to as the polygon (outer) boundary.
  • A polygon whose curves are pairwise disjoint in their interior, and whose vertices' degree equals two is defined as a Simple polygon. Such a polygon has a well-defined interior and exterior and is topologically equivalent to a disk. Note that while traversing the edges of the relatively simple polygon illustrated above (B), no curve is crossed over. -
  • A Relatively simple polygon allows vertices with a degree\f$\gt 2\f$, but all of its edges are disjoint in their interior. Furthermore, it must be an orientable polygon. Namely when it is inserted into an arrangement and its outer boundary is traversed, the same face is adjacent to all of the halfedges (no crossing over any curve during the traversal). +
  • A Relatively simple polygon allows vertices with a degree\f$> 2\f$, but all of its edges are disjoint in their interior. Furthermore, it must be an orientable polygon. Namely when it is inserted into an arrangement and its outer boundary is traversed, the same face is adjacent to all of the halfedges (no crossing over any curve during the traversal). Note that while polygon C has the same curves as polygon B, traversal of the curves leads to crossing over a previously traversed curve, and is therefore neither simple nor relatively simple.
  • A polygon in our context must be relatively simple and its outer boundary vertices must be ordered in a counterclockwise direction around the interior of the polygon. diff --git a/Generator/doc/Generator/Generator.txt b/Generator/doc/Generator/Generator.txt index 138c4a7a7a5..cadcc924ab8 100644 --- a/Generator/doc/Generator/Generator.txt +++ b/Generator/doc/Generator/Generator.txt @@ -277,7 +277,7 @@ triangle (2D and 3D) and in tetrahedra (3D). Basically, in order to generate a random point in a \f$N\f$-simplex (a triangle for \f$N = 2\f$, and tetrahedron for \f$N = 3\f$), we generate numbers \f$a_1,a_2,\ldots,a_N\f$ identically and independently uniformly distributed in \f$(0,1)\f$, we sort them, we let \f$a_0 = 0\f$ and \f$a_{N+1} = 1\f$, -and then \f$a_{i+1}−a_i\f$, for \f$i = 1,\ldots,N\f$ becomes its +and then \f$a_{i+1}-a_i\f$, for \f$i = 1,\ldots,N\f$ becomes its barycentric coordinates with respect to the simplex. Maxime Gimemo introduced the random generators on 2D and 3D triangle meshes. diff --git a/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h b/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h index 2bfe86e437a..a0778b4c18e 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h +++ b/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h @@ -199,7 +199,7 @@ Monge_via_jet_fitting(); This operator performs all the computations. The \f$ N\f$ input points are given by the `InputIterator` parameters which value-type are `Data_kernel::Point_3`, `d` is the degree of the fitted -polynomial, `d'` is the degree of the expected Monge +polynomial, \c d' is the degree of the expected Monge coefficients. \pre \f$ N \geq N_{d}:=(d+1)(d+2)/2\f$, \f$ 1 \leq d' \leq\min(d,4) \f$. */ template Monge_form diff --git a/Jet_fitting_3/doc/Jet_fitting_3/Jet_fitting_3.txt b/Jet_fitting_3/doc/Jet_fitting_3/Jet_fitting_3.txt index 36d39ebf838..d89781711dc 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/Jet_fitting_3.txt +++ b/Jet_fitting_3/doc/Jet_fitting_3/Jet_fitting_3.txt @@ -77,13 +77,11 @@ the surface can locally be written as the graph of a bivariate function. Letting \f$ h.o.t.\f$ stand for higher order terms, one has : -\f[ -\begin{equation} +\f{equation}{ z(x,y)=J_{B,d}(x,y) + h.o.t. \ ; \quad J_{B,d}(x,y)=\ccSum{k=0}{d}{(\ccSum{i=0}{i}{ \frac{B_{k-i,i}x^{k-i}y^{i}}{i!(k-i)!}})}. -\end{equation} -\f] +\f} The degree \f$ d\f$ polynomial \f$ J_{B,d}\f$ is the Taylor expansion of the function \f$ z\f$, and is called its \f$ d\f$-jet. Notice that a \f$ d\f$-jet contains @@ -343,12 +341,10 @@ The fitting process consists of finding the coefficients \f$ A_{i,j}\f$ of the degree \f$ d\f$ polynomial \anchor eqanswer -\f[ -\begin{equation} +\f{equation}{ J_{A,d}= \ccSum{k=0}{d}{(\ccSum{i=0}{k}{ \frac{A_{k-i,i}x^{k-i}y^{i}}{i!(k-i)!}})}. -\end{equation} -\f] +\f} Denote \f$ p_i=(x_i,y_i,z_i), \ i=1,\ldots , N\f$ the coordinates of the sample points of \f$ P^+\f$. @@ -362,7 +358,7 @@ given by A = & (A_{0,0}, A_{1,0},A_{0,1}, \ldots , A_{0,d})^T \\ Z= &(z_1, z_2,\ldots , z_N)^T \\ M= &(1,x_i,\ y_i,\ \frac{x_i^2}{2},\ldots , -\ \frac{x_iy_i^{d-1}}{(d-1)!},\ \frac{y_i^d}{d!})_{i=1,...,N}\\ +\ \frac{x_iy_i^{d-1}}{(d-1)!},\ \frac{y_i^d}{d!})_{i=1,...,N} \f} The equations for interpolation become \f$ MA=Z\f$. For approximation, the @@ -395,8 +391,7 @@ The number \f$ r\f$, which is the number of non zero singular values, is strictly lower than \f$ N_d\f$ if the system is under constrained. In any case, the unique solution which minimize \f$ ||A||_2\f$ is given by: -\f[ -\begin{equation} +\f{equation}{ A= V \left( \begin{array}{cc} D_r^{-1} & 0_{N_d-r,\ r}\\ @@ -404,8 +399,7 @@ D_r^{-1} & 0_{N_d-r,\ r}\\ \end{array} \right) U^TZ. -\end{equation} -\f] +\f} One can provide the condition number of the matrix \f$ M\f$ (after preconditioning) which is the ratio of the maximal and the minimal @@ -491,22 +485,18 @@ We use explicit formula. The implicit equation of the fitted polynomial surface in the fitting-basis with origin the point \f$ (0,0,A_{0,0})\f$ is \f$ Q=0\f$ with -\f[ -\begin{equation} +\f{equation}{ Q=-w-A_{0,0} +\ccSum{i,j}{}{\frac{A_{i,j}u^iv^j}{i!j!}}. -\end{equation} -\f] +\f} The equation in the Monge basis is obtained by substituting \f$ (u,v,w)\f$ by \f$ P^T_{F\rightarrow M}(x,y,z)\f$. Denote \f$ f(x,y,z)=0\f$ this implicit equation. By definition of the Monge basis, we have locally (at \f$ (0,0,0)\f$) -\f[ -\begin{equation} +\f{equation}{ f(x,y,z)=0 \Leftrightarrow z=g(x,y) -\end{equation} -\f] +\f} and the Taylor expansion of \f$ g\f$ at \f$ (0,0)\f$ are the Monge coefficients sought. @@ -526,7 +516,7 @@ f_{0,0,1} ^{2}}} \\ &b_1=g_{2,1}=-{\frac {- f_{0,1,1} f_{2,0,0} + f_{2,1,0} f_{0,0,1} }{ f_{0,0,1} ^{2}}} \\ -& .... \\ +& .... \f} diff --git a/Kernel_d/doc/Kernel_d/CGAL/Kernel_d/Vector_d.h b/Kernel_d/doc/Kernel_d/CGAL/Kernel_d/Vector_d.h index d09974defaa..541a6f73f8a 100644 --- a/Kernel_d/doc/Kernel_d/CGAL/Kernel_d/Vector_d.h +++ b/Kernel_d/doc/Kernel_d/CGAL/Kernel_d/Vector_d.h @@ -96,8 +96,8 @@ InputIterator first, InputIterator last); introduces a variable `v` of type `Vector_d` in dimension `d` initialized to the vector with homogeneous coordinates as defined by -`H = set [first,last)` and `D`: \f$ (\pmH[0], -\pmH[1], \ldots, \pmH[d-1], \pmD)\f$. The sign +`H = set [first,last)` and `D`: \f$ (\pm H_0, +\pm H_1, \ldots, \pm H_{D-1}, \pm H_D)\f$. The sign chosen is the sign of \f$ D\f$. \pre `D` is non-zero, the iterator range defines a \f$ d\f$-tuple of `RT`. diff --git a/QP_solver/doc/QP_solver/CGAL/QP_solution.h b/QP_solver/doc/QP_solver/CGAL/QP_solution.h index b3b9776dbfe..c323a4fd101 100644 --- a/QP_solver/doc/QP_solver/CGAL/QP_solution.h +++ b/QP_solver/doc/QP_solver/CGAL/QP_solution.h @@ -495,9 +495,9 @@ then \f$\lambda_i\geq 0\f$ (\f$\lambda_i\leq 0\f$, respectively).
  • \f[ \begin{array}{llll} -&&\geq 0 & \mbox{if \f$u_j=\infty\f$} \\ +&&\geq 0 & \mbox{if $u_j=\infty$} \\ \qplambda^T A_j &\quad \\ -&&\leq 0 & \mbox{if \f$l_j=-\infty\f$.} +&&\leq 0 & \mbox{if $l_j=-\infty$}. \end{array} \f]
  • \f[\qplambda^T\qpb \quad<\quad \ccSum{j: \qplambda^TA_j <0}{}{ \qplambda^TA_j u_j } @@ -508,12 +508,12 @@ then \f$\lambda_i\geq 0\f$ (\f$\lambda_i\leq 0\f$, respectively). that there is a feasible solution \f$\qpx\f$. Then we get \f[ \begin{array}{lcll} -0 &\geq& \qplambda^T(A\qpx -\qpb) & \mbox{(by \f$A\qpx\qprel \qpb\f$ and 1.)} \\ +0 &\geq& \qplambda^T(A\qpx -\qpb) & \mbox{(by $A\qpx\qprel \qpb$ and 1.)} \\ &=& \ccSum{j: \qplambda^TA_j <0}{}{ \qplambda^TA_j x_j } \quad+\quad \ccSum{j: \qplambda^TA_j >0}{}{ \qplambda^TA_j x_j} - \qplambda^T \qpb \\ &\geq& \ccSum{j: \qplambda^TA_j <0}{}{ \qplambda^TA_j u_j } \quad+\quad \ccSum{j: \qplambda^TA_j >0}{}{ \qplambda^TA_j l_j} - \qplambda^T \qpb & -\mbox{(by \f$\qpl\leq \qpx \leq \qpu\f$ and 2.)} \\ +\mbox{(by $\qpl\leq \qpx \leq \qpu$ and 2.)} \\ &>& 0 & \mbox{(by 3.)}, \end{array} \f] @@ -547,9 +547,9 @@ solution of (QP). The program (QP) is unbounded if an \f$n\f$-vector then \f$(A\qpw)_i\leq 0\f$ (\f$(A\qpw)_i\geq 0, (A\qpw)_i=0\f$, respectively).
  • \f[ \begin{array}{llll} -&&\geq 0 & \mbox{if \f$l_j\f$ is finite} \\ +&&\geq 0 & \mbox{if $l_j$ is finite} \\ w_j &\quad \\ -&&\leq 0 & \mbox{if \f$u_j\f$ is finite.} +&&\leq 0 & \mbox{if $u_j$ is finite.} \end{array} \f]
  • \f$\qpw^TD\qpw=0\f$ and \f$(\qpc^T+2{\qpx^*}^TD)\qpw<0\f$. diff --git a/QP_solver/doc/QP_solver/QP_solver.txt b/QP_solver/doc/QP_solver/QP_solver.txt index c7850995e6d..70410f95591 100644 --- a/QP_solver/doc/QP_solver/QP_solver.txt +++ b/QP_solver/doc/QP_solver/QP_solver.txt @@ -528,12 +528,12 @@ when we use the homogeneous representations of the points: if \f$ q_1,\ldots,q_n,q\in\mathbb{R}^{d+1}\f$ are homogeneous coordinates for \f$ p_1,\ldots,p_n,p\f$ with positive homogenizing coordinates \f$ h_1,\ldots,h_n,h\f$, we have -\f[$q_j = h_j \cdot (p_j \mid 1) \mbox{~for all $j$, and~} q = h \cdot +\f[q_j = h_j \cdot (p_j \mid 1) \mbox{~for all $j$, and~} q = h \cdot (p\mid 1).\f] Now, nonnegative \f$\lambda_1,\ldots,\lambda_n\f$ are suitable coefficients for a convex combination if and only if \f[\ccSum{j=1}{n}{~ \lambda_j(p_j \mid 1)} = (p\mid 1), \f] equivalently, if there are \f$\mu_1,\ldots,\mu_n\f$ -(with \f$\mu_j = \lambda_j \cdot h/{h_j}\f$ for all \f$j\f$) such that +(with \f$\mu_j = \lambda_j \cdot h/{h_j}\f$ for all $j$) such that \f[\ccSum{j=1}{n}{~\mu_j~q_j} = q, \quad \mu_j \geq 0\mbox{~for all $j$}.\f] The linear program now tests for the existence of nonnegative \f$ \mu_j\f$ diff --git a/Ridges_3/doc/Ridges_3/Ridges_3.txt b/Ridges_3/doc/Ridges_3/Ridges_3.txt index ab9993f0822..8bbb53826c8 100644 --- a/Ridges_3/doc/Ridges_3/Ridges_3.txt +++ b/Ridges_3/doc/Ridges_3/Ridges_3.txt @@ -113,20 +113,16 @@ The Taylor expansion of \f$ k_1\f$ (resp. \f$ k_2\f$) along the max by \f$ x\f$ (resp. \f$ y\f$) are: \anchor eqtaylor_along_line -\f[ -\begin{equation} +\f{equation}{ k_1(x) = k_1 + b_0x + \frac{P_1}{2(k_1-k_2)}x^2 + ... , \quad \quad \quad P_1= 3b_1^2+(k_1-k_2)(c_0-3k_1^3). -\end{equation} -\f] +\f} \anchor eqtaylor_along_red_line -\f[ -\begin{equation} +\f{equation}{ k_2(y) = k_2 + b_3y + \frac{P_2}{2(k_2-k_1)}y^2 + ... , \quad \quad \quad P_2= 3b_2^2+(k_2-k_1)(c_4-3k_2^3). -\end{equation} -\f] +\f} Notice also that switching from one to the other of the two afore-mentioned coordinate systems reverts the sign of all the odd diff --git a/Spatial_searching/doc/Spatial_searching/CGAL/Splitters.h b/Spatial_searching/doc/Spatial_searching/CGAL/Splitters.h index 5f6fe92cb62..19a379dfad3 100644 --- a/Spatial_searching/doc/Spatial_searching/CGAL/Splitters.h +++ b/Spatial_searching/doc/Spatial_searching/CGAL/Splitters.h @@ -160,7 +160,7 @@ namespace CGAL { Implements the midpoint of max spread splitting rule. A rectangle is cut through \f$ (\mathrm{Mind}+\mathrm{Maxd})/2\f$ orthogonal -to the dimension with the maximum point spread \f$ [\mathrm{Mind},\matrm{Maxd}]\f$. +to the dimension with the maximum point spread \f$ [\mathrm{Mind},\mathrm{Maxd}]\f$. \cgalHeading{Parameters} diff --git a/Surface_mesh_deformation/doc/Surface_mesh_deformation/Surface_mesh_deformation.txt b/Surface_mesh_deformation/doc/Surface_mesh_deformation/Surface_mesh_deformation.txt index b5df4208507..9368c7905a8 100644 --- a/Surface_mesh_deformation/doc/Surface_mesh_deformation/Surface_mesh_deformation.txt +++ b/Surface_mesh_deformation/doc/Surface_mesh_deformation/Surface_mesh_deformation.txt @@ -255,12 +255,10 @@ The Laplacian representation (referred to as Laplace coordinatesencode the local neighborhood of a vertex in the surface mesh. In this representation, a vertex \f$ \mathbf{v}_i \f$ is associated a 3D vector defined as: -\f[ -\begin{equation} +\f{equation}{ L(\mathbf{v}_i) = \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} w_{ij}(\mathbf{v}_i - \mathbf{v}_j), \label{eq:lap_open} -\end{equation} -\f] +\f} where: - \f$N(\mathbf{v}_i)\f$ denotes the set of vertices adjacent to \f$\mathbf{v}_i\f$; @@ -282,12 +280,10 @@ Laplacian representation of \f$ v_i \f$ with uniform weights: the red square ver Considering a surface mesh with \f$n\f$ vertices, it is possible to define its Laplacian representation \f$\Delta\f$ as a \f$n \times 3\f$ matrix: -\f[ -\begin{equation} +\f{equation}{ \mathbf{L}\mathbf{V} = \Delta, \label{eq:lap_system} -\end{equation} -\f] +\f} where: - \f$\mathbf{L}\f$ is a \f$n \times n\f$ sparse matrix, referred to as the Laplacian matrix. Its elements \f$ m_{ij} \f$, \f$i,j \in \{1 \dots n\} \f$ are defined as follows: @@ -313,8 +309,7 @@ This package supports hard constraints, that is, target positions of control ver Given a surface mesh deformation system with a ROI made of \f$ n \f$ vertices and \f$ k \f$ control vertices, we consider the following linear system: -\f[ -\begin{equation} +\f{equation}{ \left[ \begin{array}{ccc} \mathbf{L}_f\\ @@ -329,8 +324,7 @@ Given a surface mesh deformation system with a ROI made of \f$ n \f$ vertices an \end{array} \right], \label{eq:lap_energy_system} -\end{equation} -\f] +\f} where: - \f$\mathbf{V}\f$ is a \f$n \times 3\f$ matrix denoting the unknowns of the system that represent the vertex coordinates after deformation. The system is built so that the \f$ k \f$ last rows correspond to the control vertices. @@ -348,14 +342,12 @@ preserves the Laplacian representation of the surface mesh restricted to the unc Given a surface mesh \f$M\f$ with \f$ n \f$ vertices \f$ \{\mathbf{v}_i\} i \in \{1 \dots n \} \f$ and some deformation constraints, we consider the following energy function: -\f[ -\begin{equation} +\f{equation}{ \sum_{\mathbf{v}_i \in M} \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} w_{ij} \left\| (\mathbf{v}'_i - \mathbf{v}'_j) - \mathbf{R}_i(\mathbf{v}_i - \mathbf{v}_j) \right\|^2, \label{eq:arap_energy} -\end{equation} -\f] +\f} where: - \f$\mathbf{R}_i\f$ is a \f$ 3 \times 3 \f$ rotation matrix @@ -387,12 +379,10 @@ Each such term of the energy is minimized by using a two-step optimization appro In the first step, the positions of the vertices are considered as fixed so that the rotation matrices are the only unknowns. For the vertex \f$\mathbf{v}_i\f$, we consider the covariance matrix \f$\mathbf{S}_i\f$: -\f[ -\begin{equation} +\f{equation}{ \mathbf{S}_i = \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} w_{ij} (\mathbf{v}_i - \mathbf{v}_j)(\mathbf{v}'_i - \mathbf{v}'_j)^T, \label{eq:cov_matrix} -\end{equation} -\f] +\f} It was shown \cgalCite{Sorkine2009LeastSquaresRigid} that minimizing the energy contribution of \f$\mathbf{v}_i\f$ in Eq. \f$\eqref{eq:arap_energy}\f$ is equivalent to maximizing the trace of the matrix @@ -404,13 +394,11 @@ In the second step, the rotation matrices are substituted into the partial deriv with respect to \f$\mathbf{v}'_i\f$. Assuming the weights are symmetric, setting the derivative to zero results in the following equation: -\f[ -\begin{equation} +\f{equation}{ \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} w_{ij}(\mathbf{v}'_i - \mathbf{v}'_j) = \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} w_{ij} \frac{(\mathbf{R}_i + \mathbf{R}_j)}{2} (\mathbf{v}_i - \mathbf{v}_j). \label{eq:lap_ber} -\end{equation} -\f] +\f} The left-hand side of this equation corresponds to the one of Eq.\f$\eqref{eq:lap_open}\f$, and we can set \f$\Delta\f$ to be the right-hand side. @@ -428,13 +416,11 @@ The original algorithm \cgalCite{Sorkine2007AsRigidAs} we described assumes that - the weight between two vertices is symmetric. In order to support asymmetric weights in our implementation, we slightly change Eq. \f$\eqref{eq:lap_ber}\f$ to: -\f[ -\begin{equation} +\f{equation}{ \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} (w_{ij} + w_{ji})(\mathbf{v}'_i - \mathbf{v}'_j) = \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} (w_{ij}\mathbf{R}_i + w_{ji}\mathbf{R}_j)(\mathbf{v}_i - \mathbf{v}_j). \label{eq:lap_ber_asym} -\end{equation} -\f] +\f} - The energy contribution of each vertex is positive. If the weight between two vertices is always positive, this is always the case. However, when using the cotangent weighting scheme (the default in our implementation), if the sum of the angles opposite to an edge is greater than \f$ \pi \f$, @@ -448,14 +434,12 @@ A method minimizing another energy function is described next to avoid the latte The elastic energy function proposed by \cgalCite{Chao2010SimpleGeomModel} additionally takes into account all the opposite edges in the facets incident to a vertex. The energy function to minimize becomes: -\f[ -\begin{equation} +\f{equation}{ \sum_{\mathbf{v}_i \in M} \sum_{(\mathbf{v}_j, \mathbf{v}_k) \in E(\mathbf{v}_i)} w_{jk} \left\| (\mathbf{v}'_j - \mathbf{v}'_k) - \mathbf{R}_i(\mathbf{v}_j - \mathbf{v}_k) \right\|^2, \label{eq:arap_energy_rims} -\end{equation} -\f] +\f} where \f$E(\mathbf{v}_i)\f$ consists of the set of edges incident to \f$\mathbf{v}_i\f$ (the spokes) and the set of edges in the link (the rims) of \f$\mathbf{v}_i\f$ in the surface mesh \f$M\f$ @@ -470,23 +454,19 @@ The method to get the new positions of the unconstrained vertices is similar to method explained in \ref SMD_Overview_ARAP. For the first step, the Eq. \f$\eqref{eq:cov_matrix}\f$ is modified to take into account the edges in \f$E(\mathbf{v}_i)\f$: -\f[ -\begin{equation} +\f{equation}{ \mathbf{S}_i = \sum_{(\mathbf{v}_j, \mathbf{v}_k) \in E(\mathbf{v}_i)} w_{jk} (\mathbf{v}_j - \mathbf{v}_k)(\mathbf{v}'_j - \mathbf{v}'_k)^T, \label{eq:cov_matrix_sr} -\end{equation} -\f] +\f} For the second step, setting partial derivative of Eq. \f$\eqref{eq:arap_energy_rims}\f$ to zero with respect to \f$\mathbf{v}_i\f$ gives the following equation: -\f[ -\begin{equation} +\f{equation}{ \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} (w_{ij} + w_{ji})(\mathbf{v}'_i - \mathbf{v}'_j) = \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} \frac{w_{ij}(\mathbf{R}_i + \mathbf{R}_j + \mathbf{R}_m) + w_{ji}(\mathbf{R}_i + \mathbf{R}_j + \mathbf{R}_n)}{3} (\mathbf{v}_i - \mathbf{v}_j). \label{eq:lap_ber_rims} -\end{equation} -\f] +\f} where \f$\mathbf{R}_m\f$ and \f$\mathbf{R}_n\f$ are the rotation matrices of the vertices \f$\mathbf{v}_m\f$, \f$\mathbf{v}_n\f$ which are the opposite vertices of the edge \f$\mathbf{v}_i \mathbf{v}_j\f$ @@ -504,14 +484,12 @@ The implementation in this package uses the cotangent weights by default (negati \subsection SMD_Overview_SRE_ARAP Smoothed Rotation Enhanced As-Rigid-As Possible (SR_ARAP) Deformation Using 1-ring elements, SR-ARAP adds a bending element to Eq. \f$\eqref{eq:arap_energy}\f$: -\f[ -\begin{equation} +\f{equation}{ \sum_{\mathbf{v}_i \in M} \sum_{\mathbf{v}_j \in N(\mathbf{v}_i)} w_{ij} \left\| (\mathbf{v}'_i - \mathbf{v}'_j) - \mathbf{R}_i(\mathbf{v}_i - \mathbf{v}_j) \right\|^2 + \alpha A \left\| \mathbf{R}_i - \mathbf{R}_j \right\|^2_F \label{eq:sre_arap_energy} -\end{equation} -\f] +\f} where - \f$\alpha=0.02\f$ is a weighting coefficient. From d6f878f3616fd05a6d48801efb239a24a3ea408f Mon Sep 17 00:00:00 2001 From: albert-github Date: Sun, 9 Dec 2018 19:08:51 +0100 Subject: [PATCH 45/74] Problems with formulas in documentation Small regression (substitution should not have taken place). --- QP_solver/doc/QP_solver/QP_solver.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QP_solver/doc/QP_solver/QP_solver.txt b/QP_solver/doc/QP_solver/QP_solver.txt index 70410f95591..b61aa94727e 100644 --- a/QP_solver/doc/QP_solver/QP_solver.txt +++ b/QP_solver/doc/QP_solver/QP_solver.txt @@ -533,7 +533,7 @@ when we use the homogeneous representations of the points: if suitable coefficients for a convex combination if and only if \f[\ccSum{j=1}{n}{~ \lambda_j(p_j \mid 1)} = (p\mid 1), \f] equivalently, if there are \f$\mu_1,\ldots,\mu_n\f$ -(with \f$\mu_j = \lambda_j \cdot h/{h_j}\f$ for all $j$) such that +(with \f$\mu_j = \lambda_j \cdot h/{h_j}\f$ for all \f$j\f$) such that \f[\ccSum{j=1}{n}{~\mu_j~q_j} = q, \quad \mu_j \geq 0\mbox{~for all $j$}.\f] The linear program now tests for the existence of nonnegative \f$ \mu_j\f$ From 37d05cd835e35d4c92392eaae60281e08b4552de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 10 Dec 2018 07:40:21 +0100 Subject: [PATCH 46/74] fix undefined control sequence in html --- .../CGAL/Approximate_min_ellipsoid_d.h | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h index c162a00c5aa..650ea1a75c5 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h @@ -13,28 +13,28 @@ x\in\E^d \mid x^T E x + x^T e + \eta\leq 0 \}\f$, where \f$ E\f$ is some positive definite matrix from the set \f$ \mathbb{R}^{d\times d}\f$, \f$ e\f$ is some real \f$ d\f$-vector, and \f$ \eta\in\mathbb{R}\f$. A pointset \f$ P\subseteq \E^d\f$ is called full-dimensional if its affine hull has dimension \f$ d\f$. -For a finite, full-dimensional pointset \f$ P\f$ we denote by \f$ \mel(P)\f$ the +For a finite, full-dimensional pointset \f$ P\f$ we denote by \f$ (P)\f$ the smallest ellipsoid that contains all points of \f$ P\f$; this ellipsoid exists and is unique. For a given finite and full-dimensional pointset \f$ P\subset \E^d\f$ and a real number \f$ \epsilon\ge 0\f$, we say that an ellipsoid \f$ {\cal -E}\subset\E^d\f$ is an \f$ (1+\epsilon)\f$-appoximation to \f$ \mel(P)\f$ if -\f$ P\subset {\cal E}\f$ and \f$ \vol({\cal E}) \leq (1+\epsilon) -\vol(\mel(P))\f$. In other words, an \f$ (1+\epsilon)\f$-approximation to -\f$ \mel(P)\f$ is an enclosing ellipsoid whose volume is by at most a +E}\subset\E^d\f$ is an \f$ (1+\epsilon)\f$-appoximation to \f$ (P)\f$ if +\f$ P\subset {\cal E}\f$ and \f$ ({\cal E}) \leq (1+\epsilon) +((P))\f$. In other words, an \f$ (1+\epsilon)\f$-approximation to +\f$ (P)\f$ is an enclosing ellipsoid whose volume is by at most a factor of \f$ 1+\epsilon\f$ larger than the volume of the smallest enclosing ellipsoid of \f$ P\f$. Given this notation, an object of class `Approximate_min_ellipsoid_d` represents an -\f$ (1+\epsilon)\f$-approximation to \f$ \mel(P)\f$ for a given finite and +\f$ (1+\epsilon)\f$-approximation to \f$ (P)\f$ for a given finite and full-dimensional multiset of points \f$ P\subset\E^d\f$ and a real constant \f$ \epsilon>0\f$.\cgalFootnote{A multiset is a set where elements may have multiplicity greater than \f$ 1\f$.} When an `Approximate_min_ellipsoid_d` object is constructed, an iterator over the points \f$ P\f$ and the number \f$ \epsilon\f$ have to be specified; the number \f$ \epsilon\f$ defines the desired approximation ratio \f$ 1+\epsilon\f$. The underlying algorithm will then -try to compute an \f$ (1+\epsilon)\f$-approximation to \f$ \mel(P)\f$, and one of +try to compute an \f$ (1+\epsilon)\f$-approximation to \f$ (P)\f$, and one of the following two cases takes place.
    • The algorithm determines that \f$ P\f$ is not full-dimensional (see @@ -44,7 +44,7 @@ the following two cases takes place. in all cases decide correctly whether \f$ P\f$ is full-dimensional or not. If `is_full_dimensional()` returns `false`, the points lie in such a "thin" subspace of \f$ \E^d\f$ that the algorithm is -incapable of computing an approximation to \f$ \mel(P)\f$. More +incapable of computing an approximation to \f$ (P)\f$. More precisely, if `is_full_dimensional()` returns `false`, there exist two parallel hyperplanes in \f$ \E^d\f$ with the points \f$ P\f$ in between so that the distance \f$ \delta\f$ between the hyperplanes is @@ -55,7 +55,7 @@ If \f$ P\f$ is not full-dimensional, linear algebra techniques should be used to determine an affine subspace \f$ S\f$ of \f$ \E^d\f$ that contains the points \f$ P\f$ as a (w.r.t.\ \f$ S\f$) full-dimensional pointset; once \f$ S\f$ is determined, the algorithm can be invoked again to compute an -approximation to (the lower-dimensional) \f$ \mel(P)\f$ in \f$ S\f$. Since +approximation to (the lower-dimensional) \f$ (P)\f$ in \f$ S\f$. Since `is_full_dimensional()` might (due to rounding errors, see above) return `false` even though \f$ P\f$ is full-dimensional, the lower-dimensional subspace \f$ S\f$ containing \f$ P\f$ need not exist. @@ -66,7 +66,7 @@ ellipsoid of the projected points within \f$ H\f$; the fitting can be done for instance using the `linear_least_squares_fitting()` function from the \cgal package `Principal_component_analysis`.
    • The algorithm determines that \f$ P\f$ is full-dimensional. In this -case, it provides an approximation \f$ {\cal E}\f$ to \f$ \mel(P)\f$, but +case, it provides an approximation \f$ {\cal E}\f$ to \f$ (P)\f$, but depending on the input problem (i.e., on the pair \f$ (P,\epsilon)\f$), it may not have achieved the desired approximation ratio but merely some worse approximation ratio \f$ 1+\epsilon'>1+\epsilon\f$. The @@ -126,7 +126,7 @@ Cholesky-decomposition. The algorithm's running time is To illustrate the usage of `Approximate_min_ellipsoid_d` we give two examples in 2D. The first program generates a random set \f$ P\subset\E^2\f$ and outputs the -points and a \f$ 1.01\f$-approximation of \f$ \mel(P)\f$ as an EPS-file, which +points and a \f$ 1.01\f$-approximation of \f$ (P)\f$ as an EPS-file, which you can view using gv, for instance. (In both examples you can change the variables `n` and `d` to experiment with the code.) @@ -202,7 +202,7 @@ typedef unspecified_type Axis_direction_iterator; /*! initializes `ame` to an \f$ (1+\epsilon)\f$-approximation of -\f$ \mel(P)\f$ with \f$ P\f$ being the set of points in the range +\f$ (P)\f$ with \f$ P\f$ being the set of points in the range [`first`,`last`). The number \f$ \epsilon\f$ in this will be at most `eps`, if possible. However, due to the limited precision in the algorithm's underlying arithmetic, it @@ -258,7 +258,7 @@ unsigned int number_of_points( ) const; returns a number \f$ \epsilon'\f$ such that the computed approximation is (under exact arithmetic) guaranteed to be an \f$ (1+\epsilon')\f$-approximation to -\f$ \mel(P)\f$. +\f$ (P)\f$. \pre `ame.is_full_dimensional() == true`. \post \f$ \epsilon'>0\f$. */ @@ -402,7 +402,7 @@ bool is_full_dimensional( ) const; /// An object `ame` is valid iff
      • `ame` contains all points of /// its defining set \f$ P\f$,
      • `ame` is an \f$ /// (1+\epsilon')\f$-approximation to the smallest ellipsoid \f$ -/// \mel(P)\f$ of \f$ P\f$,
      • The ellipsoid represented by `ame` +/// (P)\f$ of \f$ P\f$,
      • The ellipsoid represented by `ame` /// fulfills the inclusion ( \ref eqapproximate_min_ellipsoid_incl /// ).
      /// @{ @@ -424,7 +424,7 @@ bool is_valid( bool verbose = false) const; /*! Writes the points \f$ P\f$ and the computed approximation to -\f$ \mel(P)\f$ as an EPS-file under pathname `name`. \pre The dimension of points \f$ P\f$ must be \f$ 2\f$. +\f$ (P)\f$ as an EPS-file under pathname `name`. \pre The dimension of points \f$ P\f$ must be \f$ 2\f$. Note: this routine is provided as a debugging routine; future version of \cgal might not provide it anymore. From 8e75d21c384f2af08a135c0502fb154cf316b353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 10 Dec 2018 08:00:57 +0100 Subject: [PATCH 47/74] fix maybe-uninitialized warning --- .../include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h | 1 - Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h | 1 - 2 files changed, 2 deletions(-) diff --git a/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h b/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h index 05b76b7b2ec..ef21d9dc89b 100644 --- a/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h +++ b/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h @@ -772,7 +772,6 @@ get_positions_with_vertex_at_extremity(const Bare_point& known_point, << " inverted order ? " << std::boolalpha << inverted_return_order << std::endl; #endif - CGAL_precondition(known_point != Bare_point()); CGAL_precondition(!domain_.is_loop(curve_index)); CGAL_precondition(extremity_points.size() == 2); diff --git a/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h b/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h index c39ed5d3d6b..53b57cb51b0 100644 --- a/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h +++ b/Periodic_3_mesh_3/include/CGAL/refine_periodic_3_mesh_3.h @@ -116,7 +116,6 @@ void project_points(C3T3& c3t3, const Weighted_point& vh_wp = c3t3.triangulation().point(vh); const Bare_point& vh_p = cp(vh_wp); const Bare_point new_point = helper.project_on_surface(vh, vh_p); - CGAL_assertion(new_point != Bare_point()); const FT sq_d = CGAL::squared_distance(new_point, vh_p); From 284e374df6e331b50d65559640d00b844cb5642c Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 10 Dec 2018 08:49:17 +0100 Subject: [PATCH 48/74] Subdivision:methods_3: Use deprecation warning --- .../Subdivision_methods_plugin.cpp | 11 +++++++---- .../Subdivision_method_3/subdivision_methods_3.h | 12 ++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp index c5c3067099e..2b54e27cf3e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp @@ -11,7 +11,10 @@ #include "Scene_surface_mesh_item.h" #include "SMesh_type.h" #include + using namespace CGAL::Three; +namespace params = CGAL::parameters; + class Polyhedron_demo_subdivision_methods_plugin : public QObject, public Polyhedron_demo_plugin_helper @@ -81,7 +84,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_loop(FaceGraphItem* item, time.start(); messages->information("Loop subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::Loop_subdivision(*graph, nb_steps); + CGAL::Subdivision_method_3::Loop_subdivision(*graph, params::number_of_iterations(nb_steps)); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -113,7 +116,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_catmullclark(FaceGraphIte time.start(); messages->information("Catmull-Clark subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::CatmullClark_subdivision(*graph, nb_steps); + CGAL::Subdivision_method_3::CatmullClark_subdivision(*graph, params::number_of_iterations(nb_steps)); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -143,7 +146,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_sqrt3(FaceGraphItem* item time.start(); messages->information("Sqrt-3 subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::Sqrt3_subdivision(*graph, nb_steps); + CGAL::Subdivision_method_3::Sqrt3_subdivision(*graph, params::number_of_iterations(nb_steps)); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -175,7 +178,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_doosabin(FaceGraphItem* i time.start(); messages->information("Doo-Sabin subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::DooSabin_subdivision(*graph, nb_steps); + CGAL::Subdivision_method_3::DooSabin_subdivision(*graph, params::number_of_iterations(nb_steps)); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); diff --git a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h index a00393d6ed3..41355110f38 100644 --- a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h +++ b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h @@ -95,10 +95,13 @@ namespace parameters = CGAL::parameters; #ifndef DOXYGEN_RUNNING // Backward compatibility +#ifndef CGAL_NO_DEPRECATED_CODE template +CGAL_DEPRECATED_MSG("you are using the deprecated API of CatmullClark_subdivision(), please update your code") void CatmullClark_subdivision(PolygonMesh& pmesh, int step = 1) { PQQ(pmesh, CatmullClark_mask_3(&pmesh, get(vertex_point,pmesh)), step); } +#endif #endif /*! @@ -142,10 +145,13 @@ void CatmullClark_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { #ifndef DOXYGEN_RUNNING // backward compatibility +#ifndef CGAL_NO_DEPRECATED_CODE template +CGAL_DEPRECATED_MSG("you are using the deprecated API of Loop_subdivision(), please update your code") void Loop_subdivision(PolygonMesh& pmesh, int step = 1) { PTQ(pmesh, Loop_mask_3(&pmesh, get(vertex_point,pmesh)) , step); } +#endif #endif /*! @@ -187,11 +193,14 @@ void Loop_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { #ifndef DOXYGEN_RUNNING // backward compatibility +#ifndef CGAL_NO_DEPRECATED_CODE template +CGAL_DEPRECATED_MSG("you are using the deprecated API of DooSabin_subdivision(), please update your code") void DooSabin_subdivision(PolygonMesh& pmesh, int step = 1) { DQQ(pmesh, DooSabin_mask_3(&pmesh, get(vertex_point, pmesh)), step); } #endif +#endif /*! * @@ -232,11 +241,14 @@ void DooSabin_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { #ifndef DOXYGEN_RUNNING // backward compatibility +#ifndef CGAL_NO_DEPRECATED_CODE template +CGAL_DEPRECATED_MSG("you are using the deprecated API of Sqrt3_subdivision(), please update your code") void Sqrt3_subdivision(PolygonMesh& pmesh, int step = 1) { Sqrt3(pmesh, Sqrt3_mask_3(&pmesh, get(vertex_point,pmesh)), step); } #endif +#endif /*! * From 7dbe4b729e8e268667939e89100d91cf1f0da774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 10 Dec 2018 17:45:41 +0100 Subject: [PATCH 49/74] fix memory leak --- .../Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp index cd7f6c5fbab..940fe1144d9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp @@ -872,7 +872,7 @@ Polyhedron_demo_mean_curvature_flow_skeleton_plugin::createContractedItem(Scene_ { if(!item) return; - if(item->mcs == NULL) + if(item->mcs != NULL) delete item->mcs; double omega_H = ui->omega_H->value(); double omega_P = ui->omega_P->value(); From e9065aeaba53c537c1e315395e928179aebf8ec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 10 Dec 2018 17:55:39 +0100 Subject: [PATCH 50/74] init pole to avoid warnings --- .../include/CGAL/Mean_curvature_flow_skeletonization.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h b/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h index cc403bb788a..ba18f094c0b 100644 --- a/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h +++ b/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h @@ -93,8 +93,8 @@ template < class Refs, class Point, class ID, class vertex_descriptor> struct Skel_HDS_vertex_type : public HalfedgeDS_vertex_max_base_with_id { typedef HalfedgeDS_vertex_max_base_with_id Base; - Skel_HDS_vertex_type() : Base (), is_fixed(false) {} - Skel_HDS_vertex_type( Point const& p) : Base(p), is_fixed(false) {} + Skel_HDS_vertex_type() : Base (), pole(ORIGIN), is_fixed(false) {} + Skel_HDS_vertex_type( Point const& p) : Base(p), pole(ORIGIN), is_fixed(false) {} std::vector vertices; Point pole; bool is_fixed; From 8da9e7ceec89191a218958bba9c09c0cca8ca856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 7 Dec 2018 15:42:41 +0100 Subject: [PATCH 51/74] handle case of empty meshes --- .../Polygon_mesh_processing/corefinement.h | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h index 1f7383346ed..20127c0e8fb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h @@ -441,6 +441,58 @@ corefine_and_compute_boolean_operations( return CGAL::make_array(true, true, true, true); } + // handle case of empty meshes (isolated vertices are ignored) + if (faces(tm1).empty()) + { + if(faces(tm2).empty()) + { + for (int i=0; i<4; ++i) + if (output[i] != boost::none) + clear(*(*output[i])); + return CGAL::make_array(true, true, true, true); + } + // tm2 is not empty + if (output[Corefinement::UNION] != boost::none) + if (&tm2 != *output[Corefinement::UNION]) + copy_face_graph(tm2, + *(*output[Corefinement::UNION]), + parameters::vertex_point_map(vpm2), + parameters::vertex_point_map(*cpp11::get(vpm_out_tuple))); + if (output[Corefinement::INTERSECTION] != boost::none) + clear(*(*output[Corefinement::INTERSECTION])); + if (output[Corefinement::TM1_MINUS_TM2] != boost::none) + clear(*(*output[Corefinement::TM1_MINUS_TM2])); + if (output[Corefinement::TM2_MINUS_TM1] != boost::none) + if (&tm2 != *output[Corefinement::TM2_MINUS_TM1]) + copy_face_graph(tm2, + *(*output[Corefinement::TM2_MINUS_TM1]), + parameters::vertex_point_map(vpm2), + parameters::vertex_point_map(*cpp11::get(vpm_out_tuple))); + return CGAL::make_array(true, true, true, true); + } + else + if (faces(tm2).empty()) + { + // tm1 is not empty + if (output[Corefinement::UNION] != boost::none) + if (&tm1 != *output[Corefinement::UNION]) + copy_face_graph(tm1, + *(*output[Corefinement::UNION]), + parameters::vertex_point_map(vpm1), + parameters::vertex_point_map(*cpp11::get(vpm_out_tuple))); + if (output[Corefinement::INTERSECTION] != boost::none) + clear(*(*output[Corefinement::INTERSECTION])); + if (output[Corefinement::TM2_MINUS_TM1] != boost::none) + clear(*(*output[Corefinement::TM2_MINUS_TM1])); + if (output[Corefinement::TM1_MINUS_TM2] != boost::none) + if (&tm1 != *output[Corefinement::TM1_MINUS_TM2]) + copy_face_graph(tm1, + *(*output[Corefinement::TM1_MINUS_TM2]), + parameters::vertex_point_map(vpm1), + parameters::vertex_point_map(*cpp11::get(vpm_out_tuple))); + return CGAL::make_array(true, true, true, true); + } + // Edge is-constrained maps //for input meshes typedef typename boost::lookup_named_param_def < From fa52560c62149f15fbad480bbc20538923150afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 7 Dec 2018 15:42:41 +0100 Subject: [PATCH 52/74] handle case of empty meshes --- .../Polygon_mesh_processing/corefinement.h | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h index c6f4c83e0fd..dec93d03966 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/corefinement.h @@ -329,6 +329,62 @@ boolean_operation( TriangleMesh& tm1, return CGAL::make_array(true, true, true, true); } + // handle case of empty meshes (isolated vertices are ignored) + if (faces(tm1).empty()) + { + if(faces(tm2).empty()) + { + for (int i=0; i<4; ++i) + if (desired_output[i] != boost::none) + clear(*(*desired_output[i])); + return CGAL::make_array(true, true, true, true); + } + // tm2 is not empty + if (desired_output[Corefinement::UNION] != boost::none) + if (&tm2 != *desired_output[Corefinement::UNION]) + copy_face_graph(tm2, + *(*desired_output[Corefinement::UNION]), + Emptyset_iterator(), Emptyset_iterator(), Emptyset_iterator(), + vpm2, + vpm_out[Corefinement::UNION]); + if (desired_output[Corefinement::INTER] != boost::none) + clear(*(*desired_output[Corefinement::INTER])); + if (desired_output[Corefinement::TM1_MINUS_TM2] != boost::none) + clear(*(*desired_output[Corefinement::TM1_MINUS_TM2])); + if (desired_output[Corefinement::TM2_MINUS_TM1] != boost::none) + if (&tm2 != *desired_output[Corefinement::TM2_MINUS_TM1]) + copy_face_graph(tm2, + *(*desired_output[Corefinement::TM2_MINUS_TM1]), + Emptyset_iterator(), Emptyset_iterator(), Emptyset_iterator(), + vpm2, + vpm_out[Corefinement::TM2_MINUS_TM1]); + return CGAL::make_array(true, true, true, true); + } + else + if (faces(tm2).empty()) + { + // tm1 is not empty + if (desired_output[Corefinement::UNION] != boost::none) + if (&tm1 != *desired_output[Corefinement::UNION]) + copy_face_graph(tm1, + *(*desired_output[Corefinement::UNION]), + Emptyset_iterator(), Emptyset_iterator(), Emptyset_iterator(), + vpm1, + vpm_out[Corefinement::UNION]); + if (desired_output[Corefinement::INTER] != boost::none) + clear(*(*desired_output[Corefinement::INTER])); + if (desired_output[Corefinement::TM2_MINUS_TM1] != boost::none) + clear(*(*desired_output[Corefinement::TM2_MINUS_TM1])); + if (desired_output[Corefinement::TM1_MINUS_TM2] != boost::none) + if (&tm1 != *desired_output[Corefinement::TM1_MINUS_TM2]) + copy_face_graph(tm1, + *(*desired_output[Corefinement::TM1_MINUS_TM2]), + Emptyset_iterator(), Emptyset_iterator(), Emptyset_iterator(), + vpm1, + vpm_out[Corefinement::TM1_MINUS_TM2]); + return CGAL::make_array(true, true, true, true); + } + // Edge is-constrained maps //for input meshes typedef typename boost::lookup_named_param_def < From 9c3008ebd0221ada34bba81d9aa4c8aef9968293 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 10 Dec 2018 09:36:44 +0100 Subject: [PATCH 53/74] Fix warnings in doc --- .../include/CGAL/Optimal_transportation_reconstruction_2.h | 2 +- Three/include/CGAL/Three/Triangle_container.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Optimal_transportation_reconstruction_2/include/CGAL/Optimal_transportation_reconstruction_2.h b/Optimal_transportation_reconstruction_2/include/CGAL/Optimal_transportation_reconstruction_2.h index 091f7e95460..b7567d84d86 100644 --- a/Optimal_transportation_reconstruction_2/include/CGAL/Optimal_transportation_reconstruction_2.h +++ b/Optimal_transportation_reconstruction_2/include/CGAL/Optimal_transportation_reconstruction_2.h @@ -1534,7 +1534,7 @@ public: `false` if the algorithm was prematurely ended because no more edge collapse was possible. */ - bool run(const unsigned steps) { + bool run(const unsigned int steps) { m_tolerance = (FT)(-1.); CGAL::Real_timer timer; if (m_verbose > 0) diff --git a/Three/include/CGAL/Three/Triangle_container.h b/Three/include/CGAL/Three/Triangle_container.h index ecea0b1ed69..b85092be9b5 100644 --- a/Three/include/CGAL/Three/Triangle_container.h +++ b/Three/include/CGAL/Three/Triangle_container.h @@ -89,6 +89,7 @@ struct DEMO_FRAMEWORK_EXPORT Triangle_container :public Primitive_container /// If the shaders of this program doesn't need one, you can ignore it. /// The others should be filled at each `draw()` from the item. ///@{ + //! getter for the "shrink_factor" parameter float getShrinkFactor(); //! getter for the "plane" parameter From cbd4d97998bd1c2bd4606048b181c4f7e7e62771 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 11 Dec 2018 10:30:58 +0100 Subject: [PATCH 54/74] Fix a [-Wconversion] warning --- CGAL_ImageIO/include/CGAL/ImageIO_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CGAL_ImageIO/include/CGAL/ImageIO_impl.h b/CGAL_ImageIO/include/CGAL/ImageIO_impl.h index da049f853db..6e8ec0ffb05 100644 --- a/CGAL_ImageIO/include/CGAL/ImageIO_impl.h +++ b/CGAL_ImageIO/include/CGAL/ImageIO_impl.h @@ -168,7 +168,7 @@ unsigned int ImageIO_limit_len(size_t to_be_read) CGAL_INLINE_FUNCTION size_t ImageIO_write(const _image *im, const void *buf, size_t len) { size_t to_be_written = len; - int l = -1; + std::ptrdiff_t l = -1; char *b = (char*)buf; switch(im->openMode) { From 71563a3338618b1fc4ebc6efc3e3013e432e628e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 11 Dec 2018 10:31:12 +0100 Subject: [PATCH 55/74] Fix a [-Wmaybe-uninitialized] warning --- Mesh_3/test/Mesh_3/test_c3t3_with_features.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Mesh_3/test/Mesh_3/test_c3t3_with_features.cpp b/Mesh_3/test/Mesh_3/test_c3t3_with_features.cpp index abb6cdf0909..9255e725f81 100644 --- a/Mesh_3/test/Mesh_3/test_c3t3_with_features.cpp +++ b/Mesh_3/test/Mesh_3/test_c3t3_with_features.cpp @@ -314,7 +314,9 @@ struct Tester // Test edge iterators //------------------------------------------------------- std::cout << "Test edge iterators\n"; - const Edge& edge_to_modify = *(c3t3.edges_in_complex_begin()); + typename C3t3::Edges_in_complex_iterator eit = c3t3.edges_in_complex_begin(); + assert(eit != c3t3.edges_in_complex_end()); + const Edge& edge_to_modify = *eit; c3t3.remove_from_complex(edge_to_modify); c3t3.add_to_complex(edge_to_modify,curve_index_bis); From 548f86b98bba4cd53c8607f55fad6dc3cf6f955f Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 11 Dec 2018 14:35:25 +0100 Subject: [PATCH 56/74] Check stream state before allocating memory. --- Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h index ce5490de872..b5099136f3e 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h @@ -2098,7 +2098,9 @@ private: //------------------------------------------------------- private data CGAL_assertion( (off == "OFF") || (off == "COFF") || (off == "NOFF") || (off == "CNOFF")); is >> n >> f >> e; - + if(!is){ + return false; + } sm.reserve(sm.num_vertices()+n, sm.num_faces()+2*f, sm.num_edges()+e); std::vector vertexmap(n); P p; @@ -2151,6 +2153,10 @@ private: //------------------------------------------------------- private data for(int i=0; i < f; i++){ is >> sm_skip_comments; is >> d; + if(!is){ + sm.clear(); + return false; + } vr.resize(d); for(std::size_t j=0; j> vi; From b04369cc6b78c5f1ccf42b9e36a57f0065931b35 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 11 Dec 2018 14:55:00 +0100 Subject: [PATCH 57/74] Don't assert OFF type --- Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h index b5099136f3e..947c0c8aeae 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h @@ -2095,8 +2095,14 @@ private: //------------------------------------------------------- private data std::string off; is >> sm_skip_comments; is >> off; - CGAL_assertion( (off == "OFF") || (off == "COFF") || (off == "NOFF") || (off == "CNOFF")); - + if(! ( + (off == "OFF") || (off == "COFF") || (off == "NOFF") || (off == "CNOFF") + ) + ) + { + is.setstate(std::ios::failbit); + return false; + } is >> n >> f >> e; if(!is){ return false; From 8f9510c3a469bd2148a3c5f2c55a0badb30a8609 Mon Sep 17 00:00:00 2001 From: albert-github Date: Tue, 11 Dec 2018 19:31:25 +0100 Subject: [PATCH 58/74] XHTML Problems regarding tag sequences XHTML is strict regarding tag sequences (contrary to HTML) in out case most of the times missing or superfluous p tags. --- .../Algebraic_kernel_d/Algebraic_kernel_d.txt | 10 +++--- .../Arrangement_on_surface_2.txt | 4 +-- Documentation/doc/CMakeLists.txt | 2 +- .../doc/resources/1.8.14/BaseDoxyfile.in | 34 +++++++++---------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Algebraic_kernel_d/doc/Algebraic_kernel_d/Algebraic_kernel_d.txt b/Algebraic_kernel_d/doc/Algebraic_kernel_d/Algebraic_kernel_d.txt index 52cdc3b4292..d6082d26967 100644 --- a/Algebraic_kernel_d/doc/Algebraic_kernel_d/Algebraic_kernel_d.txt +++ b/Algebraic_kernel_d/doc/Algebraic_kernel_d/Algebraic_kernel_d.txt @@ -325,27 +325,27 @@ efficiency. The following example illustrates the construction of `AlgebraicKernel_d_1::Algebraic_real_1` using `AlgebraicKernel_d_1::Construct_algebraic_real_1`: -\cgalExample{Algebraic_kernel_d/Construct_algebraic_real_1.cpp} +\cgalExample{Algebraic_kernel_d/Construct_algebraic_real_1.cpp} \subsection CGALAK1Solving Solving Univariate Polynomials The following example illustrates the construction of `AlgebraicKernel_d_1::Algebraic_real_1` -using `AlgebraicKernel_d_1::Solve_1`: \cgalExample{Algebraic_kernel_d/Solve_1.cpp} +using `AlgebraicKernel_d_1::Solve_1`: \cgalExample{Algebraic_kernel_d/Solve_1.cpp} \subsection CGALAK1EGCompare_1 Comparison and Approximation of Algebraic Real Numbers The following example illustrates the comparison of `AlgebraicKernel_d_1::Algebraic_real_1` numbers: -\cgalExample{Algebraic_kernel_d/Compare_1.cpp} +\cgalExample{Algebraic_kernel_d/Compare_1.cpp} \subsection CGALAK1EGIsolate_1 Isolation of Algebraic Real Numbers with respect to roots of other polynomials The following example illustrates the isolation of `AlgebraicKernel_d_1::Algebraic_real_1` numbers: -\cgalExample{Algebraic_kernel_d/Isolate_1.cpp} +\cgalExample{Algebraic_kernel_d/Isolate_1.cpp} \subsection CGALAK1EGSign_at_1 Interplay with Polynomials The following example illustrates the sign evaluation of `AlgebraicKernel_d_1::Algebraic_real_1` numbers in polynomials: -\cgalExample{Algebraic_kernel_d/Sign_at_1.cpp} +\cgalExample{Algebraic_kernel_d/Sign_at_1.cpp} \section Algebraic_kernel_dDesign Design and Implementation History diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt index 719b0deceed..ad8d8120b55 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/Arrangement_on_surface_2.txt @@ -2209,10 +2209,10 @@ representing line segments. A polyline can be constructed given one of the following inputs: -- A range of \a points, where two succeeding points in the +- A range of points, where two succeeding points in the range represent the endpoints of a segment of the polyline. -- A range of \a segments. Note that , if the types +- A range of segments. Note that , if the types `SubcurveTraits_2::Curve_2` and `SubcurveTraits_2::X_monotone_curve_2` are not the same, then when `Make_x_monotone_2` is invoked the segments that compose the polyline will be broken into \f$x\f$-monotone diff --git a/Documentation/doc/CMakeLists.txt b/Documentation/doc/CMakeLists.txt index 3e630a9ae3e..c45057f806d 100644 --- a/Documentation/doc/CMakeLists.txt +++ b/Documentation/doc/CMakeLists.txt @@ -93,7 +93,7 @@ function(configure_doxygen_package CGAL_PACKAGE_NAME) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_INC_PATH = ${CGAL_PACKAGE_DOC_DIR}/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_INC_PATH += ${CGAL_PACKAGE_DIR}/include/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "ALIASES += \"cgalPkgDescriptionBegin{2}=\\details \"\n") - file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "ALIASES += \"cgalPkgManuals{2}=
      \"\n") + file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "ALIASES += \"cgalPkgManuals{2}=
      \"\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "INPUT = ${CGAL_PACKAGE_DOC_DIR}\n") if(NOT EXISTS "${CGAL_PACKAGE_DOC_DIR}/CGAL") # This package has in-source documentation. diff --git a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in index 9bc583f5cd8..77233259e85 100644 --- a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in @@ -242,29 +242,29 @@ ALIASES = "sc{1}=\1File \ref \1 \include \1" \ "cgalFigureAnchor{1}=\anchor fig__\1" \ "cgalFigureRef{1}=\ref fig__\1" \ - "cgalFigureBegin{2}=\anchor fig__\1 ^^ \image html \2 ^^ \image latex \2 \"\" width=15cm ^^ \htmlonly
      \endhtmlonly \latexonly ^^ \endlatexonly ^^ \ref fig__\1" \ - "cgalFigureBegin{3}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=7.5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=7.5cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{4}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=5cm ^^ \image html \4 ^^ \image latex \4 \"\" width=5cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{5}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=3.75cm ^^ \image html \3 ^^ \image latex \3 \"\" width=3.75cm ^^ \image html \4 ^^ \image latex \4 \"\" width=3.75cm ^^ \image html \5 ^^ \image latex \5 \"\" width=3.75cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{6}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=3cm ^^ \image html \3 ^^ \image latex \3 \"\" width=3cm ^^ \image html \4 ^^ \image latex \4 \"\" width=3cm ^^ \image html \5 ^^ \image latex \5 \"\" width=3cm ^^ \image html \6 ^^ \image latex \6 \"\" width=3cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{7}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=2.5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.5cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.5cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.5cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.5cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.5cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{8}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=2.1cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.1cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.1cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.1cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.1cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.1cm ^^ \image html \8 ^^ \image latex \8 \"\" width=2.1cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{9}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=1.9cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.9cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.9cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.9cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.9cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.9cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.9cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.9cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureBegin{10}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=1.6cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.6cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.6cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.6cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.6cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.6cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.6cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.6cm ^^ \image html \10 ^^ \image latex \10 \"\" width=1.6cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureEnd=\htmlonly
      \endhtmlonly
      " \ - "cgalFigureCaptionBegin{1}=\htmlonly
      \endhtmlonly \ref fig__\1" \ - "cgalFigureCaptionEnd=\htmlonly
      \endhtmlonly
      " \ + "cgalFigureBegin{2}=\anchor fig__\1 ^^ \image html \2 ^^ \image latex \2 \"\" width=15cm ^^ \htmlonly[block]
      \endhtmlonly \latexonly ^^ \endlatexonly ^^ \ref fig__\1" \ + "cgalFigureBegin{3}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=7.5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=7.5cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{4}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=5cm ^^ \image html \4 ^^ \image latex \4 \"\" width=5cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{5}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=3.75cm ^^ \image html \3 ^^ \image latex \3 \"\" width=3.75cm ^^ \image html \4 ^^ \image latex \4 \"\" width=3.75cm ^^ \image html \5 ^^ \image latex \5 \"\" width=3.75cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{6}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=3cm ^^ \image html \3 ^^ \image latex \3 \"\" width=3cm ^^ \image html \4 ^^ \image latex \4 \"\" width=3cm ^^ \image html \5 ^^ \image latex \5 \"\" width=3cm ^^ \image html \6 ^^ \image latex \6 \"\" width=3cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{7}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=2.5cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.5cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.5cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.5cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.5cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.5cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{8}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=2.1cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.1cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.1cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.1cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.1cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.1cm ^^ \image html \8 ^^ \image latex \8 \"\" width=2.1cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{9}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=1.9cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.9cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.9cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.9cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.9cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.9cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.9cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.9cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureBegin{10}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=1.6cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.6cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.6cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.6cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.6cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.6cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.6cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.6cm ^^ \image html \10 ^^ \image latex \10 \"\" width=1.6cm ^^
      \htmlonly[block]
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ + "cgalFigureEnd=\htmlonly[block]
      \endhtmlonly
      " \ + "cgalFigureCaptionBegin{1}=\htmlonly[block]
      \endhtmlonly \ref fig__\1" \ + "cgalFigureCaptionEnd=\htmlonly[block]
      \endhtmlonly
      " \ "cgalConcept=\details
      ^^ \brief" \ "cgalConceptNamespace=\details
      ^^ \brief" \ "cgalRefines=\xrefitem refines \"Refines\" \"Refinement Relationships\"" \ "cgalModels=\xrefitem models \"Is Model Of\" \"Is Model Relationships\"" \ "cgalGeneralizes=\xrefitem generalizes \"Generalizes\" \"Generalization Relationships\"" \ "cgalHasModel=\xrefitem hasModels \"Has Models\" \"Has Model Relationships\"" \ - "cgalDebugBegin=\htmlonly
      Debugging Support
      \endhtmlonly ^^" \ - "cgalDebugEnd=\htmlonly
      \endhtmlonly" \ + "cgalDebugBegin=\htmlonly[block]
      Debugging Support
      \endhtmlonly ^^" \ + "cgalDebugEnd=\htmlonly[block]
      \endhtmlonly" \ "cgalDebugFunction=This is a function for debugging purpose." \ - "cgalAdvancedBegin=\htmlonly
      Advanced
      \endhtmlonly ^^" \ - "cgalAdvancedEnd=\htmlonly
      \endhtmlonly" \ + "cgalAdvancedBegin=\htmlonly[block]
      Advanced
      \endhtmlonly ^^" \ + "cgalAdvancedEnd=\htmlonly[block]
      \endhtmlonly" \ "cgalAdvancedFunction=This is an advanced function." \ "cgalAdvancedClass=This is an advanced class." \ "cgalRequiresCPP11=\warning This function requires a C++11 compiler." \ @@ -291,7 +291,7 @@ ALIASES = "sc{1}=\1\1
      " \ - "cgalClassifedRefPages=\htmlonly

      Classified Reference Pages

      \endhtmlonly" \ + "cgalClassifedRefPages=\htmlonly[block]

      Classified Reference Pages

      \endhtmlonly" \ "cgalCite{1}=\cite \1" # This tag can be used to specify a number of word-keyword mappings (TCL only). From 7e42c3064785ad5c62df2df3087de0ba82e441ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 12 Dec 2018 08:24:32 +0100 Subject: [PATCH 59/74] avoid extra `

      ` after figures --- Documentation/doc/resources/1.8.13/BaseDoxyfile.in | 4 ++-- Documentation/doc/resources/1.8.14/BaseDoxyfile.in | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in index 49b2e2c11b3..e3f372bcf3d 100644 --- a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in @@ -250,9 +250,9 @@ ALIASES = "sc{1}=\1
      \image html \2 \n \image latex \2 \"\" width=2.1cm \n \image html \3 \n \image latex \3 \"\" width=2.1cm \n \image html \4 \n \image latex \4 \"\" width=2.1cm \n \image html \5 \n \image latex \5 \"\" width=2.1cm \n \image html \6 \n \image latex \6 \"\" width=2.1cm \n \image html \7 \n \image latex \7 \"\" width=2.1cm \n \image html \8 \n \image latex \8 \"\" width=2.1cm \n
      \htmlonly
      \endhtmlonly \n \latexonly \n \endlatexonly \ref fig__\1" \ "cgalFigureBegin{9}=\anchor fig__\1 \n
      \image html \2 \n \image latex \2 \"\" width=1.9cm \n \image html \3 \n \image latex \3 \"\" width=1.9cm \n \image html \4 \n \image latex \4 \"\" width=1.9cm \n \image html \5 \n \image latex \5 \"\" width=1.9cm \n \image html \6 \n \image latex \6 \"\" width=1.9cm \n \image html \7 \n \image latex \7 \"\" width=1.9cm \n \image html \8 \n \image latex \8 \"\" width=1.9cm \n \image html \9 \n \image latex \9 \"\" width=1.9cm \n
      \htmlonly
      \endhtmlonly \n \latexonly \n \endlatexonly \ref fig__\1" \ "cgalFigureBegin{10}=\anchor fig__\1 \n
      \image html \2 \n \image latex \2 \"\" width=1.6cm \n \image html \3 \n \image latex \3 \"\" width=1.6cm \n \image html \4 \n \image latex \4 \"\" width=1.6cm \n \image html \5 \n \image latex \5 \"\" width=1.6cm \n \image html \6 \n \image latex \6 \"\" width=1.6cm \n \image html \7 \n \image latex \7 \"\" width=1.6cm \n \image html \8 \n \image latex \8 \"\" width=1.6cm \n \image html \9 \n \image latex \9 \"\" width=1.6cm \n \image html \10 \n \image latex \10 \"\" width=1.6cm \n
      \htmlonly
      \endhtmlonly \n \latexonly \n \endlatexonly \ref fig__\1" \ - "cgalFigureEnd=\htmlonly
      \endhtmlonly
      " \ + "cgalFigureEnd=\htmlonly

      \endhtmlonly" \ "cgalFigureCaptionBegin{1}=\htmlonly
      \endhtmlonly \ref fig__\1" \ - "cgalFigureCaptionEnd=\htmlonly
      \endhtmlonly
      " \ + "cgalFigureCaptionEnd=\htmlonly

      \endhtmlonly" \ "cgalConcept=\details
      \n \brief" \ "cgalConceptNamespace=\details
      \n \brief" \ "cgalRefines=\xrefitem refines \"Refines\" \"Refinement Relationships\"" \ diff --git a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in index 9bc583f5cd8..a9141040bc6 100644 --- a/Documentation/doc/resources/1.8.14/BaseDoxyfile.in +++ b/Documentation/doc/resources/1.8.14/BaseDoxyfile.in @@ -251,9 +251,9 @@ ALIASES = "sc{1}=\1
      \image html \2 ^^ \image latex \2 \"\" width=2.1cm ^^ \image html \3 ^^ \image latex \3 \"\" width=2.1cm ^^ \image html \4 ^^ \image latex \4 \"\" width=2.1cm ^^ \image html \5 ^^ \image latex \5 \"\" width=2.1cm ^^ \image html \6 ^^ \image latex \6 \"\" width=2.1cm ^^ \image html \7 ^^ \image latex \7 \"\" width=2.1cm ^^ \image html \8 ^^ \image latex \8 \"\" width=2.1cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ "cgalFigureBegin{9}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=1.9cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.9cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.9cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.9cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.9cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.9cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.9cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.9cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ "cgalFigureBegin{10}=\anchor fig__\1 ^^
      \image html \2 ^^ \image latex \2 \"\" width=1.6cm ^^ \image html \3 ^^ \image latex \3 \"\" width=1.6cm ^^ \image html \4 ^^ \image latex \4 \"\" width=1.6cm ^^ \image html \5 ^^ \image latex \5 \"\" width=1.6cm ^^ \image html \6 ^^ \image latex \6 \"\" width=1.6cm ^^ \image html \7 ^^ \image latex \7 \"\" width=1.6cm ^^ \image html \8 ^^ \image latex \8 \"\" width=1.6cm ^^ \image html \9 ^^ \image latex \9 \"\" width=1.6cm ^^ \image html \10 ^^ \image latex \10 \"\" width=1.6cm ^^
      \htmlonly
      \endhtmlonly ^^ \latexonly ^^ \endlatexonly \ref fig__\1" \ - "cgalFigureEnd=\htmlonly
      \endhtmlonly
      " \ + "cgalFigureEnd=\htmlonly

      \endhtmlonly" \ "cgalFigureCaptionBegin{1}=\htmlonly
      \endhtmlonly \ref fig__\1" \ - "cgalFigureCaptionEnd=\htmlonly
      \endhtmlonly
      " \ + "cgalFigureCaptionEnd=\htmlonly

      \endhtmlonly" \ "cgalConcept=\details
      ^^ \brief" \ "cgalConceptNamespace=\details
      ^^ \brief" \ "cgalRefines=\xrefitem refines \"Refines\" \"Refinement Relationships\"" \ From b56aaa769c0c7e199481010a784c4fe472b81fc0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 12 Dec 2018 11:50:19 +0100 Subject: [PATCH 60/74] Fix Issue #3536 --- Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h b/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h index d189bb8367f..a93f3b86950 100644 --- a/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h +++ b/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h @@ -363,19 +363,6 @@ operator<<(Geomview_stream& gs, const Bbox_2& b); Geomview_stream& operator<<(Geomview_stream& gs, const Bbox_3& b); -/*! - Inserts the bounding box `b` into the stream `gs`. - \relates Geomview_stream -*/ -Geomview_stream& -operator<<(Geomview_stream& gs, const Bbox_3& b); - -/*! - Inserts the bounding box `b` into the stream `gs`. - \relates Geomview_stream -*/ -Geomview_stream& -operator<<(Geomview_stream& gs, const Bbox_3& b); /// @} From 7a04091d4a0f53e9b551aa5f4738c6bf77000002 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 12 Dec 2018 14:31:50 +0100 Subject: [PATCH 61/74] Add offset from vtk --- CGAL_ImageIO/include/CGAL/read_vtk_image_data.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h b/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h index 2c28a44c25a..c592d3a0be2 100644 --- a/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h +++ b/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h @@ -63,6 +63,7 @@ read_vtk_image_data(vtkImageData* vtk_image) _image* image = ::_initImage(); const int* dims = vtk_image->GetDimensions(); const double* spacing = vtk_image->GetSpacing(); + const double* offset = vtk_image->GetOrigin(); image->vectMode = VM_SCALAR; image->xdim = dims[0]; image->ydim = dims[1]; @@ -71,6 +72,9 @@ read_vtk_image_data(vtkImageData* vtk_image) image->vx = spacing[0]; image->vy = spacing[1]; image->vz = spacing[2]; + image->tx = offset[0]; + image->ty = offset[1]; + image->tz = offset[2]; image->endianness = ::_getEndianness(); int vtk_type = vtk_image->GetScalarType(); if(vtk_type == VTK_SIGNED_CHAR) vtk_type = VTK_CHAR; From c8dcfbf64dcd0291cb40b006f22a48a07dcaa9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 13 Dec 2018 08:51:06 +0100 Subject: [PATCH 62/74] remove duplicate definition --- .../Concepts/OptimalTransportationReconstructionTraits_2.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/Concepts/OptimalTransportationReconstructionTraits_2.h b/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/Concepts/OptimalTransportationReconstructionTraits_2.h index 04c9035a830..54551b8a64d 100644 --- a/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/Concepts/OptimalTransportationReconstructionTraits_2.h +++ b/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/Concepts/OptimalTransportationReconstructionTraits_2.h @@ -149,7 +149,6 @@ public: /// @{ Construct_point_2 construct_point_2_object(); Construct_vector_2 construct_vector_2_object(); - Construct_vector_2 construct_vector_2_object(); Construct_line_2 construct_line_2_object(); Construct_translated_point_2 construct_translated_point_2_object(); Construct_scaled_vector_2 construct_scaled_vector_2_object(); From ea7c64b8b2040ea7d6222d67daf14dc66c9bec17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 13 Dec 2018 08:53:54 +0100 Subject: [PATCH 63/74] 3 -> 2 --- .../Point_set_shape_detection_3/Concepts/ShapeDetectionTraits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/Concepts/ShapeDetectionTraits.h b/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/Concepts/ShapeDetectionTraits.h index 44db0198c28..acbb8d24111 100644 --- a/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/Concepts/ShapeDetectionTraits.h +++ b/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/Concepts/ShapeDetectionTraits.h @@ -35,7 +35,7 @@ public: /// The circle type, only required if you want to detect tori typedef unspecified_type Circle_2; /// The 2D vector type, only required if you want to detect tori - typedef unspecified_type Vector_3; + typedef unspecified_type Vector_2; /// The number type of the Cartesian coordinates of types Point_3 typedef unspecified_type FT; From dfdfc8633783f982449dbeb38e748948e5cc7d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 13 Dec 2018 08:56:25 +0100 Subject: [PATCH 64/74] fix duplicate --- .../doc/Arrangement_on_surface_2/CGAL/Arr_observer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h index 20c9cfbecb7..a80e03569ff 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h @@ -167,7 +167,7 @@ virtual void before_detach (); issued immediately after the observer has been detached from its arrangement instance. */ -virtual void after_attach (); +virtual void after_detach (); /// @} From 266fee1c4c4292638ac49c2600477b2fdf90cac4 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 12 Dec 2018 11:54:18 +0100 Subject: [PATCH 65/74] Check for uniqueness of the vertices in add_face --- BGL/include/CGAL/boost/graph/Euler_operations.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/BGL/include/CGAL/boost/graph/Euler_operations.h b/BGL/include/CGAL/boost/graph/Euler_operations.h index 56d92e979ee..f7d8e2f9dcb 100644 --- a/BGL/include/CGAL/boost/graph/Euler_operations.h +++ b/BGL/include/CGAL/boost/graph/Euler_operations.h @@ -585,6 +585,12 @@ add_face(const VertexRange& vr, Graph& g) std::vector vertices(vr.begin(), vr.end()); // quick and dirty copy unsigned int n = (unsigned int)vertices.size(); + //check that every vertex is unique + std::sort(vertices.begin(), vertices.end()); + if(std::unique(vertices.begin(), vertices.end()) != vertices.end()) + return boost::graph_traits::null_face(); + vertices.clear(); + vertices=std::vector(vr.begin(), vr.end()); // don't allow degenerated faces CGAL_assertion(n > 2); From 31b68de8b2290d19facec25fb84a4ad7b8506638 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 12 Dec 2018 14:53:01 +0100 Subject: [PATCH 66/74] use std::copy and adjacent_find --- BGL/include/CGAL/boost/graph/Euler_operations.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/Euler_operations.h b/BGL/include/CGAL/boost/graph/Euler_operations.h index f7d8e2f9dcb..1375e41c68a 100644 --- a/BGL/include/CGAL/boost/graph/Euler_operations.h +++ b/BGL/include/CGAL/boost/graph/Euler_operations.h @@ -587,10 +587,9 @@ add_face(const VertexRange& vr, Graph& g) unsigned int n = (unsigned int)vertices.size(); //check that every vertex is unique std::sort(vertices.begin(), vertices.end()); - if(std::unique(vertices.begin(), vertices.end()) != vertices.end()) + if(std::adjacent_find(vertices.begin(), vertices.end()) != vertices.end()) return boost::graph_traits::null_face(); - vertices.clear(); - vertices=std::vector(vr.begin(), vr.end()); + std::copy(vr.begin(), vr.end(), vertices.begin()); // don't allow degenerated faces CGAL_assertion(n > 2); From 51f8877e60f5f37bd1c70bd4ce6b851f8ecf1c1a Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 13 Dec 2018 09:17:46 +0100 Subject: [PATCH 67/74] Replace the assertion about n>2 by a if --- BGL/include/CGAL/boost/graph/Euler_operations.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/Euler_operations.h b/BGL/include/CGAL/boost/graph/Euler_operations.h index 1375e41c68a..04b415b207c 100644 --- a/BGL/include/CGAL/boost/graph/Euler_operations.h +++ b/BGL/include/CGAL/boost/graph/Euler_operations.h @@ -587,11 +587,14 @@ add_face(const VertexRange& vr, Graph& g) unsigned int n = (unsigned int)vertices.size(); //check that every vertex is unique std::sort(vertices.begin(), vertices.end()); - if(std::adjacent_find(vertices.begin(), vertices.end()) != vertices.end()) + if(std::adjacent_find(vertices.begin(), vertices.end()) != vertices.end()){ return boost::graph_traits::null_face(); + } std::copy(vr.begin(), vr.end(), vertices.begin()); // don't allow degenerated faces - CGAL_assertion(n > 2); + if(n <= 2){ + return boost::graph_traits::null_face(); + } std::vector halfedges(n); std::vector is_new(n); From c51852f8a1dfcba2a9ef06f7f54bd4bac88cb69f Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 13 Dec 2018 09:34:05 +0100 Subject: [PATCH 68/74] Add check in collect_garbage() --- Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h index ce5490de872..004831a2ac0 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h @@ -2482,6 +2482,11 @@ void Surface_mesh

      :: collect_garbage() { + if (!has_garbage()) + { + return; + } + int i, i0, i1, nV(num_vertices()), nE(num_edges()), From e1d5552de7635416af53acbb54402bc2701e5da0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 13 Dec 2018 09:39:48 +0100 Subject: [PATCH 69/74] Do not call deprecated code. Add a test file for the deprecated code --- .../Plugins/PCA/Basic_generator_plugin.cpp | 4 +- .../Principal_component_analysis/Scene.cpp | 2 +- .../subdivision_methods_3.h | 32 +- .../test_Subdivision_method_3.cpp | 28 +- .../test_deprecated_Subdivision_method_3.cpp | 362 ++++++++++++++++++ 5 files changed, 406 insertions(+), 22 deletions(-) create mode 100644 Subdivision_method_3/test/Subdivision_method_3/test_deprecated_Subdivision_method_3.cpp diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp index e5242bd41bf..d1754a52afd 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp @@ -34,6 +34,8 @@ typedef Kernel::Point_3 Point; namespace euler = CGAL::Euler; using namespace CGAL::Three; +namespace params = CGAL::parameters; + class Q_DECL_EXPORT Basic_generator_plugin : public QObject, public Polyhedron_demo_plugin_helper @@ -548,7 +550,7 @@ void Basic_generator_plugin::generateSphere() typedef typename boost::property_map::type VPMap; if(precision !=0) CGAL::Subdivision_method_3::Sqrt3_subdivision(sphere, - precision); + params::number_of_iterations(precision)); VPMap vpmap = get(CGAL::vertex_point, sphere); //emplace the points back on the sphere BOOST_FOREACH(typename boost::graph_traits::vertex_descriptor vd, vertices(sphere)) diff --git a/Principal_component_analysis/demo/Principal_component_analysis/Scene.cpp b/Principal_component_analysis/demo/Principal_component_analysis/Scene.cpp index 38a89df8036..129799a7aa3 100644 --- a/Principal_component_analysis/demo/Principal_component_analysis/Scene.cpp +++ b/Principal_component_analysis/demo/Principal_component_analysis/Scene.cpp @@ -225,7 +225,7 @@ void Scene::refine_loop() return; } std::cout << "Loop subdivision..."; - CGAL::Subdivision_method_3::Loop_subdivision(*m_pPolyhedron, 1); + CGAL::Subdivision_method_3::Loop_subdivision(*m_pPolyhedron); std::cout << "done (" << m_pPolyhedron->size_of_facets() << " facets)" << std::endl; } diff --git a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h index 41355110f38..f8bb8d8a064 100644 --- a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h +++ b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_methods_3.h @@ -98,7 +98,7 @@ namespace parameters = CGAL::parameters; #ifndef CGAL_NO_DEPRECATED_CODE template CGAL_DEPRECATED_MSG("you are using the deprecated API of CatmullClark_subdivision(), please update your code") -void CatmullClark_subdivision(PolygonMesh& pmesh, int step = 1) { +void CatmullClark_subdivision(PolygonMesh& pmesh, int step) { PQQ(pmesh, CatmullClark_mask_3(&pmesh, get(vertex_point,pmesh)), step); } #endif @@ -141,6 +141,11 @@ void CatmullClark_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { internal::PQQ_1step(pmesh, vpm, mask); } +template +void CatmullClark_subdivision(PolygonMesh& pmesh) +{ + CatmullClark_subdivision(pmesh, CGAL::parameters::all_default()); +} // ----------------------------------------------------------------------------- #ifndef DOXYGEN_RUNNING @@ -148,7 +153,7 @@ void CatmullClark_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { #ifndef CGAL_NO_DEPRECATED_CODE template CGAL_DEPRECATED_MSG("you are using the deprecated API of Loop_subdivision(), please update your code") -void Loop_subdivision(PolygonMesh& pmesh, int step = 1) { +void Loop_subdivision(PolygonMesh& pmesh, int step) { PTQ(pmesh, Loop_mask_3(&pmesh, get(vertex_point,pmesh)) , step); } #endif @@ -189,6 +194,11 @@ void Loop_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { internal::PTQ_1step(pmesh, vpm, mask); } +template +void Loop_subdivision(PolygonMesh& pmesh) +{ + Loop_subdivision(pmesh, CGAL::parameters::all_default()); +} // ----------------------------------------------------------------------------- #ifndef DOXYGEN_RUNNING @@ -196,7 +206,7 @@ void Loop_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { #ifndef CGAL_NO_DEPRECATED_CODE template CGAL_DEPRECATED_MSG("you are using the deprecated API of DooSabin_subdivision(), please update your code") -void DooSabin_subdivision(PolygonMesh& pmesh, int step = 1) { +void DooSabin_subdivision(PolygonMesh& pmesh, int step) { DQQ(pmesh, DooSabin_mask_3(&pmesh, get(vertex_point, pmesh)), step); } #endif @@ -236,7 +246,12 @@ void DooSabin_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { for(unsigned int i = 0; i < step; i++) internal::DQQ_1step(pmesh, vpm, mask); } - + +template +void DooSabin_subdivision(PolygonMesh& pmesh) +{ + DooSabin_subdivision(pmesh, CGAL::parameters::all_default()); +} // ----------------------------------------------------------------------------- #ifndef DOXYGEN_RUNNING @@ -244,7 +259,7 @@ void DooSabin_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { #ifndef CGAL_NO_DEPRECATED_CODE template CGAL_DEPRECATED_MSG("you are using the deprecated API of Sqrt3_subdivision(), please update your code") -void Sqrt3_subdivision(PolygonMesh& pmesh, int step = 1) { +void Sqrt3_subdivision(PolygonMesh& pmesh, int step) { Sqrt3(pmesh, Sqrt3_mask_3(&pmesh, get(vertex_point,pmesh)), step); } #endif @@ -289,7 +304,12 @@ void Sqrt3_subdivision(PolygonMesh& pmesh, const NamedParameters& np) { for(unsigned int i = 0; i < step; i++) internal::Sqrt3_1step(pmesh, vpm, mask, (i%2==1)); } - + +template +void Sqrt3_subdivision(PolygonMesh& pmesh) +{ + Sqrt3_subdivision(pmesh, CGAL::parameters::all_default()); +} /// @} } // namespace Subdivision_method_3 diff --git a/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp b/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp index 7b0e8f399e5..f809086515e 100644 --- a/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp +++ b/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp @@ -57,7 +57,7 @@ void test_Subdivision_surface_3() { Polyhedron P; mesh >> P; - Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + Subdivision_method_3::CatmullClark_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -68,7 +68,7 @@ void test_Subdivision_surface_3() { Polyhedron P; mesh >> P; - Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + Subdivision_method_3::CatmullClark_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -80,7 +80,7 @@ void test_Subdivision_surface_3() { Polyhedron P; mesh >> P; - Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Loop_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -91,7 +91,7 @@ void test_Subdivision_surface_3() { Polyhedron P; mesh >> P; - Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Loop_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -102,7 +102,7 @@ void test_Subdivision_surface_3() { Polyhedron P; mesh >> P; - Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + Subdivision_method_3::DooSabin_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -113,7 +113,7 @@ void test_Subdivision_surface_3() { Polyhedron P; mesh >> P; - Subdivision_method_3::Sqrt3_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Sqrt3_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } } @@ -129,7 +129,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + Subdivision_method_3::CatmullClark_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -140,7 +140,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + Subdivision_method_3::CatmullClark_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -152,7 +152,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Loop_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -163,7 +163,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Loop_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -174,7 +174,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + Subdivision_method_3::DooSabin_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P, true)); } @@ -185,7 +185,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + Subdivision_method_3::DooSabin_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -196,7 +196,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::Sqrt3_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Sqrt3_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } @@ -207,7 +207,7 @@ void test_Subdivision_surface_3_SM() { Polyhedron P; mesh >> P; - Subdivision_method_3::Sqrt3_subdivision(P,TEST_DEPTH); + Subdivision_method_3::Sqrt3_subdivision(P); assert(CGAL::is_valid_polygon_mesh(P)); } } diff --git a/Subdivision_method_3/test/Subdivision_method_3/test_deprecated_Subdivision_method_3.cpp b/Subdivision_method_3/test/Subdivision_method_3/test_deprecated_Subdivision_method_3.cpp new file mode 100644 index 00000000000..c8a6c85c632 --- /dev/null +++ b/Subdivision_method_3/test/Subdivision_method_3/test_deprecated_Subdivision_method_3.cpp @@ -0,0 +1,362 @@ +#include +// ============================================================================ +// +// Copyright (c) 2005-2006, 2017 Le-Jeng Shiue +// +// This software and related documentation is part of an INTERNAL release +// of the Computational Geometry Algorithms Library (CGAL). It is not +// intended for general use. +// +// ---------------------------------------------------------------------------- +// +// release : $CGAL_Revision: $ +// release_date : $CGAL_Date: $ +// +// file : test/Subdivision_method_3/test_Subdivision_method_3.C +// package : Subdivision_method_3 +// chapter : Subdivision Method +// +// revision : $Id$ +// revision_date : $Date$ +// +// author(s) : Le-Jeng Shiue +// +// Test subdivision methods +// ============================================================================ + +#include +#include +#include + +#include + +#include +#include +#include + +using namespace std; +using namespace CGAL; + +#define TEST_DEPTH (3) + +//#define TESTMESH_GENERAL "data/??.off" + +#define TESTMESH_QUAD "data/corner.off" +#define TESTMESH_QUAD_OPEN "data/corner_with_hole.off" + +#define TESTMESH_TRI "data/quint_tris.off" +#define TESTMESH_TRI_OPEN "data/nefertiti.off" + +void test_Subdivision_surface_3() { + typedef CGAL::Simple_cartesian Kernel; + typedef CGAL::Polyhedron_3 Polyhedron; + + // test Catmull-Clark subdivision on quad mesh + { + ifstream mesh(TESTMESH_QUAD); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Catmull-Clark subdivision on 'opened' quad mesh + { + ifstream mesh(TESTMESH_QUAD_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + + // test Loop subdivision on tri mesh + { + ifstream mesh(TESTMESH_TRI); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Loop subdivision on 'opened' tri mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Doo-Sabin subdivision on general mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Sqrt-3 subdivision on tri mesh + { + ifstream mesh(TESTMESH_TRI); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Sqrt3_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } +} + +void test_Subdivision_surface_3_SM() { + typedef CGAL::Simple_cartesian Kernel; + typedef CGAL::Surface_mesh Polyhedron; + + // test Catmull-Clark subdivision on quad mesh + { + ifstream mesh(TESTMESH_QUAD); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Catmull-Clark subdivision on 'opened' quad mesh + { + ifstream mesh(TESTMESH_QUAD_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::CatmullClark_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + + // test Loop subdivision on tri mesh + { + ifstream mesh(TESTMESH_TRI); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Loop subdivision on 'opened' tri mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Loop_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Doo-Sabin subdivision on general mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P, true)); + } + + // test Doo-Sabin subdivision on 'opened' quad mesh + { + ifstream mesh(TESTMESH_QUAD_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Sqrt-3 subdivision on tri mesh + { + ifstream mesh(TESTMESH_TRI); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Sqrt3_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Sqrt-3 subdivision on 'opened' tri mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Sqrt3_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } +} + +void test_Subdivision_surface_3_SM_NP() { + typedef CGAL::Simple_cartesian Kernel; + typedef CGAL::Surface_mesh Polyhedron; + + // test Catmull-Clark subdivision on quad mesh + { + ifstream mesh(TESTMESH_QUAD); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::CatmullClark_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Catmull-Clark subdivision on 'opened' quad mesh + { + ifstream mesh(TESTMESH_QUAD_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::CatmullClark_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + + // test Loop subdivision on tri mesh + { + ifstream mesh(TESTMESH_TRI); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Loop_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Loop subdivision on 'opened' tri mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Loop_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Doo-Sabin subdivision on 'opened' tri mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::DooSabin_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Doo-Sabin subdivision on 'opened' quad mesh + { + ifstream mesh(TESTMESH_QUAD_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Sqrt-3 subdivision on tri mesh + { + ifstream mesh(TESTMESH_TRI); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Sqrt3_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Sqrt-3 subdivision on 'opened' tri mesh + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + Subdivision_method_3::Sqrt3_subdivision(P,Subdivision_method_3::parameters::vertex_point_map(get(vertex_point, P)) + .number_of_iterations(TEST_DEPTH)); + + std::ofstream out("out_0.off"); + out << P; + + assert(CGAL::is_valid_polygon_mesh(P)); + } + + // test Sqrt-3 subdivision on 'opened' tri mesh & with external property map + { + ifstream mesh(TESTMESH_TRI_OPEN); + + Polyhedron P; + mesh >> P; + + typedef Kernel::Point_3 Point; + typedef Kernel::Vector_3 Vector; + + typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + typedef boost::unordered_map Point_pmap; + typedef boost::associative_property_map APM; + typedef boost::property_map::type VPM; + + Point_pmap um; + APM apm(um); + VPM vpm = get(vertex_point, P); + + // some arbitrary new coordinates (different from the internal vpm) + BOOST_FOREACH(vertex_descriptor vd, vertices(P)) { + boost::property_traits::reference pt = get(vpm, vd); + Vector v = pt - Point(0., 0., -3.); + put(apm, vd, pt + 0.5*v); + } + + Subdivision_method_3::Sqrt3_subdivision(P, + Subdivision_method_3::parameters::vertex_point_map(apm) + .number_of_iterations(TEST_DEPTH)); + + assert(CGAL::is_valid_polygon_mesh(P)); + } +} + +int main() { + test_Subdivision_surface_3(); + test_Subdivision_surface_3_SM(); + test_Subdivision_surface_3_SM_NP(); + std::cerr << "Done" << std::endl; + return 0; +} +// EOF // From 10e11e6eb2cc2b26ab49c5da829b2ea6deb96d67 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 13 Dec 2018 09:43:14 +0100 Subject: [PATCH 70/74] Do not call deprecated code. Add a test file for the deprecated code --- AABB_tree/demo/AABB_tree/Scene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AABB_tree/demo/AABB_tree/Scene.cpp b/AABB_tree/demo/AABB_tree/Scene.cpp index 7a416bbde35..6303fb2140b 100644 --- a/AABB_tree/demo/AABB_tree/Scene.cpp +++ b/AABB_tree/demo/AABB_tree/Scene.cpp @@ -1297,7 +1297,7 @@ void Scene::refine_loop() return; } std::cout << "Loop subdivision..."; - CGAL::Subdivision_method_3::Loop_subdivision(*m_pPolyhedron, 1); + CGAL::Subdivision_method_3::Loop_subdivision(*m_pPolyhedron); std::cout << "done (" << m_pPolyhedron->size_of_facets() << " facets)" << std::endl; clear_internal_data(); From f6e83cd23e976bdd620083fd2da2adbbc8d2be54 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 13 Dec 2018 10:59:00 +0100 Subject: [PATCH 71/74] Move the definition of CGAL_USE_FILE in case of early return() --- Installation/lib/cmake/CGAL/CGALConfig.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Installation/lib/cmake/CGAL/CGALConfig.cmake b/Installation/lib/cmake/CGAL/CGALConfig.cmake index ad0de1806ca..0fa343ba78c 100644 --- a/Installation/lib/cmake/CGAL/CGALConfig.cmake +++ b/Installation/lib/cmake/CGAL/CGALConfig.cmake @@ -73,6 +73,9 @@ include(${CGAL_MODULES_DIR}/CGAL_CreateSingleSourceCGALProgram.cmake) include(${CGAL_MODULES_DIR}/CGAL_Macros.cmake) include(${CGAL_MODULES_DIR}/CGAL_Common.cmake) +set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) + + if(CGAL_BUILDING_LIBS) foreach(comp ${CGAL_FIND_COMPONENTS}) if(CGAL_${comp}_FOUND) @@ -146,8 +149,6 @@ endforeach() # Temporary? Change the CMAKE module path cgal_setup_module_path() -set(CGAL_USE_FILE ${CGAL_MODULES_DIR}/UseCGAL.cmake) - include("${CGAL_MODULES_DIR}/CGAL_parse_version_h.cmake") cgal_parse_version_h( "${CGAL_INSTALLATION_PACKAGE_DIR}/include/CGAL/version.h" "CGAL_VERSION_NAME" From 57fd9818c7205e265c1c277ec07daa6acf49dad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 14 Dec 2018 07:51:04 +0100 Subject: [PATCH 72/74] exclude fig_src from being parsed --- QP_solver/doc/QP_solver/Doxyfile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/QP_solver/doc/QP_solver/Doxyfile.in b/QP_solver/doc/QP_solver/Doxyfile.in index b3330c4cb4e..5d8e054a416 100644 --- a/QP_solver/doc/QP_solver/Doxyfile.in +++ b/QP_solver/doc/QP_solver/Doxyfile.in @@ -1,3 +1,5 @@ @INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - Linear and Quadratic Programming Solver" + +EXCLUDE = ${CGAL_PACKAGE_DOC_DIR}/fig_src From 73e3457f3f07416e9fb894a3a9e92ce1b9da340e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 14 Dec 2018 08:20:37 +0100 Subject: [PATCH 73/74] One warning was left --- .../test/Subdivision_method_3/test_Subdivision_method_3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp b/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp index f809086515e..b467aea5e90 100644 --- a/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp +++ b/Subdivision_method_3/test/Subdivision_method_3/test_Subdivision_method_3.cpp @@ -284,7 +284,7 @@ void test_Subdivision_surface_3_SM_NP() { Polyhedron P; mesh >> P; - Subdivision_method_3::DooSabin_subdivision(P,TEST_DEPTH); + Subdivision_method_3::DooSabin_subdivision(P,Subdivision_method_3::parameters::number_of_iterations(TEST_DEPTH)); assert(CGAL::is_valid_polygon_mesh(P)); } From 1efb1d51624d5a761c229dbf2c28ad8e2fa238f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 14 Dec 2018 08:27:19 +0100 Subject: [PATCH 74/74] change kernel to avoid conflict with master --- .../test/Polygon_mesh_processing/test_stitching.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp index 30c3f317026..4fba64559f6 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp @@ -105,7 +105,7 @@ void test_surface_mesh_cc(const char* fname) void bug_test() { - typedef Epic K; + typedef CGAL::Simple_cartesian K; typedef K::Point_3 Point_3; CGAL::Surface_mesh tm;