fix find_closest_arc() and arc_bbox() if arc was saved with negative "b" angle
This commit is contained in:
parent
bf344309f0
commit
3fcc5cdfc6
11
src/draw.c
11
src/draw.c
|
|
@ -1934,8 +1934,19 @@ void arc_bbox(double x, double y, double r, double a, double b,
|
|||
*by2 = y+r;
|
||||
return;
|
||||
}
|
||||
|
||||
if(b < 0.) {
|
||||
double aa = a;
|
||||
a = fmod(aa + b, 360.);
|
||||
if(a < 0) a += 360.;
|
||||
b = fmod(aa, 360.);
|
||||
if(b < 0) b += 360.;
|
||||
} else {
|
||||
b = fmod(a + b, 360.);
|
||||
if(b < 0) b += 360.;
|
||||
a = fmod(a, 360.);
|
||||
if(a < 0) a += 360.;
|
||||
}
|
||||
aa = (int)(ceil(a/90.))*90;
|
||||
bb = (int)(floor((a+b)/90.))*90;
|
||||
|
||||
|
|
|
|||
|
|
@ -353,7 +353,17 @@ static void find_closest_arc(double mx, double my, int override_lock)
|
|||
if(angle<0.) angle +=360.;
|
||||
angle1 = xctx->arc[c][i].a;
|
||||
angle2 = fmod(xctx->arc[c][i].a + xctx->arc[c][i].b, 360.);
|
||||
|
||||
if(xctx->arc[c][i].b < 0) {
|
||||
angle1 = fmod(xctx->arc[c][i].a + xctx->arc[c][i].b, 360.);
|
||||
if(angle1 < 0.) angle1 += 360.;
|
||||
angle2 = fmod(xctx->arc[c][i].a, 360.);
|
||||
if(angle2 < 0.) angle2 += 360.;
|
||||
} else {
|
||||
angle1 = fmod(xctx->arc[c][i].a, 360.);
|
||||
if(angle1 < 0.) angle1 += 360.;
|
||||
angle2 = fmod(xctx->arc[c][i].a + xctx->arc[c][i].b, 360.);
|
||||
if(angle2 < 0.) angle2 += 360.;
|
||||
}
|
||||
match=0;
|
||||
if(dist < d) {
|
||||
if(xctx->arc[c][i].b==360.) match=1;
|
||||
|
|
@ -367,7 +377,7 @@ static void find_closest_arc(double mx, double my, int override_lock)
|
|||
}
|
||||
}
|
||||
}
|
||||
dbg(1, "find_closest_arc(): dist = %g, angle = %g\n", dist, angle);
|
||||
dbg(1, "find_closest_arc(): dist = %g, angle = %g, angle1=%g, angle2=%g\n", dist, angle, angle1, angle2);
|
||||
dbg(1, "find_closest_arc(): center=%g, %g: mouse: %g:%g\n",
|
||||
xctx->arc[c][i].x, xctx->arc[c][i].y, mx, my);
|
||||
if(match ) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue