DGtal 1.3.0
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | Static Private Attributes
LibBoard::Rectangle Struct Reference

A rectangle. More...

#include <Board/Shapes.h>

Inheritance diagram for LibBoard::Rectangle:
LibBoard::Polyline LibBoard::Shape LibBoard::Image

Public Member Functions

 Rectangle (double x, double y, double width, double height, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle style=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 
 Rectangle (const Rect &rect, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle style=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 
const std::string & name () const
 
double x () const
 
double y () const
 
double width ()
 
double height ()
 
Point topLeft ()
 
Point topRight ()
 
Point bottomLeft ()
 
Point bottomRight ()
 
Rectangle rotated (double angle, const Point &center) const
 
Rectangle rotated (double angle) const
 
Rectangle translated (double dx, double dy) const
 
Rectangle scaled (double sx, double sy) const
 
Rectangle scaled (double s) const
 
void scaleAll (double s)
 
void flushFIG (std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const
 
void flushSVG (std::ostream &stream, const TransformSVG &transform) const
 
void flushCairo (cairo_t *cr, const TransformCairo &transform) const
 
void flushTikZ (std::ostream &stream, const TransformTikZ &transform) const
 
Rectangleclone () const
 
- Public Member Functions inherited from LibBoard::Polyline
 Polyline (const std::vector< Point > &points, bool closed, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 
 Polyline (const Path &path, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 
 Polyline (bool closed, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 
const std::string & name () const
 
Point center () const
 
Polylineoperator<< (const Point &p)
 
Pointoperator[] (const unsigned int n)
 
Polylinerotate (double angle, const Point &center)
 
Polyline rotated (double angle, const Point &center) const
 
Polylinerotate (double angle)
 
Polyline rotated (double angle) const
 
Polylinetranslate (double dx, double dy)
 
Polyline translated (double dx, double dy) const
 
Shapescale (double sx, double sy)
 
Shapescale (double s)
 
Polyline scaled (double sx, double sy) const
 
Polyline scaled (double s) const
 
void scaleAll (double s)
 
void flushPostscript (std::ostream &stream, const TransformEPS &transform) const
 
void flushFIG (std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const
 
void flushSVG (std::ostream &stream, const TransformSVG &transform) const
 
void flushCairo (cairo_t *cr, const TransformCairo &transform) const
 
void flushTikZ (std::ostream &stream, const TransformTikZ &transform) const
 
Rect boundingBox () const
 
Polylineclone () const
 
- Public Member Functions inherited from LibBoard::Shape
 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 Attributes

bool _isRectangle
 
- Protected Attributes inherited from LibBoard::Polyline
Path _path
 
- Protected Attributes inherited from LibBoard::Shape
int _depth
 
DGtal::Color _penColor
 
DGtal::Color _fillColor
 
double _lineWidth
 
LineStyle _lineStyle
 
LineCap _lineCap
 
LineJoin _lineJoin
 

Static Private Attributes

static const std::string _name
 

Additional Inherited Members

- Public Types inherited from LibBoard::Shape
enum  LineCap { ButtCap = 0 , RoundCap , SquareCap }
 
enum  LineJoin { MiterJoin = 0 , RoundJoin , BevelJoin }
 
enum  LineStyle {
  SolidStyle = 0 , DashStyle , DotStyle , DashDotStyle ,
  DashDotDotStyle , DashDotDotDotStyle
}
 
- Protected Member Functions inherited from LibBoard::Shape
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
 

Detailed Description

A rectangle.

The rectangle structure.

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

Constructor & Destructor Documentation

◆ Rectangle() [1/2]

LibBoard::Rectangle::Rectangle ( double  x,
double  y,
double  width,
double  height,
DGtal::Color  penColor,
DGtal::Color  fillColor,
double  lineWidth,
const LineStyle  style = SolidStyle,
const LineCap  cap = ButtCap,
const LineJoin  join = MiterJoin,
int  depth = -1 
)
inline

◆ Rectangle() [2/2]

LibBoard::Rectangle::Rectangle ( const Rect rect,
DGtal::Color  penColor,
DGtal::Color  fillColor,
double  lineWidth,
const LineStyle  style = SolidStyle,
const LineCap  cap = ButtCap,
const LineJoin  join = MiterJoin,
int  depth = -1 
)
inline

Member Function Documentation

◆ bottomLeft()

Point LibBoard::Rectangle::bottomLeft ( )
inline

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

943{ return Point( _path[3].x, _path[3].y ); }
MyPointD Point
Definition: testClone2.cpp:383

References LibBoard::Polyline::_path.

◆ bottomRight()

Point LibBoard::Rectangle::bottomRight ( )
inline

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

944{ return Point( _path[2].x, _path[2].y ); }

References LibBoard::Polyline::_path.

◆ clone()

Rectangle * LibBoard::Rectangle::clone ( ) const
virtual

Return a copy of the shape.

Returns
copye of the shape.

Reimplemented from LibBoard::Polyline.

Reimplemented in LibBoard::Image.

Definition at line 1921 of file Shapes.cpp.

1921 {
1922 return new Rectangle(*this);
1923}
Rectangle(double x, double y, double width, double height, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle style=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)

◆ flushCairo()

void LibBoard::Rectangle::flushCairo ( cairo_t *  cr,
const TransformCairo transform 
) const
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.

Reimplemented from LibBoard::Polyline.

Reimplemented in LibBoard::Image.

Definition at line 2010 of file Shapes.cpp.

2012{
2013 {
2014 double x1 = _path[1].x - _path[0].x;
2015 double y1 = _path[1].y - _path[0].y;
2016 double x2 = _path[3].x - _path[0].x;
2017 double y2 = _path[3].y - _path[0].y;
2018 if ( fabs(x1*x2 + y1*y2) > 0.01 ) {
2019 Polyline::flushCairo( cr, transform );
2020 return;
2021 }
2022 }
2023
2024 cairo_save (cr);
2025
2026 cairo_set_source_rgba (cr, _fillColor.red()/255.0, _fillColor.green()/255.0, _fillColor.blue()/255.0, 1.);
2027
2028 if ( _path[0].y == _path[1].y )
2029 cairo_rectangle (cr, transform.mapX( _path[0].x ), transform.mapY( _path[0].y ), transform.scale( _path[1].x - _path[0].x ), transform.scale( _path[0].y - _path[3].y ));
2030 else
2031 {
2032 Point v = _path[1] - _path[0];
2033 v /= v.norm();
2034 double angle = ( _path[1].y > _path[0].y ) ? acos( v * Point(1,0) ) : -acos( v * Point( 1, 0 ) );
2035
2036 // tr
2037 cairo_translate (cr, transform.mapX( _path[0].x )+transform.scale( _path[1].x - _path[0].x )/2., transform.mapY( _path[0].y )+transform.scale( _path[0].y - _path[3].y )/2.);
2038 cairo_rotate (cr, angle);
2039 // tr
2040
2041 cairo_rectangle (cr, -transform.scale( _path[1].x - _path[0].x )/2., -transform.scale( _path[0].y - _path[3].y )/2., transform.scale( (_path[1] - _path[0]).norm() ), transform.scale( (_path[0] - _path[3]).norm() ));
2042 }
2043
2044 if ( filled() )
2045 {
2047 cairo_fill_preserve (cr);
2048 else
2049 cairo_fill (cr);
2050 }
2051
2052 //
2053
2055 {
2056 cairo_set_source_rgba (cr, _penColor.red()/255.0, _penColor.green()/255.0, _penColor.blue()/255.0, 1.);
2057
2058 cairo_set_line_width (cr, _lineWidth);
2059 cairo_set_line_cap (cr, cairoLineCap[_lineCap]);
2060 cairo_set_line_join (cr, cairoLineJoin[_lineJoin]);
2062
2063 cairo_stroke (cr);
2064 }
2065
2066 cairo_restore (cr);
2067}
static const Color None
Definition: Color.h:412
void green(const unsigned char aGreenValue)
void red(const unsigned char aRedValue)
void blue(const unsigned char aBlueValue)
void flushCairo(cairo_t *cr, const TransformCairo &transform) const
Definition: Shapes.cpp:1809
DGtal::Color _fillColor
Definition: Board/Shapes.h:297
DGtal::Color _penColor
Definition: Board/Shapes.h:296
LineJoin _lineJoin
Definition: Board/Shapes.h:301
void setCairoDashStyle(cairo_t *cr, LineStyle type) const
Definition: Shapes.cpp:153
LineStyle _lineStyle
Definition: Board/Shapes.h:299
bool filled() const
Definition: Board/Shapes.h:111

References LibBoard::Shape::_fillColor, LibBoard::Shape::_lineCap, LibBoard::Shape::_lineJoin, LibBoard::Shape::_lineStyle, LibBoard::Shape::_lineWidth, LibBoard::Polyline::_path, LibBoard::Shape::_penColor, DGtal::Color::blue(), LibBoard::Shape::filled(), LibBoard::Polyline::flushCairo(), DGtal::Color::green(), DGtal::Color::None, DGtal::Color::red(), and LibBoard::Shape::setCairoDashStyle().

◆ flushFIG()

void LibBoard::Rectangle::flushFIG ( std::ostream &  stream,
const TransformFIG transform,
std::map< DGtal::Color, int > &  colormap 
) const
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.

Reimplemented from LibBoard::Polyline.

Reimplemented in LibBoard::Image.

Definition at line 1926 of file Shapes.cpp.

1929{
1930 if ( _path[0].y != _path[1].y ) {
1931 Polyline::flushFIG( stream, transform, colormap );
1932 return;
1933 }
1934 if ( _path[0].x != _path[3].x ) {
1935 Polyline::flushFIG( stream, transform, colormap );
1936 return;
1937 }
1938 {
1939 double x1 = _path[1].x - _path[0].x;
1940 double y1 = _path[1].y - _path[0].y;
1941 double x2 = _path[3].x - _path[0].x;
1942 double y2 = _path[3].y - _path[0].y;
1943 if ( fabs(x1*x2 + y1*y2) > 0.01 ) {
1944 Polyline::flushFIG( stream, transform, colormap );
1945 return;
1946 }
1947 }
1948
1949 stream << "2 2 " << _lineStyle << " ";
1950 // Thickness
1951 stream << ( _penColor.valid()?transform.mapWidth( _lineWidth ):0 ) << " ";
1952 // Pen color
1953 stream << colormap[ _penColor ] << " ";
1954 // Fill color
1955 stream << colormap[ _fillColor ] << " ";
1956 // Depth
1957 stream << transform.mapDepth( _depth ) << " ";
1958 // Pen style
1959 stream << "-1 ";
1960 // Area fill, style val, join style, cap style, radius, f_arrow, b_arrow, number of points
1961 if ( filled() )
1962 stream << "20 " << (_lineStyle?"4.000 ":"0.000 ") << _lineJoin << " " << _lineCap << " -1 0 0 5\n";
1963 else
1964 stream << "-1 " << (_lineStyle?"4.000 ":"0.000 ") << _lineJoin << " " << _lineCap << " -1 0 0 5\n";
1965 stream << " ";
1966 _path.flushFIG( stream, transform );
1967 stream << std::endl;
1968}
bool valid() const
void flushFIG(std::ostream &stream, const TransformFIG &transform) const
Definition: Path.cpp:173
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const
Definition: Shapes.cpp:1760

References LibBoard::Shape::_depth, LibBoard::Shape::_fillColor, LibBoard::Shape::_lineCap, LibBoard::Shape::_lineJoin, LibBoard::Shape::_lineStyle, LibBoard::Shape::_lineWidth, LibBoard::Polyline::_path, LibBoard::Shape::_penColor, LibBoard::Shape::filled(), LibBoard::Path::flushFIG(), LibBoard::Polyline::flushFIG(), and DGtal::Color::valid().

◆ flushSVG()

void LibBoard::Rectangle::flushSVG ( std::ostream &  stream,
const TransformSVG transform 
) const
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.

Reimplemented from LibBoard::Polyline.

Reimplemented in LibBoard::Image.

Definition at line 1971 of file Shapes.cpp.

1973{
1974 {
1975 double x1 = _path[1].x - _path[0].x;
1976 double y1 = _path[1].y - _path[0].y;
1977 double x2 = _path[3].x - _path[0].x;
1978 double y2 = _path[3].y - _path[0].y;
1979 if ( fabs(x1*x2 + y1*y2) > 0.01 ) {
1980 Polyline::flushSVG( stream, transform );
1981 return;
1982 }
1983 }
1984
1985 if ( _path[0].y == _path[1].y ) {
1986 stream << "<rect x=\"" << transform.mapX( _path[0].x ) << '"'
1987 << " y=\"" << transform.mapY( _path[0].y ) << '"'
1988 << " width=\"" << transform.scale( _path[1].x - _path[0].x ) << '"'
1989 << " height=\"" << transform.scale( _path[0].y - _path[3].y ) << '"'
1990 << svgProperties( transform )
1991 << " />" << std::endl;
1992 } else {
1993 Point v = _path[1] - _path[0];
1994 v /= v.norm();
1995 double angle = ( _path[1].y > _path[0].y ) ? acos( v * Point(1,0) ) : -acos( v * Point( 1, 0 ) );
1996 angle = ( angle * 180 ) / M_PI;
1997 stream << "<rect x=\"" << transform.mapX( _path[0].x ) << '"'
1998 << " y=\"" << transform.mapY( _path[0].y ) << '"'
1999 << " width=\"" << transform.scale( (_path[1] - _path[0]).norm() ) << '"'
2000 << " height=\"" << transform.scale( (_path[0] - _path[3]).norm() ) << '"'
2001 << svgProperties( transform ) << ' '
2002 << " transform=\"rotate(" << -angle << ", "
2003 << transform.mapX( _path[0].x ) << ", " << transform.mapY( _path[0].y ) << ") \" "
2004 << " />" << std::endl;
2005 }
2006}
Path & scale(double sx, double sy)
Definition: Path.cpp:108
void flushSVG(std::ostream &stream, const TransformSVG &transform) const
Definition: Shapes.cpp:1792
std::string svgProperties(const TransformSVG &transform) const
Definition: Shapes.cpp:109

References LibBoard::Polyline::_path, LibBoard::Polyline::flushSVG(), and LibBoard::Shape::svgProperties().

◆ flushTikZ()

void LibBoard::Rectangle::flushTikZ ( std::ostream &  stream,
const TransformTikZ transform 
) const
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.

Reimplemented from LibBoard::Polyline.

Reimplemented in LibBoard::Image.

Definition at line 2071 of file Shapes.cpp.

2073{
2074 Polyline::flushTikZ( stream, transform );
2075 return;
2076
2077 stream << "\\path[" << tikzProperties(transform) << "] ("
2078 << _path[0].x << ',' << _path[0].y << ')'
2079 << " rectangle (" << _path[1].x << ',' << _path[3].y << "); ";
2080}
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const
Definition: Shapes.cpp:1850
std::string tikzProperties(const TransformTikZ &transform) const
Definition: Shapes.cpp:177

References LibBoard::Polyline::_path, LibBoard::Polyline::flushTikZ(), and LibBoard::Shape::tikzProperties().

◆ height()

double LibBoard::Rectangle::height ( )
inline

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

940{ return (_path[0] - _path[3]).norm(); }

References LibBoard::Polyline::_path.

◆ name()

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

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

Returns
object name

Reimplemented from LibBoard::Polyline.

Reimplemented in LibBoard::Image.

Definition at line 1879 of file Shapes.cpp.

1880{
1881 return _name;
1882}
static const std::string _name

References _name.

◆ rotated() [1/2]

Rectangle LibBoard::Rectangle::rotated ( double  angle) const

Returns a copy of the arrow, rotated around its center.

Parameters
angleThe angle of rotation.
Returns
A copy of the lines, rotated around its center by the given angle.

Definition at line 1891 of file Shapes.cpp.

1892{
1893 return static_cast<Rectangle &>( Rectangle(*this).rotate( angle, center() ) );
1894}
Point center() const
Definition: Shapes.cpp:1655

References LibBoard::Polyline::center(), and LibBoard::Polyline::rotate().

◆ rotated() [2/2]

Rectangle LibBoard::Rectangle::rotated ( double  angle,
const Point center 
) const

Returns a copy of the arrow, rotated around a given rotation center.

Parameters
angleThe rotation angle.
centerThe center of rotation.
Returns
The rotated copy of the line.

Definition at line 1885 of file Shapes.cpp.

1886{
1887 return static_cast<Rectangle &>( Rectangle(*this).rotate( angle, rotCenter ) );
1888}

References LibBoard::Polyline::rotate().

◆ scaleAll()

void LibBoard::Rectangle::scaleAll ( double  s)
virtual

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

Parameters
sThe scaling factor.

Reimplemented from LibBoard::Polyline.

Definition at line 1915 of file Shapes.cpp.

1916{
1917 _path.scaleAll( s );
1918}
void scaleAll(double s)
Definition: Path.cpp:143

References LibBoard::Polyline::_path, and LibBoard::Path::scaleAll().

◆ scaled() [1/2]

Rectangle LibBoard::Rectangle::scaled ( double  s) const

Definition at line 1909 of file Shapes.cpp.

1910{
1911 return static_cast<Rectangle &>( Rectangle(*this).scale( s, s ) );
1912}

References LibBoard::Polyline::scale().

◆ scaled() [2/2]

Rectangle LibBoard::Rectangle::scaled ( double  sx,
double  sy 
) const

Returns a scaled copy of the arrow.

Parameters
sxScale factor along the x axis.
syScale factor along the y axis.
Returns
A scaled copy of the arrow.

Definition at line 1903 of file Shapes.cpp.

1904{
1905 return static_cast<Rectangle &>( Rectangle(*this).scale( sx, sy ) );
1906}

References LibBoard::Polyline::scale().

◆ topLeft()

Point LibBoard::Rectangle::topLeft ( )
inline

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

941{ return Point( _path[0].x, _path[0].y ); }

References LibBoard::Polyline::_path.

◆ topRight()

Point LibBoard::Rectangle::topRight ( )
inline

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

942{ return Point( _path[1].x, _path[1].y ); }

References LibBoard::Polyline::_path.

◆ translated()

Rectangle LibBoard::Rectangle::translated ( double  dx,
double  dy 
) const

Returns a translated copy of the arrow.

Parameters
dxThe shift along the x axis.
dyThe shift along the y axis.
Returns
A translated copy of the line.

Definition at line 1897 of file Shapes.cpp.

1898{
1899 return static_cast<Rectangle &>( Rectangle(*this).translate( dx, dy ) );
1900}

References LibBoard::Polyline::translate().

◆ width()

double LibBoard::Rectangle::width ( )
inline

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

939{ return (_path[1] - _path[0]).norm(); }

References LibBoard::Polyline::_path.

◆ x()

double LibBoard::Rectangle::x ( ) const
inline

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

937{ return _path[0].x; }

References LibBoard::Polyline::_path.

◆ y()

double LibBoard::Rectangle::y ( ) const
inline

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

938{ return _path[0].y; }

References LibBoard::Polyline::_path.

Field Documentation

◆ _isRectangle

bool LibBoard::Rectangle::_isRectangle
protected

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

◆ _name

const std::string LibBoard::Rectangle::_name
staticprivate

The generic name of the shape.

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

Referenced by name().


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