/* Copyright 2006-2025 The QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: 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 2 of the License, or (at your option) any later version. QElectroTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QElectroTech. If not, see . */ #ifndef ABSTRACTPARTELLIPSE_H #define ABSTRACTPARTELLIPSE_H #include "customelementgraphicpart.h" class QetGraphicsHandlerItem; /** @brief The AbstractPartEllipse class This is the base class for all ellipse based item like ellipse, circle, arc. This class only provide common method for edit the ellipse like rect that contain the ellipse. All coordinates is in item coordinate, except pos(), center(), centerX() and centerY() which are in parent coordinate (or scene if no parent). In several points, this class is a copy of QGraphicsEllipseItem with some change, (the use of Q_PROPERTY) to be easily used with Element editor. */ class AbstractPartEllipse : public CustomElementGraphicPart { Q_OBJECT Q_PROPERTY(int startAngle READ startAngle WRITE setStartAngle) Q_PROPERTY(int spanAngle READ spanAngle WRITE setSpanAngle) Q_PROPERTY(QRectF rect READ rect WRITE setRect) // constructors, destructor public: AbstractPartEllipse(QETElementEditor *editor, QGraphicsItem * parent = nullptr); ~AbstractPartEllipse() override; private: AbstractPartEllipse(const AbstractPartEllipse &); signals: void rectChanged(); void startAngleChanged(); void spanAngleChanged(); // methods public: void startUserTransformation (const QRectF &) override; void handleUserTransformation (const QRectF &, const QRectF &) override; //Coordinates QRectF boundingRect() const override; QRectF sceneGeometricRect() const override; virtual QPointF sceneTopLeft() const; QRectF rect() const; virtual void setRect (const QRectF &rect); bool isUseless() const override; int startAngle() const {return m_start_angle;} virtual void setStartAngle (const int &start_angle); int spanAngle () const {return m_span_angle;} virtual void setSpanAngle (const int &span_angle); protected: QList saved_points_; QRectF m_rect; qreal m_start_angle; qreal m_span_angle; QVector m_handler_vector; }; #endif // ABSTRACTPARTELLIPSE_H