From: Marco Feder Date: Sat, 7 May 2022 19:36:46 +0000 (+0300) Subject: Conversion from CGAL surface to deal.II tria X-Git-Tag: v9.4.0-rc1~260^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F13664%2Fhead;p=dealii.git Conversion from CGAL surface to deal.II tria --- diff --git a/doc/news/changes/major/20220426FederHeltai b/doc/news/changes/major/20220426FederHeltai index 9ab09a7ea3..f920cdad5c 100644 --- a/doc/news/changes/major/20220426FederHeltai +++ b/doc/news/changes/major/20220426FederHeltai @@ -7,6 +7,7 @@ are supported:
  • Insertion of deal.II points in CGAL triangulation types
  • Conversion from CGAL::Triangulation_2 to Triangulation
  • Conversion from CGAL::Triangulation_3 to Triangulation
  • +
  • Conversion from CGAL::Surface_mesh or CGAL::Polyhedron_3 to Triangulation<2, 3>

  • (Marco Feder, Luca Heltai, 2022/04/26) diff --git a/include/deal.II/cgal/triangulation.h b/include/deal.II/cgal/triangulation.h index 0c8f98476b..ffce229d39 100644 --- a/include/deal.II/cgal/triangulation.h +++ b/include/deal.II/cgal/triangulation.h @@ -24,7 +24,9 @@ # include +# include # include +# include # include # include @@ -104,6 +106,32 @@ namespace CGALWrappers const CGALTriangulation & cgal_triangulation, Triangulation &dealii_triangulation); + /** + * Construct a deal.II surface triangulation starting from a + * CGAL::Surface_mesh or a CGAL::Polyhedron_3. + * + * These types can both represent a polyhedral surface made of general + * polygons. deal.II only supports triangle or quadrilateral triangulations, + * and this function will throw an exception if the input surface mesh + * contains polygonal faces with more than 4 vertices per face. + * + * CGAL orients the faces of a polyhedral surface in a counter clock-wise + * w.r.t. to the material side of the surface, i.e., the normal is directed + * towards the outside of the surface if the surface is closed and represents + * a bounded domain. The opposite orientation is also perfectly valid, and + * would represent an unbounded domain complementary to the region + * represented by the surface. This function does not change the orientation + * of the surface mesh and will produce a triangulation with the same + * orientation of the input mesh. + * + * @param[in] cgal_mesh The input CGAL surface mesh. + * @param[out] triangulation The output deal.II triangulation. + */ + template + void + cgal_surface_mesh_to_dealii_triangulation(const CGAL_MeshType &cgal_mesh, + Triangulation<2, 3> &triangulation); + # ifndef DOXYGEN @@ -195,7 +223,7 @@ namespace CGALWrappers // This is a degenerate Triangulation_2, made of edges for (const auto &e : cgal_triangulation.finite_edges()) { - // An edge is idenfied by a face and a vertex index in the face + // An edge is idendified by a face and a vertex index in the face const auto & f = e.first; const auto & i = e.second; CellData cell(ReferenceCells::Line.n_vertices()); @@ -270,6 +298,122 @@ namespace CGALWrappers } dealii_triangulation.create_triangulation(vertices, cells, subcell_data); } + + + + template + void + cgal_surface_mesh_to_dealii_triangulation(const CGAL_MeshType &cgal_mesh, + Triangulation<2, 3> &triangulation) + { + Assert(triangulation.n_cells() == 0, + ExcMessage( + "Triangulation must be empty upon calling this function.")); + + const auto is_surface_mesh = + boost::hana::is_valid([](auto &&obj) -> decltype(obj.faces()) {}); + + const auto is_polyhedral = + boost::hana::is_valid([](auto &&obj) -> decltype(obj.facets_begin()) {}); + + // Collect Vertices and cells + std::vector> vertices; + std::vector> cells; + SubCellData subcell_data; + + // Different loops for Polyhedron or Surface_mesh types + if constexpr (decltype(is_surface_mesh(cgal_mesh)){}) + { + AssertThrow(cgal_mesh.num_vertices() > 0, + ExcMessage("CGAL surface mesh is empty.")); + vertices.reserve(cgal_mesh.num_vertices()); + std::map vertex_map; + { + unsigned int i = 0; + for (const auto &v : cgal_mesh.vertices()) + { + vertices.emplace_back(CGALWrappers::cgal_point_to_dealii_point<3>( + cgal_mesh.point(v))); + vertex_map[v] = i++; + } + } + + // Collect CellData + for (const auto &face : cgal_mesh.faces()) + { + const auto face_vertices = + CGAL::vertices_around_face(cgal_mesh.halfedge(face), cgal_mesh); + + AssertThrow(face_vertices.size() == 3 || face_vertices.size() == 4, + ExcMessage("Only triangle or quadrilateral surface " + "meshes are supported in deal.II")); + + CellData<2> c(face_vertices.size()); + auto it_vertex = c.vertices.begin(); + for (const auto &v : face_vertices) + *(it_vertex++) = vertex_map[v]; + + // Make sure the numberfing is consistent with the one in deal.II + if (face_vertices.size() == 4) + std::swap(c.vertices[3], c.vertices[2]); + + cells.emplace_back(c); + } + } + else if constexpr (decltype(is_polyhedral(cgal_mesh)){}) + { + AssertThrow(cgal_mesh.size_of_vertices() > 0, + ExcMessage("CGAL surface mesh is empty.")); + vertices.reserve(cgal_mesh.size_of_vertices()); + std::map vertex_map; + { + unsigned int i = 0; + for (auto it = cgal_mesh.vertices_begin(); + it != cgal_mesh.vertices_end(); + ++it) + { + vertices.emplace_back( + CGALWrappers::cgal_point_to_dealii_point<3>(it->point())); + vertex_map[it] = i++; + } + } + + // Loop over faces of Polyhedron, fill CellData + for (auto face = cgal_mesh.facets_begin(); + face != cgal_mesh.facets_end(); + ++face) + { + auto j = face->facet_begin(); + const unsigned int vertices_per_face = CGAL::circulator_size(j); + AssertThrow(vertices_per_face == 3 || vertices_per_face == 4, + ExcMessage("Only triangle or quadrilateral surface " + "meshes are supported in deal.II. You " + "tried to read a mesh where a face has " + + std::to_string(vertices_per_face) + + " vertices per face.")); + + CellData<2> c(vertices_per_face); + auto it = c.vertices.begin(); + for (unsigned int i = 0; i < vertices_per_face; ++i) + { + *(it++) = vertex_map[j->vertex()]; + ++j; + } + + if (vertices_per_face == 4) + std::swap(c.vertices[3], c.vertices[2]); + + cells.emplace_back(c); + } + } + else + { + AssertThrow(false, + ExcInternalError( + "Unsupported CGAL surface triangulation type.")); + } + triangulation.create_triangulation(vertices, cells, subcell_data); + } # endif } // namespace CGALWrappers diff --git a/tests/cgal/cgal_surface_triangulation_01.cc b/tests/cgal/cgal_surface_triangulation_01.cc new file mode 100644 index 0000000000..2a40b8b0f7 --- /dev/null +++ b/tests/cgal/cgal_surface_triangulation_01.cc @@ -0,0 +1,63 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2022 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +// Convert a closed CGAL::Surface_mesh or a closed CGAL::Polyhedron_3 to a +// deal.II triangulation. The input mesh is a quad torus. + +#include + +#include +#include +#include + +#include +#include + +#include + +#include "../tests.h" + +using namespace CGALWrappers; +using Kernel = CGAL::Simple_cartesian; +using CGALPoint = CGAL::Point_3; +using Mesh = CGAL::Surface_mesh; +using Polyhedron = CGAL::Polyhedron_3; + +int +main() +{ + initlog(); + Triangulation<2, 3> tria; + GridOut go; + { + deallog << "Surface mesh" << std::endl; + Mesh sm; + std::ifstream input_sm(SOURCE_DIR "/input_grids/torus_quad.off"); + input_sm >> sm; + cgal_surface_mesh_to_dealii_triangulation(sm, tria); + go.write_msh(tria, deallog.get_file_stream()); + } + tria.clear(); + + // Now do the same with a Polyhedron + deallog << "Polyhedron test" << std::endl; + { + Polyhedron P; + std::ifstream input_p(SOURCE_DIR "/input_grids/torus_quad.off"); + input_p >> P; + cgal_surface_mesh_to_dealii_triangulation(P, tria); + go.write_msh(tria, deallog.get_file_stream()); + } +} diff --git a/tests/cgal/cgal_surface_triangulation_01.output b/tests/cgal/cgal_surface_triangulation_01.output new file mode 100644 index 0000000000..20f1bdac02 --- /dev/null +++ b/tests/cgal/cgal_surface_triangulation_01.output @@ -0,0 +1,115 @@ + +DEAL::Surface mesh +$NOD +25 +1 0.107677 -1.54743e-18 -0.331395 +2 -0.281902 -1.54743e-18 -0.204814 +3 -0.281902 -1.54743e-18 0.204814 +4 0.107676 -1.54743e-18 0.331395 +5 0.348450 -1.54743e-18 8.92032e-08 +6 0.182080 0.331395 -0.560383 +7 -0.476691 0.331395 -0.346336 +8 -0.476691 0.331395 0.346336 +9 0.182080 0.331395 0.560384 +10 0.589223 0.331395 8.92032e-08 +11 0.302466 0.204814 -0.930895 +12 -0.791866 0.204814 -0.575325 +13 -0.791866 0.204814 0.575324 +14 0.302466 0.204814 0.930895 +15 0.978801 0.204814 8.92032e-08 +16 0.302466 -0.204814 -0.930895 +17 -0.791866 -0.204814 -0.575325 +18 -0.791866 -0.204814 0.575324 +19 0.302466 -0.204814 0.930895 +20 0.978801 -0.204814 8.92032e-08 +21 0.182080 -0.331395 -0.560383 +22 -0.476691 -0.331395 -0.346336 +23 -0.476691 -0.331395 0.346336 +24 0.182080 -0.331395 0.560384 +25 0.589222 -0.331395 8.92032e-08 +$ENDNOD +$ELM +25 +1 3 0 0 4 6 7 2 1 +2 3 0 0 4 7 8 3 2 +3 3 0 0 4 8 9 4 3 +4 3 0 0 4 9 10 5 4 +5 3 0 0 4 10 6 1 5 +6 3 0 0 4 11 12 7 6 +7 3 0 0 4 12 13 8 7 +8 3 0 0 4 13 14 9 8 +9 3 0 0 4 14 15 10 9 +10 3 0 0 4 15 11 6 10 +11 3 0 0 4 16 17 12 11 +12 3 0 0 4 17 18 13 12 +13 3 0 0 4 18 19 14 13 +14 3 0 0 4 19 20 15 14 +15 3 0 0 4 20 16 11 15 +16 3 0 0 4 21 22 17 16 +17 3 0 0 4 22 23 18 17 +18 3 0 0 4 23 24 19 18 +19 3 0 0 4 24 25 20 19 +20 3 0 0 4 25 21 16 20 +21 3 0 0 4 1 2 22 21 +22 3 0 0 4 2 3 23 22 +23 3 0 0 4 3 4 24 23 +24 3 0 0 4 4 5 25 24 +25 3 0 0 4 5 1 21 25 +$ENDELM +DEAL::Polyhedron test +$NOD +25 +1 0.107677 -1.54743e-18 -0.331395 +2 -0.281902 -1.54743e-18 -0.204814 +3 -0.281902 -1.54743e-18 0.204814 +4 0.107676 -1.54743e-18 0.331395 +5 0.348450 -1.54743e-18 8.92032e-08 +6 0.182080 0.331395 -0.560383 +7 -0.476691 0.331395 -0.346336 +8 -0.476691 0.331395 0.346336 +9 0.182080 0.331395 0.560384 +10 0.589223 0.331395 8.92032e-08 +11 0.302466 0.204814 -0.930895 +12 -0.791866 0.204814 -0.575325 +13 -0.791866 0.204814 0.575324 +14 0.302466 0.204814 0.930895 +15 0.978801 0.204814 8.92032e-08 +16 0.302466 -0.204814 -0.930895 +17 -0.791866 -0.204814 -0.575325 +18 -0.791866 -0.204814 0.575324 +19 0.302466 -0.204814 0.930895 +20 0.978801 -0.204814 8.92032e-08 +21 0.182080 -0.331395 -0.560383 +22 -0.476691 -0.331395 -0.346336 +23 -0.476691 -0.331395 0.346336 +24 0.182080 -0.331395 0.560384 +25 0.589222 -0.331395 8.92032e-08 +$ENDNOD +$ELM +25 +1 3 0 0 4 6 7 2 1 +2 3 0 0 4 7 8 3 2 +3 3 0 0 4 8 9 4 3 +4 3 0 0 4 9 10 5 4 +5 3 0 0 4 10 6 1 5 +6 3 0 0 4 11 12 7 6 +7 3 0 0 4 12 13 8 7 +8 3 0 0 4 13 14 9 8 +9 3 0 0 4 14 15 10 9 +10 3 0 0 4 15 11 6 10 +11 3 0 0 4 16 17 12 11 +12 3 0 0 4 17 18 13 12 +13 3 0 0 4 18 19 14 13 +14 3 0 0 4 19 20 15 14 +15 3 0 0 4 20 16 11 15 +16 3 0 0 4 21 22 17 16 +17 3 0 0 4 22 23 18 17 +18 3 0 0 4 23 24 19 18 +19 3 0 0 4 24 25 20 19 +20 3 0 0 4 25 21 16 20 +21 3 0 0 4 1 2 22 21 +22 3 0 0 4 2 3 23 22 +23 3 0 0 4 3 4 24 23 +24 3 0 0 4 4 5 25 24 +25 3 0 0 4 5 1 21 25 +$ENDELM diff --git a/tests/cgal/cgal_surface_triangulation_02.cc b/tests/cgal/cgal_surface_triangulation_02.cc new file mode 100644 index 0000000000..5edd6e4ae7 --- /dev/null +++ b/tests/cgal/cgal_surface_triangulation_02.cc @@ -0,0 +1,63 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2022 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +// Convert a closed CGAL::Surface_mesh or a closed CGAL::Polyhedron_3 to a +// deal.II triangulation. The input mesh is a tripod. + +#include + +#include +#include +#include + +#include +#include + +#include + +#include "../tests.h" + +using namespace CGALWrappers; +using Kernel = CGAL::Simple_cartesian; +using CGALPoint = CGAL::Point_3; +using Mesh = CGAL::Surface_mesh; +using Polyhedron = CGAL::Polyhedron_3; + +int +main() +{ + initlog(); + Triangulation<2, 3> tria; + GridOut go; + { + deallog << "Surface mesh" << std::endl; + Mesh sm; + std::ifstream input_sm(SOURCE_DIR "/input_grids/tripod.off"); + input_sm >> sm; + cgal_surface_mesh_to_dealii_triangulation(sm, tria); + go.write_msh(tria, deallog.get_file_stream()); + } + tria.clear(); + + // Now do the same with a Polyhedron + deallog << "Polyhedron test" << std::endl; + { + Polyhedron P; + std::ifstream input_p(SOURCE_DIR "/input_grids/tripod.off"); + input_p >> P; + cgal_surface_mesh_to_dealii_triangulation(P, tria); + go.write_msh(tria, deallog.get_file_stream()); + } +} diff --git a/tests/cgal/cgal_surface_triangulation_02.output b/tests/cgal/cgal_surface_triangulation_02.output new file mode 100644 index 0000000000..7b1f20e5bc --- /dev/null +++ b/tests/cgal/cgal_surface_triangulation_02.output @@ -0,0 +1,151 @@ + +DEAL::Surface mesh +$NOD +24 +1 -0.462837 0.0205318 -0.140203 +2 -0.174333 0.0412215 -0.151981 +3 -0.144255 0.368209 -0.146404 +4 0.0936504 0.361854 -0.147855 +5 0.141347 0.0412215 -0.151981 +6 0.450915 -0.165801 -0.163699 +7 0.357073 -0.405901 -0.137953 +8 0.141347 -0.274458 -0.151981 +9 -0.174333 -0.274458 -0.151981 +10 -0.461176 -0.217462 -0.108519 +11 -0.450778 -0.0217283 0.159384 +12 -0.174333 0.0412215 0.163699 +13 -0.174333 0.356901 0.163699 +14 0.106877 0.340470 0.155338 +15 0.141347 0.0412215 0.163699 +16 0.452244 -0.184928 0.145632 +17 0.379439 -0.433293 0.144635 +18 0.141347 -0.274458 0.163699 +19 -0.174333 -0.274458 0.163699 +20 -0.413695 -0.363559 0.134658 +21 -0.500000 -0.0816885 0.0513155 +22 -0.0364476 -0.274458 0.0120900 +23 0.500000 -0.344000 -0.0556357 +24 0.00831896 0.433293 0.0305898 +$ENDNOD +$ELM +44 +1 2 0 0 3 1 2 10 +2 2 0 0 3 2 5 9 +3 2 0 0 3 2 3 5 +4 2 0 0 3 5 6 8 +5 2 0 0 3 2 1 12 +6 2 0 0 3 3 2 13 +7 2 0 0 3 5 4 15 +8 2 0 0 3 6 5 16 +9 2 0 0 3 8 7 18 +10 2 0 0 3 10 9 20 +11 2 0 0 3 20 19 11 +12 2 0 0 3 19 18 12 +13 2 0 0 3 15 14 12 +14 2 0 0 3 18 17 15 +15 2 0 0 3 9 10 2 +16 2 0 0 3 8 9 5 +17 2 0 0 3 4 5 3 +18 2 0 0 3 7 8 6 +19 2 0 0 3 11 12 1 +20 2 0 0 3 12 13 2 +21 2 0 0 3 14 15 4 +22 2 0 0 3 15 16 5 +23 2 0 0 3 17 18 7 +24 2 0 0 3 19 20 9 +25 2 0 0 3 12 11 19 +26 2 0 0 3 15 12 18 +27 2 0 0 3 13 12 14 +28 2 0 0 3 16 15 17 +29 2 0 0 3 1 21 11 +30 2 0 0 3 10 21 1 +31 2 0 0 3 20 21 10 +32 2 0 0 3 11 21 20 +33 2 0 0 3 8 22 9 +34 2 0 0 3 18 22 8 +35 2 0 0 3 19 22 18 +36 2 0 0 3 9 22 19 +37 2 0 0 3 16 23 6 +38 2 0 0 3 17 23 16 +39 2 0 0 3 7 23 17 +40 2 0 0 3 6 23 7 +41 2 0 0 3 4 24 14 +42 2 0 0 3 3 24 4 +43 2 0 0 3 13 24 3 +44 2 0 0 3 14 24 13 +$ENDELM +DEAL::Polyhedron test +$NOD +24 +1 -0.462837 0.0205318 -0.140203 +2 -0.174333 0.0412215 -0.151981 +3 -0.144255 0.368209 -0.146404 +4 0.0936504 0.361854 -0.147855 +5 0.141347 0.0412215 -0.151981 +6 0.450915 -0.165801 -0.163699 +7 0.357073 -0.405901 -0.137953 +8 0.141347 -0.274458 -0.151981 +9 -0.174333 -0.274458 -0.151981 +10 -0.461176 -0.217462 -0.108519 +11 -0.450778 -0.0217283 0.159384 +12 -0.174333 0.0412215 0.163699 +13 -0.174333 0.356901 0.163699 +14 0.106877 0.340470 0.155338 +15 0.141347 0.0412215 0.163699 +16 0.452244 -0.184928 0.145632 +17 0.379439 -0.433293 0.144635 +18 0.141347 -0.274458 0.163699 +19 -0.174333 -0.274458 0.163699 +20 -0.413695 -0.363559 0.134658 +21 -0.500000 -0.0816885 0.0513155 +22 -0.0364476 -0.274458 0.0120900 +23 0.500000 -0.344000 -0.0556357 +24 0.00831896 0.433293 0.0305898 +$ENDNOD +$ELM +44 +1 2 0 0 3 1 2 10 +2 2 0 0 3 2 5 9 +3 2 0 0 3 2 3 5 +4 2 0 0 3 5 6 8 +5 2 0 0 3 2 1 12 +6 2 0 0 3 3 2 13 +7 2 0 0 3 5 4 15 +8 2 0 0 3 6 5 16 +9 2 0 0 3 8 7 18 +10 2 0 0 3 10 9 20 +11 2 0 0 3 20 19 11 +12 2 0 0 3 19 18 12 +13 2 0 0 3 15 14 12 +14 2 0 0 3 18 17 15 +15 2 0 0 3 9 10 2 +16 2 0 0 3 8 9 5 +17 2 0 0 3 4 5 3 +18 2 0 0 3 7 8 6 +19 2 0 0 3 11 12 1 +20 2 0 0 3 12 13 2 +21 2 0 0 3 14 15 4 +22 2 0 0 3 15 16 5 +23 2 0 0 3 17 18 7 +24 2 0 0 3 19 20 9 +25 2 0 0 3 12 11 19 +26 2 0 0 3 15 12 18 +27 2 0 0 3 13 12 14 +28 2 0 0 3 16 15 17 +29 2 0 0 3 1 21 11 +30 2 0 0 3 10 21 1 +31 2 0 0 3 20 21 10 +32 2 0 0 3 11 21 20 +33 2 0 0 3 8 22 9 +34 2 0 0 3 18 22 8 +35 2 0 0 3 19 22 18 +36 2 0 0 3 9 22 19 +37 2 0 0 3 16 23 6 +38 2 0 0 3 17 23 16 +39 2 0 0 3 7 23 17 +40 2 0 0 3 6 23 7 +41 2 0 0 3 4 24 14 +42 2 0 0 3 3 24 4 +43 2 0 0 3 13 24 3 +44 2 0 0 3 14 24 13 +$ENDELM diff --git a/tests/cgal/input_grids/torus_quad.off b/tests/cgal/input_grids/torus_quad.off new file mode 100644 index 0000000000..66d29e3581 --- /dev/null +++ b/tests/cgal/input_grids/torus_quad.off @@ -0,0 +1,52 @@ +OFF +25 25 50 +0.107677 -1.54743e-018 -0.331395 +-0.281902 -1.54743e-018 -0.204814 +-0.281902 -1.54743e-018 0.204814 +0.107676 -1.54743e-018 0.331395 +0.34845 -1.54743e-018 8.92032e-008 +0.18208 0.331395 -0.560383 +-0.476691 0.331395 -0.346336 +-0.476691 0.331395 0.346336 +0.18208 0.331395 0.560384 +0.589223 0.331395 8.92032e-008 +0.302466 0.204814 -0.930895 +-0.791866 0.204814 -0.575325 +-0.791866 0.204814 0.575324 +0.302466 0.204814 0.930895 +0.978801 0.204814 8.92032e-008 +0.302466 -0.204814 -0.930895 +-0.791866 -0.204814 -0.575325 +-0.791866 -0.204814 0.575324 +0.302466 -0.204814 0.930895 +0.978801 -0.204814 8.92032e-008 +0.18208 -0.331395 -0.560383 +-0.476691 -0.331395 -0.346336 +-0.476691 -0.331395 0.346336 +0.18208 -0.331395 0.560384 +0.589222 -0.331395 8.92032e-008 +4 5 6 1 0 +4 6 7 2 1 +4 7 8 3 2 +4 8 9 4 3 +4 9 5 0 4 +4 10 11 6 5 +4 11 12 7 6 +4 12 13 8 7 +4 13 14 9 8 +4 14 10 5 9 +4 15 16 11 10 +4 16 17 12 11 +4 17 18 13 12 +4 18 19 14 13 +4 19 15 10 14 +4 20 21 16 15 +4 21 22 17 16 +4 22 23 18 17 +4 23 24 19 18 +4 24 20 15 19 +4 0 1 21 20 +4 1 2 22 21 +4 2 3 23 22 +4 3 4 24 23 +4 4 0 20 24 diff --git a/tests/cgal/input_grids/tripod.off b/tests/cgal/input_grids/tripod.off new file mode 100644 index 0000000000..ea3b32d191 --- /dev/null +++ b/tests/cgal/input_grids/tripod.off @@ -0,0 +1,72 @@ +OFF +24 44 0 + +-0.462837 0.0205318 -0.140203 +-0.174333 0.0412215 -0.151981 +-0.144255 0.368209 -0.146404 +0.0936504 0.361854 -0.147855 +0.141347 0.0412215 -0.151981 +0.450915 -0.165801 -0.163699 +0.357073 -0.405901 -0.137953 +0.141347 -0.274458 -0.151981 +-0.174333 -0.274458 -0.151981 +-0.461176 -0.217462 -0.108519 +-0.450778 -0.0217283 0.159384 +-0.174333 0.0412215 0.163699 +-0.174333 0.356901 0.163699 +0.106877 0.34047 0.155338 +0.141347 0.0412215 0.163699 +0.452244 -0.184928 0.145632 +0.379439 -0.433293 0.144635 +0.141347 -0.274458 0.163699 +-0.174333 -0.274458 0.163699 +-0.413695 -0.363559 0.134658 +-0.5 -0.0816885 0.0513155 +-0.0364476 -0.274458 0.01209 +0.5 -0.344 -0.0556357 +0.00831896 0.433293 0.0305898 +3 0 1 9 +3 1 4 8 +3 1 2 4 +3 4 5 7 +3 1 0 11 +3 2 1 12 +3 4 3 14 +3 5 4 15 +3 7 6 17 +3 9 8 19 +3 19 18 10 +3 18 17 11 +3 14 13 11 +3 17 16 14 +3 8 9 1 +3 7 8 4 +3 3 4 2 +3 6 7 5 +3 10 11 0 +3 11 12 1 +3 13 14 3 +3 14 15 4 +3 16 17 6 +3 18 19 8 +3 11 10 18 +3 14 11 17 +3 12 11 13 +3 15 14 16 +3 0 20 10 +3 9 20 0 +3 19 20 9 +3 10 20 19 +3 7 21 8 +3 17 21 7 +3 18 21 17 +3 8 21 18 +3 15 22 5 +3 16 22 15 +3 6 22 16 +3 5 22 6 +3 3 23 13 +3 2 23 3 +3 12 23 2 +3 13 23 12 +