Krita Source Code Documentation
Loading...
Searching...
No Matches
Ellipse.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Geoffry Song <goffrie@gmail.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#ifndef _ELLIPSE_H_
8#define _ELLIPSE_H_
9
10#include <QPointF>
11#include <QTransform>
12
14{
15public:
16 Ellipse();
17 Ellipse(const QPointF& p1, const QPointF& p2, const QPointF& p3);
18 ~Ellipse();
19
20 QPointF project(const QPointF&) const; // find a close point on the ellipse
21 QRectF boundingRect() const; // find an axis-aligned box bounding this ellipse (inexact)
22
23 bool set(const QPointF& m1, const QPointF& m2, const QPointF& p); // set all points
24
25 const QPointF& major1() const { return p1; }
26 bool setMajor1(const QPointF& p);
27 const QPointF& major2() const { return p2; }
28 bool setMajor2(const QPointF& p);
29 const QPointF& point() const { return p3; }
30 bool setPoint(const QPointF& p);
31 const QTransform& getTransform() const { return matrix; }
32 const QTransform& getInverse() const { return inverse; }
33 qreal semiMajor() const { return a; }
34 qreal semiMinor() const { return b; }
35
36private:
37 bool changeMajor(); // determine 'a', 'b', 'matrix' and 'inverse'
38 bool changeMinor(); // determine 'b'
39
40 QTransform matrix; // transformation turning p1, p2 and p3 into their corresponding points on the ellipse in canonical position
41 QTransform inverse; // inverse transformation
42 qreal a; // semi-major axis: half the distance between p1 and p2 (horizontal axis)
43 qreal b; // semi-minor axis (vertical axis)
44 // a may not actually be larger than b, but we don't care that much
45
46 QPointF p1;
47 QPointF p2;
48 QPointF p3;
49};
50
51#endif
const Params2D p
bool setPoint(const QPointF &p)
Definition Ellipse.cc:177
qreal semiMajor() const
Definition Ellipse.h:33
QPointF p2
Definition Ellipse.h:47
QTransform inverse
Definition Ellipse.h:41
const QPointF & major1() const
Definition Ellipse.h:25
const QTransform & getInverse() const
Definition Ellipse.h:32
bool set(const QPointF &m1, const QPointF &m2, const QPointF &p)
Definition Ellipse.cc:23
QPointF p1
Definition Ellipse.h:46
bool changeMinor()
Definition Ellipse.cc:145
~Ellipse()
Definition Ellipse.cc:19
QRectF boundingRect() const
Definition Ellipse.cc:62
qreal b
Definition Ellipse.h:43
QTransform matrix
Definition Ellipse.h:40
Ellipse()
Definition Ellipse.cc:12
bool changeMajor()
Definition Ellipse.cc:87
bool setMajor1(const QPointF &p)
Definition Ellipse.cc:168
QPointF p3
Definition Ellipse.h:48
const QTransform & getTransform() const
Definition Ellipse.h:31
const QPointF & major2() const
Definition Ellipse.h:27
const QPointF & point() const
Definition Ellipse.h:29
qreal a
Definition Ellipse.h:42
qreal semiMinor() const
Definition Ellipse.h:34
QPointF project(const QPointF &) const
Definition Ellipse.cc:39
bool setMajor2(const QPointF &p)
Definition Ellipse.cc:173