KiCad PCB EDA Suite
Loading...
Searching...
No Matches
polygon_item.cpp
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-2022 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
26#include <gal/painter.h>
27#include <view/view.h>
28
29using namespace KIGFX::PREVIEW;
30
31const double POLYGON_ITEM::POLY_LINE_WIDTH = 1;
32
35{
36}
37
38
39void POLYGON_ITEM::SetPoints( const SHAPE_LINE_CHAIN& aLockedInPts,
40 const SHAPE_LINE_CHAIN& aLeaderPts, const SHAPE_LINE_CHAIN& aLoopPts )
41{
42 m_lockedChain = aLockedInPts;
43 m_leaderChain = aLeaderPts;
44 m_loopChain = aLoopPts;
45
48
49 for( int i = 0; i < aLockedInPts.PointCount(); ++i )
50 m_polyfill.Append( aLockedInPts.CPoint( i ) );
51
52 for( int i = 0; i < aLeaderPts.PointCount(); ++i )
53 m_polyfill.Append( aLeaderPts.CPoint( i ) );
54
55 for( int i = 0; i < aLoopPts.PointCount(); ++i )
56 m_polyfill.Append( aLoopPts.CPoint( i ) );
57}
58
59
61{
62 KIGFX::GAL& gal = *aView->GetGAL();
63 RENDER_SETTINGS* renderSettings = aView->GetPainter()->GetSettings();
64
65 if( m_lockedChain.PointCount() >= 2 )
66 {
67 gal.SetLineWidth( (float) aView->ToWorld( POLY_LINE_WIDTH ) );
69 }
70
71 // draw the leader line in a different color
72 if( m_leaderChain.PointCount() >= 2 )
73 {
74 gal.SetStrokeColor( renderSettings->GetLayerColor( LAYER_AUX_ITEMS ) );
76 }
77
78 gal.SetIsStroke( false );
79
80 for( int j = 0; j < m_polyfill.OutlineCount(); ++j )
81 {
82 const SHAPE_LINE_CHAIN& outline = m_polyfill.COutline( j );
83
84 if( outline.PointCount() >= 2 )
85 gal.DrawPolygon( outline );
86 }
87}
88
89
91{
92 return m_polyfill.BBox();
93}
Abstract interface for drawing on a 2D-surface.
virtual void DrawPolygon(const std::deque< VECTOR2D > &aPointList)
Draw a polygon.
virtual void SetLineWidth(float aLineWidth)
Set the line width.
virtual void DrawPolyline(const std::deque< VECTOR2D > &aPointList)
Draw a polyline.
virtual void SetStrokeColor(const COLOR4D &aColor)
Set the stroke color.
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
void drawPreviewShape(KIGFX::VIEW *aView) const override
< Draw rectangle and center line onto GAL
SHAPE_LINE_CHAIN m_lockedChain
Definition: polygon_item.h:69
void SetPoints(const SHAPE_LINE_CHAIN &aLockedInPts, const SHAPE_LINE_CHAIN &aLeaderPts, const SHAPE_LINE_CHAIN &aLoopPts)
Set the polygon points.
static const double POLY_LINE_WIDTH
Definition: polygon_item.h:74
SHAPE_LINE_CHAIN m_leaderChain
Definition: polygon_item.h:69
POLYGON_ITEM()
Gets the bounding box of the polygon.
SHAPE_LINE_CHAIN m_loopChain
polygon fill
Definition: polygon_item.h:69
SIMPLE_OVERLAY_ITEM is class that represents a visual area drawn on a canvas, used to temporarily dem...
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:68
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:197
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:449
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:215
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
int PointCount() const
Return the number of points (vertices) in this line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
void RemoveAllContours()
Remove all outlines & holes (clears) the polygon set.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline)
int NewOutline()
Creates a new empty polygon in the set and returns its index.
int OutlineCount() const
Return the number of outlines in the set.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
const BOX2I BBox(int aClearance=0) const override
Compute a bounding box of the shape, with a margin of aClearance a collision.
@ LAYER_AUX_ITEMS
Auxiliary items (guides, rule, etc)
Definition: layer_ids.h:225