KiCad PCB EDA Suite
Loading...
Searching...
No Matches
arc_geom_manager.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2017-2021 Kicad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#ifndef PREVIEW_ITEMS_ARC_GEOMETRY_MANAGER_H
25#define PREVIEW_ITEMS_ARC_GEOMETRY_MANAGER_H
26
28#include <geometry/eda_angle.h>
29
30namespace KIGFX {
31namespace PREVIEW {
32
33
43{
44public:
46 {}
47
49 {
54 };
55
56 int getMaxStep() const override
57 {
58 return COMPLETE;
59 }
60
66 {
67 return static_cast<ARC_STEPS>( getStep() );
68 }
69
70 bool acceptPoint( const VECTOR2I& aPt ) override;
71
73 void SetClockwise( bool aCw );
74
76 void ToggleClockwise();
77
79 void SetAngleSnap( bool aSnap )
80 {
81 m_angleSnap = aSnap;
82 }
83
84 /*
85 * Geometry query interface - used by clients of the manager
86 */
87
89 VECTOR2I GetOrigin() const;
90
93
96
98 double GetRadius() const;
99
101 EDA_ANGLE GetStartAngle() const;
102
104 EDA_ANGLE GetSubtended() const;
105
106private:
107
108 /*
109 * Point acceptor functions
110 */
111
113 bool setOrigin( const VECTOR2I& aOrigin );
114
116 bool setStart( const VECTOR2I& aEnd );
117
119 bool setEnd( const VECTOR2I& aCursor );
120
121 /*
122 * Arc geometry
123 */
124 bool m_clockwise = true;
126 double m_radius = 0.0;
129
130 /*
131 * construction parameters
132 */
133 bool m_angleSnap = false;
134 bool m_directionLocked = false;
135};
136} // PREVIEW
137} // KIGFX
138
139#endif // PREVIEW_ITEMS_ARC_GEOMETRY_MANAGER_H
Manage the construction of a circular arc though sequential setting of critical points: center,...
VECTOR2I GetOrigin() const
< Get the center point of the arc (valid when state > SET_ORIGIN)
ARC_STEPS GetStep() const
Get the current step the manager is on (useful when drawing something depends on the current state)
void SetClockwise(bool aCw)
Reverse the current are direction.
int getMaxStep() const override
The highest step this manager has - used to recognize completion and to clamp the step as it advances...
void ToggleClockwise()
Set angle snapping (for the next point)
EDA_ANGLE GetStartAngle() const
Get the angle of the vector leading to the end point (valid if step >= SET_ANGLE)
bool setStart(const VECTOR2I &aEnd)
Set a point of the second radius line (collinear with arc end)
VECTOR2I GetStartRadiusEnd() const
Get the coordinates of the arc end point.
bool acceptPoint(const VECTOR2I &aPt) override
The arc to be clockwise from start.
VECTOR2I GetEndRadiusEnd() const
Get the radius of the arc (valid if step >= SET_START)
bool setEnd(const VECTOR2I &aCursor)
double GetRadius() const
Get the angle of the vector leading to the start point (valid if step >= SET_START)
bool setOrigin(const VECTOR2I &aOrigin)
< Set the center point of the arc
@ SET_ORIGIN
Waiting to lock in origin point.
@ SET_ANGLE
Waiting to lock in the arc end point.
@ SET_START
Waiting to lock in the arc start point.
A geometry manager that works by accepting a sequence of points and advancing though stages of geomet...
The Cairo implementation of the graphics abstraction layer.
Definition: color4d.cpp:247