File failed to load: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/config/TeX-MML-AM_CHTML/MathJax.js
DGtal 2.0.0
LibBoard::Path Struct Reference

A path, according to Postscript and SVG definition. More...

#include <Board/Path.h>

Public Member Functions

 Path ()
 Path (const std::vector< Point > &points, bool closedPath)
 Path (bool closedPath)
void clear ()
bool closed () const
bool empty () const
unsigned int size () const
void setClosed (bool closed)
Point center () const
Pathoperator<< (const Point &p)
Pathpop_back ()
Pointoperator[] (const unsigned int n)
const Pointoperator[] (const unsigned int n) const
Pathrotate (double angle, const Point &center)
Path rotated (double angle, const Point &center) const
Pathrotate (double angle)
Path rotated (double angle) const
Pathtranslate (double dx, double dy)
Path translated (double dx, double dy) const
Pathscale (double sx, double sy)
Pathscale (double s)
Path scaled (double sx, double sy) const
Path scaled (double s) const
void scaleAll (double s)
void flushPostscript (std::ostream &stream, const TransformEPS &transform) const
void flushFIG (std::ostream &stream, const TransformFIG &transform) const
void flushSVGPoints (std::ostream &stream, const TransformSVG &transform) const
void flushSVGCommands (std::ostream &stream, const TransformSVG &transform) const
void flushCairoPoints (cairo_t *cr, const TransformCairo &transform) const
void flushTikZPoints (std::ostream &stream, const TransformTikZ &transform) const
Rect boundingBox () const

Protected Attributes

std::vector< Point_points
bool _closed

Detailed Description

A path, according to Postscript and SVG definition.

The path structure.

Definition at line 43 of file Path.h.

Constructor & Destructor Documentation

◆ Path() [1/3]

LibBoard::Path::Path ( )
inline

Definition at line 45 of file Path.h.

45: _closed( false ) { }
bool _closed
Definition Path.h:227

References _closed.

Referenced by operator<<(), rotated(), rotated(), scaled(), scaled(), and translated().

◆ Path() [2/3]

LibBoard::Path::Path ( const std::vector< Point > & points,
bool closedPath )
inline

Definition at line 47 of file Path.h.

48 : _points( points ), _closed( closedPath ) { }
std::vector< Point > _points
Definition Path.h:226

References _closed, and _points.

◆ Path() [3/3]

LibBoard::Path::Path ( bool closedPath)
inline

Definition at line 50 of file Path.h.

50: _closed( closedPath ) { }

References _closed.

Member Function Documentation

◆ boundingBox()

Rect LibBoard::Path::boundingBox ( ) const

Definition at line 272 of file Path.cpp.

273{
274 if ( _points.empty() )
275 return Rect( 0, 0, 0, 0 );
276 Rect rect;
277 std::vector< Point >::const_iterator i = _points.begin();
278 std::vector< Point >::const_iterator end = _points.end();
279 rect.top = i->y;
280 rect.left = i->x;
281 rect.width = 0.0;
282 rect.height = 0.0;
283 ++i;
284 while ( i != end ) {
285 if ( i->x < rect.left ) {
286 double dw = rect.left - i->x;
287 rect.left = i->x;
288 rect.width += dw;
289 } else if ( i->x > rect.left + rect.width ) {
290 rect.width = i->x - rect.left;
291 }
292 if ( i->y > rect.top ) {
293 double dh = i->y - rect.top;
294 rect.top = i->y;
295 rect.height += dh;
296 } else if ( i->y < rect.top - rect.height ) {
297 rect.height = rect.top - i->y;
298 }
299 ++i;
300 }
301 return rect;
302}

References _points, LibBoard::Rect::height, LibBoard::Rect::left, LibBoard::Rect::top, and LibBoard::Rect::width.

Referenced by center().

◆ center()

Point LibBoard::Path::center ( ) const

Barycenter of the path

Returns
a point

Definition at line 36 of file Path.cpp.

