# LibBoard::Shape Struct Reference

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

`#include <Shapes.h>`

Inheritance diagram for LibBoard::Shape:

List of all members.

## 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 (Color penColor, Color fillColor, double lineWidth, LineStyle style, const LineCap cap, const LineJoin join, int depth)
virtual | ~Shape ()
virtual const std::string & | name () const
virtual Shape * | clone () const =0
bool | filled () const
virtual Point | center () const =0
virtual Shape & | rotate (double angle, const Point &center)=0
virtual Shape & | rotate (double angle)=0
Shape & | rotateDeg (double angle, const Point &center)
Shape & | rotateDeg (double angle)
virtual Shape & | translate (double dx, double dy)=0
virtual Shape & | scale (double sx, double sy)=0
virtual Shape & | scale (double s)=0
virtual Rect | boundingBox () const =0
Rect | bbox ()
Shape & | operator-- ()
Shape & | operator++ ()
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< Color, int > &colormap) const =0
virtual void | flushSVG (std::ostream &stream, const TransformSVG &transform) const =0
int | depth () const
virtual void | depth (int)
virtual void | shiftDepth (int shift)
const Color & | penColor () const
const Color & | fillColor () const

## Protected Member Functions

std::string | svgProperties (const TransformSVG &transform) const
std::string | postscriptProperties () const

## Protected Attributes

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

## Detailed Description

Abstract structure for a 2D shape.

Shape structure.

## Constructor & Destructor Documentation

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

Shape constructor.

Parameters:

  | penColor | The pen color of the shape.
  | fillColor | The fill color of the shape.
  | lineWidth | The line thickness.
  | depth | The depth of the shape.

virtual LibBoard::Shape::~Shape | ( |  | ) | `[inline, virtual]`

Shape destructor.

## Member Function Documentation

Rect LibBoard::Shape::bbox | ( |  | ) | `[inline]`

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

Examples:
  examples/koch.cpp.

References boundingBox().

Referenced by LibBoard::Board::drawBoundingBox(), LibBoard::Group::flushFIG(), LibBoard::Board::saveEPS(), LibBoard::Board::saveFIG(), and LibBoard::Board::saveSVG().

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().

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().

virtual Shape* LibBoard::Shape::clone | ( |  | ) | const`[pure virtual]`

Return a copy of the shape.

Returns:

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

Referenced by LibBoard::Board::addDuplicates(), LibBoard::ShapeList::operator+=(), and LibBoard::ShapeList::operator<<().

bool LibBoard::Shape::filled | ( |  | ) | const`[inline]`

Checks whether a shape is filled with a color or not.

Returns:
  true if the shape is filled.

References _fillColor.

Referenced by LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Ellipse::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Polyline::flushPostscript(), LibBoard::Ellipse::flushPostscript(), and LibBoard::Arrow::flushPostscript().

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

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

Parameters:

  | stream | The output stream.
  | transform | A 2D transform to be applied.

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

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:

  | stream | The output stream.
  | transform | A 2D transform to be applied.

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

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:

  | stream | The output stream.
  | transform | A 2D transform to be applied.

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

const std::string & LibBoard::Shape::name | ( |  | ) | const`[virtual]`

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

Returns:

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

Shape & LibBoard::Shape::operator++ | ( |  | ) | `[inline]`

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

Returns:

References _depth.

Shape & LibBoard::Shape::operator-- | ( |  | ) | `[inline]`

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

Returns:

References _depth.

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.

References _lineCap, _lineJoin, _lineStyle, and _lineWidth.

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

virtual Shape& LibBoard::Shape::rotate | ( | double | angle | ) | `[pure virtual]`

Rotate the shape around its center.

Parameters:

  | angle | The 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.

virtual Shape& LibBoard::Shape::rotate | ( | double | angle,
|  | const Point & | center |
| ) |  |  | `[pure virtual]`

Rotate the shape around a given center of rotation.

Parameters:

  | angle | The rotation angle in radian.
  | center | The 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().

Shape & LibBoard::Shape::rotateDeg | ( | double | angle | ) | `[inline]`

Rotate the shape around its center.

Parameters:

  | angle | The rotation angle in degree.
  | center | The center of rotation.

