DGtal  0.9.2
Board.h
1 /* -*- mode: c++ -*- */
9 /*
10  * \@copyright This File is part of the Board library which is
11  * licensed under the terms of the GNU Lesser General Public Licence.
12  * See the LICENCE file for further details.
13  */
14 #ifndef _BOARD_BOARD_H_
15 #define _BOARD_BOARD_H_
16 
17 #include <ostream>
18 #include <string>
19 #include <vector>
20 
21 #include "Board/Point.h"
22 #include "Board/Path.h"
23 #include "Board/Shapes.h"
24 #include "Board/ShapeList.h"
25 
26 #include "DGtal/io/Color.h"
27 
28 namespace LibBoard {
29 
35 class Board : public ShapeList {
36 
37 public:
38 
39  // cairo
41 
44  static const double Degree;
45 
52 
58  Board( const Board & other );
59 
60  ~Board();
61 
69  Board & operator=( const Board & other );
70 
71 
79  Board & operator<<( const Shape & shape );
80 
88  Board & operator<<( Unit unit );
89 
95  void clear( const DGtal::Color & color = DGtal::Color::None );
96 
104  void clear( unsigned char red, unsigned char green, unsigned char blue );
105 
106  Shape & rotate( double angle, const Point & center );
107 
108  Shape & rotate( double angle );
109 
110  Shape & translate( double dx, double dy );
111 
112  Shape & scale( double sx, double sy );
113 
114  Shape & scale( double s );
115 
116  Board rotated( double angle, const Point & center );
117 
118  Board rotated( double angle );
119 
120  Board translated( double dx, double dy );
121 
122  Board scaled( double sx, double sy );
123 
124  Board scaled( double s );
125 
131  void setUnit( Unit unit );
132 
139  void setUnit( double factor, Unit unit );
140 
148  void drawDot( double x, double y, int depthValue = -1 );
149 
159  void drawLine( double x1, double y1, double x2, double y2,
160  int depthValue = -1 );
161 
174  void drawQuadraticBezierCurve( double x1, double y1, double x2, double y2, double x3, double y3,
175  int depthValue = -1 );
176 
187  void drawArrow( double x1, double y1, double x2, double y2,
188  bool filled = true,
189  int depthValue = -1 );
190 
202  void drawTriangle( double x1, double y1,
203  double x2, double y2,
204  double x3, double y3,
205  int depthValue = -1 );
206 
215  void drawTriangle( const Point & p1,
216  const Point & p2,
217  const Point & p3,
218  int depthValue = -1 );
219 
220 
232  void drawArc(double x, double y, double radius, double angle1, double angle2,
233  bool neg, int depthValue = -1 );
234 
246  void fillTriangle( double x1, double y1,
247  double x2, double y2,
248  double x3, double y3,
249  int depthValue = -1 );
250 
263  void fillGouraudTriangle( const Point & p1,
264  const DGtal::Color & color1,
265  const Point & p2,
266  const DGtal::Color & color2,
267  const Point & p3,
268  const DGtal::Color & color3,
269  unsigned char divisions = 3,
270  int depthValue = -1 );
271 
287  void fillGouraudTriangle( const double x1, const double y1,
288  const DGtal::Color & color1,
289  const double x2, const double y2,
290  const DGtal::Color & color2,
291  const double x3, const double y3,
292  const DGtal::Color & color3,
293  unsigned char divisions = 3,
294  int depthValue = -1 );
295 
308  void fillGouraudTriangle( const Point & p1,
309  const float brightness1,
310  const Point & p2,
311  const float brightness2,
312  const Point & p3,
313  const float brightness3,
314  unsigned char divisions = 3,
315  int depthValue = -1 );
316 
333  void fillGouraudTriangle( const double x1, const double y1,
334  const float brightness1,
335  const double x2, const double y2,
336  const float brightness2,
337  const double x3, const double y3,
338  const float brightness3,
339  unsigned char divisions = 3,
340  int depthValue = -1 );
341 
342 
351  void fillTriangle( const Point & p1,
352  const Point & p2,
353  const Point & p3,
354  int depthValue = -1 );
355 
365  void drawRectangle( double x, double y,
366  double width, double height,
367  int depthValue = -1 );
379  void drawImage( std::string filename, double x, double y,
380  double width, double height,
381  int depthValue = -1, double alpha=1.0 );
382 
392  void fillRectangle( double x, double y,
393  double width, double height,
394  int depthValue = -1 );
395 
404  void drawCircle( double x, double y, double radius,
405  int depthValue = -1 );
406 
415  void fillCircle( double x, double y, double radius,
416  int depthValue = -1);
417 
427  void drawEllipse( double x, double y,
428  double xRadius, double yRadius,
429  int depthValue = -1);
430 
440  void fillEllipse( double x, double y,
441  double xRadius, double yRadius,
442  int depthValue = -1);
443 
450  void drawPolyline( const std::vector<Point> & points,
451  int depthValue = -1 );
452 
459  void drawClosedPolyline( const std::vector<Point> & points,
460  int depthValue = -1 );
461 
468  void fillPolyline( const std::vector<Point> & points,
469  int depthValue = -1 );
470 
479  void drawText( double x, double y, const char * text,
480  int depthValue = -1 );
481 
490  void drawText( double x, double y,
491  const std::string & str,
492  int depthValue = -1 );
493 
501  Board & setFont( const Fonts::Font font, double fontSize );
502 
509  Board & setFontSize( double fontSize );
510 
520  Board & setPenColorRGBi( unsigned char red,
521  unsigned char green,
522  unsigned char blue,
523  unsigned char alpha = 255 );
524 
534  Board & setPenColorRGBf( float red,
535  float green,
536  float blue,
537  float alpha = 1.0f );
538 
546  Board & setPenColor( const DGtal::Color & color );
547 
548 
558  Board & setFillColorRGBi( unsigned char red,
559  unsigned char green,
560  unsigned char blue,
561  unsigned char alpha = 255 );
562 
572  Board & setFillColorRGBf( float red, float green, float blue, float alpha = 1.0f );
573 
581  Board & setFillColor( const DGtal::Color & color );
582 
589  Board & setLineWidth( double width );
590 
598 
607  Board & setLineCap( Shape::LineCap cap );
608 
618 
624  void backgroundColor( const DGtal::Color & color );
625 
631  void drawBoundingBox( int depthValue = -1 );
632 
633 
642  void setClippingRectangle( double x, double y,
643  double width, double height );
644 
650  void setClippingPath( const std::vector<Point> & points );
651 
657  void setClippingPath( const Path & path );
658 
669  void addDuplicates( const Shape & shape,
670  unsigned int times,
671  double dx, double dy, double scale = 1.0 );
672 
685  void addDuplicates( const Shape & shape,
686  unsigned int times,
687  double dx, double dy,
688  double scaleX,
689  double scaleY,
690  double angle = 0.0 );
691 
701  void save( const char * filename, PageSize size = Board::BoundingBox, double margin = 10.0 ) const;
702 
713  void save( const char * filename, double pageWidth, double pageHeight, double margin = 10.0 ) const;
714 
723  void saveEPS( const char * filename, PageSize size = Board::BoundingBox, double margin = 10.0 ) const ;
724 
733  void saveEPS(std::ostream &out , PageSize size = Board::BoundingBox, double margin = 10.0 ) const ;
734 
735 
745  void saveEPS( const char * filename, double pageWidth, double pageHeight, double margin = 10.0 ) const ;
746 
747 
748 
758  void saveEPS( std::ostream &out, double pageWidth, double pageHeight, double margin = 10.0) const ;
759 
769  void saveFIG( const char * filename, PageSize size = Board::BoundingBox, double margin = 10.0,
770  bool includeFIGHeader=true) const;
771 
781  void saveFIG( std::ostream &out, PageSize size = Board::BoundingBox, double margin = 10.0,
782  bool includeFIGHeader=true) const;
783 
794  void saveFIG( const char * filename, double pageWidth, double pageHeight, double margin = 10.0,
795  bool includeFIGHeader=true) const ;
796 
809  void saveFIG( std::ostream &out, double pageWidth, double pageHeight, double margin = 10.0,
810  bool includeFIGHeader=true ) const ;
811 
820  void saveSVG( const char * filename, PageSize size = Board::BoundingBox, double margin = 10.0 ) const;
821 
832  void saveSVG( std::ostream &out, PageSize size = Board::BoundingBox, double margin = 10.0 ) const;
833 
843  void saveSVG( const char * filename, double pageWidth, double pageHeight, double margin = 10.0 ) const ;
844 
856  void saveSVG( std::ostream &out, double pageWidth, double pageHeight, double margin = 10.0,
857  std::string filename="output.svg") const ;
858 
859 
860 #ifdef WITH_CAIRO
861  // cairo
871  void saveCairo( const char * filename, CairoType type = CairoPNG,
872  PageSize size = Board::BoundingBox, double margin = 10.0 ) const;
873 
884  void saveCairo( const char * filename, CairoType type, double pageWidth, double pageHeight, double margin = 10.0 ) const ;
885 
886 
887 #endif
888 
897  void saveTikZ( const char * filename, PageSize size = Board::BoundingBox, double margin = 10.0 ) const;
908  void saveTikZ( std::ostream &out, PageSize size = Board::BoundingBox, double margin = 10.0 ) const;
909 
919  void saveTikZ( const char * filename, double pageWidth, double pageHeight, double margin = 10.0 ) const ;
920 
932  void saveTikZ( std::ostream &out, double pageWidth, double pageHeight, double margin = 10.0 ) const ;
933 
934  protected:
935 
940  struct State {
943  double lineWidth;
948  double fontSize;
949  double unitFactor;
950  State();
951  double unit( const double & x ) { return x * unitFactor; }
952  Point unit( const Point & p ) { return Point( p.x * unitFactor, p.y * unitFactor); }
953  void unit( Shape & shape ) { shape.scaleAll( unitFactor ); }
954  };
958 };
959 
960 } // namespace LibBoard
961 
962 #include "Board.ih"
963 
964 #endif
void fillPolyline(const std::vector< Point > &points, int depthValue=-1)
Definition: Board.cpp:551
void addDuplicates(const Shape &shape, unsigned int times, double dx, double dy, double scale=1.0)
Definition: Board.cpp:767
Abstract structure for a 2D shape.
Definition: Board/Shapes.h:58
Board & setLineWidth(double width)
Definition: Board.cpp:329
Board & operator<<(const Shape &shape)
Definition: Board.cpp:133
Shape & rotate(double angle, const Point &center)
Definition: Board.cpp:160
Board & setFillColorRGBi(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha=255)
Definition: Board.cpp:305
void drawPolyline(const std::vector< Point > &points, int depthValue=-1)
Definition: Board.cpp:511
Class for EPS, FIG or SVG drawings.
Definition: Board.h:35
Shape & scale(double sx, double sy)
Definition: Board.cpp:184
DGtal::Color fillColor
Definition: Board.h:942
Board & setLineJoin(Shape::LineJoin join)
double unit(const double &x)
Definition: Board.h:951
Shape::LineJoin lineJoin
Definition: Board.h:946
void setClippingPath(const std::vector< Point > &points)
Definition: Board.cpp:739
DGtal::Color _backgroundColor
Definition: Board.h:956
Board & operator=(const Board &other)
Definition: Board.cpp:117
void drawLine(double x1, double y1, double x2, double y2, int depthValue=-1)
Definition: Board.cpp:368
void backgroundColor(const DGtal::Color &color)
Definition: Board.cpp:351
void fillGouraudTriangle(const Point &p1, const DGtal::Color &color1, const Point &p2, const DGtal::Color &color2, const Point &p3, const DGtal::Color &color3, unsigned char divisions=3, int depthValue=-1)
Definition: Board.cpp:647
Path _clippingPath
Definition: Board.h:957
void drawImage(std::string filename, double x, double y, double width, double height, int depthValue=-1, double alpha=1.0)
Definition: Board.cpp:428
void drawArrow(double x1, double y1, double x2, double y2, bool filled=true, int depthValue=-1)
Definition: Board.cpp:400
Board rotated(double angle, const Point &center)
Definition: Board.cpp:209
void fillRectangle(double x, double y, double width, double height, int depthValue=-1)
Definition: Board.cpp:439
Point center() const
Definition: ShapeList.cpp:192
void drawCircle(double x, double y, double radius, int depthValue=-1)
Definition: Board.cpp:451
A path, according to Postscript and SVG definition.
Definition: Path.h:43
ShapeList & clear()
Definition: ShapeList.cpp:43
void save(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1132
static const double Degree
Definition: Board.h:44
void drawText(double x, double y, const char *text, int depthValue=-1)
Definition: Board.cpp:693
void saveFIG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0, bool includeFIGHeader=true) const
Definition: Board.cpp:907
Point unit(const Point &p)
Definition: Board.h:952
void drawBoundingBox(int depthValue=-1)
Definition: Board.cpp:710
void saveCairo(const char *filename, CairoType type=CairoPNG, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1139
static const Color None
Definition: Color.h:387
Struct representing a 2D point.
Definition: Point.h:27
void drawDot(double x, double y, int depthValue=-1)
Definition: Board.cpp:357
Shape::LineCap lineCap
Definition: Board.h:945
void drawEllipse(double x, double y, double xRadius, double yRadius, int depthValue=-1)
Definition: Board.cpp:482
void fillCircle(double x, double y, double radius, int depthValue=-1)
Definition: Board.cpp:471
Shape::LineStyle lineStyle
Definition: Board.h:944
Board & setFillColorRGBf(float red, float green, float blue, float alpha=1.0f)
Definition: Board.cpp:315
double x
Definition: Point.h:29
void saveTikZ(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1219
Board scaled(double sx, double sy)
Definition: Board.cpp:227
void fillEllipse(double x, double y, double xRadius, double yRadius, int depthValue=-1)
Definition: Board.cpp:497
void drawRectangle(double x, double y, double width, double height, int depthValue=-1)
Definition: Board.cpp:417
Board & setLineStyle(Shape::LineStyle style)
Board translated(double dx, double dy)
Definition: Board.cpp:221
Board & setPenColorRGBf(float red, float green, float blue, float alpha=1.0f)
Definition: Board.cpp:288
A group of shapes.
Definition: ShapeList.h:28
void drawArc(double x, double y, double radius, double angle1, double angle2, bool neg, int depthValue=-1)
Definition: Board.cpp:461
void setClippingRectangle(double x, double y, double width, double height)
Definition: Board.cpp:728
Board & setFontSize(double fontSize)
Definition: Board.cpp:344
Board & setFillColor(const DGtal::Color &color)
Definition: Board.cpp:322
void fillTriangle(double x1, double y1, double x2, double y2, double x3, double y3, int depthValue=-1)
Definition: Board.cpp:609
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1012
Shape & translate(double dx, double dy)
Definition: Board.cpp:176
void drawTriangle(double x1, double y1, double x2, double y2, double x3, double y3, int depthValue=-1)
Definition: Board.cpp:571
Board(const DGtal::Color &backgroundColor=DGtal::Color::None)
Definition: Board.cpp:104
virtual void scaleAll(double s)=0
void drawQuadraticBezierCurve(double x1, double y1, double x2, double y2, double x3, double y3, int depthValue=-1)
Definition: Board.cpp:384
void saveEPS(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:805
Board & setFont(const Fonts::Font font, double fontSize)
Definition: Board.cpp:336
bool filled() const
Definition: Board/Shapes.h:111
Fonts::Font font
Definition: Board.h:947
State _state
Definition: Board.h:955
Structure representing an RGB triple with alpha component.
Definition: Color.h:66
Board & setPenColor(const DGtal::Color &color)
Definition: Board.cpp:298
DGtal::Color penColor
Definition: Board.h:941
Board & setPenColorRGBi(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha=255)
Definition: Board.cpp:278
void unit(Shape &shape)
Definition: Board.h:953
Board & setLineCap(Shape::LineCap cap)
double y
Definition: Point.h:30
void setUnit(Unit unit)
Definition: Board.cpp:240
void drawClosedPolyline(const std::vector< Point > &points, int depthValue=-1)
Definition: Board.cpp:531