36 {
37 Rect bbox = boundingBox();
38 return Point( bbox.left + bbox.width/2.0,
39 bbox.top - bbox.height/2.0 );
40}
Rect boundingBox() const
Definition Path.cpp:272
MyPointD Point

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

Referenced by rotate(), rotated(), and scale().

◆ clear()

void LibBoard::Path::clear ( )
inline

Definition at line 231 of file Path.h.

232{
233 _points.clear();
234}

References _points.

◆ closed()

bool LibBoard::Path::closed ( ) const
inline

Definition at line 237 of file Path.h.

238{
239 return _closed;
240}

References _closed.

◆ empty()

bool LibBoard::Path::empty ( ) const
inline

Definition at line 243 of file Path.h.

244{
245 return _points.empty();
246}

References _points.

◆ flushCairoPoints()

void LibBoard::Path::flushCairoPoints ( cairo_t * cr,
const TransformCairo & transform ) const

Definition at line 235 of file Path.cpp.

237{
238 if ( _points.empty() )
239 return;
240 std::vector<Point>::const_iterator i = _points.begin();
241 std::vector<Point>::const_iterator end = _points.end();
242 int count = 0;
243 cairo_move_to (cr, transform.mapX( i->x ), transform.mapY( i->y ));
244 ++i;
245 while ( i != end ) {
246 cairo_line_to (cr, transform.mapX( i->x ), transform.mapY( i->y ));
247 ++i;
248 count = ( count + 1 ) % 6;
249 //if ( !count ) stream << "\n ";
250 }
251}
void transform(std::vector< OutputValue > &output_values, std::vector< std::size_t > &input2output, std::vector< std::size_t > &output2input, ForwardIterator itb, ForwardIterator ite, const ConversionFct &F, bool remove_duplicates)

References _points.

◆ flushFIG()

void LibBoard::Path::flushFIG ( std::ostream & stream,
const TransformFIG & transform ) const

Definition at line 173 of file Path.cpp.

175{
176 if ( _points.empty() )
177 return;
178
179 std::vector<Point>::const_iterator i = _points.begin();
180 std::vector<Point>::const_iterator end = _points.end();
181 while ( i != end ) {
182 stream << " " << static_cast<int>( transform.mapX( i->x ) )
183 << " " << static_cast<int>( transform.mapY( i->y ) );
184 ++i;
185 }
186 if ( _closed ) {
187 stream << " " << static_cast<int>( transform.mapX( _points.begin()->x ) )
188 << " " << static_cast<int>( transform.mapY( _points.begin()->y ) );
189 }
190}

References _closed, and _points.

◆ flushPostscript()

void LibBoard::Path::flushPostscript ( std::ostream & stream,
const TransformEPS & transform ) const

Definition at line 154 of file Path.cpp.

156{
157 if ( _points.empty() )
158 return;
159 std::vector<Point>::const_iterator i = _points.begin();
160 std::vector<Point>::const_iterator end = _points.end();
161
162 stream << transform.mapX( i->x ) << " " << transform.mapY( i->y ) << " m";
163 ++i;
164 while ( i != end ) {
165 stream << " " << transform.mapX( i->x ) << " " << transform.mapY( i->y ) << " l";
166 ++i;
167 }
168 if ( _closed ) stream << " cp";
169 stream << " ";
170}

References _closed, and _points.

◆ flushSVGCommands()

void LibBoard::Path::flushSVGCommands ( std::ostream & stream,
const TransformSVG & transform ) const

Definition at line 193 of file Path.cpp.

195{
196 if ( _points.empty() )
197 return;
198 std::vector<Point>::const_iterator i = _points.begin();
199 std::vector<Point>::const_iterator end = _points.end();
200 int count = 0;
201
202 stream << "M " << transform.mapX( i->x ) << " " << transform.mapY( i->y );
203 ++i;
204 while ( i != end ) {
205 stream << " L " << transform.mapX( i->x ) << " " << transform.mapY( i->y );
206 ++i;
207 count = ( count + 1 ) % 6;
208 if ( !count ) stream << "\n ";
209 }
210 if ( _closed )
211 stream << " Z" << std::endl;
212}

