26 #ifndef _BOARD_SHAPES_H_
27 #define _BOARD_SHAPES_H_
43 #define M_PI 3.14159265358979323846
47 #define M_PI_2 1.57079632679489661923
50 #if __cplusplus<201100
64 enum LineCap { ButtCap = 0, RoundCap, SquareCap };
65 enum LineJoin { MiterJoin = 0, RoundJoin, BevelJoin };
66 enum LineStyle { SolidStyle = 0,
73 enum LineWidthFlag { IgnoreLineWidth, UseLineWidth };
100 virtual const std::string &
name()
const;
122 virtual Point center(LineWidthFlag lineWidthFlag = IgnoreLineWidth)
const;
182 Shape &
moveCenter(
double x,
double y, LineWidthFlag lineWidthFlag = IgnoreLineWidth);
202 virtual Shape &
scale(
double sx,
double sy ) = 0;
245 inline Rect bbox( LineWidthFlag )
const;
267 virtual void scaleAll(
double s ) = 0;
286 virtual void flushFIG( std::ostream & stream,
288 std::map<Color,int> & colormap )
const = 0;
296 virtual void flushSVG( std::ostream & stream,
305 virtual void flushTikZ( std::ostream & stream,
324 inline int depth()
const;
326 virtual void depth(
int );
328 virtual void shiftDepth(
int shift );
330 inline const Color & penColor()
const;
332 inline const Color & fillColor()
const;
334 static void setDefaultLineWidth(
double );
335 static void setDefaultPenColor(
Color );
336 static void setDefaultFillColor(
Color );
337 static void setDefaultLineStyle( Shape::LineStyle );
338 static void setDefaultLineCap( Shape::LineCap );
339 static void setDefaultLineJoin( Shape::LineJoin );
395 static const std::string _name;
402 static double _defaultLineWidth;
403 static Color _defaultPenColor;
404 static Color _defaultFillColor;
405 static Shape::LineStyle _defaultLineStyle;
406 static Shape::LineCap _defaultLineCap;
407 static Shape::LineJoin _defaultLineJoin;
409 inline void updateLineWidth(
double s);
454 inline Dot(
double x,
double y,
464 const std::string &
name()
const override;
466 Point center(LineWidthFlag flage = IgnoreLineWidth)
const override;
534 Dot &
scale(
double sx,
double sy )
override;
555 Dot scaled(
double sx,
double sy )
const;
579 void flushFIG( std::ostream & stream,
581 std::map<Color,int> & colormap )
const override;
583 void flushSVG( std::ostream & stream,
600 static const std::string _name;
624 inline Line(
double x1,
double y1,
double x2,
double y2,
655 const std::string &
name()
const override;
709 Line &
scale(
double sx,
double sy )
override;
759 void flushFIG( std::ostream & stream,
761 std::map<Color,int> & colormap )
const override;
763 void flushSVG( std::ostream & stream,
770 static const std::string _name;
797 inline Arrow(
double x1,
double y1,
double x2,
double y2,
811 const std::string &
name()
const override;
871 void flushFIG( std::ostream & stream,
873 std::map<Color,int> & colormap )
const override;
875 void flushSVG( std::ostream & stream,
884 static const std::string _name;
893 inline Polyline(
const std::vector<Point> & points,
926 const std::string &
name()
const override;
1046 void scaleAll(
double s )
override;
1051 void flushFIG( std::ostream & stream,
1053 std::map<Color,int> & colormap )
const override;
1055 void flushSVG( std::ostream & stream,
1065 inline std::size_t vertexCount()
const;
1067 inline const Path & path()
const;
1070 static const std::string _name;
1082 inline Rectangle(
double left,
double top,
double width,
double height,
1105 const std::string &
name()
const override;
1106 double x()
const {
return _path[0].x; }
1107 double y()
const {
return _path[0].y; }
1108 double width()
const {
return (_path[1] - _path[0]).norm(); }
1109 double height()
const {
return (_path[0] - _path[3]).norm(); }
1110 Point topLeft()
const {
return Point( _path[0].x, _path[0].y ); }
1111 Point topRight()
const {
return Point( _path[1].x, _path[1].y ); }
1112 Point bottomLeft()
const {
return Point( _path[3].x, _path[3].y ); }
1113 Point bottomRight()
const {
return Point( _path[2].x, _path[2].y ); }
1169 void scaleAll(
double s )
override;
1171 void flushFIG( std::ostream & stream,
1173 std::map<Color,int> & colormap )
const override;
1175 void flushSVG( std::ostream & stream,
1184 static const std::string _name;
1205 :
Polyline( std::vector<Point>(),
true, penColor, fillColor, lineWidth, lineStyle, cap, join, depth ) {
1211 Triangle(
const double x1,
const double y1,
1212 const double x2,
const double y2,
1213 const double x3,
const double y3,
1221 :
Polyline( std::vector<Point>(),
true, penColor, fillColor, lineWidth, lineStyle, cap, join, depth ) {
1222 _path <<
Point( x1, y1 );
1223 _path << Point( x2, y2 );
1224 _path << Point( x3, y3 );
1232 const std::string &
name()
const override;
1234 Triangle rotated(
double angle )
const;
1268 static const std::string _name;
1288 const Point & p1,
float brightness1,
1289 const Point & p2,
float brightness2,
1290 const Color & fillColor,
1299 const std::string &
name()
const override;
1345 void scaleAll(
double s )
override;
1368 void flushFIG( std::ostream & stream,
1370 std::map<Color,int> & colormap )
const override;
1372 void flushSVG( std::ostream & stream,
1381 static const std::string _name;
1397 double xRadius,
double yRadius,
1403 :
Shape( penColor, fillColor,
1404 lineWidth, lineStyle, ButtCap, MiterJoin, depth ),
1405 _center( x, y ), _xRadius( xRadius ), _yRadius( yRadius ),
1408 while ( _angle > M_PI_2 ) _angle -= M_PI;
1409 while ( _angle < -M_PI_2 ) _angle += M_PI;
1413 double xRadius,
double yRadius,
1419 :
Shape( penColor, fillColor,
1420 lineWidth, lineStyle, ButtCap, MiterJoin, depth ),
1421 _center( center ), _xRadius( xRadius ), _yRadius( yRadius ),
1424 while ( _angle > M_PI_2 ) _angle -= M_PI;
1425 while ( _angle < -M_PI_2 ) _angle += M_PI;
1433 const std::string &
name()
const override;
1435 Point center(LineWidthFlag lineWidthFlag = IgnoreLineWidth)
const override;
1524 void scaleAll(
double s )
override;
1529 void flushFIG( std::ostream & stream,
1531 std::map<Color,int> & colormap )
const override;
1533 void flushSVG( std::ostream & stream,
1544 static const std::string _name;
1560 Circle(
double x,
double y,
double radius,
1566 :
Ellipse( x, y, radius, radius, penColor, fillColor, lineWidth, lineStyle, depth )
1575 :
Ellipse( center, radius, radius, penColor, fillColor, lineWidth, lineStyle, depth )
1583 const std::string &
name()
const override;
1585 Point center(LineWidthFlag lineWidthFlag = IgnoreLineWidth)
const override;
1589 Circle rotated(
double angle,
const Point & center )
const;
1593 Circle rotated(
double angle )
const;
1659 void scaleAll(
double s )
override;
1661 void flushSVG( std::ostream & stream,
1670 static const std::string _name;
1692 Text(
double x,
double y,
1693 const std::string & text,
1694 const Fonts::Font font,
1696 Color color = Color::Black,
1712 const std::string & text,
1713 const Fonts::Font font,
1715 Color color = Color::Black,
1732 Text(
double x,
double y,
1733 const std::string & text,
1734 const Fonts::Font font,
1735 const std::string & svgFont,
1737 Color color = Color::Black,
1754 const std::string & text,
1755 const Fonts::Font font,
1756 const std::string & svgFont,
1758 Color color = Color::Black,
1766 const std::string &
name()
const override;
1768 Point center(LineWidthFlag lineWidthFlag = IgnoreLineWidth)
const override;
1772 Text rotated(
double angle,
const Point & center )
const;
1776 Text rotated(
double angle )
const;
1806 Text &
scale(
double sx,
double sy )
override;
1842 void scaleAll(
double s )
override;
1847 void flushFIG( std::ostream & stream,
1849 std::map<Color,int> & colormap )
const override;
1851 void flushSVG( std::ostream & stream,
1863 static const std::string _name;
1865 double boxHeight(
const Transform &)
const;
1866 double boxLength(
const Transform &)
const;
1868 double angle()
const;
1870 Point position()
const;
1875 std::string _svgFont;
1890 bool shapeGreaterDepth(
const Shape *s1,
const Shape *s2 );
1898 #include "Shapes.ih"
1900 #if __cplusplus<201100
Point center(LineWidthFlag lineWidthFlag=IgnoreLineWidth) const override
Definition: Shapes.cpp:884
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:2147
A circle.
Definition: Shapes.h:1558
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:1434
Abstract structure for a 2D shape.
Definition: Shapes.h:62
Arrow translated(double dx, double dy) const
Definition: Shapes.cpp:687
GouraudTriangle translated(double dx, double dy) const
Definition: Shapes.cpp:1708
Polyline & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:1285
A line between two points.
Definition: Shapes.h:452
static double defaultLineWidth()
defaultLineWidth
Definition: Shapes.cpp:253
Ellipse & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:889
Line * clone() const override
Definition: Shapes.cpp:565
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:1362
virtual Shape & rotate(double angle, const Point ¢er)=0
static Shape::LineCap defaultLineCap()
defaultLineCap
Definition: Shapes.cpp:269
Ellipse scaled(double sx, double sy) const
Definition: Shapes.cpp:990
Structure representing an RGB triple.
Definition: Color.h:39
Shape(Color penColor, Color fillColor, double lineWidth, LineStyle style, const LineCap cap, const LineJoin join, int depth)
int _depth
Definition: Shapes.h:411
A piece of text.
Definition: Shapes.h:1677
Circle & translate(double dx, double dy) override
Definition: Shapes.cpp:1183
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:2123
A polygonal line described by a series of 2D points.
Definition: Shapes.h:891
Point center(LineWidthFlag lineWidthFlag=IgnoreLineWidth) const override
Definition: Shapes.cpp:1146
An ellipse.
Definition: Shapes.h:1394
Shape & scaleToHeight(double h, LineWidthFlag lineWidthFlag)
Definition: Shapes.cpp:132
virtual void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const =0
virtual Shape & scale(double sx, double sy)=0
Rect boundingBox(LineWidthFlag) const override
Definition: Shapes.cpp:2239
Dot rotated(double angle, const Point ¢er) const
Definition: Shapes.cpp:313
A line between two points with an arrow at one extremity.
Definition: Shapes.h:783
Shape & scaleToWidth(double w, LineWidthFlag lineWidthFlag)
Definition: Shapes.cpp:124
double _x1
Definition: Shapes.h:773
A triangle. Basically a Polyline with a convenient constructor.
Definition: Shapes.h:1195
Color _fillColor
Definition: Shapes.h:413
Line & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:473
Rect bbox(LineWidthFlag) const
void scaleAll(double s) override
Definition: Shapes.cpp:1351
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:376
const std::string & name() const override
Definition: Shapes.cpp:1632
virtual void flushSVG(std::ostream &stream, const TransformSVG &transform) const =0
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:585
Arrow(double x1, double y1, double x2, double y2, Color penColor=Shape::defaultPenColor(), Color fillColor=Shape::defaultFillColor(), double lineWidth=Shape::defaultLineWidth(), const LineStyle lineStyle=Shape::defaultLineStyle(), const LineCap cap=Shape::defaultLineCap(), const LineJoin join=Shape::defaultLineJoin(), int depth=-1)
The Point structure. @copyright This source code is part of the Board project, a C++ library whose pu...
Shape & moveCenter(double x, double y, LineWidthFlag lineWidthFlag=IgnoreLineWidth)
Definition: Shapes.cpp:108
Triangle scaled(double sx, double sy) const
Definition: Shapes.cpp:1868
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:1766
virtual void accept(ShapeVisitor &visitor)
Accepts a visitor object.
Definition: Shapes.cpp:277
Line & translate(double dx, double dy) override
Definition: Shapes.cpp:506
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:1836
Arrow * clone() const override
Definition: Shapes.cpp:732
Arrow rotated(double angle, const Point ¢er) const
Definition: Shapes.cpp:668
Point center(LineWidthFlag lineWidthFlag=IgnoreLineWidth) const override
Definition: Shapes.cpp:1976
Rectangle * clone() const override
Definition: Shapes.cpp:1513
Color _penColor
Definition: Shapes.h:412
void scaleAll(double s) override
Definition: Shapes.cpp:1223
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:1618
A path, according to Postscript and SVG definition.
Definition: Path.h:41
LineCap _lineCap
Definition: Shapes.h:416
static Shape::LineStyle defaultLineStyle()
defaultLineStyle
Definition: Shapes.cpp:265
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:626
Polyline & scale(double sx, double sy) override
Definition: Shapes.cpp:1324
std::string tikzProperties(const TransformTikZ &transform) const
Definition: Shapes.cpp:200
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:418
Line rotated(double angle, const Point ¢er) const
Definition: Shapes.cpp:487
Text & translate(double dx, double dy) override
Definition: Shapes.cpp:2022
Dot translated(double dx, double dy) const
Definition: Shapes.cpp:339
Text scaled(double sx, double sy) const
Definition: Shapes.cpp:2054
static Color defaultFillColor()
defaultFillColor
Definition: Shapes.cpp:261
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:777
virtual void flushPostscript(std::ostream &stream, const TransformEPS &transform) const =0
void scaleAll(double s) override
Definition: Shapes.cpp:556
void scaleAll(double s) override
Definition: Shapes.cpp:2066
A line between two points.
Definition: Shapes.h:611
Struct representing a 2D point.
Definition: Point.h:39
Ellipse * clone() const override
Definition: Shapes.cpp:1010
void scaleAll(double s) override
Definition: Shapes.cpp:1002
static bool _lineWidthScaling
Definition: Shapes.h:399
Rect boundingBox(LineWidthFlag) const override
Definition: Shapes.cpp:439
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:2181
static Shape::LineJoin defaultLineJoin()
defaultLineJoin
Definition: Shapes.cpp:273
Polyline * clone() const override
Definition: Shapes.cpp:1357
Ellipse & translate(double dx, double dy) override
Definition: Shapes.cpp:920
static void setLineWidthScaling(bool)
Definition: Shapes.cpp:151
Circle & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:1151
Polyline & operator<<(const Point &p)
Definition: Shapes.cpp:1278
const std::string & name() const override
Definition: Shapes.cpp:1140
Polyline rotated(double angle, const Point ¢er) const
Definition: Shapes.cpp:1292
Arrow scaled(double sx, double sy) const
Definition: Shapes.cpp:693
Dot & translate(double dx, double dy) override
Definition: Shapes.cpp:331
Circle & scale(double sx, double sy) override
Definition: Shapes.cpp:1196
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:430
Line & scale(double sx, double sy) override
Definition: Shapes.cpp:523
void scaleAll(double s) override
Definition: Shapes.cpp:1507
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:614
Circle translated(double dx, double dy) const
Definition: Shapes.cpp:1190
Shape & rotateDeg(double angle, const Point ¢er)
double _y1
Definition: Shapes.h:774
Line translated(double dx, double dy) const
Definition: Shapes.cpp:514
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:1803
@copyright This source code is part of the Board project, a C++ library whose purpose is to allow sim...
Dot & scale(double sx, double sy) override
Definition: Shapes.cpp:345
Line(double x1, double y1, double x2, double y2, Color color, double lineWidth=Shape::defaultLineWidth(), const LineStyle lineStyle=Shape::defaultLineStyle(), const LineCap cap=Shape::defaultLineCap(), const LineJoin join=Shape::defaultLineJoin(), int depth=-1)
Polyline translated(double dx, double dy) const
Definition: Shapes.cpp:1318
const std::string & name() const override
Definition: Shapes.cpp:1970
const std::string & name() const override
Definition: Shapes.cpp:467
Text translated(double dx, double dy) const
Definition: Shapes.cpp:2029
static Color defaultPenColor()
defaultPenColor
Definition: Shapes.cpp:257
virtual Shape & translate(double dx, double dy)=0
virtual ~Shape()
Definition: Shapes.h:93
Rect boundingBox(LineWidthFlag) const override
Definition: Shapes.cpp:637
LineJoin _lineJoin
Definition: Shapes.h:417
double _x2
Definition: Shapes.h:775
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:1562
Rect boundingBox(LineWidthFlag) const override
Definition: Shapes.cpp:704
Point & operator[](const std::size_t n)
Definition: Shapes.h:944
The Point structure. @copyright This source code is part of the Board project, a C++ library whose pu...
double _y2
Definition: Shapes.h:776
Point center(LineWidthFlag flage=IgnoreLineWidth) const override
Definition: Shapes.cpp:301
GouraudTriangle * clone() const override
Definition: Shapes.cpp:1732
const std::string & name() const override
Definition: Shapes.cpp:878
const std::string & name() const override
Definition: Shapes.cpp:295
Rect boundingBox(LineWidthFlag) const override
Definition: Shapes.cpp:1106
Ellipse translated(double dx, double dy) const
Definition: Shapes.cpp:927
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:810
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:2108
virtual Rect boundingBox(LineWidthFlag) const =0
Circle scaled(double sx, double sy) const
Definition: Shapes.cpp:1211
A rectangle.
Definition: Shapes.h:1080
The Color structure. @copyright This source code is part of the Board project, a C++ library whose pu...
Triangle translated(double dx, double dy) const
Definition: Shapes.cpp:1862
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:737
Dot * clone() const override
Definition: Shapes.cpp:456
const Point & operator[](const std::size_t n) const
Definition: Shapes.h:955
Polyline & translate(double dx, double dy) override
Definition: Shapes.cpp:1311
static void enableLineWidthScaling()
Definition: Shapes.cpp:140
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:1518
virtual void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const =0
Dot scaled(double sx, double sy) const
Definition: Shapes.cpp:357
double _x
Definition: Shapes.h:603
GouraudTriangle scaled(double sx, double sy) const
Definition: Shapes.cpp:1714
Rectangle translated(double dx, double dy) const
Definition: Shapes.cpp:1489
Ellipse & scale(double sx, double sy) override
Definition: Shapes.cpp:933
std::string svgProperties(const TransformSVG &transform) const
Definition: Shapes.cpp:157
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:570
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:1090
@copyright This source code is part of the Board project, a C++ library whose purpose is to allow sim...
virtual void scaleAll(double s)=0
GouraudTriangle & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:1683
bool filled() const
Definition: Shapes.h:114
const std::string & name() const override
Definition: Shapes.cpp:662
Line scaled(double sx, double sy) const
Definition: Shapes.cpp:544
Circle * clone() const override
Definition: Shapes.cpp:1231
Text & scale(double sx, double sy) override
Definition: Shapes.cpp:2035
Text(double x, double y, const std::string &text, const Fonts::Font font, double size, Color color=Color::Black, int depth=-1)
Definition: Shapes.cpp:1891
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:1386
const std::string & name() const override
Definition: Shapes.cpp:1850
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:1236
Ellipse rotated(double angle, const Point ¢er) const
Definition: Shapes.cpp:902
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:1418
const std::string & name() const override
Definition: Shapes.cpp:1272
void flushSVG(std::ostream &stream, const TransformSVG &transform) const override
Definition: Shapes.cpp:1072
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:391
Polyline scaled(double sx, double sy) const
Definition: Shapes.cpp:1339
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:1251
Text * clone() const override
Definition: Shapes.cpp:2072
virtual Point center(LineWidthFlag lineWidthFlag=IgnoreLineWidth) const
Definition: Shapes.cpp:101
Triangle * clone() const override
Definition: Shapes.cpp:1880
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const override
Definition: Shapes.cpp:860
Rect boundingBox(LineWidthFlag) const override
Definition: Shapes.cpp:1448
double _lineWidth
Definition: Shapes.h:414
const std::string & name() const override
Definition: Shapes.cpp:1471
Dot & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:306
Definition: ShapeVisitor.h:40
std::string postscriptProperties(const TransformEPS &transform) const
Definition: Shapes.cpp:188
static void disableLineWidthScaling()
Definition: Shapes.cpp:146
Text & rotate(double angle, const Point ¢er) override
Definition: Shapes.cpp:1981
Struct representing a rectangle on the plane.
Definition: Rect.h:38
Rectangle rotated(double angle, const Point ¢er) const
Definition: Shapes.cpp:1477
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:1737
double _y
Definition: Shapes.h:604
virtual Shape * clone() const =0
void scaleAll(double s) override
Definition: Shapes.cpp:369
LineStyle _lineStyle
Definition: Shapes.h:415
Rectangle scaled(double sx, double sy) const
Definition: Shapes.cpp:1495
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< Color, int > &colormap) const override
Definition: Shapes.cpp:1044
void scaleAll(double s) override
Definition: Shapes.cpp:1726
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const override
Definition: Shapes.cpp:1015
virtual const std::string & name() const
Definition: Shapes.cpp:95
A triangle with shaded filling according to colors given for each vertex.
Definition: Shapes.h:1278