// Copyright (c) 2002 ETH Zurich (Switzerland). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you may redistribute it under // the terms of the Q Public License version 1.0. // See the file LICENSE.QPL distributed with CGAL. // // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $Source: /CVSROOT/CGAL/Packages/Min_quadrilateral_2/demo/Min_quadrilateral_2/min_quadrilateral_layers.h,v $ // $Revision: 1.3.6.1 $ $Date: 2004/12/19 15:54:52 $ // $Name: $ // // Author(s) : Radu Ursu #include #include //CGAL #include #include #include #include #include #include #include #include template class Qt_layer_show_parallelogram : public CGAL::Qt_widget_layer { public: typedef typename R::Point_2 Point; typedef typename R::Segment_2 Segment; typedef typename R::Line_2 Line; typedef std::vector< Point > Container; typedef CGAL::Polygon_2< R, Container > Polygon; typedef CGAL::Creator_uniform_2< double, Point > Creator; Qt_layer_show_parallelogram(std::list *pl){list_of_points = pl;}; void draw() { //Draw the MINIMUM PARALLELOGRAM widget->lock(); Polygon pts; typedef typename std::list::const_iterator Listconstiter; for (Listconstiter i = (*list_of_points).begin(); i != (*list_of_points).end(); ++i) pts.push_back(Point(i->x(), i->y())); Polygon p; CGAL::convex_hull_points_2( pts.vertices_begin(), pts.vertices_end(), std::back_inserter(p)); Polygon kg; if (p.size() >= 3) { CGAL::min_parallelogram_2( p.vertices_begin(), p.vertices_end(), std::back_inserter(kg)); } RasterOp old = widget->rasterOp(); //save the initial raster mode widget->setRasterOp(XorROP); *widget << CGAL::FillColor(CGAL::GRAY); *widget << kg; widget->setRasterOp(old); widget->unlock(); } private: std::list *list_of_points; };//end class template class Qt_layer_show_strip : public CGAL::Qt_widget_layer { public: typedef typename R::Point_2 Point; typedef typename R::Segment_2 Segment; typedef typename R::Line_2 Line; typedef std::vector< Point > Container; typedef CGAL::Polygon_2< R, Container > Polygon; typedef CGAL::Creator_uniform_2< double, Point > Creator; Qt_layer_show_strip(std::list *pl){list_of_points = pl;}; void draw() { //DRAW the Line Strips widget->lock(); Polygon pts; typedef typename std::list::const_iterator Listconstiter; for (Listconstiter i = (*list_of_points).begin(); i != (*list_of_points).end(); ++i) pts.push_back(Point(i->x(), i->y())); Polygon p; CGAL::convex_hull_points_2( pts.vertices_begin(), pts.vertices_end(), std::back_inserter(p)); std::vector< Line > ll; if (p.size() >= 2) CGAL::min_strip_2( p.vertices_begin(), p.vertices_end(), std::back_inserter(ll)); *widget << CGAL::GREEN; for (typename std::vector::iterator it = ll.begin(); it != ll.end(); ++it) *widget << (*it); widget->unlock(); } private: std::list *list_of_points; };//end class template class Qt_layer_show_rectangle : public CGAL::Qt_widget_layer { public: typedef typename R::Point_2 Point; typedef typename R::Segment_2 Segment; typedef typename R::Line_2 Line; typedef std::vector< Point > Container; typedef CGAL::Polygon_2< R, Container > Polygon; typedef CGAL::Creator_uniform_2< double, Point > Creator; Qt_layer_show_rectangle(std::list *pl){list_of_points = pl;}; void draw() { //Draw the MINIMUM RECTANGLE widget->lock(); Polygon pts; typedef typename std::list::const_iterator Listconstiter; for (Listconstiter i = (*list_of_points).begin(); i != (*list_of_points).end(); ++i) pts.push_back(Point(i->x(), i->y())); Polygon p; CGAL::convex_hull_points_2( pts.vertices_begin(), pts.vertices_end(), std::back_inserter(p)); Polygon kg; if (p.size() >= 3) CGAL::min_rectangle_2( p.vertices_begin(), p.vertices_end(), std::back_inserter(kg)); RasterOp old = widget->rasterOp(); //save the initial raster mode widget->setRasterOp(XorROP); *widget << CGAL::FillColor(CGAL::BLUE); *widget << kg; widget->setRasterOp(old); widget->unlock(); } private: std::list *list_of_points; };//end class template class Qt_layer_show_points : public CGAL::Qt_widget_layer { public: typedef typename R::Point_2 Point; Qt_layer_show_points(std::list *pl){list_of_points = pl;}; void draw() { //Draw the points as CROSS widget->lock(); *widget << CGAL::PointSize(3) << CGAL::PointStyle(CGAL::DISC); *widget << CGAL::GREEN; typename std::list::iterator itp = (*list_of_points).begin(); while(itp!=(*list_of_points).end()) { *widget << (*itp++); } widget->unlock(); };//end draw(); private: std::list *list_of_points; };//end class