diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp index 7d2f9500b5d..6b2b21bd401 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp @@ -24,6 +24,7 @@ typedef SMS::GarlandHeckbert_plane_policies typedef SMS::GarlandHeckbert_probabilistic_plane_policies Prob_plane; typedef SMS::GarlandHeckbert_triangle_policies Classic_tri; typedef SMS::GarlandHeckbert_probabilistic_triangle_policies Prob_tri; +typedef SMS::GarlandHeckbert_plane_plus_line_policies Plane_plus_line; template void collapse_gh(Surface_mesh& mesh, @@ -59,7 +60,7 @@ void collapse_gh(Surface_mesh& mesh, // Usage: // ./command [input] [ratio] [policy] [output] -// policy can be "cp" (classic plane), "ct" (classic triangle), "pp" (probabilistic plane), "pt" (probabilistic triangle) +// policy can be "cp" (classic plane), "ct" (classic triangle), "pp" (probabilistic plane), "pt" (probabilistic triangle), "pl" (plane plus line) int main(int argc, char** argv) { Surface_mesh mesh; @@ -91,8 +92,10 @@ int main(int argc, char** argv) collapse_gh(mesh, ratio); else if(policy == "pp") collapse_gh(mesh, ratio); - else + else if(policy == "pt") collapse_gh(mesh, ratio); + else + collapse_gh(mesh, ratio); CGAL::IO::write_polygon_mesh((argc > 4) ? argv[4] : "out.off", mesh, CGAL::parameters::stream_precision(17)); diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_plane_plus_line_policies.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_plane_plus_line_policies.h new file mode 100644 index 00000000000..b5fc0dad24f --- /dev/null +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_plane_plus_line_policies.h @@ -0,0 +1,58 @@ +// Copyright (c) 2025 GeometryFactory (France). All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Leo Valque + +#ifndef CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_GARLANDHECKBERT_PLANE_PLUS_LINE_POLICIES_H +#define CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_GARLANDHECKBERT_PLANE_PLUS_LINE_POLICIES_H + +#include + +#include +#include +#include + +#include +#include +#include + +namespace CGAL { +namespace Surface_mesh_simplification { + +template +class GarlandHeckbert_plane_plus_line_policies + : public GarlandHeckbert_composed_policies, + GarlandHeckbert_line_policies > +{ + typedef GarlandHeckbert_composed_policies, + GarlandHeckbert_line_policies > Base; + +public: + typedef typename Base::Quadric_calculator Quadric_calculator; + + typedef typename GeomTraits::FT FT; + +public: + GarlandHeckbert_plane_plus_line_policies(TriangleMesh& tmesh, + const FT dm = FT(100), + const FT line_weight=FT(0.01)) + : Base(tmesh, FT(1.)/line_weight, dm) + { } + +public: + using Base::operator(); + using Base::get_cost; + using Base::get_placement; +}; + +} // namespace Surface_mesh_simplification +} // namespace CGAL + +#endif // CGAL_SURFACE_MESH_SIMPLIFICATION_POLICIES_GARLANDHECKBERT_PLANE_PLUS_LINE_POLICIES_H \ No newline at end of file diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_policies.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_policies.h index c45bfe2a65f..b2404bb613e 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_policies.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_policies.h @@ -21,12 +21,15 @@ #include #include #include +#include +#include +#include namespace CGAL { namespace Surface_mesh_simplification { template -using GarlandHeckbert_policies CGAL_DEPRECATED = GarlandHeckbert_plane_policies; +using GarlandHeckbert_policies = GarlandHeckbert_plane_plus_line_policies; } // namespace Surface_mesh_simplification } // namespace CGAL