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

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. More...

#include <Board/ShapeList.h>

Inheritance 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

◆ Group() [1/2]

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

Definition at line 185 of file ShapeList.h.

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

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

◆ Group() [2/2]

LibBoard::Group::Group ( const Group other)
inline

Definition at line 188 of file ShapeList.h.

189  : ShapeList( other ), _clippingPath( other._clippingPath ) { }

◆ ~Group()

LibBoard::Group::~Group ( )
inline

Definition at line 191 of file ShapeList.h.

191 { };

Member Function Documentation

◆ boundingBox()

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.

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

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

Referenced by flushFIG().

◆ clone()

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.

691 {
692  return new Group( *this );
693 }
Group(int depthValue=-1)
Definition: ShapeList.h:185

References Group().

◆ flushCairo()

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 }

◆ flushFIG()

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.

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

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

◆ flushPostscript()

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.

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 }
static unsigned int _clippingCount
Definition: ShapeList.h:273
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const
Definition: Path.cpp:154
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const
Definition: ShapeList.cpp:300

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

◆ flushSVG()

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.

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
void flushSVG(std::ostream &stream, const TransformSVG &transform) const
Definition: ShapeList.cpp:330

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

◆ flushTikZ()

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.

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

References LibBoard::ShapeList::flushTikZ().

◆ name()

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.

482 {
483  return _name;
484 }
static const std::string _name
Definition: ShapeList.h:271

References _name.

◆ operator=()

Group & LibBoard::Group::operator= ( const Group other)

Definition at line 696 of file ShapeList.cpp.

697 {
698  ShapeList::operator=( other );
699  return *this;
700 }
ShapeList & operator=(const ShapeList &other)
Definition: ShapeList.cpp:77

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

◆ rotate() [1/2]

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.

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

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

◆ rotate() [2/2]

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.

488 {
489  ShapeList::rotate( angle, rotCenter );
490  _clippingPath.rotate( angle, rotCenter );
491  return (*this);
492 }

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

◆ rotated() [1/2]

Group LibBoard::Group::rotated ( double  angle)

Definition at line 542 of file ShapeList.cpp.

543 {
544  return static_cast<const Group &>( Group( *this ).rotate( angle ) );
545 }

References Group().

◆ rotated() [2/2]

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

Definition at line 536 of file ShapeList.cpp.

537 {
538  return static_cast<const Group &>( Group( *this ).rotate( angle, rotCenter ) );
539 }

References Group().

◆ scale() [1/2]

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.

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
Point center() const
Definition: Path.cpp:36
Path & translate(double dx, double dy)
Definition: Path.cpp:81
Shape & scale(double sx, double sy)
Definition: ShapeList.cpp:254
MyPointD Point
Definition: testClone2.cpp:383

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

◆ scale() [2/2]

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.

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 }

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

◆ scaled() [1/2]

Group LibBoard::Group::scaled ( double  s)

Definition at line 560 of file ShapeList.cpp.

561 {
562  return static_cast<const Group &>( Group( *this ).scale( s ) );
563 }

References Group().

◆ scaled() [2/2]

Group LibBoard::Group::scaled ( double  sx,
double  sy 
)

Definition at line 554 of file ShapeList.cpp.

555 {
556  return static_cast<const Group &>( Group( *this ).scale( sx, sy ) );
557 }

References Group().

◆ setClippingPath() [1/2]

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.

590 {
591  _clippingPath = path;
592  _clippingPath.setClosed( true );
593  if ( _clippingPath.size() > 1 ) {
594  if ( _clippingPath[0] == _clippingPath[ _clippingPath.size() - 1 ] )
596  }
597 }
Path & pop_back()
Definition: Path.cpp:22
void setClosed(bool closed)
Definition: Path.h:255

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

◆ setClippingPath() [2/2]

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.

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

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

◆ setClippingRectangle()

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.

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 }

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

◆ translate()

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.

504 {
505  ShapeList::translate( dx, dy );
506  _clippingPath.translate( dx, dy );
507  return (*this);
508 }
Shape & translate(double dx, double dy)
Definition: ShapeList.cpp:236

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

◆ translated()

Group LibBoard::Group::translated ( double  dx,
double  dy 
)

Definition at line 548 of file ShapeList.cpp.

549 {
550  return static_cast<const Group &>( Group( *this ).translate( dx, dy ) );
551 }

References Group().

Field Documentation

◆ _clippingCount

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

Definition at line 273 of file ShapeList.h.

Referenced by flushPostscript(), and flushSVG().

◆ _clippingPath

Path LibBoard::Group::_clippingPath
private

◆ _name

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: