KiCad PCB EDA Suite
Loading...
Searching...
No Matches
graphics_importer_buffer.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 CERN
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * @author Janito Vaqueiro Ferreira Filho <[email protected]>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#ifndef GRAPHICS_IMPORTER_BUFFER_H
28#define GRAPHICS_IMPORTER_BUFFER_H
29
30#include "graphics_importer.h"
31
32#include <math/matrix3x3.h>
33#include <math/box2.h>
34#include <list>
35#include <wx/string.h>
36
37
39{
40public:
41 virtual ~IMPORTED_SHAPE() {}
42 virtual void ImportTo( GRAPHICS_IMPORTER& aImporter ) const = 0;
43
44 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const = 0;
45
46 virtual void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) = 0;
47
48 void SetParentShapeIndex( int aIndex ) { m_parentShapeIndex = aIndex; }
50
51 void SetSourceLayer( const wxString& aSourceLayer ) { m_sourceLayer = aSourceLayer; }
52 const wxString& GetSourceLayer() const { return m_sourceLayer; }
53
54 virtual BOX2D GetBoundingBox() const = 0;
55
56protected:
58 wxString m_sourceLayer;
59};
60
61
63{
64public:
65 IMPORTED_LINE( const VECTOR2D& aStart, const VECTOR2D& aEnd, const IMPORTED_STROKE& aStroke ) :
66 m_start( aStart ), m_end( aEnd ), m_stroke( aStroke )
67 {
68 }
69
70 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
71 {
72 aImporter.AddLine( m_start, m_end, m_stroke );
73 }
74
75 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
76 {
77 return std::make_unique<IMPORTED_LINE>( *this );
78 }
79
80 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
81 {
82 m_start = aTransform * m_start + aTranslation;
83 m_end = aTransform * m_end + aTranslation;
84 }
85
86 BOX2D GetBoundingBox() const override
87 {
88 BOX2D box;
89 box.Merge( m_start );
90 box.Merge( m_end );
91 return box;
92 }
93
94private:
98};
99
100
102{
103public:
104 IMPORTED_CIRCLE( const VECTOR2D& aCenter, double aRadius, const IMPORTED_STROKE& aStroke,
105 bool aFilled, const COLOR4D& aFillColor ) :
106 m_center( aCenter ),
107 m_radius( aRadius ), m_stroke( aStroke ), m_filled( aFilled ), m_fillColor( aFillColor )
108 {
109 }
110
111 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
112 {
114 }
115
116 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
117 {
118 return std::make_unique<IMPORTED_CIRCLE>( *this );
119 }
120
121 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
122 {
123 VECTOR2D newCenter = ( aTransform * m_center ) + aTranslation;
124
125 VECTOR2D newRadius = VECTOR2D( m_radius, 0 );
126 newRadius = aTransform * newRadius;
127
128 m_center = newCenter;
129 m_radius = newRadius.EuclideanNorm();
130 }
131
132 BOX2D GetBoundingBox() const override
133 {
134 BOX2D box;
137 return box;
138 }
139
140private:
142 double m_radius;
146};
147
148
150{
151public:
152 IMPORTED_ARC( const VECTOR2D& aCenter, const VECTOR2D& aStart, const EDA_ANGLE& aAngle,
153 const IMPORTED_STROKE& aStroke ) :
154 m_center( aCenter ),
155 m_start( aStart ), m_angle( aAngle ), m_stroke( aStroke )
156 {
157 }
158
159 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
160 {
161 aImporter.AddArc( m_center, m_start, m_angle, m_stroke );
162 }
163
164 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
165 {
166 return std::make_unique<IMPORTED_ARC>( *this );
167 }
168
169 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
170 {
171 m_start = aTransform * m_start + aTranslation;
172 m_center = aTransform * m_center + aTranslation;
173 }
174
175 BOX2D GetBoundingBox() const override
176 {
177 BOX2D box;
178
179 box.Merge( m_start + m_stroke.GetWidth() );
180 box.Merge( m_start - m_stroke.GetWidth() );
181
182 for( double angle = 0; angle < m_angle.AsDegrees(); angle += 5 )
183 {
184 EDA_ANGLE ang = EDA_ANGLE( angle );
185 VECTOR2D start = m_center + m_start;
186 VECTOR2D pt = {start.x * ang.Cos() + start.y * ang.Sin(),
187 start.x * ang.Sin() - start.y * ang.Cos()};
188
189 box.Merge( pt );
190 }
191
192 return box;
193 }
194
195private:
200};
201
202
204{
205public:
206 IMPORTED_POLYGON( const std::vector<VECTOR2D>& aVertices, const IMPORTED_STROKE& aStroke,
207 bool aFilled, const COLOR4D& aFillColor ) :
208 m_vertices( aVertices ),
209 m_stroke( aStroke ),
210 m_filled( aFilled ),
211 m_fillColor( aFillColor )
212 {
213 }
214
215 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
216 {
218 }
219
220 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
221 {
222 return std::make_unique<IMPORTED_POLYGON>( *this );
223 }
224
225 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
226 {
227 for( VECTOR2D& vert : m_vertices )
228 {
229 vert = aTransform * vert + aTranslation;
230 }
231 }
232
233 std::vector<VECTOR2D>& Vertices() { return m_vertices; }
234
235 bool IsFilled() const { return m_filled; }
236
237 const COLOR4D& GetFillColor() const { return m_fillColor; }
238
239 const IMPORTED_STROKE& GetStroke() const { return m_stroke; }
240
241 BOX2D GetBoundingBox() const override
242 {
243 BOX2D box;
244
245 for( const VECTOR2D& vert : m_vertices )
246 box.Merge( vert );
247
248 return box;
249 }
250
251private:
252 std::vector<VECTOR2D> m_vertices;
256};
257
258
260{
261public:
262 IMPORTED_TEXT( const VECTOR2D& aOrigin, const wxString& aText, double aHeight, double aWidth,
263 double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify,
264 GR_TEXT_V_ALIGN_T aVJustify, const COLOR4D& aColor ) :
265 m_origin( aOrigin ),
266 m_text( aText ), m_height( aHeight ), m_width( aWidth ), m_thickness( aThickness ),
267 m_orientation( aOrientation ), m_hJustify( aHJustify ), m_vJustify( aVJustify ),
268 m_color( aColor )
269 {
270 }
271
272 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
273 {
276 }
277
278 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
279 {
280 return std::make_unique<IMPORTED_TEXT>( *this );
281 }
282
283 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
284 {
285 m_origin = aTransform * m_origin + aTranslation;
286
287 VECTOR2D textSize = aTransform * VECTOR2D( m_width, m_height );
288 m_width = textSize.x;
289 m_height = textSize.y;
290 }
291
292 BOX2D GetBoundingBox() const override
293 {
294 BOX2D box;
295 box.Merge( m_origin );
296 box.Merge( m_origin + VECTOR2D( m_width * m_text.length(), m_height ) );
297
298 return box;
299 }
300
301private:
303 const wxString m_text;
304 double m_height;
305 double m_width;
311};
312
313
315{
316public:
317 IMPORTED_SPLINE( const VECTOR2D& aStart, const VECTOR2D& aBezierControl1,
318 const VECTOR2D& aBezierControl2, const VECTOR2D& aEnd,
319 const IMPORTED_STROKE& aStroke ) :
320 m_start( aStart ),
321 m_bezierControl1( aBezierControl1 ), m_bezierControl2( aBezierControl2 ), m_end( aEnd ),
322 m_stroke( aStroke )
323 {
324 }
325
326 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
327 {
329 }
330
331 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
332 {
333 return std::make_unique<IMPORTED_SPLINE>( *this );
334 }
335
336 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
337 {
338 m_start = aTransform * m_start + aTranslation;
339 m_bezierControl1 = aTransform * m_bezierControl1 + aTranslation;
340 m_bezierControl2 = aTransform * m_bezierControl2 + aTranslation;
341 m_end = aTransform * m_end + aTranslation;
342 }
343
344 BOX2D GetBoundingBox() const override
345 {
346 BOX2D box;
347 box.Merge( m_start );
348 box.Merge( m_end );
349 return box;
350 }
351
352private:
358};
359
360
362{
363public:
364 IMPORTED_ELLIPSE( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
365 const IMPORTED_STROKE& aStroke, bool aFilled, const COLOR4D& aFillColor ) :
366 m_center( aCenter ),
367 m_majorRadius( aMajorRadius ),
368 m_minorRadius( aMinorRadius ),
369 m_rotation( aRotation ),
370 m_stroke( aStroke ),
371 m_filled( aFilled ),
372 m_fillColor( aFillColor )
373 {
374 }
375
376 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
377 {
379 }
380
381 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
382 {
383 return std::make_unique<IMPORTED_ELLIPSE>( *this );
384 }
385
386 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
387 {
388 m_center = aTransform * m_center + aTranslation;
389
390 // Transform a unit major-axis vector to capture rotation+scale; no shear support.
391 VECTOR2D majorVec( m_majorRadius * m_rotation.Cos(), m_majorRadius * m_rotation.Sin() );
392 VECTOR2D minorVec( -m_minorRadius * m_rotation.Sin(), m_minorRadius * m_rotation.Cos() );
393
394 majorVec = aTransform * majorVec;
395 minorVec = aTransform * minorVec;
396
397 m_majorRadius = majorVec.EuclideanNorm();
398 m_minorRadius = minorVec.EuclideanNorm();
399 m_rotation = EDA_ANGLE( majorVec );
400 }
401
402 BOX2D GetBoundingBox() const override
403 {
404 BOX2D box;
405 VECTOR2D extent( std::max( m_majorRadius, m_minorRadius ), std::max( m_majorRadius, m_minorRadius ) );
406 box.Merge( m_center - extent );
407 box.Merge( m_center + extent );
408 return box;
409 }
410
411private:
419};
420
421
423{
424public:
425 IMPORTED_ELLIPSE_ARC( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
426 const EDA_ANGLE& aStartAngle, const EDA_ANGLE& aEndAngle, const IMPORTED_STROKE& aStroke ) :
427 m_center( aCenter ),
428 m_majorRadius( aMajorRadius ),
429 m_minorRadius( aMinorRadius ),
430 m_rotation( aRotation ),
431 m_startAngle( aStartAngle ),
432 m_endAngle( aEndAngle ),
433 m_stroke( aStroke )
434 {
435 }
436
437 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
438 {
440 m_stroke );
441 }
442
443 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
444 {
445 return std::make_unique<IMPORTED_ELLIPSE_ARC>( *this );
446 }
447
448 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
449 {
450 m_center = aTransform * m_center + aTranslation;
451
452 VECTOR2D majorVec( m_majorRadius * m_rotation.Cos(), m_majorRadius * m_rotation.Sin() );
453 VECTOR2D minorVec( -m_minorRadius * m_rotation.Sin(), m_minorRadius * m_rotation.Cos() );
454
455 majorVec = aTransform * majorVec;
456 minorVec = aTransform * minorVec;
457
458 m_majorRadius = majorVec.EuclideanNorm();
459 m_minorRadius = minorVec.EuclideanNorm();
460 m_rotation = EDA_ANGLE( majorVec );
461 }
462
463 BOX2D GetBoundingBox() const override
464 {
465 BOX2D box;
466 VECTOR2D extent( std::max( m_majorRadius, m_minorRadius ), std::max( m_majorRadius, m_minorRadius ) );
467 box.Merge( m_center - extent );
468 box.Merge( m_center + extent );
469 return box;
470 }
471
472private:
480};
481
482
484{
485public:
486 void SetCurrentSourceLayer( const wxString& aSourceLayer ) override { m_currentSourceLayer = aSourceLayer; }
487
488 const wxString& GetCurrentSourceLayer() const { return m_currentSourceLayer; }
489
490 void AddLine( const VECTOR2D& aStart, const VECTOR2D& aEnd,
491 const IMPORTED_STROKE& aStroke ) override;
492
493 void AddCircle( const VECTOR2D& aCenter, double aRadius, const IMPORTED_STROKE& aStroke,
494 bool aFilled, const COLOR4D& aFillColor = COLOR4D::UNSPECIFIED ) override;
495
496 void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, const EDA_ANGLE& aAngle,
497 const IMPORTED_STROKE& aStroke ) override;
498
499 void AddPolygon( const std::vector<VECTOR2D>& aVertices, const IMPORTED_STROKE& aStroke,
500 bool aFilled, const COLOR4D& aFillColor = COLOR4D::UNSPECIFIED ) override;
501
502 void AddText( const VECTOR2D& aOrigin, const wxString& aText, double aHeight, double aWidth,
503 double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify,
504 GR_TEXT_V_ALIGN_T aVJustify,
505 const COLOR4D& aColor = COLOR4D::UNSPECIFIED ) override;
506
507 void AddSpline( const VECTOR2D& aStart, const VECTOR2D& aBezierControl1,
508 const VECTOR2D& aBezierControl2, const VECTOR2D& aEnd,
509 const IMPORTED_STROKE& aStroke ) override;
510
511 void AddEllipse( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
512 const IMPORTED_STROKE& aStroke, bool aFilled,
513 const COLOR4D& aFillColor = COLOR4D::UNSPECIFIED ) override;
514
515 void AddEllipseArc( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
516 const EDA_ANGLE& aStartAngle, const EDA_ANGLE& aEndAngle,
517 const IMPORTED_STROKE& aStroke ) override;
518
519 void ImportTo( GRAPHICS_IMPORTER& aImporter );
520 void AddShape( std::unique_ptr<IMPORTED_SHAPE>& aShape );
521
522 std::list<std::unique_ptr<IMPORTED_SHAPE>>& GetShapes() { return m_shapes; }
523
524 std::vector<wxString> GetSourceLayers() const;
525
526 void ClearShapes() { m_shapes.clear(); }
527
529
530protected:
532 std::list<std::unique_ptr<IMPORTED_SHAPE>> m_shapes;
534};
535
536#endif /* GRAPHICS_IMPORTER_BUFFER */
BOX2< VECTOR2D > BOX2D
Definition box2.h:923
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition box2.h:658
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:402
double Sin() const
Definition eda_angle.h:178
double Cos() const
Definition eda_angle.h:197
std::list< std::unique_ptr< IMPORTED_SHAPE > > & GetShapes()
void AddCircle(const VECTOR2D &aCenter, double aRadius, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor=COLOR4D::UNSPECIFIED) override
Create an object representing a circle.
void AddSpline(const VECTOR2D &aStart, const VECTOR2D &aBezierControl1, const VECTOR2D &aBezierControl2, const VECTOR2D &aEnd, const IMPORTED_STROKE &aStroke) override
Create an object representing an arc.
void AddLine(const VECTOR2D &aStart, const VECTOR2D &aEnd, const IMPORTED_STROKE &aStroke) override
Create an object representing a line segment.
const wxString & GetCurrentSourceLayer() const
void AddEllipse(const VECTOR2D &aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE &aRotation, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor=COLOR4D::UNSPECIFIED) override
Create an object representing a closed ellipse.
void ImportTo(GRAPHICS_IMPORTER &aImporter)
void SetCurrentSourceLayer(const wxString &aSourceLayer) override
Set the source layer for the next buffered shape to be imported.
std::vector< wxString > GetSourceLayers() const
void AddArc(const VECTOR2D &aCenter, const VECTOR2D &aStart, const EDA_ANGLE &aAngle, const IMPORTED_STROKE &aStroke) override
Create an object representing an arc.
void AddText(const VECTOR2D &aOrigin, const wxString &aText, double aHeight, double aWidth, double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify, GR_TEXT_V_ALIGN_T aVJustify, const COLOR4D &aColor=COLOR4D::UNSPECIFIED) override
Create an object representing a text.
std::list< std::unique_ptr< IMPORTED_SHAPE > > m_shapes
List of imported shapes.
void AddShape(std::unique_ptr< IMPORTED_SHAPE > &aShape)
void AddPolygon(const std::vector< VECTOR2D > &aVertices, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor=COLOR4D::UNSPECIFIED) override
Create an object representing a polygon.
void AddEllipseArc(const VECTOR2D &aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE &aRotation, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aEndAngle, const IMPORTED_STROKE &aStroke) override
Create an object representing an elliptical arc.
Interface that creates objects representing shapes for a given data model.
virtual void AddArc(const VECTOR2D &aCenter, const VECTOR2D &aStart, const EDA_ANGLE &aAngle, const IMPORTED_STROKE &aStroke)=0
Create an object representing an arc.
virtual void AddPolygon(const std::vector< VECTOR2D > &aVertices, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor)=0
Create an object representing a polygon.
virtual void AddEllipse(const VECTOR2D &aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE &aRotation, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor=COLOR4D::UNSPECIFIED)=0
Create an object representing a closed ellipse.
virtual void AddLine(const VECTOR2D &aOrigin, const VECTOR2D &aEnd, const IMPORTED_STROKE &aStroke)=0
Create an object representing a line segment.
virtual void AddEllipseArc(const VECTOR2D &aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE &aRotation, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aEndAngle, const IMPORTED_STROKE &aStroke)=0
Create an object representing an elliptical arc.
virtual void AddText(const VECTOR2D &aOrigin, const wxString &aText, double aHeight, double aWidth, double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify, GR_TEXT_V_ALIGN_T aVJustify, const COLOR4D &aColor)=0
Create an object representing a text.
virtual void AddCircle(const VECTOR2D &aCenter, double aRadius, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor)=0
Create an object representing a circle.
virtual void AddSpline(const VECTOR2D &aStart, const VECTOR2D &aBezierControl1, const VECTOR2D &aBezierControl2, const VECTOR2D &aEnd, const IMPORTED_STROKE &aStroke)=0
Create an object representing an arc.
IMPORTED_STROKE m_stroke
BOX2D GetBoundingBox() const override
IMPORTED_ARC(const VECTOR2D &aCenter, const VECTOR2D &aStart, const EDA_ANGLE &aAngle, const IMPORTED_STROKE &aStroke)
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
BOX2D GetBoundingBox() const override
IMPORTED_CIRCLE(const VECTOR2D &aCenter, double aRadius, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor)
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
IMPORTED_ELLIPSE_ARC(const VECTOR2D &aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE &aRotation, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aEndAngle, const IMPORTED_STROKE &aStroke)
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
BOX2D GetBoundingBox() const override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
IMPORTED_ELLIPSE(const VECTOR2D &aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE &aRotation, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor)
BOX2D GetBoundingBox() const override
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
IMPORTED_LINE(const VECTOR2D &aStart, const VECTOR2D &aEnd, const IMPORTED_STROKE &aStroke)
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
IMPORTED_STROKE m_stroke
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
BOX2D GetBoundingBox() const override
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
std::vector< VECTOR2D > & Vertices()
const IMPORTED_STROKE & GetStroke() const
IMPORTED_POLYGON(const std::vector< VECTOR2D > &aVertices, const IMPORTED_STROKE &aStroke, bool aFilled, const COLOR4D &aFillColor)
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
BOX2D GetBoundingBox() const override
const COLOR4D & GetFillColor() const
std::vector< VECTOR2D > m_vertices
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
virtual void ImportTo(GRAPHICS_IMPORTER &aImporter) const =0
void SetSourceLayer(const wxString &aSourceLayer)
void SetParentShapeIndex(int aIndex)
virtual void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation)=0
virtual BOX2D GetBoundingBox() const =0
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const =0
const wxString & GetSourceLayer() const
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
BOX2D GetBoundingBox() const override
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
IMPORTED_SPLINE(const VECTOR2D &aStart, const VECTOR2D &aBezierControl1, const VECTOR2D &aBezierControl2, const VECTOR2D &aEnd, const IMPORTED_STROKE &aStroke)
A clone of IMPORTED_STROKE, but with floating-point width.
void Transform(const MATRIX3x3D &aTransform, const VECTOR2D &aTranslation) override
GR_TEXT_H_ALIGN_T m_hJustify
IMPORTED_TEXT(const VECTOR2D &aOrigin, const wxString &aText, double aHeight, double aWidth, double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify, GR_TEXT_V_ALIGN_T aVJustify, const COLOR4D &aColor)
GR_TEXT_V_ALIGN_T m_vJustify
BOX2D GetBoundingBox() const override
virtual std::unique_ptr< IMPORTED_SHAPE > clone() const override
void ImportTo(GRAPHICS_IMPORTER &aImporter) const override
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:105
T EuclideanNorm() const
Compute the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
Definition vector2d.h:283
MATRIX3x3< double > MATRIX3x3D
Definition matrix3x3.h:473
GR_TEXT_H_ALIGN_T
This is API surface mapped to common.types.HorizontalAlignment.
GR_TEXT_V_ALIGN_T
This is API surface mapped to common.types.VertialAlignment.
VECTOR2< double > VECTOR2D
Definition vector2d.h:686