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.
This commit is contained in:
parent
dda99bbfe5
commit
c207b78d07
3 changed files with 27 additions and 3 deletions
|
@ -436,6 +436,7 @@ extern Point _string(Image*, Point, Image*, Point, Font*, char*, Rune*, int, Rec
|
|||
extern Point stringsubfont(Image*, Point, Image*, Subfont*, char*);
|
||||
extern int bezier(Image*, Point, Point, Point, Point, int, int, int, Image*, Point);
|
||||
extern int bezierop(Image*, Point, Point, Point, Point, int, int, int, Image*, Point, Drawop);
|
||||
extern int bezierpts(Point, Point, Point, Point, Point**);
|
||||
extern int bezspline(Image*, Point*, int, int, int, int, Image*, Point);
|
||||
extern int bezsplineop(Image*, Point*, int, int, int, int, Image*, Point, Drawop);
|
||||
extern int bezsplinepts(Point*, int, Point**);
|
||||
|
|
|
@ -103,6 +103,8 @@ int bezierop(Image *dst, Point p0, Point p1, Point p2, Point p3,
|
|||
int end0, int end1, int radius, Image *src, Point sp,
|
||||
Drawop op)
|
||||
.PB
|
||||
int bezierpts(Point p0, Point p1, Point p2, Point p3, Point **pp)
|
||||
.PB
|
||||
int bezspline(Image *dst, Point *pt, int npt, int end0, int end1,
|
||||
int radius, Image *src, Point sp)
|
||||
.PB
|
||||
|
@ -603,6 +605,16 @@ corresponds to
|
|||
in
|
||||
.IR dst .
|
||||
.TP
|
||||
\f5bezierpts(\f2a\fP, \f2b\fP, \f2c\fP, \f2d\fP, \f2pp\fP)
|
||||
.I Bezierpts
|
||||
returns in
|
||||
.I pp
|
||||
a list of points making up the open polygon that
|
||||
.I bezier
|
||||
would draw.
|
||||
The caller is responsible for freeing
|
||||
.IR *pp .
|
||||
.TP
|
||||
\f5bezspline(\f2dst\fP, \f2p\fP, \f2np\fP, \f2end0\fP, \f2end1\fP, \f2thick\fP, \f2src\fP, \f2sp\fP)
|
||||
.I Bezspline
|
||||
takes the same arguments as
|
||||
|
|
|
@ -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){
|
||||
|
|
Loading…
Reference in a new issue