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