DGtal 1.3.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Static Private Attributes
LibBoard::Shape Struct Referenceabstract

Abstract structure for a 2D shape. More...

#include <Board/Shapes.h>

Inheritance diagram for LibBoard::Shape:
LibBoard::Dot LibBoard::Ellipse LibBoard::Line LibBoard::Polyline LibBoard::ShapeList LibBoard::Text LibBoard::Circle LibBoard::Arrow LibBoard::GouraudTriangle LibBoard::Rectangle LibBoard::Triangle LibBoard::Board LibBoard::Group LibBoard::Arc LibBoard::Image LibBoard::QuadraticBezierCurve DGtal::Board2D

Public Types

enum  LineCap { ButtCap = 0 , RoundCap , SquareCap }
 
enum  LineJoin { MiterJoin = 0 , RoundJoin , BevelJoin }
 
enum  LineStyle {
  SolidStyle = 0 , DashStyle , DotStyle , DashDotStyle ,
  DashDotDotStyle , DashDotDotDotStyle
}
 

Public Member Functions

 Shape (DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, LineStyle style, const LineCap cap, const LineJoin join, int depth)
 
virtual ~Shape ()
 
virtual const std::string & name () const
 
virtual Shapeclone () const =0
 
bool filled () const
 
virtual Point center () const =0
 
virtual Shaperotate (double angle, const Point &center)=0
 
virtual Shaperotate (double angle)=0
 
ShaperotateDeg (double angle, const Point &center)
 
ShaperotateDeg (double angle)
 
virtual Shapetranslate (double dx, double dy)=0
 
virtual Shapescale (double sx, double sy)=0
 
virtual Shapescale (double s)=0
 
virtual Rect boundingBox () const =0
 
Rect bbox ()
 
Shapeoperator-- ()
 
Shapeoperator++ ()
 
virtual void scaleAll (double s)=0
 
virtual void flushPostscript (std::ostream &stream, const TransformEPS &transform) const =0
 