References _closed, and _points.

◆ flushSVGPoints()

void LibBoard::Path::flushSVGPoints ( std::ostream & stream,
const TransformSVG & transform ) const

Definition at line 215 of file Path.cpp.

217{
218 if ( _points.empty() )
219 return;
220 std::vector<Point>::const_iterator i = _points.begin();
221 std::vector<Point>::const_iterator end = _points.end();
222 int count = 0;
223 stream << transform.mapX( i->x ) << "," << transform.mapY( i->y );
224 ++i;
225 while ( i != end ) {
226 stream << " " << transform.mapX( i->x ) << "," << transform.mapY( i->y );
227 ++i;
228 count = ( count + 1 ) % 6;
229 if ( !count ) stream << "\n ";
230 }
231}

References _points.

◆ flushTikZPoints()

void LibBoard::Path::flushTikZPoints ( std::ostream & stream,
const TransformTikZ & transform ) const

Definition at line 255 of file Path.cpp.

257{
258 if ( _points.empty() )
259 return;
260 std::vector<Point>::const_iterator i = _points.begin();
261 std::vector<Point>::const_iterator end = _points.end();
262 stream << '(' << transform.mapX( i->x ) << "," << transform.mapY( i->y ) << ')';
263 ++i;
264 while ( i != end ) {
265 stream << " -- "
266 << '(' << transform.mapX( i->x ) << "," << transform.mapY( i->y ) << ')';
267 ++i;
268 }
269}

References _points.

◆ operator<<()

Path & LibBoard::Path::operator<< ( const Point & p)

Add a point at the end of the path.

Parameters
pthe point to add
Returns
a path

Definition at line 28 of file Path.cpp.

30{
31 _points.push_back( p );
32 return *this;
33}

References _points, and Path().

◆ operator[]() [1/2]

Point & LibBoard::Path::operator[] ( const unsigned int n)
inline

Returns the n-th point of the polyline.

Parameters
nn
Returns
a point

Definition at line 92 of file Path.h.

92 {
93 return _points[ n ];
94 }

References _points.

◆ operator[]() [2/2]

const Point & LibBoard::Path::operator[] ( const unsigned int n) const
inline

Returns the n-th point of the polyline.

Parameters
nn
Returns
a point

Definition at line 103 of file Path.h.

103 {
104 return _points[ n ];
105 }

References _points.

◆ pop_back()

Path & LibBoard::Path::pop_back ( )
Returns
path

Definition at line 22 of file Path.cpp.

23{
24 _points.pop_back();
25 return *this;
26}

References _points.

◆ rotate() [1/2]

Path & LibBoard::Path::rotate ( double angle)
Parameters
angleangle
Returns
a Path

Definition at line 68 of file Path.cpp.

69{
70 return Path::rotate( angle, center() );
71}
Point center() const
Definition Path.cpp:36
Path & rotate(double angle, const Point &center)
Definition Path.cpp:43
double angle(const DGtal::Z2i::RealPoint &point)

References angle(), center(), and rotate().

◆ rotate() [2/2]

Path & LibBoard::Path::rotate ( double angle,
const Point & center )
Parameters
angleangle
centercenter
Returns
a path

Definition at line 43 of file Path.cpp.

44{
45 std::vector<Point>::iterator i = _points.begin();
46 std::vector<Point>::iterator end = _points.end();
47 while ( i != end ) {
48 i->rotate( angle, rotCenter );
49 ++i;
50 }
51 return *this;
52}

References _points, and angle().

Referenced by rotate(), and rotated().

◆ rotated() [1/2]

Path LibBoard::Path::rotated ( double angle) const
Parameters
angleangle
Returns
rotated path

Definition at line 74 of file Path.cpp.

75{
76 Path res(*this);
77 return static_cast<Path&>( res.rotate( angle, center() ) );
78}

References angle(), center(), Path(), and rotate().

◆ rotated() [2/2]

Path LibBoard::Path::rotated ( double angle,
const Point & center ) const
Parameters
angleangle
centercenter
Returns
a Path

Definition at line 55 of file Path.cpp.

