]> git.donarmstrong.com Git - lilypond.git/commitdiff
(score_extra_encompass): widen X extent of
authorhanwen <hanwen>
Fri, 17 Sep 2004 19:05:04 +0000 (19:05 +0000)
committerhanwen <hanwen>
Fri, 17 Sep 2004 19:05:04 +0000 (19:05 +0000)
extra encompass.
(score_extra_encompass): use Y coordinate of attachment if X
attachment falls in extra encompass X extent.

ChangeLog
lily/slur-scoring.cc

index d43c8bce88f9d3d5b7a43f8506d01cc89f541bc8..47d1bc9f3509bf42a24e8df22b0999154ceeb994 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2004-09-17  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * lily/slur-scoring.cc (score_extra_encompass): widen X extent of
+       extra encompass.
+       (score_extra_encompass): use Y coordinate of attachment if X
+       attachment falls in extra encompass X extent.
+
        * buildscripts/guile-gnome.sh (SLIB_PATH): add SLIB_PATH to
        GUILE_LOAD_PATH
 
index 0b3f34deacf65706c157a527a6d9338e063cd43b..6f91aa9b12895bb6c4cfb72265638d0b2acdfb1b 100644 (file)
@@ -1146,6 +1146,7 @@ score_extra_encompass (Grob *me, Grob *common[],
            }
 
          ye.widen (thick * 0.5);
+         xe.widen (thick * 1.0);
          Extra_collision_info info (xp, xe, ye,  penalty);
          collision_infos.push (info);
        }
@@ -1155,36 +1156,36 @@ score_extra_encompass (Grob *me, Grob *common[],
       Real demerit = 0.0;
       for (int j = 0; j < collision_infos.size(); j++)
        {
-         Drul_array<Offset> at = scores->elem (i).attachment_;
-         Interval slur_wid (at[LEFT][X_AXIS], at[RIGHT][X_AXIS]);
+         Drul_array<Offset> attachment = scores->elem (i).attachment_;
+         Interval slur_wid (attachment[LEFT][X_AXIS], attachment[RIGHT][X_AXIS]);
 
          /*
            to prevent numerical inaccuracies in
            Bezier::get_other_coordinate().
-          */
-         slur_wid.widen (- 0.5 * thick);
-         Real x = collision_infos[j].extents_[X_AXIS]
-           .linear_combination (collision_infos[j].idx_);
+         */
+         Direction d = LEFT;
+         bool found = false;
          Real y = 0.0;
          
-         if (!slur_wid.contains (x))
-           {   
-             Direction contains_dir = CENTER;
-             Direction d = LEFT;
-             do
+         do
+           {
+             if (collision_infos[j].extents_[X_AXIS].contains (attachment[d][X_AXIS]))
                {
-                 if (collision_infos[j].extents_[X_AXIS].contains (at[d][X_AXIS]))
-                   contains_dir = d; 
+                 y = attachment[d][Y_AXIS];
+                 found = true;
                }
-             while (flip (&d) != LEFT);
-
-             if (!contains_dir)
-               continue;
-             else
-               y = at[contains_dir][Y_AXIS];
            }
-         else
+         while (flip (&d) != LEFT);
+
+         if (!found)
            {
+             
+             Real x = collision_infos[j].extents_[X_AXIS]
+               .linear_combination (collision_infos[j].idx_);
+             if (!slur_wid.contains (x))
+               continue;
+             
              y = scores->elem (i).curve_.get_other_coordinate (X_AXIS, x);
            }