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, see <https://www.gnu.org/licenses/>.
21 */
22
23#ifndef GRAPHICS_IMPORTER_BUFFER_H
24#define GRAPHICS_IMPORTER_BUFFER_H
25
26#include "graphics_importer.h"
27
28#include <math/matrix3x3.h>
29#include <math/box2.h>
30#include <list>
31#include <wx/string.h>
32
33
35{
36public:
37 virtual ~IMPORTED_SHAPE() {}
38 virtual void ImportTo( GRAPHICS_IMPORTER& aImporter ) const = 0;
39
40 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const = 0;
41
42 virtual void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) = 0;
43
44 void SetParentShapeIndex( int aIndex ) { m_parentShapeIndex = aIndex; }
46
47 void SetSourceLayer( const wxString& aSourceLayer ) { m_sourceLayer = aSourceLayer; }
48 const wxString& GetSourceLayer() const { return m_sourceLayer; }
49
50 virtual BOX2D GetBoundingBox() const = 0;
51
52protected:
54 wxString m_sourceLayer;
55};
56
57
59{
60public:
61 IMPORTED_LINE( const VECTOR2D& aStart, const VECTOR2D& aEnd, const IMPORTED_STROKE& aStroke ) :
62 m_start( aStart ), m_end( aEnd ), m_stroke( aStroke )
63 {
64 }
65
66 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
67 {
68 aImporter.AddLine( m_start, m_end, m_stroke );
69 }
70
71 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
72 {
73 return std::make_unique<IMPORTED_LINE>( *this );
74 }
75
76 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
77 {
78 m_start = aTransform * m_start + aTranslation;
79 m_end = aTransform * m_end + aTranslation;
80 }
81
82 BOX2D GetBoundingBox() const override
83 {
84 BOX2D box;
85 box.Merge( m_start );
86 box.Merge( m_end );
87 return box;
88 }
89
90private:
94};
95
96
98{
99public:
100 IMPORTED_CIRCLE( const VECTOR2D& aCenter, double aRadius, const IMPORTED_STROKE& aStroke,
101 bool aFilled, const COLOR4D& aFillColor ) :
102 m_center( aCenter ),
103 m_radius( aRadius ), m_stroke( aStroke ), m_filled( aFilled ), m_fillColor( aFillColor )
104 {
105 }
106
107 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
108 {
110 }
111
112 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
113 {
114 return std::make_unique<IMPORTED_CIRCLE>( *this );
115 }
116
117 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
118 {
119 VECTOR2D newCenter = ( aTransform * m_center ) + aTranslation;
120
121 VECTOR2D newRadius = VECTOR2D( m_radius, 0 );
122 newRadius = aTransform * newRadius;
123
124 m_center = newCenter;
125 m_radius = newRadius.EuclideanNorm();
126 }
127
128 BOX2D GetBoundingBox() const override
129 {
130 BOX2D box;
133 return box;
134 }
135
136private:
138 double m_radius;
142};
143
144
146{
147public:
148 IMPORTED_ARC( const VECTOR2D& aCenter, const VECTOR2D& aStart, const EDA_ANGLE& aAngle,
149 const IMPORTED_STROKE& aStroke ) :
150 m_center( aCenter ),
151 m_start( aStart ), m_angle( aAngle ), m_stroke( aStroke )
152 {
153 }
154
155 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
156 {
157 aImporter.AddArc( m_center, m_start, m_angle, m_stroke );
158 }
159
160 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
161 {
162 return std::make_unique<IMPORTED_ARC>( *this );
163 }
164
165 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
166 {
167 m_start = aTransform * m_start + aTranslation;
168 m_center = aTransform * m_center + aTranslation;
169 }
170
171 BOX2D GetBoundingBox() const override
172 {
173 BOX2D box;
174
175 box.Merge( m_start + m_stroke.GetWidth() );
176 box.Merge( m_start - m_stroke.GetWidth() );
177
178 for( double angle = 0; angle < m_angle.AsDegrees(); angle += 5 )
179 {
180 EDA_ANGLE ang = EDA_ANGLE( angle );
181 VECTOR2D start = m_center + m_start;
182 VECTOR2D pt = {start.x * ang.Cos() + start.y * ang.Sin(),
183 start.x * ang.Sin() - start.y * ang.Cos()};
184
185 box.Merge( pt );
186 }
187
188 return box;
189 }
190
191private:
196};
197
198
200{
201public:
202 IMPORTED_POLYGON( const std::vector<VECTOR2D>& aVertices, const IMPORTED_STROKE& aStroke,
203 bool aFilled, const COLOR4D& aFillColor ) :
204 m_vertices( aVertices ),
205 m_stroke( aStroke ),
206 m_filled( aFilled ),
207 m_fillColor( aFillColor )
208 {
209 }
210
211 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
212 {
214 }
215
216 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
217 {
218 return std::make_unique<IMPORTED_POLYGON>( *this );
219 }
220
221 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
222 {
223 for( VECTOR2D& vert : m_vertices )
224 {
225 vert = aTransform * vert + aTranslation;
226 }
227 }
228
229 std::vector<VECTOR2D>& Vertices() { return m_vertices; }
230
231 bool IsFilled() const { return m_filled; }
232
233 const COLOR4D& GetFillColor() const { return m_fillColor; }
234
235 const IMPORTED_STROKE& GetStroke() const { return m_stroke; }
236
237 BOX2D GetBoundingBox() const override
238 {
239 BOX2D box;
240
241 for( const VECTOR2D& vert : m_vertices )
242 box.Merge( vert );
243
244 return box;
245 }
246
247private:
248 std::vector<VECTOR2D> m_vertices;
252};
253
254
256{
257public:
258 IMPORTED_TEXT( const VECTOR2D& aOrigin, const wxString& aText, double aHeight, double aWidth,
259 double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify,
260 GR_TEXT_V_ALIGN_T aVJustify, const COLOR4D& aColor ) :
261 m_origin( aOrigin ),
262 m_text( aText ), m_height( aHeight ), m_width( aWidth ), m_thickness( aThickness ),
263 m_orientation( aOrientation ), m_hJustify( aHJustify ), m_vJustify( aVJustify ),
264 m_color( aColor )
265 {
266 }
267
268 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
269 {
272 }
273
274 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
275 {
276 return std::make_unique<IMPORTED_TEXT>( *this );
277 }
278
279 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
280 {
281 m_origin = aTransform * m_origin + aTranslation;
282
283 VECTOR2D textSize = aTransform * VECTOR2D( m_width, m_height );
284 m_width = textSize.x;
285 m_height = textSize.y;
286 }
287
288 BOX2D GetBoundingBox() const override
289 {
290 BOX2D box;
291 box.Merge( m_origin );
292 box.Merge( m_origin + VECTOR2D( m_width * m_text.length(), m_height ) );
293
294 return box;
295 }
296
297private:
299 const wxString m_text;
300 double m_height;
301 double m_width;
307};
308
309
311{
312public:
313 IMPORTED_SPLINE( const VECTOR2D& aStart, const VECTOR2D& aBezierControl1,
314 const VECTOR2D& aBezierControl2, const VECTOR2D& aEnd,
315 const IMPORTED_STROKE& aStroke ) :
316 m_start( aStart ),
317 m_bezierControl1( aBezierControl1 ), m_bezierControl2( aBezierControl2 ), m_end( aEnd ),
318 m_stroke( aStroke )
319 {
320 }
321
322 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
323 {
325 }
326
327 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
328 {
329 return std::make_unique<IMPORTED_SPLINE>( *this );
330 }
331
332 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
333 {
334 m_start = aTransform * m_start + aTranslation;
335 m_bezierControl1 = aTransform * m_bezierControl1 + aTranslation;
336 m_bezierControl2 = aTransform * m_bezierControl2 + aTranslation;
337 m_end = aTransform * m_end + aTranslation;
338 }
339
340 BOX2D GetBoundingBox() const override
341 {
342 BOX2D box;
343 box.Merge( m_start );
344 box.Merge( m_end );
345 return box;
346 }
347
348private:
354};
355
356
358{
359public:
360 IMPORTED_ELLIPSE( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
361 const IMPORTED_STROKE& aStroke, bool aFilled, const COLOR4D& aFillColor ) :
362 m_center( aCenter ),
363 m_majorRadius( aMajorRadius ),
364 m_minorRadius( aMinorRadius ),
365 m_rotation( aRotation ),
366 m_stroke( aStroke ),
367 m_filled( aFilled ),
368 m_fillColor( aFillColor )
369 {
370 }
371
372 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
373 {
375 }
376
377 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
378 {
379 return std::make_unique<IMPORTED_ELLIPSE>( *this );
380 }
381
382 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
383 {
384 m_center = aTransform * m_center + aTranslation;
385
386 // Transform a unit major-axis vector to capture rotation+scale; no shear support.
387 VECTOR2D majorVec( m_majorRadius * m_rotation.Cos(), m_majorRadius * m_rotation.Sin() );
388 VECTOR2D minorVec( -m_minorRadius * m_rotation.Sin(), m_minorRadius * m_rotation.Cos() );
389
390 majorVec = aTransform * majorVec;
391 minorVec = aTransform * minorVec;
392
393 m_majorRadius = majorVec.EuclideanNorm();
394 m_minorRadius = minorVec.EuclideanNorm();
395 m_rotation = EDA_ANGLE( majorVec );
396 }
397
398 BOX2D GetBoundingBox() const override
399 {
400 BOX2D box;
401 VECTOR2D extent( std::max( m_majorRadius, m_minorRadius ), std::max( m_majorRadius, m_minorRadius ) );
402 box.Merge( m_center - extent );
403 box.Merge( m_center + extent );
404 return box;
405 }
406
407private:
415};
416
417
419{
420public:
421 IMPORTED_ELLIPSE_ARC( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
422 const EDA_ANGLE& aStartAngle, const EDA_ANGLE& aEndAngle, const IMPORTED_STROKE& aStroke ) :
423 m_center( aCenter ),
424 m_majorRadius( aMajorRadius ),
425 m_minorRadius( aMinorRadius ),
426 m_rotation( aRotation ),
427 m_startAngle( aStartAngle ),
428 m_endAngle( aEndAngle ),
429 m_stroke( aStroke )
430 {
431 }
432
433 void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
434 {
436 m_stroke );
437 }
438
439 virtual std::unique_ptr<IMPORTED_SHAPE> clone() const override
440 {
441 return std::make_unique<IMPORTED_ELLIPSE_ARC>( *this );
442 }
443
444 void Transform( const MATRIX3x3D& aTransform, const VECTOR2D& aTranslation ) override
445 {
446 m_center = aTransform * m_center + aTranslation;
447
448 VECTOR2D majorVec( m_majorRadius * m_rotation.Cos(), m_majorRadius * m_rotation.Sin() );
449 VECTOR2D minorVec( -m_minorRadius * m_rotation.Sin(), m_minorRadius * m_rotation.Cos() );
450
451 majorVec = aTransform * majorVec;
452 minorVec = aTransform * minorVec;
453
454 m_majorRadius = majorVec.EuclideanNorm();
455 m_minorRadius = minorVec.EuclideanNorm();
456 m_rotation = EDA_ANGLE( majorVec );
457 }
458
459 BOX2D GetBoundingBox() const override
460 {
461 BOX2D box;
462 VECTOR2D extent( std::max( m_majorRadius, m_minorRadius ), std::max( m_majorRadius, m_minorRadius ) );
463 box.Merge( m_center - extent );
464 box.Merge( m_center + extent );
465 return box;
466 }
467
468private:
476};
477
478
480{
481public:
482 void SetCurrentSourceLayer( const wxString& aSourceLayer ) override { m_currentSourceLayer = aSourceLayer; }
483
484 const wxString& GetCurrentSourceLayer() const { return m_currentSourceLayer; }
485
486 void AddLine( const VECTOR2D& aStart, const VECTOR2D& aEnd,
487 const IMPORTED_STROKE& aStroke ) override;
488
489 void AddCircle( const VECTOR2D& aCenter, double aRadius, const IMPORTED_STROKE& aStroke,
490 bool aFilled, const COLOR4D& aFillColor = COLOR4D::UNSPECIFIED ) override;
491
492 void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, const EDA_ANGLE& aAngle,
493 const IMPORTED_STROKE& aStroke ) override;
494
495 void AddPolygon( const std::vector<VECTOR2D>& aVertices, const IMPORTED_STROKE& aStroke,
496 bool aFilled, const COLOR4D& aFillColor = COLOR4D::UNSPECIFIED ) override;
497
498 void AddText( const VECTOR2D& aOrigin, const wxString& aText, double aHeight, double aWidth,
499 double aThickness, double aOrientation, GR_TEXT_H_ALIGN_T aHJustify,
500 GR_TEXT_V_ALIGN_T aVJustify,
501 const COLOR4D& aColor = COLOR4D::UNSPECIFIED ) override;
502
503 void AddSpline( const VECTOR2D& aStart, const VECTOR2D& aBezierControl1,
504 const VECTOR2D& aBezierControl2, const VECTOR2D& aEnd,
505 const IMPORTED_STROKE& aStroke ) override;
506
507 void AddEllipse( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
508 const IMPORTED_STROKE& aStroke, bool aFilled,
509 const COLOR4D& aFillColor = COLOR4D::UNSPECIFIED ) override;
510
511 void AddEllipseArc( const VECTOR2D& aCenter, double aMajorRadius, double aMinorRadius, const EDA_ANGLE& aRotation,
512 const EDA_ANGLE& aStartAngle, const EDA_ANGLE& aEndAngle,
513 const IMPORTED_STROKE& aStroke ) override;
514
515 void ImportTo( GRAPHICS_IMPORTER& aImporter );
516 void AddShape( std::unique_ptr<IMPORTED_SHAPE>& aShape );
517
518 std::list<std::unique_ptr<IMPORTED_SHAPE>>& GetShapes() { return m_shapes; }
519
520 std::vector<wxString> GetSourceLayers() const;
521
522 void ClearShapes() { m_shapes.clear(); }
523
525
526protected:
528 std::list<std::unique_ptr<IMPORTED_SHAPE>> m_shapes;
530};
531
532#endif /* GRAPHICS_IMPORTER_BUFFER */
BOX2< VECTOR2D > BOX2D
Definition box2.h:919
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition box2.h:654
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:398
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:101
T EuclideanNorm() const
Compute the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
Definition vector2d.h:279
MATRIX3x3< double > MATRIX3x3D
Definition matrix3x3.h:469
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:682