56{
57 Path res(*this);
58 std::vector<Point>::iterator i = res._points.begin();
59 std::vector<Point>::iterator end = res._points.end();
60 while ( i != end ) {
61 i->rotate( angle, rotCenter );
62 ++i;
63 }
64 return res;
65}

References _points, angle(), and Path().

◆ scale() [1/2]

Path & LibBoard::Path::scale ( double s)
Parameters
sscale factor
Returns
scaled path

Definition at line 125 of file Path.cpp.

126{
127 return Path::scale( s, s );
128}
Path & scale(double sx, double sy)
Definition Path.cpp:108

References scale().

◆ scale() [2/2]

Path & LibBoard::Path::scale ( double sx,
double sy )
Parameters
sxscale factor
syscale factor
Returns
scaled path

Definition at line 108 of file Path.cpp.

109{
110 Point c = center();
111 translate( -c.x, -c.y );
112 std::vector<Point>::iterator i = _points.begin();
113 std::vector<Point>::iterator end = _points.end();
114 while ( i != end ) {
115 i->x *= sx;
116 i->y *= sy;
117 ++i;
118 }
119 Point delta = c - center();
120 translate( delta.x, delta.y );
121 return *this;
122}
Path & translate(double dx, double dy)
Definition Path.cpp:81

References _points, center(), translate(), LibBoard::Point::x, and LibBoard::Point::y.

Referenced by scale(), scaled(), and scaled().

◆ scaleAll()

void LibBoard::Path::scaleAll ( double s)

Scales all the points.

Parameters
sThe scaling factor.

Definition at line 143 of file Path.cpp.

144{
145 std::vector<Point>::iterator it = _points.begin();
146 std::vector<Point>::iterator end = _points.end();
147 while ( it != end ) {
148 (*it) *= s;
149 ++it;
150 }
151}

References _points.

◆ scaled() [1/2]

Path LibBoard::Path::scaled ( double s) const

Definition at line 137 of file Path.cpp.

138{
139 return Path(*this).scale( s, s );
140}

References Path(), and scale().

◆ scaled() [2/2]

Path LibBoard::Path::scaled ( double sx,
double sy ) const
Parameters
sxscale factor
syscale factor
Returns
a Path

Definition at line 131 of file Path.cpp.

132{
133 return Path(*this).scale( sx, sy );
134}

References Path(), and scale().

◆ setClosed()

void LibBoard::Path::setClosed ( bool closed)
inline

Definition at line 255 of file Path.h.

256{
257 _closed = closedPath;
258}

References _closed.

◆ size()

unsigned int LibBoard::Path::size ( ) const
inline

Definition at line 249 of file Path.h.

250{
251 return (unsigned int)_points.size();
252}

References _points.

◆ translate()

Path & LibBoard::Path::translate ( double dx,
double dy )
Parameters
dxtranslation vector
dytranslation vector
Returns
translated path

Definition at line 81 of file Path.cpp.

82{
83 std::vector<Point>::iterator i = _points.begin();
84 std::vector<Point>::iterator end = _points.end();
85 Point delta( dx, dy );
86 while ( i != end ) {
87 (*i) += delta;
88 ++i;
89 }
90 return *this;
91}

References _points.

Referenced by scale().

◆ translated()

Path LibBoard::Path::translated ( double dx,
double dy ) const
Parameters
dxtranslation vector
dytranslation vector
Returns
a Path

Definition at line 94 of file Path.cpp.

95{
96 Path res(*this);
97 std::vector<Point>::iterator i = res._points.begin();
98 std::vector<Point>::iterator end = res._points.end();
99 Point delta( dx, dy );
100 while ( i != end ) {
101 (*i) += delta;
102 ++i;
103 }
104 return res;
105}

References _points, and Path().

Field Documentation

◆ _closed

bool LibBoard::Path::_closed
protected

Definition at line 227 of file Path.h.

Referenced by closed(), flushFIG(), flushPostscript(), flushSVGCommands(), Path(), Path(), Path(), and setClosed().

◆ _points


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