DGtal  0.9.4beta
Public Member Functions | Private Attributes | Static Private Attributes
LibBoard::Group Struct Reference

#include <Board/ShapeList.h>

Inheritance diagram for LibBoard::Group:
[legend]
Collaboration diagram for LibBoard::Group:
[legend]

Public Member Functions

 Group (int depthValue=-1)
 
 Group (const Group &other)
 
 ~Group ()
 
const std::string & name () const
 
Shaperotate (double angle, const Point &center)
 
Shaperotate (double angle)
 
Group rotated (double angle, const Point &center)
 
Group rotated (double angle)
 
Shapetranslate (double dx, double dy)
 
Group translated (double dx, double dy)
 
Shapescale (double sx, double sy)
 
Shapescale (double s)
 
Group scaled (double sx, double sy)
 
Group scaled (double s)
 
void setClippingRectangle (float x, float y, float width, float height)
 
void setClippingPath (const std::vector< Point > &points)
 
void setClippingPath (const Path &path)
 
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
 
Groupoperator= (const Group &other)
 
Shapeclone () const
 
Rect boundingBox () const
 
- Public Member Functions inherited from LibBoard::ShapeList
 ShapeList (int depth=-1)
 
 ShapeList (const ShapeList &other)
 
 ~ShapeList ()
 
ShapeListclear ()
 
Point center () const
 
ShapeList rotated (double angle, const Point &center)
 
ShapeList rotated (double angle)
 
ShapeList translated (double dx, double dy)
 
ShapeList scaled (double sx, double sy)
 
ShapeList scaled (double s)
 
void scaleAll (double s)
 
virtual int minDepth () const
 
virtual int maxDepth () const
 
void shiftDepth (int shift)
 
ShapeListoperator= (const ShapeList &other)
 
ShapeListoperator<< (const Shape &shape)
 
ShapeListoperator+= (const Shape &shape)
 
ShapeListinsert (const Shape &shape, int depth)
 
ShapeListdup (unsigned int copies=1)
 
template<typename T >
T & last (const unsigned int position=0)
 
Shapelast (const unsigned int position=0)
 
Shapetop ()
 
- 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 ()
 
bool filled () const
 
ShaperotateDeg (double angle, const Point &center)
 
ShaperotateDeg (double angle)
 
Rect bbox ()
 
Shapeoperator-- ()
 
Shapeoperator++ ()
 
int depth () const
 
virtual void depth (int)
 
const DGtal::ColorpenColor () const
 
const DGtal::ColorfillColor () const
 

Private Attributes

Path _clippingPath
 

Static Private Attributes

static const std::string _name
 
static unsigned int _clippingCount = 0
 

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::ShapeList
void addShape (const Shape &shape, double scaleFactor)
 
void free ()
 
- 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
 
- Protected Attributes inherited from LibBoard::ShapeList
std::vector< Shape * > _shapes
 
int _nextDepth
 
- Protected Attributes inherited from LibBoard::Shape
int _depth
 
DGtal::Color _penColor
 
DGtal::Color _fillColor
 
double _lineWidth
 
LineStyle _lineStyle
 
LineCap _lineCap
 
LineJoin _lineJoin
 

Detailed Description

A group of shapes. A group is basically a ShapeList except that when rendered in either an SVG of a FIG file, it is a true compound element.

The Group structure.

Definition at line 183 of file ShapeList.h.

Constructor & Destructor Documentation

LibBoard::Group::Group ( int  depthValue = -1)
inline

Definition at line 185 of file ShapeList.h.

Referenced by clone(), rotated(), scaled(), and translated().

186  : ShapeList( depthValue ), _clippingPath( true /* closed path */ ) { }
ShapeList(int depth=-1)
Definition: ShapeList.h:6
Path _clippingPath
Definition: ShapeList.h:272
LibBoard::Group::Group ( const Group other)
inline

Definition at line 188 of file ShapeList.h.

189  : ShapeList( other ), _clippingPath( other._clippingPath ) { }
ShapeList(int depth=-1)
Definition: ShapeList.h:6
Path _clippingPath
Definition: ShapeList.h:272
LibBoard::Group::~Group ( )
inline

Definition at line 191 of file ShapeList.h.

191 { };

Member Function Documentation

Rect LibBoard::Group::boundingBox ( ) const
virtual

Returns the bounding box of the figure.

Returns
The rectangle of the bounding box.

Reimplemented from LibBoard::ShapeList.

Definition at line 680 of file ShapeList.cpp.

References _clippingPath, LibBoard::ShapeList::boundingBox(), LibBoard::Path::boundingBox(), and LibBoard::Path::size().

Referenced by flushFIG().

