5 namespace Gorgon {
namespace CGI {
18 template<
int S_ = 8,
class P_= Geometry::Po
intf>
22 std::vector<Geometry::PointList<P_>> points;
27 Float w = settings.width / 2;
40 points[0].Push(l.
Start + off);
43 points[1].Push(l.
Start - off);
47 points[0].Push(l.
End + off);
50 points[1].Push(l.
End - off);
57 for(
int i=1; i<p.
GetSize()-1; i++) {
65 auto prevv = (prev.
End - prev.
Start).Normalize();
66 auto dotp = (prevv * off);
72 auto p = l.
Start - off;
73 auto q = prev.
Start - prevoff;
75 auto pos = ((q - p).CrossProduct(r) / r.CrossProduct(s));
80 auto intersect = q + s * pos;
83 points[1].Push(intersect);
86 points[1].Push(l.
Start - off);
88 points[1].Push(l.
End - off);
91 auto p = l.
Start + off;
92 auto q = prev.
Start + prevoff;
94 auto pos = ((q - p).CrossProduct(r) / r.CrossProduct(s));
99 auto intersect = q + s * pos;
102 points[0].Push(intersect);
105 points[0].Push(l.
Start + off);
107 points[0].Push(l.
End + off);
120 auto prevv = (prev.
End - prev.
Start).Normalize();
121 auto dotp = (prevv * off);
127 auto p = l.
Start - off;
128 auto q = prev.
Start - prevoff;
130 auto pos = ((q - p).CrossProduct(r) / r.CrossProduct(s));
135 auto intersect = q + s * pos;
138 points[1].Push(intersect);
141 points[1].Push(l.
Start - off);
145 auto p = l.
Start + off;
146 auto q = prev.
Start + prevoff;
148 auto pos = ((q - p).CrossProduct(r) / r.CrossProduct(s));
153 auto intersect = q + s * pos;
156 points[0].Push(intersect);
159 points[0].Push(l.
Start + off);
162 points[0].Push(points[0][0]);
163 points[1].Push(points[1][0]);
164 std::reverse(points[1].
begin(), points[1].
end());
167 for(
auto it=points[1].rbegin(); it!=points[1].rend(); ++it) {
170 points[0].Push(points[0][0]);
181 template<
int S_ = 8,
class P_= Geometry::Po
intf,
class F_ = Sol
idFill<>>
183 auto points = LinesToPolygons<S_, P_>(p, settings);
185 Polyfill<S_, 0, P_, F_>(target, points, stroke);
191 template<
int S_ = 8,
class P_= Geometry::Po
intf,
class F_ = Sol
idFill<>>
193 auto points = LinesToPolygons<S_, P_>(p, settings);
195 Polyfill<S_, 0, P_, F_>(target, points, stroke);
201 template<
int S_ = 8,
class P_= Geometry::Po
intf,
class F_ = Sol
idFill<>>
203 std::vector<Geometry::PointList<P_>> points;
204 for(
auto &p : pnts) {
205 for(
auto &np : LinesToPolygons<S_, P_>(p, settings)) {
207 std::cout<<
"{"<<round(p.X*10)/10<<
","<<round(p.Y*10)/10<<
"}, ";
209 std::cout<<std::endl;
210 points.push_back(std::move(np));
214 Polyfill<S_, 0, P_, F_>(target, points, stroke);
220 template<
int S_ = 8,
class P_= Geometry::Po
intf,
class F_ = Sol
idFill<>>
222 std::vector<Geometry::PointList<P_>> points;
223 for(
auto &p : pnts) {
224 for(
auto &np : LinesToPolygons<S_, P_>(p, settings)) {
225 points.push_back(std::move(np));
229 Polyfill<S_, 0, P_, F_>(target, points, stroke);