draw p2t2

This commit is contained in:
Guillaume Damiand 2023-12-04 08:19:46 +01:00
parent 4684dc4f8e
commit 1760fcf3f2
1 changed files with 45 additions and 45 deletions

View File

@ -32,35 +32,38 @@ struct Graphics_scene_options_periodic_2_triangulation_2 :
public CGAL::Graphics_scene_options<DS, vertex_handle, edge_handle, face_handle> public CGAL::Graphics_scene_options<DS, vertex_handle, edge_handle, face_handle>
{ {
Graphics_scene_options_periodic_2_triangulation_2(): Graphics_scene_options_periodic_2_triangulation_2():
domain_color(CGAL::IO::Color(96, 104, 252)), m_domain_color(CGAL::IO::Color(96, 104, 252)),
m_draw_domain(true), m_draw_domain(true),
m_current_display_type(DS::STORED) m_display_type(DS::STORED)
{} {}
bool get_draw_domain() const bool draw_domain() const
{ return m_draw_domain; } { return m_draw_domain; }
void set_draw_domain(bool b) void draw_domain(bool b)
{ m_draw_domain=b; } { m_draw_domain=b; }
void toggle_draw_domain() void toggle_draw_domain()
{ m_draw_domain=!m_draw_domain; } { m_draw_domain=!m_draw_domain; }
typename DS::Iterator_type current_display_type() const typename DS::Iterator_type display_type() const
{ return m_current_display_type; } { return m_display_type; }
void increase_current_display_type() void increase_display_type()
{ {
if(m_current_display_type==DS::UNIQUE_COVER_DOMAIN) if(m_display_type==DS::UNIQUE_COVER_DOMAIN)
{ m_current_display_type=DS::STORED; } { m_display_type=DS::STORED; }
else else
{ m_current_display_type=typename DS::Iterator_type(static_cast<int>(m_current_display_type)+1); } { m_display_type=typename DS::Iterator_type(static_cast<int>(m_display_type)+1); }
} }
public: const CGAL::IO::Color& domain_color() const
CGAL::IO::Color domain_color; { return m_domain_color; }
void domain_color(const CGAL::IO::Color& c)
{ m_domain_color=c; }
protected: protected:
CGAL::IO::Color m_domain_color;
bool m_draw_domain; bool m_draw_domain;
typename DS::Iterator_type m_current_display_type; typename DS::Iterator_type m_display_type;
}; };
namespace draw_function_for_P2T2 namespace draw_function_for_P2T2
@ -145,10 +148,10 @@ void compute_domain(const P2T2& p2t2,
Kernel::Point_2 p3(orig_domain.xmax(), orig_domain.ymin()); Kernel::Point_2 p3(orig_domain.xmax(), orig_domain.ymin());
Kernel::Point_2 p4((orig_domain.max)()); Kernel::Point_2 p4((orig_domain.max)());
graphics_scene.add_segment(p1 + shift, p2 + shift, gs_options.domain_color); graphics_scene.add_segment(p1 + shift, p2 + shift, gs_options.domain_color());
graphics_scene.add_segment(p1 + shift, p3 + shift, gs_options.domain_color); graphics_scene.add_segment(p1 + shift, p3 + shift, gs_options.domain_color());
graphics_scene.add_segment(p2 + shift, p4 + shift, gs_options.domain_color); graphics_scene.add_segment(p2 + shift, p4 + shift, gs_options.domain_color());
graphics_scene.add_segment(p3 + shift, p4 + shift, gs_options.domain_color); graphics_scene.add_segment(p3 + shift, p4 + shift, gs_options.domain_color());
} }
} }
} }
@ -161,7 +164,7 @@ void compute_elements(const P2T2& p2t2,
// Get the display type, iterate through periodic elements according // Get the display type, iterate through periodic elements according
// to the display type // to the display type
typedef typename P2T2::Iterator_type Iterator_type; typedef typename P2T2::Iterator_type Iterator_type;
Iterator_type it_type = (Iterator_type)gs_options.current_display_type(); Iterator_type it_type = (Iterator_type)gs_options.display_type();
// Iterate through vertices, edges and faces, add elements to buffer // Iterate through vertices, edges and faces, add elements to buffer
if(gs_options.are_vertices_enabled()) if(gs_options.are_vertices_enabled())
@ -185,7 +188,7 @@ void compute_elements(const P2T2& p2t2,
{ compute_face(p2t2, it, graphics_scene, gs_options); } { compute_face(p2t2, it, graphics_scene, gs_options); }
} }
if(gs_options.get_draw_domain()) if(gs_options.draw_domain())
{ {
// Compute the (9-sheet covering space) domain of the periodic triangulation // Compute the (9-sheet covering space) domain of the periodic triangulation
compute_domain(p2t2, graphics_scene, gs_options); compute_domain(p2t2, graphics_scene, gs_options);
@ -222,44 +225,29 @@ void add_to_graphics_scene(const CGAL_P2T2_TYPE& p2t2,
// Specialization of draw function // Specialization of draw function
template<class Gt, class Tds, class GSOptions> template<class Gt, class Tds, class GSOptions>
void draw(const CGAL_P2T2_TYPE& ap2t2, void draw(const CGAL_P2T2_TYPE& ap2t2,
const GSOptions& gs_options, GSOptions& gs_options,
const char* title="2D Periodic Triangulation Viewer") const char* title="2D Periodic Triangulation Viewer")
{ {
CGAL::Graphics_scene buffer; CGAL::Graphics_scene gs;
add_to_graphics_scene(ap2t2, buffer, gs_options); add_to_graphics_scene(ap2t2, gs, gs_options);
draw_graphics_scene(buffer); CGAL::Qt::QApplication_and_basic_viewer app(gs, title);
}
template<class Gt, class Tds>
void draw(const CGAL_P2T2_TYPE& ap2t2,
const char* title="2D Periodic Triangulation Viewer")
{
CGAL::Graphics_scene buffer;
CGAL::Graphics_scene_options_periodic_2_triangulation_2
<CGAL_P2T2_TYPE,
typename CGAL_P2T2_TYPE::Periodic_point_iterator,
typename CGAL_P2T2_TYPE::Periodic_segment_iterator,
typename CGAL_P2T2_TYPE::Periodic_triangle_iterator> gs_options;
add_to_graphics_scene(ap2t2, buffer, gs_options);
CGAL::Qt::QApplication_and_basic_viewer app(buffer, title);
if(app) if(app)
{ {
// Here we define the std::function to capture key pressed. // Here we define the std::function to capture key pressed.
app.basic_viewer().on_key_pressed= app.basic_viewer().on_key_pressed=
[&ap2t2, &buffer, &gs_options] (QKeyEvent* e, CGAL::Qt::Basic_viewer* basic_viewer) -> bool [&ap2t2, &gs, &gs_options] (QKeyEvent* e, CGAL::Qt::Basic_viewer* basic_viewer) -> bool
{ {
const ::Qt::KeyboardModifiers modifiers = e->modifiers(); const ::Qt::KeyboardModifiers modifiers = e->modifiers();
if ((e->key() == ::Qt::Key_D) && (modifiers == ::Qt::NoButton)) if ((e->key() == ::Qt::Key_D) && (modifiers == ::Qt::NoButton))
{ {
gs_options.increase_current_display_type(); gs_options.increase_display_type();
basic_viewer->displayMessage basic_viewer->displayMessage
(QString("Display type=%1.").arg(gs_options.current_display_type()==0?"Stored": (QString("Display type=%1.").arg(gs_options.display_type()==0?"Stored":
(gs_options.current_display_type()==1?"Unique": (gs_options.display_type()==1?"Unique":
(gs_options.current_display_type()==2?"Stored cover": (gs_options.display_type()==2?"Stored cover":
"Unique cover")))); "Unique cover"))));
buffer.clear(); gs.clear();
draw_function_for_P2T2::compute_elements(ap2t2, buffer, gs_options); add_to_graphics_scene(ap2t2, gs, gs_options);
basic_viewer->redraw(); basic_viewer->redraw();
} }
else else
@ -278,6 +266,18 @@ void draw(const CGAL_P2T2_TYPE& ap2t2,
} }
} }
template<class Gt, class Tds>
void draw(const CGAL_P2T2_TYPE& ap2t2,
const char* title="2D Periodic Triangulation Viewer")
{
CGAL::Graphics_scene_options_periodic_2_triangulation_2
<CGAL_P2T2_TYPE,
typename CGAL_P2T2_TYPE::Periodic_point_iterator,
typename CGAL_P2T2_TYPE::Periodic_segment_iterator,
typename CGAL_P2T2_TYPE::Periodic_triangle_iterator> gs_options;
draw(ap2t2, gs_options, title);
}
#endif // CGAL_USE_BASIC_VIEWER #endif // CGAL_USE_BASIC_VIEWER
#undef CGAL_P2T2_TYPE #undef CGAL_P2T2_TYPE