diff options
author | Ori Bernstein <ori@eigenstate.org> | 2021-01-09 12:20:49 -0800 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2021-01-09 12:20:49 -0800 |
commit | c207b78d079803605d8aec2fe63a059fc4bdb2c6 (patch) | |
tree | 1cdfcad65f3bbbb046f7b572edc0ecf4868a083b /sys/src/libdraw | |
parent | dda99bbfe55bcf25ec33934c40efc4f9fdca685a (diff) |
libdraw: add bezierpts
This patch exposes the bezierpts function,
providing a way to get the points on a path,
similar how bezsplinepts gives them for b
splines.
Diffstat (limited to 'sys/src/libdraw')
-rw-r--r-- | sys/src/libdraw/bezier.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/src/libdraw/bezier.c b/sys/src/libdraw/bezier.c index dca61bc0b..55465226c 100644 --- a/sys/src/libdraw/bezier.c +++ b/sys/src/libdraw/bezier.c @@ -98,12 +98,23 @@ bpts(Plist *l, Point p0, Point p1, Point p2, Point p3) } static void -bezierpts(Plist *l, Point p0, Point p1, Point p2, Point p3) +_bezierpts(Plist *l, Point p0, Point p1, Point p2, Point p3) { bpts(l, p0, p1, p2, p3); appendpt(l, p3); } +int +bezierpts(Point p0, Point p1, Point p2, Point p3, Point **pp) +{ + Plist l; + l.p = nil; + l.np = 0; + _bezierpts(&l, p0, p1, p2, p3); + *pp = l.p; + return l.np; +} + static void _bezsplinepts(Plist *l, Point *pt, int npt) { @@ -167,7 +178,7 @@ bezierop(Image *dst, Point p0, Point p1, Point p2, Point p3, int end0, int end1, Plist l; l.np = 0; - bezierpts(&l, p0, p1, p2, p3); + _bezierpts(&l, p0, p1, p2, p3); if(l.np == -1) return 0; if(l.np != 0){ @@ -211,7 +222,7 @@ fillbezierop(Image *dst, Point p0, Point p1, Point p2, Point p3, int w, Image *s Plist l; l.np = 0; - bezierpts(&l, p0, p1, p2, p3); + _bezierpts(&l, p0, p1, p2, p3); if(l.np == -1) return 0; if(l.np != 0){ |