// Copyright (c) 2025 GeometryFactory SARL (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) : Laurent Rineau #ifndef CGAL_DRAW_CONSTRAINED_T3_H #define CGAL_DRAW_CONSTRAINED_T3_H #include #include #include #include #include namespace CGAL { #if defined(CGAL_USE_BASIC_VIEWER) || defined(DOXYGEN_RUNNING) /*! \ingroup PkgDrawCDT_3 opens a new window and draws the constrained triangulation. A call to this function blocks the execution of the program until the drawing window is closed. This function requires `CGAL_Qt6`, and is only available if the macro `CGAL_USE_BASIC_VIEWER` is defined. Linking with the cmake target `CGAL::CGAL_Basic_viewer` will link with `CGAL_Qt6` and add the definition `CGAL_USE_BASIC_VIEWER`. */ template void draw(const Conforming_constrained_Delaunay_triangulation_3& ccdt, const char *title="Constrained 3D Triangulation Basic Viewer") { using Tr = CGAL::cpp20::remove_cvref_t; using Vertex_handle = typename Tr::Vertex_handle; using Cell_handle = typename Tr::Cell_handle; using Edge_descriptor = typename Tr::Finite_edges_iterator; using Facet_descriptor = typename Tr::Finite_facets_iterator; using Face_index = CGAL::cpp20::remove_cvref_t< decltype(std::declval()->surface_patch_index(0))>; Face_index nb_colors = 0; std::for_each( ccdt.constrained_facets_begin(), ccdt.constrained_facets_end(), [&](const auto& f) { auto [c, index] = f; nb_colors = (std::max)(nb_colors, c->ccdt_3_data().face_constraint_index(index) + 1); }); std::vector colors(nb_colors); std::generate(colors.begin(), colors.end(), []() { return CGAL::get_random_color(CGAL::get_default_random()); }); CGAL::Graphics_scene_options options; options.draw_face = [](const Tr&, Facet_descriptor f) { auto [c, index] = *f; return c->ccdt_3_data().is_facet_constrained(index); }; options.colored_face = [](const Tr&, Facet_descriptor) { return true; }; options.face_color = [&](const Tr&, Facet_descriptor f) { auto [c, index] = *f; return colors[c->ccdt_3_data().face_constraint_index(index)]; }; draw(ccdt.triangulation(), options, title); } /*! \ingroup PkgDrawCDT_3 A shortcut to \link PkgDrawTriangulation3 `CGAL::add_to_graphics_scene(ccdt.triangulation(), gs_options, title)` \endlink. */ template void draw(const Conforming_constrained_Delaunay_triangulation_3& ccdt, const GSOptions& gs_options, const char *title="Constrained 3D Triangulation Basic Viewer") { draw(ccdt.triangulation(), gs_options, title); } #endif // CGAL_USE_BASIC_VIEWER || DOXYGEN_RUNNING } // End namespace CGAL #endif // CGAL_DRAW_CONSTRAINED_T3_H