Board 0.9.6
RoughVisitor.h
Go to the documentation of this file.
1/* -*- mode: c++ -*- */
26#ifndef BOARD_ROUGH_VISITOR_H
27#define BOARD_ROUGH_VISITOR_H
28
29/*
30 *
31 * matplotlib.pyplot.xkcd
32 *
33 * https://shihn.ca/posts/2020/roughjs-algorithms/
34 *
35 * https://openaccess.city.ac.uk/id/eprint/1274/
36 */
37
38#include <cstddef> // For std::size_t
39#include <board/Point.h>
40#include <board/ShapeVisitor.h>
41#include <board/Types.h>
42
43namespace LibBoard
44{
45
48 void setRepeat(int n);
49 void setFilling(SketchFilling filling);
50 void setHachureAngle(double angle);
51 void setHachureSpacing(double spacing);
53 virtual Shape * map(const Shape & shape) override;
54 virtual Shape * map(const Shape & shape) const override;
55 virtual Shape * map(const Line &) override;
56 virtual Shape * map(const Line &) const override;
57 virtual Shape * map(const Arrow &) override;
58 virtual Shape * map(const Arrow &) const override;
59 virtual Shape * map(const Polyline &) override;
60 virtual Shape * map(const Polyline &) const override;
61 virtual Shape * map(const Ellipse &) override;
62 virtual Shape * map(const Ellipse &) const override;
63 virtual Shape * map(const Bezier &) override;
64 virtual Shape * map(const Bezier &) const override;
65
66 virtual ~RoughVisitor() override;
67
74 static void slideRandomly(Point & point, const double & radius);
75
83 static Point randomlySlided(const Point & point, const double & radius);
84
93 static void slideRandomlyAwayFromSegment(Point & p, const Point & a, const Point & b, const double magnitude);
94
105 static Point randomlySlidedAwayFromSegment(const Point & p, const Point & a, const Point & b, const double magnitude);
106
114 static void slideRandomlyAwayFromSegment(Point & p, const Point & a, const Point & b);
115
125 static Point randomlySlidedAwayFromSegment(const Point & p, const Point & a, const Point & b);
126
136 static void slideRandomlyAwayFromSegmentInBox(Point & p, const Point & u, double uMagnitude, const Point & v, double vMagnitude);
137
149 static Point randomlySlidedAwayFromSegmentInBox(const Point & p, const Point & u, double uMagnitude, const Point & v, double vMagnitude);
150
151private:
152 int _repeat;
153 SketchFilling _filling;
154 double _hachureAngle;
155 double _hachureSpacing;
156 bool _automaticHachureSpacing;
157};
158
159} // namespace LibBoard
160
161#endif /* BOARD_ROUGH_VISITOR_H */
Point point(Complex z)
Definition Julia.cpp:38
The Point structure. @copyright This source code is part of the Board project, a C++ library whose pu...
@copyright This source code is part of the Board project, a C++ library whose purpose is to allow sim...
@copyright This source code is part of the Board project, a C++ library whose purpose is to allow sim...
Definition Board.h:55
SketchFilling
Definition Types.h:33
A line between two points with an arrow at one extremity.
Definition Arrow.h:38
A Bezier curve described by two series of 2D points (curve points and control points).
Definition Bezier.h:42
A CompositeShapeTransform may be used to duplicate/transform a composite shape tree.
Definition ShapeVisitor.h:104
An ellipse.
Definition Ellipse.h:38
A line between two points.
Definition Line.h:38
Struct representing a 2D point.
Definition Point.h:42
A polygonal line described by a series of 2D points.
Definition Polyline.h:38
Definition RoughVisitor.h:46
static void slideRandomlyAwayFromSegmentInBox(Point &p, const Point &u, double uMagnitude, const Point &v, double vMagnitude)
Definition RoughVisitor.cpp:362
void setRepeat(int n)
Definition RoughVisitor.cpp:47
void setFilling(SketchFilling filling)
Definition RoughVisitor.cpp:53
static Point randomlySlidedAwayFromSegmentInBox(const Point &p, const Point &u, double uMagnitude, const Point &v, double vMagnitude)
Definition RoughVisitor.cpp:370
RoughVisitor()
Definition RoughVisitor.cpp:38
void setHachureAngle(double angle)
Definition RoughVisitor.cpp:58
static Point randomlySlidedAwayFromSegment(const Point &p, const Point &a, const Point &b, const double magnitude)
Definition RoughVisitor.cpp:339
void setAutomaticHachureSpacing(bool)
Definition RoughVisitor.cpp:69
static void slideRandomly(Point &point, const double &radius)
Definition RoughVisitor.cpp:320
virtual ~RoughVisitor() override
Definition RoughVisitor.cpp:318
void setHachureSpacing(double spacing)
Definition RoughVisitor.cpp:63
virtual Shape * map(const Shape &shape) override
Definition RoughVisitor.cpp:74
static Point randomlySlided(const Point &point, const double &radius)
Definition RoughVisitor.cpp:325
static void slideRandomlyAwayFromSegment(Point &p, const Point &a, const Point &b, const double magnitude)
Definition RoughVisitor.cpp:332
Abstract structure for a 2D shape.
Definition Shape.h:64