681 {
682  if ( _clippingPath.size() > 2 )
684  else
685  return ShapeList::boundingBox();
686 }
Rect boundingBox() const
Definition: Path.cpp:272
unsigned int size() const
Definition: Path.h:249
Rect boundingBox() const
Definition: ShapeList.cpp:379
Path _clippingPath
Definition: ShapeList.h:272
Shape * LibBoard::Group::clone ( ) const
virtual

Return a copy of the shape.

Returns
copye of the shape.

Reimplemented from LibBoard::ShapeList.

Definition at line 690 of file ShapeList.cpp.

References Group().

691 {
692  return new Group( *this );
693 }
Group(int depthValue=-1)
Definition: ShapeList.h:185
void LibBoard::Group::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::ShapeList.

Definition at line 661 of file ShapeList.cpp.

663 {
664  //todo
665  //ShapeList::flushCairo( cr, transform );
666 }
void LibBoard::Group::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::ShapeList.

Definition at line 620 of file ShapeList.cpp.

References boundingBox(), LibBoard::ShapeList::flushFIG(), LibBoard::Rect::height, LibBoard::Rect::left, LibBoard::Transform::mapX(), LibBoard::TransformFIG::mapY(), LibBoard::Rect::top, and LibBoard::Rect::width.

623 {
624  Rect box = boundingBox();
625  stream << "# Begin group\n";
626  stream << "6 "
627  << transform.mapX( box.left ) << " "
628  << transform.mapY( box.top ) << " "
629  << transform.mapX( box.left + box.width ) << " "
630  << transform.mapY( box.top - box.height ) << "\n";
631  ShapeList::flushFIG( stream, transform, colormap );
632  stream << "-6\n";
633  stream << "# End Group\n";
634 }
Rect boundingBox() const
Definition: ShapeList.cpp:680
void flushFIG(std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const
Definition: ShapeList.cpp:315
void LibBoard::Group::flushPostscript ( std::ostream &  stream,
const TransformEPS transform 
) const
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.

Reimplemented from LibBoard::ShapeList.

Definition at line 600 of file ShapeList.cpp.

References _clippingCount, _clippingPath, LibBoard::ShapeList::flushPostscript(), LibBoard::Path::flushPostscript(), and LibBoard::Path::size().

602 {
603  if ( _clippingPath.size() > 2 ) {
604  stream << "%%% Begin Clipped Group " << _clippingCount << "\n";
605  stream << " gsave n ";
606  _clippingPath.flushPostscript( stream, transform );
607  stream << " 0 slw clip " << std::endl;
608  ShapeList::flushPostscript( stream, transform );
609  stream << " grestore\n";
610  stream << "%%% End Clipped Group " << _clippingCount << "\n";
611  ++ _clippingCount;
612  } else {
613  stream << "%%% Begin Group\n";
614  ShapeList::flushPostscript( stream, transform );
615  stream << "%%% End Group\n";
616  }
617 }
unsigned int size() const
Definition: Path.h:249
Path _clippingPath
Definition: ShapeList.h:272
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const
Definition: ShapeList.cpp:300
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const
Definition: Path.cpp:154
static unsigned int _clippingCount
Definition: ShapeList.h:273
void LibBoard::Group::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::ShapeList.

Definition at line 637 of file ShapeList.cpp.

References _clippingCount, _clippingPath, LibBoard::ShapeList::flushSVG(), LibBoard::Path::flushSVGCommands(), and LibBoard::Path::size().

639 {
640  if ( _clippingPath.size() > 2 ) {
641  stream << "<g clip-rule=\"nonzero\">\n"
642  << " <clipPath id=\"LocalClipPath" << _clippingCount << "\">\n"
643  << " <path clip-rule=\"evenodd\" d=\"";
644  _clippingPath.flushSVGCommands( stream, transform );
645  stream << "\" />\n";
646  stream << " </clipPath>\n";
647  stream << "<g clip-path=\"url(#LocalClipPath" << _clippingCount <<")\">\n";
648  ++ _clippingCount;
649  ShapeList::flushSVG( stream, transform );
650  stream << "</g>\n";
651  stream << "</g>\n";
652  } else {
653  stream << "<g>\n";
654  ShapeList::flushSVG( stream, transform );
655  stream << "</g>\n";
656  }
657 }
void flushSVGCommands(std::ostream &stream, const TransformSVG &transform) const
Definition: Path.cpp:193
unsigned int size() const
Definition: Path.h:249
void flushSVG(std::ostream &stream, const TransformSVG &transform) const
Definition: ShapeList.cpp:330
Path _clippingPath
Definition: ShapeList.h:272
static unsigned int _clippingCount
Definition: ShapeList.h:273
void LibBoard::Group::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::ShapeList.

Definition at line 670 of file ShapeList.cpp.

References LibBoard::ShapeList::flushTikZ().

672 {
673  // FIXME: implement clipping
674  stream << "\\begin{scope}\n";
675  ShapeList::flushTikZ( stream, transform );
676  stream << "\\end{scope}\n";
677 }
void flushTikZ(std::ostream &stream, const TransformTikZ &transform) const
Definition: ShapeList.cpp:363
const std::string & LibBoard::Group::name ( ) const
virtual

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

Returns
object name

Reimplemented from LibBoard::ShapeList.

Definition at line 481 of file ShapeList.cpp.

References _name.

482 {
483  return _name;
484 }
static const std::string _name
Definition: ShapeList.h:271
Group & LibBoard::Group::operator= ( const Group other)

Definition at line 696 of file ShapeList.cpp.

References LibBoard::ShapeList::operator=().

697 {
698  ShapeList::operator=( other );
699  return *this;
700 }
ShapeList & operator=(const ShapeList &other)
Definition: ShapeList.cpp:77
Shape & LibBoard::Group::rotate ( double  angle,
const Point center 
)
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.

Reimplemented from LibBoard::ShapeList.

Definition at line 487 of file ShapeList.cpp.

References _clippingPath, LibBoard::ShapeList::rotate(), and LibBoard::Path::rotate().

488 {
489  ShapeList::rotate( angle, rotCenter );
490  _clippingPath.rotate( angle, rotCenter );
491  return (*this);
492 }
Path & rotate(double angle, const Point &center)
Definition: Path.cpp:43
Shape & rotate(double angle, const Point &center)
Definition: ShapeList.cpp:205
Path _clippingPath
Definition: ShapeList.h:272
Shape & LibBoard::Group::rotate ( double  angle)
virtual

Rotate the shape around its center.

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

Reimplemented from LibBoard::ShapeList.

Definition at line 495 of file ShapeList.cpp.

References _clippingPath, LibBoard::ShapeList::center(), LibBoard::ShapeList::rotate(), and LibBoard::Path::rotate().

496 {
497  ShapeList::rotate( angle );
498  _clippingPath.rotate( angle, center() );
499  return (*this);
500 }
Point center() const
Definition: ShapeList.cpp:192
Path & rotate(double angle, const Point &center)
Definition: Path.cpp:43
Shape & rotate(double angle, const Point &center)
Definition: ShapeList.cpp:205
Path _clippingPath
Definition: ShapeList.h:272
Group LibBoard::Group::rotated ( double  angle,
const Point center 
)

Definition at line 536 of file ShapeList.cpp.

References Group().

537 {
538  return static_cast<const Group &>( Group( *this ).rotate( angle, rotCenter ) );
539 }
Group(int depthValue=-1)
Definition: ShapeList.h:185
Group LibBoard::Group::rotated ( double  angle)

Definition at line 542 of file ShapeList.cpp.

References Group().

543 {
544  return static_cast<const Group &>( Group( *this ).rotate( angle ) );
545 }
Group(int depthValue=-1)
Definition: ShapeList.h:185
Shape & LibBoard::Group::scale ( double  sx,
double  sy 
)
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.

Reimplemented from LibBoard::ShapeList.

Definition at line 511 of file ShapeList.cpp.

References _clippingPath, LibBoard::ShapeList::center(), LibBoard::Path::center(), LibBoard::ShapeList::scale(), LibBoard::Path::scale(), LibBoard::Path::translate(), LibBoard::Point::x, and LibBoard::Point::y.

512 {
513  Point delta = _clippingPath.center() - center();
514  delta.x *= sx;
515  delta.y *= sy;
516  _clippingPath.scale( sx, sy );
517  ShapeList::scale( sx, sy );
518  delta = ( center() + delta ) - _clippingPath.center();
519  _clippingPath.translate( delta.x, delta.y );
520  return (*this);
521 }
Path & scale(double sx, double sy)
Definition: Path.cpp:108
Path & translate(double dx, double dy)
Definition: Path.cpp:81
Point center() const
Definition: Path.cpp:36
Point center() const
Definition: ShapeList.cpp:192
Shape & scale(double sx, double sy)
Definition: ShapeList.cpp:254
Path _clippingPath
Definition: ShapeList.h:272
Shape & LibBoard::Group::scale ( double  s)
virtual

Scale the shape along both axis.

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

Reimplemented from LibBoard::ShapeList.

Definition at line 524 of file ShapeList.cpp.

References _clippingPath, LibBoard::ShapeList::center(), LibBoard::Path::center(), LibBoard::ShapeList::scale(), LibBoard::Path::scale(), LibBoard::Path::translate(), LibBoard::Point::x, and LibBoard::Point::y.

525 {
526  Point delta = _clippingPath.center() - center();
527  delta *= s;
528  _clippingPath.scale( s );
529  ShapeList::scale( s );
530  delta = ( center() + delta ) - _clippingPath.center();
531  _clippingPath.translate( delta.x, delta.y );
532  return (*this);
533 }
Path & scale(double sx, double sy)
Definition: Path.cpp:108
Path & translate(double dx, double dy)
Definition: Path.cpp:81
Point center() const
Definition: Path.cpp:36
Point center() const
Definition: ShapeList.cpp:192
Shape & scale(double sx, double sy)
Definition: ShapeList.cpp:254
Path _clippingPath
Definition: ShapeList.h:272
Group LibBoard::Group::scaled ( double  sx,
double  sy 
)

Definition at line 554 of file ShapeList.cpp.

References Group().

555 {
556  return static_cast<const Group &>( Group( *this ).scale( sx, sy ) );
557 }
Group(int depthValue=-1)
Definition: ShapeList.h:185
Group LibBoard::Group::scaled ( double  s)

Definition at line 560 of file ShapeList.cpp.

References Group().

561 {
562  return static_cast<const Group &>( Group( *this ).scale( s ) );
563 }
Group(int depthValue=-1)
Definition: ShapeList.h:185
void LibBoard::Group::setClippingPath ( const std::vector< Point > &  points)

Define a clipping path for the group.

Parameters
pointsA path.

Definition at line 577 of file ShapeList.cpp.

References _clippingPath, and LibBoard::Path::clear().

578 {
580  std::vector<Point>::const_iterator it = points.begin();
581  std::vector<Point>::const_iterator end = points.end();
582  while ( it != end ) {
583  _clippingPath << *it;
584  ++it;
585  }
586 }
void clear()
Definition: Path.h:231
Path _clippingPath
Definition: ShapeList.h:272
void LibBoard::Group::setClippingPath ( const Path path)

Define a clipping path for the group.

Parameters
pathA path.

Definition at line 589 of file ShapeList.cpp.

References _clippingPath, LibBoard::Path::pop_back(), LibBoard::Path::setClosed(), and LibBoard::Path::size().

590 {
591  _clippingPath = path;
592  _clippingPath.setClosed( true );
593  if ( _clippingPath.size() > 1 ) {
594  if ( _clippingPath[0] == _clippingPath[ _clippingPath.size() - 1 ] )
596  }
597 }
unsigned int size() const
Definition: Path.h:249
void setClosed(bool closed)
Definition: Path.h:255
Path & pop_back()
Definition: Path.cpp:22
Path _clippingPath
Definition: ShapeList.h:272
void LibBoard::Group::setClippingRectangle ( float  x,
float  y,
float  width,
float  height 
)

Define a clipping rectangle for the group.

Parameters
xlower corner of the rectangle
ylower corner of the rectangle
widthwidth
heightheight

Definition at line 567 of file ShapeList.cpp.

References _clippingPath, and LibBoard::Path::clear().

568 {
570  _clippingPath << Point( x, y );
571  _clippingPath << Point( x + width, y );
572  _clippingPath << Point( x + width, y - height);
573  _clippingPath << Point( x , y - height );
574 }
void clear()
Definition: Path.h:231
Path _clippingPath
Definition: ShapeList.h:272
Shape & LibBoard::Group::translate ( double  dx,
double  dy 
)
virtual

Translate the shape by a given offset.

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

Reimplemented from LibBoard::ShapeList.

Definition at line 503 of file ShapeList.cpp.

References _clippingPath, LibBoard::ShapeList::translate(), and LibBoard::Path::translate().

504 {
505  ShapeList::translate( dx, dy );
506  _clippingPath.translate( dx, dy );
507  return (*this);
508 }
Path & translate(double dx, double dy)
Definition: Path.cpp:81
Shape & translate(double dx, double dy)
Definition: ShapeList.cpp:236
Path _clippingPath
Definition: ShapeList.h:272
Group LibBoard::Group::translated ( double  dx,
double  dy 
)

Definition at line 548 of file ShapeList.cpp.

References Group().

549 {
550  return static_cast<const Group &>( Group( *this ).translate( dx, dy ) );
551 }
Group(int depthValue=-1)
Definition: ShapeList.h:185

Field Documentation

unsigned int LibBoard::Group::_clippingCount = 0
staticprivate

Definition at line 273 of file ShapeList.h.

Referenced by flushPostscript(), and flushSVG().

Path LibBoard::Group::_clippingPath
private
const std::string LibBoard::Group::_name
staticprivate

The generic name of the shape.

Definition at line 271 of file ShapeList.h.

Referenced by name().


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