DGtal 1.3.0
Loading...
Searching...
No Matches
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:
LibBoard::ShapeList LibBoard::Shape

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 ()
 
const std::string & name () const
 
ShapeListclear ()
 
Point center () const
 
Shaperotate (double angle, const Point &center)
 
ShapeList rotated (double angle, const Point &center)
 
Shaperotate (double angle)
 
ShapeList rotated (double angle)
 
Shapetranslate (double dx, double dy)
 
ShapeList translated (double dx, double dy)
 
Shapescale (double sx, double sy)
 
Shapescale (double s)
 
ShapeList scaled (double sx, double sy)
 
ShapeList scaled (double s)
 
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
 
virtual int minDepth () const
 
virtual int maxDepth () const
 
void shiftDepth (int shift)
 
Shapeclone () const
 
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 ()
 
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
 

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)

◆ 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

◆ 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";
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";
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().

Referenced by rotated().

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

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

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

Referenced by scaled().

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

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

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

Referenced by translated().

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

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: