From ddafe54837286c185898f26b9341905498cf3512 Mon Sep 17 00:00:00 2001 From: Cristy Date: Fri, 2 Mar 2018 15:36:47 -0500 Subject: [PATCH] ... --- MagickCore/draw.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/MagickCore/draw.c b/MagickCore/draw.c index 1009ed563..048430b08 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -1656,6 +1656,46 @@ static MagickBooleanType DrawDashPolygon(const DrawInfo *draw_info, % */ +static size_t EllipsePoints(const PrimitiveInfo *primitive_info, + const PointInfo start,const PointInfo stop,const PointInfo degrees) +{ + double + delta, + step, + y; + + PointInfo + angle; + + register const PrimitiveInfo + *p; + + size_t + number_points; + + /* + Ellipses are just short segmented polys. + */ + if ((fabs(stop.x) < DrawEpsilon) && (fabs(stop.y) < DrawEpsilon)) + return(1); + delta=2.0/MagickMax(stop.x,stop.y); + step=MagickPI/8.0; + if ((delta >= 0.0) && (delta < (MagickPI/8.0))) + step=MagickPI/(4*(MagickPI/delta/2+0.5)); + angle.x=DegreesToRadians(degrees.x); + y=degrees.y; + while (y < degrees.x) + y+=360.0; + angle.y=DegreesToRadians(y); + number_points=0; + for (p=primitive_info; angle.x < angle.y; angle.x+=step) + { + number_points++; + p+=p->coordinates; + } + return(number_points+1); +} + static inline MagickBooleanType IsPoint(const char *point) { char @@ -3054,7 +3094,6 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, } case CirclePrimitive: case ArcPrimitive: - case EllipsePrimitive: { double alpha, @@ -3076,6 +3115,13 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, points_extent=coordinates; break; } + case EllipsePrimitive: + { + points_extent=(double) EllipsePoints(primitive_info+j, + primitive_info[j].point,primitive_info[j+1].point, + primitive_info[j+2].point); + break; + } default: break; } -- 2.40.0