virtual void flushFIG (std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const =0
 
virtual void flushSVG (std::ostream &stream, const TransformSVG &transform) const =0
 
virtual void flushCairo (cairo_t *cr, const TransformCairo &transform) const =0
 
virtual void flushTikZ (std::ostream &stream, const TransformTikZ &transform) const =0
 
int depth () const
 
virtual void depth (int)
 
virtual void shiftDepth (int shift)
 
const DGtal::ColorpenColor () const
 
const DGtal::ColorfillColor () const
 

Protected Member Functions

std::string svgProperties (const TransformSVG &transform) const
 
std::string postscriptProperties () const
 
void setCairoDashStyle (cairo_t *cr, LineStyle type) const
 
std::string tikzProperties (const TransformTikZ &transform) const
 

Protected Attributes

int _depth
 
DGtal::Color _penColor
 
DGtal::Color _fillColor
 
double _lineWidth
 
LineStyle _lineStyle
 
LineCap _lineCap
 
LineJoin _lineJoin
 

Static Private Attributes

static const std::string _name
 

Detailed Description

Abstract structure for a 2D shape.

Shape structure.

Definition at line 58 of file Board/Shapes.h.

Member Enumeration Documentation

◆ LineCap

enum LibBoard::Shape::LineCap
Enumerator
ButtCap 
RoundCap 
SquareCap 

Definition at line 60 of file Board/Shapes.h.

◆ LineJoin

enum LibBoard::Shape::LineJoin
Enumerator
MiterJoin 
RoundJoin 
BevelJoin 

Definition at line 61 of file Board/Shapes.h.

◆ LineStyle

enum LibBoard::Shape::LineStyle
Enumerator
SolidStyle 
DashStyle 
DotStyle 
DashDotStyle 
DashDotDotStyle 
DashDotDotDotStyle 

Definition at line 62 of file Board/Shapes.h.

Constructor & Destructor Documentation

◆ Shape()

LibBoard::Shape::Shape ( DGtal::Color  penColor,
DGtal::Color  fillColor,
double  lineWidth,
LineStyle  style,
const LineCap  cap,
const LineJoin  join,
int  depth 
)
inline

Shape constructor.

Parameters
penColorThe pen color of the shape.
fillColorThe fill color of the shape.
lineWidthThe line thickness.
styleThe line style.
capThe line cap.
joinThe line join.
depthThe depth of the shape.

◆ ~Shape()

virtual LibBoard::Shape::~Shape ( )
inlinevirtual

Shape destructor.

Definition at line 90 of file Board/Shapes.h.

90{ }

Member Function Documentation

◆ bbox()

Rect LibBoard::Shape::bbox ( )
inline

Returns the bounding box of the figure. (Convenience method to call "boundingBox" with a short name.)

Definition at line 339 of file Board/Shapes.h.

340{
341 return this->boundingBox();
342}
virtual Rect boundingBox() const =0

References boundingBox().

◆ boundingBox()

virtual Rect LibBoard::Shape::boundingBox ( ) const
pure virtual

Returns the bounding box of the figure.

Returns
The rectangle of the bounding box.

Implemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::Ellipse, and LibBoard::Text.

Referenced by bbox().

◆ center()

virtual Point LibBoard::Shape::center ( ) const
pure virtual

Returns the gravity center of the shape.

Returns
The center of the shape.

Implemented in LibBoard::ShapeList, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

Referenced by rotateDeg().

◆ clone()

virtual Shape * LibBoard::Shape::clone ( ) const
pure virtual

◆ depth() [1/2]

int LibBoard::Shape::depth ( ) const
inline

Definition at line 361 of file Board/Shapes.h.

362{
363 return _depth;
364}

References _depth.

Referenced by LibBoard::ShapeList::addShape(), LibBoard::ShapeList::operator<<(), and LibBoard::shapeGreaterDepth().

◆ depth() [2/2]

void LibBoard::Shape::depth ( int  d)
virtual

Definition at line 194 of file Shapes.cpp.

195{
196 _depth = d;
197}

References _depth.

◆ fillColor()

const DGtal::Color & LibBoard::Shape::fillColor ( ) const
inline

Definition at line 373 of file Board/Shapes.h.

374{
375 return _fillColor;
376}
DGtal::Color _fillColor
Definition: Board/Shapes.h:297

References _fillColor.

◆ filled()

bool LibBoard::Shape::filled ( ) const
inline

◆ flushCairo()

virtual void LibBoard::Shape::flushCairo ( cairo_t *  cr,
const TransformCairo transform 
) const
pure virtual

Writes the cairo code of the shape in a cairo drawing context according to a transform.

Parameters
crThe cairo drawing context.
transformA 2D transform to be applied.

Implemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Arrow, LibBoard::Polyline, LibBoard::Rectangle, LibBoard::Image, LibBoard::QuadraticBezierCurve, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, LibBoard::Arc, and LibBoard::Text.

◆ flushFIG()

virtual void LibBoard::Shape::flushFIG ( std::ostream &  stream,
const TransformFIG transform,
std::map< DGtal::Color, int > &  colormap 
) const
pure virtual

Writes the FIG code of the shape in a stream according to a transform.

Parameters
streamThe output stream.
transformA 2D transform to be applied.
colormapA colormap.

Implemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Arrow, LibBoard::Polyline, LibBoard::Rectangle, LibBoard::Image, LibBoard::QuadraticBezierCurve, LibBoard::GouraudTriangle, LibBoard::Ellipse, and LibBoard::Text.

◆ flushPostscript()

virtual void LibBoard::Shape::flushPostscript ( std::ostream &  stream,
const TransformEPS transform 
) const
pure virtual

Writes the EPS code of the shape in a stream according to a transform.

Parameters
streamThe output stream.
transformA 2D transform to be applied.

Implemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Arrow, LibBoard::Polyline, LibBoard::QuadraticBezierCurve, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Arc, and LibBoard::Text.

◆ flushSVG()

virtual void LibBoard::Shape::flushSVG ( std::ostream &  stream,
const TransformSVG transform 
) const
pure virtual

Writes the SVG code of the shape in a stream according to a transform.

Parameters
streamThe output stream.
transformA 2D transform to be applied.

Implemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Arrow, LibBoard::Polyline, LibBoard::Rectangle, LibBoard::Image, LibBoard::QuadraticBezierCurve, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, LibBoard::Arc, and LibBoard::Text.

◆ flushTikZ()

virtual void LibBoard::Shape::flushTikZ ( std::ostream &  stream,
const TransformTikZ transform 
) const
pure virtual

Writes the TikZ code of the shape in a stream according to a transform.

Parameters
streamThe output stream.
transformA 2D transform to be applied.

Implemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Arrow, LibBoard::Polyline, LibBoard::Rectangle, LibBoard::Image, LibBoard::QuadraticBezierCurve, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, LibBoard::Arc, and LibBoard::Text.

◆ name()

const std::string & LibBoard::Shape::name ( ) const
virtual

Returns the generic name of the shape (e.g., Circle, Rectangle, etc.)

Returns
object name

Reimplemented in LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Arrow, LibBoard::Polyline, LibBoard::Rectangle, LibBoard::Image, LibBoard::Triangle, LibBoard::QuadraticBezierCurve, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, LibBoard::Arc, and LibBoard::Text.

Definition at line 103 of file Shapes.cpp.

104{
105 return _name;
106}
static const std::string _name
Definition: Board/Shapes.h:291

References _name.

◆ operator++()

Shape & LibBoard::Shape::operator++ ( )
inline

Increment the depth of the shape. (Push the shape toward the background.)

Returns
a shape

Definition at line 346 of file Board/Shapes.h.

347{
348 ++_depth;
349 return *this;
350}

References _depth.

◆ operator--()

Shape & LibBoard::Shape::operator-- ( )
inline

Decrement the depth of the shape. (Pull the shape toward the foreground.)

Returns
a shape

Definition at line 353 of file Board/Shapes.h.

354{
355 --_depth;
356 return *this;
357}

References _depth.

◆ penColor()

const DGtal::Color & LibBoard::Shape::penColor ( ) const
inline

Definition at line 367 of file Board/Shapes.h.

368{
369 return _penColor;
370}
DGtal::Color _penColor
Definition: Board/Shapes.h:296

References _penColor.

◆ postscriptProperties()

std::string LibBoard::Shape::postscriptProperties ( ) const
protected

Return a string of the properties lineWidth, penColor, lineCap, and lineJoin as Postscript commands.

Returns
A string of the Postscript commands.

Definition at line 140 of file Shapes.cpp.

141{
142 std::stringstream str;
143 str << _lineWidth << " slw ";
144 str << _lineCap << " slc ";
145 str << _lineJoin << " slj";
146 str << xFigDashStylesPS[ _lineStyle ];
147
148 return str.str();
149}
LineJoin _lineJoin
Definition: Board/Shapes.h:301
LineStyle _lineStyle
Definition: Board/Shapes.h:299

References _lineCap, _lineJoin, _lineStyle, and _lineWidth.

Referenced by LibBoard::Dot::flushPostscript(), LibBoard::Line::flushPostscript(), LibBoard::Arrow::flushPostscript(), LibBoard::Polyline::flushPostscript(), LibBoard::QuadraticBezierCurve::flushPostscript(), and LibBoard::Ellipse::flushPostscript().

◆ rotate() [1/2]

virtual Shape & LibBoard::Shape::rotate ( double  angle)
pure virtual

Rotate the shape around its center.

Parameters
angleThe rotation angle in radian.
Returns
A reference to the shape itself.

Implemented in LibBoard::Board, LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

◆ rotate() [2/2]

virtual Shape & LibBoard::Shape::rotate ( double  angle,
const Point center 
)
pure virtual

Rotate the shape around a given center of rotation.

Parameters
angleThe rotation angle in radian.
centerThe center of rotation.
Returns
A reference to the shape itself.

Implemented in LibBoard::Board, LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

Referenced by LibBoard::Board::addDuplicates(), and rotateDeg().

◆ rotateDeg() [1/2]

Shape & LibBoard::Shape::rotateDeg ( double  angle)
inline

Rotate the shape around its center.

Parameters
angleThe rotation angle in degree.
Returns
A reference to the shape itself.

Definition at line 385 of file Board/Shapes.h.

386{
387 return rotate( angle * ( M_PI / 180.0 ), center() );
388}
virtual Point center() const =0
virtual Shape & rotate(double angle, const Point &center)=0

References center(), and rotate().

◆ rotateDeg() [2/2]

Shape & LibBoard::Shape::rotateDeg ( double  angle,
const Point center 
)
inline

Rotate the shape around a given center of rotation.

Parameters
angleThe rotation angle in degree.
centerThe center of rotation.
Returns
A reference to the shape itself.

Definition at line 379 of file Board/Shapes.h.

380{
381 return rotate( angle * ( M_PI / 180.0 ), aCenter );
382}

References rotate().

◆ scale() [1/2]

virtual Shape & LibBoard::Shape::scale ( double  s)
pure virtual

Scale the shape along both axis.

Parameters
sThe scale factor along both axis.
Returns
The shape itself.

Implemented in LibBoard::Board, LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

◆ scale() [2/2]

virtual Shape & LibBoard::Shape::scale ( double  sx,
double  sy 
)
pure virtual

Scale the shape along the x an y axis.

Parameters
sxThe scale factor along the x axis.
syThe scale factor along the y axis.
Returns
The shape itself.

Implemented in LibBoard::Board, LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

Referenced by LibBoard::Board::addDuplicates().

◆ scaleAll()

virtual void LibBoard::Shape::scaleAll ( double  s)
pure virtual

Scales all the values (positions, dimensions, etc.) associated with the shape.

Parameters
sThe scaling factor.

Implemented in LibBoard::ShapeList, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::Rectangle, LibBoard::GouraudTriangle, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

Referenced by LibBoard::Board::State::unit().

◆ setCairoDashStyle()

void LibBoard::Shape::setCairoDashStyle ( cairo_t *  cr,
LineStyle  type 
) const
protected

Set a cairo dash style.

Parameters
crThe cairo drawing context.
typeLineStyle: SolidStyle, DashStyle, DotStyle, DashDotStyle, DashDotDotStyle, DashDotDotDotStyle.

Definition at line 153 of file Shapes.cpp.

154{
155 switch (type)
156 {
157 case SolidStyle:
158 cairo_set_dash (cr, cairoSolidStyle, ARRAY_SIZE(cairoSolidStyle), cairoSolidStyle_offset); break;
159 case DashStyle:
160 cairo_set_dash (cr, cairoDashStyle, ARRAY_SIZE(cairoDashStyle), cairoDashStyle_offset); break;
161 case DotStyle:
162 cairo_set_dash (cr, cairoDotStyle, ARRAY_SIZE(cairoDotStyle), cairoDotStyle_offset); break;
163 case DashDotStyle:
164 cairo_set_dash (cr, cairoDashDotStyle, ARRAY_SIZE(cairoDashDotStyle), cairoDashDotStyle_offset); break;
165 case DashDotDotStyle:
166 cairo_set_dash (cr, cairoDashDotDotStyle, ARRAY_SIZE(cairoDashDotDotStyle), cairoDashDotDotStyle_offset); break;
168 cairo_set_dash (cr, cairoDashDotDotDotStyle, ARRAY_SIZE(cairoDashDotDotDotStyle), cairoDashDotDotDotStyle_offset); break;
169
170 default: // SolidStyle
171 cairo_set_dash (cr, cairoSolidStyle, ARRAY_SIZE(cairoSolidStyle), cairoSolidStyle_offset);
172 }
173}

References DashDotDotDotStyle, DashDotDotStyle, DashDotStyle, DashStyle, DotStyle, and SolidStyle.

Referenced by LibBoard::Dot::flushCairo(), LibBoard::Line::flushCairo(), LibBoard::Arrow::flushCairo(), LibBoard::Polyline::flushCairo(), LibBoard::Rectangle::flushCairo(), LibBoard::QuadraticBezierCurve::flushCairo(), LibBoard::Ellipse::flushCairo(), LibBoard::Circle::flushCairo(), and LibBoard::Arc::flushCairo().

◆ shiftDepth()

void LibBoard::Shape::shiftDepth ( int  shift)
virtual

Reimplemented in LibBoard::ShapeList.

Definition at line 200 of file Shapes.cpp.

201{
202 _depth += shift;
203}

References _depth.

◆ svgProperties()

std::string LibBoard::Shape::svgProperties ( const TransformSVG transform) const
protected

Return a string of the svg properties lineWidth, opacity, penColor, fillColor, lineCap, and lineJoin.

Returns
A string of the properties suitable for inclusion in an svg tag.

Definition at line 109 of file Shapes.cpp.

110{
111 static const char * capStrings[3] = { "butt", "round", "square" };
112 static const char * joinStrings[3] = { "miter", "round", "bevel" };
113 std::stringstream str;
114 if ( _penColor != DGtal::Color::None ) {
115 str << " fill=\"" << _fillColor.svg() << '"'
116 << " stroke=\"" << _penColor.svg() << '"'
117 << " stroke-width=\"" << transform.mapWidth( _lineWidth ) << "mm\""
118 << " style=\"stroke-linecap:" << capStrings[ _lineCap ]
119 << ";stroke-linejoin:" << joinStrings[ _lineJoin ];
120 if ( _lineStyle != SolidStyle )
121 str << ";" << xFigDashStylesSVG[ _lineStyle ];
122 str << '"'
123 << _fillColor.svgAlpha( " fill" )
124 << _penColor.svgAlpha( " stroke" );
125 } else {
126 str << " fill=\"" << _fillColor.svg() << '"'
127// << " stroke=\"" << _fillColor.svg() << '"'
128// << " stroke-width=\"0.5px\""
129 << " stroke=\"none\""
130 << " stroke-width=\"0\""
131 << " style=\"stroke-linecap:round;stroke-linejoin:round;"
132 << '"'
133 << _fillColor.svgAlpha( " fill" )
134 << _fillColor.svgAlpha( " stroke" );
135 }
136 return str.str();
137}
std::string svg() const
Definition: Color.cpp:158
std::string svgAlpha(const char *aPrefix) const
Definition: Color.cpp:167

References _fillColor, _lineCap, _lineJoin, _lineStyle, _lineWidth, _penColor, DGtal::Color::None, SolidStyle, DGtal::Color::svg(), and DGtal::Color::svgAlpha().

Referenced by LibBoard::Dot::flushSVG(), LibBoard::Line::flushSVG(), LibBoard::Polyline::flushSVG(), LibBoard::Rectangle::flushSVG(), LibBoard::QuadraticBezierCurve::flushSVG(), LibBoard::Ellipse::flushSVG(), LibBoard::Circle::flushSVG(), and LibBoard::Arc::flushSVG().

◆ tikzProperties()

std::string LibBoard::Shape::tikzProperties ( const TransformTikZ transform) const
protected

Return a string of the properties lineWidth, penColor, lineCap, and lineJoin as TikZ commands.

Returns
A string of the TikZ commands.

Definition at line 177 of file Shapes.cpp.

178{
179 static const char * capStrings[3] = { "" /* initial value "butt" */, "line cap=round,", "line cap=rect," };
180 static const char * joinStrings[3] = { "" /* initial value "miter" */, "line join=round", "line join=bevel" };
181
182 std::stringstream str;
183 str << "fill=" << _fillColor.tikz() << ',';
184 str << "draw=" << _penColor.tikz() << ',';
185 str << "line width=" << transform.mapWidth( _lineWidth ) << "mm,";
186 str << xFigDashStylesTikZ[ _lineStyle ];
187 str << capStrings[ _lineCap ];
188 str << joinStrings[ _lineJoin ];
189
190 return str.str();
191}
std::string tikz() const
Definition: Color.cpp:176

References _fillColor, _lineCap, _lineJoin, _lineStyle, _lineWidth, _penColor, and DGtal::Color::tikz().

Referenced by LibBoard::Line::flushTikZ(), LibBoard::Arrow::flushTikZ(), LibBoard::Polyline::flushTikZ(), LibBoard::Rectangle::flushTikZ(), LibBoard::QuadraticBezierCurve::flushTikZ(), LibBoard::Ellipse::flushTikZ(), LibBoard::Circle::flushTikZ(), LibBoard::Arc::flushTikZ(), and LibBoard::Text::flushTikZ().

◆ translate()

virtual Shape & LibBoard::Shape::translate ( double  dx,
double  dy 
)
pure virtual

Translate the shape by a given offset.

Parameters
dxThe x offset.
dyThe y offset.
Returns
A reference to the shape itself.

Implemented in LibBoard::Board, LibBoard::ShapeList, LibBoard::Group, LibBoard::Dot, LibBoard::Line, LibBoard::Polyline, LibBoard::Ellipse, LibBoard::Circle, and LibBoard::Text.

Referenced by LibBoard::Board::addDuplicates().

Field Documentation

◆ _depth

int LibBoard::Shape::_depth
protected

◆ _fillColor

DGtal::Color LibBoard::Shape::_fillColor
protected

◆ _lineCap

LineCap LibBoard::Shape::_lineCap
protected

◆ _lineJoin

LineJoin LibBoard::Shape::_lineJoin
protected

◆ _lineStyle

LineStyle LibBoard::Shape::_lineStyle
protected

◆ _lineWidth

double LibBoard::Shape::_lineWidth
protected

◆ _name

const std::string LibBoard::Shape::_name
staticprivate

The generic name of the shape.

Definition at line 291 of file Board/Shapes.h.

Referenced by name().

◆ _penColor

DGtal::Color LibBoard::Shape::_penColor
protected

The documentation for this struct was generated from the following files: