// Copyright (c) 2018 INRIA Sophia-Antipolis (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) : Guillaume Damiand // Mostafa Ashraf #ifndef CGAL_DRAW_T3_H #define CGAL_DRAW_T3_H #include #include #include #include #include #include namespace CGAL { namespace draw_function_for_t3 { template void compute_face(typename T3::Finite_facets_iterator fh, const DrawingFunctor& drawing_functor, CGAL::Graphic_storage& graphic_buffer, const T3 *t3) { if(!drawing_functor.draw_face(*t3, fh)) { return; } if(drawing_functor.colored_face(*t3, fh)) { graphic_buffer.face_begin(drawing_functor.face_color(*t3, fh)); } else { graphic_buffer.face_begin(); } graphic_buffer.add_point_in_face(fh->first->vertex((fh->second + 1) % 4)-> point()); graphic_buffer.add_point_in_face(fh->first->vertex((fh->second + 2) % 4)-> point()); graphic_buffer.add_point_in_face(fh->first->vertex((fh->second + 3) % 4)-> point()); graphic_buffer.face_end(); } template void compute_edge(typename T3::Finite_edges_iterator eh, CGAL::Graphic_storage& graphic_buffer, const DrawingFunctor& drawing_functor, const T3* t3) { if(!drawing_functor.draw_edge(*t3, eh)) { return; } if(drawing_functor.colored_edge(*t3, eh)) { graphic_buffer.add_segment(eh->first->vertex(eh->second)->point(), eh->first->vertex(eh->third)->point(), drawing_functor.edge_color(*t3, eh)); } else { graphic_buffer.add_segment(eh->first->vertex(eh->second)->point(), eh->first->vertex(eh->third)->point()); } } template void compute_vertex(typename T3::Vertex_handle vh, CGAL::Graphic_storage& graphic_buffer, const DrawingFunctor& drawing_functor, const T3* t3) { if(!drawing_functor.draw_vertex(*t3, vh)) { return; } if(drawing_functor.colored_vertex(*t3, vh)) { graphic_buffer.add_point(vh->point(), drawing_functor.vertex_color(*t3, vh)); } else { graphic_buffer.add_point(vh->point()); } } template void compute_elements(const T3* t3, CGAL::Graphic_storage& graphic_buffer, const DrawingFunctor& drawing_functor) { if (drawing_functor.are_faces_enabled()) { for (typename T3::Finite_facets_iterator it=t3->finite_facets_begin(); it!=t3->finite_facets_end(); ++it) { compute_face(it, drawing_functor, graphic_buffer, t3); } } if (drawing_functor.are_edges_enabled()) { for (typename T3::Finite_edges_iterator it=t3->finite_edges_begin(); it!=t3->finite_edges_end(); ++it) { compute_edge(it, graphic_buffer,drawing_functor, t3); } } if (drawing_functor.are_vertices_enabled()) { for (typename T3::Finite_vertices_iterator it=t3->finite_vertices_begin(); it!=t3->finite_vertices_end(); ++it) { compute_vertex(it, graphic_buffer, drawing_functor, t3); } } } } // namespace draw_function_for_t3 #define CGAL_T3_TYPE CGAL::Triangulation_3 template void add_in_graphic_buffer(const CGAL_T3_TYPE& at3, CGAL::Graphic_storage& graphic_buffer, const DrawingFunctor& drawing_functor) { draw_function_for_t3::compute_elements(&at3, graphic_buffer, drawing_functor); } template void add_in_graphic_buffer(const CGAL_T3_TYPE& at3, CGAL::Graphic_storage& graphic_buffer) { CGAL::Drawing_functor drawing_functor; drawing_functor.colored_face = [](const CGAL_T3_TYPE &, const typename CGAL_T3_TYPE::Finite_facets_iterator) -> bool { return true; }; drawing_functor.face_color = [](const CGAL_T3_TYPE &at3, const typename CGAL_T3_TYPE::Finite_facets_iterator fh) -> CGAL::IO::Color { if (fh==at3.finite_facets_end()) // use to get the mono color return CGAL::IO::Color(100, 125, 200); // R G B between 0-255 CGAL::Random random((unsigned int)((std::size_t)(&*(fh->first)) + (std::size_t)(fh->second))); return get_random_color(random); }; add_in_graphic_buffer(at3, graphic_buffer, drawing_functor); } #ifdef CGAL_USE_BASIC_VIEWER // Specialization of draw function. template void draw(const CGAL_T3_TYPE &at3, const DrawingFunctor &drawingfunctor, const char *title="T3 Basic Viewer") { CGAL::Graphic_storage buffer; add_in_graphic_buffer(at3, buffer, drawingfunctor); draw_graphic_storage(buffer, title); } template void draw(const CGAL_T3_TYPE &at3, const char *title="T3 Basic Viewer") { CGAL::Graphic_storage buffer; add_in_graphic_buffer(at3, buffer); draw_graphic_storage(buffer, title); } #endif // CGAL_USE_BASIC_VIEWER #undef CGAL_T3_TYPE } // End namespace CGAL #endif // CGAL_DRAW_T3_H