From d24fed0a5d785a02e40d9f1a19522453f96f1847 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 17 Sep 2004 19:05:04 +0000 Subject: [PATCH] (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. --- ChangeLog | 5 +++++ lily/slur-scoring.cc | 41 +++++++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index d43c8bce88..47d1bc9f35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2004-09-17 Han-Wen Nienhuys + * 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 diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 0b3f34deac..6f91aa9b12 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -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 at = scores->elem (i).attachment_; - Interval slur_wid (at[LEFT][X_AXIS], at[RIGHT][X_AXIS]); + Drul_array 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); } -- 2.39.5