// Copyright (c) 2008 GeometryFactory Sarl (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // You can redistribute it and/or modify it under the terms of the GNU // General Public License as published by the Free Software Foundation, // either version 3 of the License, or (at your option) any later version. // // 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$ // SPDX-License-Identifier: GPL-3.0+ // // // Author(s) : Andreas Fabri // Laurent Rineau #ifndef CGAL_QT_APOLLONIUS_GRAPH_GRAPHICS_ITEM_H #define CGAL_QT_APOLLONIUS_GRAPH_GRAPHICS_ITEM_H #include #include #include #include #include #include #include #include class QGraphicsSceneMouseEvent; namespace CGAL { namespace Qt { template class ApolloniusGraphGraphicsItem : public GraphicsItem { public: ApolloniusGraphGraphicsItem(AG* ag); 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; } const QPen& sitesPen() const { return sites_pen; } void setSitesPen(const QPen& pen) { sites_pen = pen; } private: AG * ag; QPen edges_pen, sites_pen; }; template ApolloniusGraphGraphicsItem::ApolloniusGraphGraphicsItem(AG * ag) : ag(ag) { setZValue(3); } template QRectF ApolloniusGraphGraphicsItem::boundingRect() const { QRectF rect = CGAL::Qt::viewportsBbox(scene()); return rect; } template void ApolloniusGraphGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * /*w*/) { painter->setPen(this->sitesPen()); QRectF rect = option->exposedRect; PainterOstream pos(painter, rect); for(typename AG::Sites_iterator it = ag->sites_begin(); it != ag->sites_end(); it++ ) { pos << typename K::Circle_2(it->point(), square( it->weight())); } painter->setPen(this->edgesPen()); ag->draw_dual(pos); } template void ApolloniusGraphGraphicsItem::modelChanged() { update(); } } // namespace Qt } // namespace CGAL #endif // CGAL_QT_APOLLONIUS_GRAPH_GRAPHICS_ITEM_H