]> git.donarmstrong.com Git - lilypond.git/commitdiff
(score_forbidden_quants): check all staff
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 17 Feb 2004 22:38:18 +0000 (22:38 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 17 Feb 2004 22:38:18 +0000 (22:38 +0000)
lines for falling into beam-gap.

ChangeLog
lily/beam-quanting.cc

index aabc7ce5d292f68286288b947a1c01bfdfe94c89..67d42fb4f1d04fb57a41d8d8757f7291c5d58570 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2004-02-17  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * lily/beam-quanting.cc (score_forbidden_quants): check all staff
+       lines for falling into beam-gap.  
+
        * lily/note-spacing.cc (get_spacing): less space at EOL in case of
        key/clef/time signatures. 
 
index 28af0c533611b622780ac4394615069a61c272cd..40ff8ac4221a04bdbae739fefcfa7ec002e49456 100644 (file)
@@ -27,6 +27,12 @@ const int INTER_QUANT_PENALTY = 1000;
 const Real SECONDARY_BEAM_DEMERIT  = 10.0;
 const int STEM_LENGTH_DEMERIT_FACTOR = 5;
 
+/*
+  threshold to combat rounding errors.
+ */
+
+const Real BEAM_EPS = 1e-3; 
+
 // possibly ridiculous, but too short stems just won't do
 const int STEM_LENGTH_LIMIT_PENALTY = 5000;
 const int DAMPING_DIRECTION_PENALTY = 800;
@@ -443,7 +449,7 @@ Beam::score_forbidden_quants (Real yl, Real yr,
   Direction d = LEFT;
   do
     {
-      if (fabs (y[d]) <= (radius + 0.5) && fabs (my_modf (y[d]) - 0.5) < 1e-3)
+      if (fabs (y[d]) <= (radius + 0.5) && fabs (my_modf (y[d]) - 0.5) < BEAM_EPS)
        dem += INTER_QUANT_PENALTY;
     }
   while ((flip (&d))!= LEFT); 
@@ -466,8 +472,10 @@ Beam::score_forbidden_quants (Real yl, Real yr,
          gap.add_point (gap1);
          gap.add_point (gap2);
 
-         if (gap.contains (radius))
-           dem += extra_demerit;
+         for (Real k = - radius ;
+              k <= radius + BEAM_EPS; k += 1.0) 
+           if (gap.contains (k))
+             dem += extra_demerit;
        }
       while ((flip (&d))!= LEFT); 
     }
@@ -482,28 +490,26 @@ Beam::score_forbidden_quants (Real yl, Real yr,
       Real inter = 0.5;
       Real hang = 1.0 - (thickness - slt) / 2;
 
-      Real eps = 1e-3;
-
       // hmm, without Interval/Drul_array, you get ~ 4x same code...
       if (fabs (y[LEFT] - dirs[LEFT] * beam_translation) < radius + inter)
        {
-         if (dirs[LEFT] == UP && dy <= eps
-             && fabs (my_modf (y[LEFT]) - sit) < eps)
+         if (dirs[LEFT] == UP && dy <= BEAM_EPS
+             && fabs (my_modf (y[LEFT]) - sit) < BEAM_EPS)
            dem += extra_demerit;
          
-         if (dirs[LEFT] == DOWN && dy >= eps
-             && fabs (my_modf (y[LEFT]) - hang) < eps)
+         if (dirs[LEFT] == DOWN && dy >= BEAM_EPS
+             && fabs (my_modf (y[LEFT]) - hang) < BEAM_EPS)
            dem += extra_demerit;
        }
 
       if (fabs (y[RIGHT] - dirs[RIGHT] * beam_translation) < radius + inter)
        {
-         if (dirs[RIGHT] == UP && dy >= eps
-             && fabs (my_modf (y[RIGHT]) - sit) < eps)
+         if (dirs[RIGHT] == UP && dy >= BEAM_EPS
+             && fabs (my_modf (y[RIGHT]) - sit) < BEAM_EPS)
            dem += extra_demerit;
          
-         if (dirs[RIGHT] == DOWN && dy <= eps
-             && fabs (my_modf (y[RIGHT]) - hang) < eps)
+         if (dirs[RIGHT] == DOWN && dy <= BEAM_EPS
+             && fabs (my_modf (y[RIGHT]) - hang) < BEAM_EPS)
            dem += extra_demerit;
        }
       
@@ -511,23 +517,23 @@ Beam::score_forbidden_quants (Real yl, Real yr,
        {
          if (fabs (y[LEFT] - 2 * dirs[LEFT] * beam_translation) < radius + inter)
            {
-             if (dirs[LEFT] == UP && dy <= eps
-                 && fabs (my_modf (y[LEFT]) - straddle) < eps)
+             if (dirs[LEFT] == UP && dy <= BEAM_EPS
+                 && fabs (my_modf (y[LEFT]) - straddle) < BEAM_EPS)
                dem += extra_demerit;
              
-             if (dirs[LEFT] == DOWN && dy >= eps
-                 && fabs (my_modf (y[LEFT]) - straddle) < eps)
+             if (dirs[LEFT] == DOWN && dy >= BEAM_EPS
+                 && fabs (my_modf (y[LEFT]) - straddle) < BEAM_EPS)
                dem += extra_demerit;
            }
          
          if (fabs (y[RIGHT] - 2 * dirs[RIGHT] * beam_translation) < radius + inter)
            {
-             if (dirs[RIGHT] == UP && dy >= eps
-                 && fabs (my_modf (y[RIGHT]) - straddle) < eps)
+             if (dirs[RIGHT] == UP && dy >= BEAM_EPS
+                 && fabs (my_modf (y[RIGHT]) - straddle) < BEAM_EPS)
                dem += extra_demerit;
              
-             if (dirs[RIGHT] == DOWN && dy <= eps
-                 && fabs (my_modf (y[RIGHT]) - straddle) < eps)
+             if (dirs[RIGHT] == DOWN && dy <= BEAM_EPS
+                 && fabs (my_modf (y[RIGHT]) - straddle) < BEAM_EPS)
                dem += extra_demerit;
            }
        }