Define declarations.
*/
#define BezierQuantum 200
-#define DrawEpsilon ((MagickRealType) 1.0e-12)
\f
/*
Typedef declarations.
*/
p=(const EdgeInfo *) x;
q=(const EdgeInfo *) y;
- if ((p->points[0].y-DrawEpsilon) > q->points[0].y)
+ if ((p->points[0].y-MagickEpsilon) > q->points[0].y)
return(1);
- if ((p->points[0].y+DrawEpsilon) < q->points[0].y)
+ if ((p->points[0].y+MagickEpsilon) < q->points[0].y)
return(-1);
- if ((p->points[0].x-DrawEpsilon) > q->points[0].x)
+ if ((p->points[0].x-MagickEpsilon) > q->points[0].x)
return(1);
- if ((p->points[0].x+DrawEpsilon) < q->points[0].x)
+ if ((p->points[0].x+MagickEpsilon) < q->points[0].x)
return(-1);
if (((p->points[1].x-p->points[0].x)*(q->points[1].y-q->points[0].y)-
(p->points[1].y-p->points[0].y)*(q->points[1].x-q->points[0].x)) > 0.0)
/*
Eliminate duplicate points.
*/
- if ((i == 0) || (fabs(q.x-primitive_info[i].point.x) >= DrawEpsilon) ||
- (fabs(q.y-primitive_info[i].point.y) >= DrawEpsilon))
+ if ((i == 0) || (fabs(q.x-primitive_info[i].point.x) >= MagickEpsilon) ||
+ (fabs(q.y-primitive_info[i].point.y) >= MagickEpsilon))
{
path_info[n].code=code;
path_info[n].point=primitive_info[i].point;
}
if (coordinates > 0)
continue;
- if ((fabs(p.x-primitive_info[i].point.x) < DrawEpsilon) &&
- (fabs(p.y-primitive_info[i].point.y) < DrawEpsilon))
+ if ((fabs(p.x-primitive_info[i].point.x) < MagickEpsilon) &&
+ (fabs(p.y-primitive_info[i].point.y) < MagickEpsilon))
continue;
/*
Mark the p point as open if it does not match the q.
inverse_edge.x2=edge->x2;
inverse_edge.y2=edge->y2;
z=affine->ry*y+affine->tx;
- if (affine->sx >= DrawEpsilon)
+ if (affine->sx >= MagickEpsilon)
{
intercept=(-z/affine->sx);
x=intercept;
inverse_edge.x2=x;
}
else
- if (affine->sx < -DrawEpsilon)
+ if (affine->sx < -MagickEpsilon)
{
intercept=(-z+(double) image->columns)/affine->sx;
x=intercept;
Determine top and bottom edges.
*/
z=affine->sy*y+affine->ty;
- if (affine->rx >= DrawEpsilon)
+ if (affine->rx >= MagickEpsilon)
{
intercept=(-z/affine->rx);
x=intercept;
inverse_edge.x2=x;
}
else
- if (affine->rx < -DrawEpsilon)
+ if (affine->rx < -MagickEpsilon)
{
intercept=(-z+(double) image->rows)/affine->rx;
x=intercept;
return(inverse_edge);
}
-static inline MagickRealType DrawEpsilonReciprocal(const MagickRealType x)
-{
- MagickRealType sign = x < (MagickRealType) 0.0 ? (MagickRealType) -1.0 :
- (MagickRealType) 1.0;
- return((sign*x) >= DrawEpsilon ? (MagickRealType) 1.0/x : sign*(
- (MagickRealType) 1.0/DrawEpsilon));
-}
-
static AffineMatrix InverseAffineMatrix(const AffineMatrix *affine)
{
AffineMatrix
double
determinant;
- determinant=DrawEpsilonReciprocal(affine->sx*affine->sy-affine->rx*
+ determinant=MagickEpsilonReciprocal(affine->sx*affine->sy-affine->rx*
affine->ry);
inverse_affine.sx=determinant*affine->sy;
inverse_affine.rx=determinant*(-affine->rx);
if ((total_length <= maximum_length) && ((n & 0x01) == 0) && (j > 1))
{
dash_polygon[j]=primitive_info[i-1];
- dash_polygon[j].point.x+=DrawEpsilon;
- dash_polygon[j].point.y+=DrawEpsilon;
+ dash_polygon[j].point.x+=MagickEpsilon;
+ dash_polygon[j].point.y+=MagickEpsilon;
dash_polygon[j].coordinates=1;
j++;
dash_polygon[0].coordinates=(size_t) j;
q.y=(double) y-gradient_vector->y1;
length=sqrt(q.x*q.x+q.y*q.y);
gamma=sqrt(p.x*p.x+p.y*p.y)*length;
- gamma=DrawEpsilonReciprocal(gamma);
+ gamma=MagickEpsilonReciprocal(gamma);
scale=p.x*q.x+p.y*q.y;
offset=gamma*scale*length;
return(offset);
p=point;
}
point=primitive_info[i].point;
- if ((fabs(q.x-point.x) >= DrawEpsilon) ||
- (fabs(q.y-point.y) >= DrawEpsilon))
+ if ((fabs(q.x-point.x) >= MagickEpsilon) ||
+ (fabs(q.y-point.y) >= MagickEpsilon))
(void) LogMagickEvent(DrawEvent,GetMagickModule(),
" %.20g: %.18g,%.18g",(double) coordinates,point.x,point.y);
else
coordinates--;
if (coordinates > 0)
continue;
- if ((fabs(p.x-point.x) >= DrawEpsilon) ||
- (fabs(p.y-point.y) >= DrawEpsilon))
+ if ((fabs(p.x-point.x) >= MagickEpsilon) ||
+ (fabs(p.y-point.y) >= MagickEpsilon))
(void) LogMagickEvent(DrawEvent,GetMagickModule()," end last (%.20g)",
(double) coordinates);
else
scale=ExpandAffine(&draw_info->affine);
if ((draw_info->dash_pattern != (double *) NULL) &&
(draw_info->dash_pattern[0] != 0.0) &&
- ((scale*draw_info->stroke_width) >= DrawEpsilon) &&
+ ((scale*draw_info->stroke_width) >= MagickEpsilon) &&
(draw_info->stroke.alpha != (Quantum) TransparentAlpha))
{
/*
for (i=0; i < 4; i++)
linecap[i]=(*primitive_info);
linecap[0].coordinates=4;
- linecap[1].point.x+=(double) (10.0*DrawEpsilon);
- linecap[2].point.x+=(double) (10.0*DrawEpsilon);
- linecap[2].point.y+=(double) (10.0*DrawEpsilon);
- linecap[3].point.y+=(double) (10.0*DrawEpsilon);
+ linecap[1].point.x+=(double) (10.0*MagickEpsilon);
+ linecap[2].point.x+=(double) (10.0*MagickEpsilon);
+ linecap[2].point.y+=(double) (10.0*MagickEpsilon);
+ linecap[3].point.y+=(double) (10.0*MagickEpsilon);
linecap[4].primitive=UndefinedPrimitive;
(void) DrawPolygonPrimitive(image,draw_info,linecap,exception);
}
center.y=(double) (cosine*(end.y-start.y)/2-sine*(end.x-start.x)/2);
delta=(center.x*center.x)/(radii.x*radii.x)+(center.y*center.y)/
(radii.y*radii.y);
- if (delta < DrawEpsilon)
+ if (delta < MagickEpsilon)
{
TraceLine(primitive_info,start,end);
return;
points[1].y=(double) (cosine*end.y/radii.y-sine*end.x/radii.y);
alpha=points[1].x-points[0].x;
beta=points[1].y-points[0].y;
- factor=DrawEpsilonReciprocal(alpha*alpha+beta*beta)-0.25;
+ factor=MagickEpsilonReciprocal(alpha*alpha+beta*beta)-0.25;
if (factor <= 0.0)
factor=0.0;
else
if ((theta > 0.0) && (sweep == MagickFalse))
theta-=(MagickRealType) (2.0*MagickPI);
arc_segments=(size_t) ceil(fabs((double) (theta/(0.5*MagickPI+
- DrawEpsilon))));
+ MagickEpsilon))));
p=primitive_info;
for (i=0; i < (ssize_t) arc_segments; i++)
{
y=degrees.y;
while (y < degrees.x)
y+=360.0;
- angle.y=(double) (DegreesToRadians(y)-DrawEpsilon);
+ angle.y=(double) (DegreesToRadians(y)-MagickEpsilon);
for (p=primitive_info; angle.x < angle.y; angle.x+=step)
{
point.x=cos(fmod(angle.x,DegreesToRadians(360.0)))*stop.x+start.x;
const PointInfo end)
{
TracePoint(primitive_info,start);
- if ((fabs(start.x-end.x) < DrawEpsilon) &&
- (fabs(start.y-end.y) < DrawEpsilon))
+ if ((fabs(start.x-end.x) < MagickEpsilon) &&
+ (fabs(start.y-end.y) < MagickEpsilon))
{
primitive_info->primitive=PointPrimitive;
primitive_info->coordinates=1;
{
dx=primitive_info[0].point.x-primitive_info[i].point.x;
dy=primitive_info[0].point.y-primitive_info[i].point.y;
- if ((fabs((double) dx) >= DrawEpsilon) ||
- (fabs((double) dy) >= DrawEpsilon))
+ if ((fabs((double) dx) >= MagickEpsilon) ||
+ (fabs((double) dy) >= MagickEpsilon))
break;
}
if (i == (ssize_t) number_vertices)
{
dx=primitive_info[number_vertices-1].point.x-primitive_info[j].point.x;
dy=primitive_info[number_vertices-1].point.y-primitive_info[j].point.y;
- if ((fabs((double) dx) >= DrawEpsilon) ||
- (fabs((double) dy) >= DrawEpsilon))
+ if ((fabs((double) dx) >= MagickEpsilon) ||
+ (fabs((double) dy) >= MagickEpsilon))
break;
}
distance=hypot((double) dx,(double) dy);
dy*(distance+offset)/distance);
}
+static inline MagickRealType DrawEpsilonReciprocal(const MagickRealType x)
+{
+#define DrawEpsilon ((MagickRealType) 1.0e-12)
+
+ MagickRealType sign = x < (MagickRealType) 0.0 ? (MagickRealType) -1.0 :
+ (MagickRealType) 1.0;
+ return((sign*x) >= DrawEpsilon ? (MagickRealType) 1.0/x : sign*(
+ (MagickRealType) 1.0/DrawEpsilon));
+}
+
static PrimitiveInfo *TraceStrokePolygon(const DrawInfo *draw_info,
const PrimitiveInfo *primitive_info)
{
{
dx.p=polygon_primitive[n].point.x-polygon_primitive[0].point.x;
dy.p=polygon_primitive[n].point.y-polygon_primitive[0].point.y;
- if ((fabs(dx.p) >= DrawEpsilon) || (fabs(dy.p) >= DrawEpsilon))
+ if ((fabs(dx.p) >= MagickEpsilon) || (fabs(dy.p) >= MagickEpsilon))
break;
}
if (n == (ssize_t) number_vertices)
box_q[3].x=polygon_primitive[i].point.x-offset.x;
box_q[3].y=polygon_primitive[i].point.y-offset.y;
}
- if (fabs((double) (slope.p-slope.q)) < DrawEpsilon)
+ if (fabs((double) (slope.p-slope.q)) < MagickEpsilon)
{
box_p[4]=box_p[1];
box_q[4]=box_q[1];