// Copyright (c) 2008 GeometryFactory Sarl (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v5.1/GraphicsView/include/CGAL/Qt/StreamLinesGraphicsItem.h $ // $Id: StreamLinesGraphicsItem.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Andreas Fabri // Laurent Rineau #ifndef CGAL_QT_STREAM_LINES_GRAPHICS_ITEM_H #define CGAL_QT_STREAM_LINES_GRAPHICS_ITEM_H #include #include #include #include #include #include #include #include class QGraphicsSceneMouseEvent; namespace CGAL { namespace Qt { template class StreamLinesGraphicsItem : public GraphicsItem { typedef typename SL::Stream_line_iterator_2 Stream_line_iterator; typedef typename SL::Point_iterator_2 Point_iterator; typedef typename K::Point_2 Point_2; typedef typename K::Segment_2 Segment_2; public: StreamLinesGraphicsItem(SL* sl); 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: SL * sl; QPen edges_pen; }; template StreamLinesGraphicsItem::StreamLinesGraphicsItem(SL * sl) : sl(sl) { setZValue(3); } template QRectF StreamLinesGraphicsItem::boundingRect() const { QRectF rect = CGAL::Qt::viewportsBbox(scene()); return rect; } template void StreamLinesGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * /*w*/) { painter->setPen(this->edgesPen()); QRectF rect = option->exposedRect; PainterOstream pos(painter, rect); for (Stream_line_iterator sit = sl->begin(); sit != sl->end(); sit++){ Point_iterator pit = sit->first; Point_2 p = *pit; ++pit; for (; pit != (*sit).second; pit++){ Point_2 q = *pit; pos << Segment_2(p,q); p = q; } } } template void StreamLinesGraphicsItem::modelChanged() { update(); } } // namespace Qt } // namespace CGAL #endif // CGAL_QT_STREAM_LINES_GRAPHICS_ITEM_H