// 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_CIRCULAR_ARC_GRAPHICS_ITEM_H #define CGAL_QT_CIRCULAR_ARC_GRAPHICS_ITEM_H #include #include #include #include #include #include #include #include namespace CGAL { namespace Qt { template class CircularArcGraphicsItem : public GraphicsItem { typedef typename CK::Point_2 Point_2; typedef typename CK::Circle_2 Circle_2; typedef typename CK::Circular_arc_2 Circular_arc_2; public: CircularArcGraphicsItem(); void modelChanged(); public: QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); const QPen& verticesPen() const { return this->vertices_pen; } const QPen& edgesPen() const { return edges_pen; } void setVerticesPen(const QPen& pen) { this->vertices_pen = pen; } void setEdgesPen(const QPen& pen) { edges_pen = pen; } void setArc(const Circular_arc_2& a); Circular_arc_2 arc() const { return arc_; } protected: void updateBoundingBox(); QPainter* m_painter; PainterOstream painterostream; QRectF bounding_rect; QPen edges_pen; QPen vertices_pen; Circular_arc_2 arc_; }; template void CircularArcGraphicsItem::setArc(const Circular_arc_2& a) { arc_ = a; updateBoundingBox(); update(); } template CircularArcGraphicsItem::CircularArcGraphicsItem() : painterostream(0) { this->hide(); setZValue(3); } template QRectF CircularArcGraphicsItem::boundingRect() const { return bounding_rect; } template void CircularArcGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) { painter->setPen(this->edgesPen()); painterostream = PainterOstream(painter); painterostream << arc_; } template void CircularArcGraphicsItem::updateBoundingBox() { Converter convert; prepareGeometryChange(); //bounding_rect = convert(arc_.supporting_circle().bbox()); bounding_rect = convert(arc_.bbox()); } template void CircularArcGraphicsItem::modelChanged() { updateBoundingBox(); update(); } } // namespace Qt } // namespace CGAL #endif // CGAL_QT_CIRCULAR_ARC_GRAPHICS_ITEM_H