// Copyright (c) 2008 GeometryFactory Sarl (France). // 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. // // $URL$ // $Id$ // // // Author(s) : Andreas Fabri // Laurent Rineau #ifndef CGAL_QT_VORONOI_GRAPHICS_ITEM_H #define CGAL_QT_VORONOI_GRAPHICS_ITEM_H #include #include #include #include #include #include #include class QGraphicsSceneMouseEvent; namespace CGAL { namespace Qt { template class VoronoiGraphicsItem : public GraphicsItem { public: VoronoiGraphicsItem(DT * dt_); QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); void modelChanged(); const QPen& edgesPen() const { return edges_pen; } void setEdgesPen(const QPen& pen) { edges_pen = pen; } private: DT * dt; QPen edges_pen; }; template VoronoiGraphicsItem
::VoronoiGraphicsItem(DT * dt_) : dt(dt_) { setZValue(3); } template QRectF VoronoiGraphicsItem
::boundingRect() const { QRectF rect; QList views = scene()->views(); for (int i = 0; i < views.size(); ++i) { QGraphicsView *view = views.at(i); QRect vprect = view->viewport()->rect(); QPoint tl = vprect.topLeft(); QPoint br = vprect.bottomRight(); QPointF tlf = view->mapToScene(tl); QPointF brf = view->mapToScene(br); rect |= QRectF(tlf, brf); } return rect; } template void VoronoiGraphicsItem
::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *w) { QRectF rect = option->exposedRect; PainterOstream pos(painter, rect); painter->setPen(edgesPen()); for(typename DT::Finite_edges_iterator eit = dt->finite_edges_begin(); eit != dt->finite_edges_end(); eit++){ CGAL::Object o = dt->dual(eit); typename DT::Segment s; typename DT::Geom_traits::Ray_2 r; typename DT::Geom_traits::Line_2 l; if(CGAL::assign(s,o)){ pos << s; } else if(CGAL::assign(r,o)) { pos << r; }else if(CGAL::assign(l,o)) { pos << l; } } } template void VoronoiGraphicsItem::modelChanged() { update(); } } // namespace Qt } // namespace CGAL #endif // CGAL_QT_VORONOI_GRAPHICS_ITEM_H