]> git.donarmstrong.com Git - lilypond.git/commitdiff
Prevent merge_springs from messing up the compression strength.
authorJoe Neeman <joeneeman@gmail.com>
Mon, 6 Aug 2007 12:33:42 +0000 (22:33 +1000)
committerJoe Neeman <joeneeman@gmail.com>
Mon, 6 Aug 2007 12:33:42 +0000 (22:33 +1000)
Fixes problems with knee-spacing-correction when compression is applied.

lily/note-spacing.cc
lily/spring.cc

index e41046bc45b1eb4917ec6f69a11ac68be39b9197..d476f70fa08c617b835ee5181be228db13c9eb84 100644 (file)
@@ -88,7 +88,7 @@ Note_spacing::get_spacing (Grob *me, Item *right_col,
   stem_dir_correction (me, right_col, increment, &ideal, &min_desired_space);
 
   Spring ret (ideal, min_dist);
-  ret.set_inverse_compress_strength (max (0.0, ideal - max (min_dist, min_desired_space)));
+  ret.set_inverse_compress_strength (max (0.0, ideal - min_desired_space));
   ret.set_inverse_stretch_strength (max (0.1, base_space - increment));
   return ret;
 }
@@ -215,6 +215,8 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
       for (vsize i = 0; i < items.size (); i++)
        {
          Item *it = dynamic_cast<Item *> (items[i]);
+         if (!Note_column::has_interface (it))
+           continue;
 
          /*
            don't correct if accidentals are sticking out of the right side.
index c9f3afbe42a3ef4c71041b2cde980245fc283070..1f250546db354d31f41a7cfb344a011281af7524 100644 (file)
@@ -61,20 +61,24 @@ merge_springs (vector<Spring> const &springs)
   Real avg_distance = 0;
   Real min_distance = 0;
   Real avg_stretch = 0;
+  Real avg_compress = 0;
 
   for (vsize i = 0; i < springs.size (); i++)
     {
       avg_distance += springs[i].distance ();
       avg_stretch += springs[i].inverse_stretch_strength ();
+      avg_compress += 1 / springs[i].inverse_compress_strength ();
       min_distance = max (springs[i].min_distance (), min_distance);
     }
 
   avg_stretch /= springs.size ();
+  avg_compress /= springs.size ();
   avg_distance /= springs.size ();
   avg_distance = max (min_distance + 0.3, avg_distance);
 
   Spring ret = Spring (avg_distance, min_distance);
   ret.set_inverse_stretch_strength (avg_stretch);
+  ret.set_inverse_compress_strength (1 / avg_compress);
 
   return ret;
 }