Returns:
  A reference to the shape itself.

References center(), and rotate().

Shape & LibBoard::Shape::rotateDeg | ( | double | angle,
|  | const Point & | center |
| ) |  |  | `[inline]`

Rotate the shape around a given center of rotation.

Parameters:

  | angle | The rotation angle in degree.
  | center | The center of rotation.

Returns:
  A reference to the shape itself.

Examples:
  examples/example4.cpp.

References rotate().

virtual Shape& LibBoard::Shape::scale | ( | double | s | ) | `[pure virtual]`

Scale the shape along both axis.

Parameters:

  | s | The 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.

virtual Shape& LibBoard::Shape::scale | ( | double | sx,
|  | double | sy |
| ) |  |  | `[pure virtual]`

Scale the shape along the x an y axis.

Parameters:

  | sx | The scale factor along the x axis.
  | sy | The 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().

virtual void LibBoard::Shape::scaleAll | ( | double | s | ) | `[pure virtual]`

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

Parameters:

  | s | The scaling factor.

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

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.

References _fillColor, _lineCap, _lineJoin, _lineStyle, _lineWidth, _penColor, and LibBoard::Color::svgAlpha().

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

virtual Shape& LibBoard::Shape::translate | ( | double | dx,
|  | double | dy |
| ) |  |  | `[pure virtual]`

Translate the shape by a given offset.

Parameters:

  | dx | The x offset.
  | dy | The 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().

## Member Data Documentation

int LibBoard::Shape::_depth `[protected]`

The depth of the shape.

Referenced by LibBoard::Text::flushFIG(), LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Ellipse::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Line::flushFIG(), LibBoard::Dot::flushFIG(), LibBoard::GouraudTriangle::flushPostscript(), LibBoard::GouraudTriangle::flushSVG(), operator++(), and operator--().

Color LibBoard::Shape::_fillColor `[protected]`

The color of the shape.

Referenced by filled(), LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Ellipse::flushFIG(), LibBoard::Polyline::flushPostscript(), LibBoard::Ellipse::flushPostscript(), LibBoard::Arrow::flushSVG(), and svgProperties().

LineCap LibBoard::Shape::_lineCap `[protected]`

The linecap attribute. (The way line terminates.)

Referenced by LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Line::flushFIG(), LibBoard::Dot::flushFIG(), LibBoard::Polyline::flushPostscript(), postscriptProperties(), and svgProperties().

LineJoin LibBoard::Shape::_lineJoin `[protected]`

The linejoin attribute. (The shape of line junctions.)

Referenced by LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Line::flushFIG(), LibBoard::Dot::flushFIG(), LibBoard::Polyline::flushPostscript(), postscriptProperties(), and svgProperties().

LineStyle LibBoard::Shape::_lineStyle `[protected]`

The line style (solid, dashed, etc.).

Referenced by LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Ellipse::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Line::flushFIG(), LibBoard::Arrow::flushSVG(), postscriptProperties(), and svgProperties().

double LibBoard::Shape::_lineWidth `[protected]`

The line thickness.

Referenced by LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Ellipse::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Line::flushFIG(), LibBoard::Dot::flushFIG(), LibBoard::Polyline::flushPostscript(), LibBoard::Arrow::flushPostscript(), LibBoard::Arrow::flushSVG(), postscriptProperties(), and svgProperties().

Color LibBoard::Shape::_penColor `[protected]`

The color of the shape.

Referenced by LibBoard::Text::flushFIG(), LibBoard::Rectangle::flushFIG(), LibBoard::Polyline::flushFIG(), LibBoard::Ellipse::flushFIG(), LibBoard::Arrow::flushFIG(), LibBoard::Line::flushFIG(), LibBoard::Dot::flushFIG(), LibBoard::Text::flushPostscript(), LibBoard::Polyline::flushPostscript(), LibBoard::Ellipse::flushPostscript(), LibBoard::Arrow::flushPostscript(), LibBoard::Line::flushPostscript(), LibBoard::Dot::flushPostscript(), LibBoard::Text::flushSVG(), LibBoard::Arrow::flushSVG(), and svgProperties().

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

- include/board/Shapes.h
- src/Shapes.cpp