]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/slur-scoring.cc (generate_avoid_offsets): new
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 1 Jun 2005 15:04:57 +0000 (15:04 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 1 Jun 2005 15:04:57 +0000 (15:04 +0000)
function. Generate avoid offsets once per slur.

* lily/slur.cc (add_extra_encompass): add dependency to
extra-encompass object. This fixes bugs/c-phrasing-slur.ly

* scripts/lilypond-book.py (do_options): --psfonts doesn't take
argument anymore.

* scripts/lilypond-book.py (set_default_options): new
function. Call this before dissecting snippets, so linewidth
settings reach the snippets.

ChangeLog
lily/include/slur-configuration.hh
lily/include/slur-scoring.hh
lily/slur-configuration.cc
lily/slur-scoring.cc
lily/slur.cc
scripts/lilypond-book.py

index d39623b8ec8ca324b104100d9400d7266e02b473..339f6ec8a797cbd0ec6cd94f894bdc6ae0f85419 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-06-01  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * lily/slur-scoring.cc (generate_avoid_offsets): new
+       function. Generate avoid offsets once per slur.
+
+       * lily/slur.cc (add_extra_encompass): add dependency to
+       extra-encompass object. This fixes bugs/c-phrasing-slur.ly
+
        * lily/stencil.cc (is_empty): check dim_ field for is_empty()
        too. Fixes inf error with added bass notes.
 
index 81854868bb36ffe49a4503b887faeabd88949810..23e67bceda75bb3fdef8e8e116a4f388ed30e9b3 100644 (file)
@@ -29,7 +29,8 @@ public:
 
   Slur_configuration ();
 
-  void generate_curve (Slur_score_state const &state, Real r0, Real h_inf);
+  void generate_curve (Slur_score_state const &state, Real r0, Real h_inf,
+                      Array<Offset> const&);
   void score (Slur_score_state const &);
 protected:
   void score_extra_encompass (Slur_score_state const &);
index 5b4634115eaab57b05ec54fa172dd4cf1e99e6c3..9e85ee857dc58e927f2036b0b6df905781d9d187 100644 (file)
@@ -133,6 +133,7 @@ struct Slur_score_state
   void fill (Grob *);
   void set_next_direction ();
 
+  Array<Offset> Slur_score_state::generate_avoid_offsets () const;
   Drul_array<Bound_info> get_bound_info () const;
   void generate_curves () const;
   Link_array<Slur_configuration> enumerate_attachments (Drul_array<Real> end_ys) const;
index d1c337eb271548451ade1d91d8e485a40f9a8ef3..991e8d2658499ca86b34732768327e9732d5cb35 100644 (file)
@@ -96,39 +96,10 @@ fit_factor (Offset dz_unit, Offset dz_perp,
 
 void
 Slur_configuration::generate_curve (Slur_score_state const &state,
-                                   Real r_0, Real h_inf)
+                                   Real r_0, Real h_inf,
+                                   Array<Offset> const &avoid
+                                   )
 {
-  Link_array<Grob> encompasses = state.columns_;
-
-  Array<Offset> avoid;
-  for (int i = 0; i < encompasses.size (); i++)
-    {
-      if (state.extremes_[LEFT].note_column_ == encompasses[i]
-         || state.extremes_[RIGHT].note_column_ == encompasses[i])
-       continue;
-
-      Encompass_info inf (state.get_encompass_info (encompasses[i]));
-      Real y = state.dir_ * (max (state.dir_ * inf.head_, state.dir_ * inf.stem_));
-
-      avoid.push (Offset (inf.x_, y + state.dir_ * state.parameters_.free_head_distance_));
-    }
-
-  Link_array<Grob> extra_encompasses
-    = extract_grob_array (state.slur_, ly_symbol2scm ("encompass-objects"));
-  for (int i = 0; i < extra_encompasses.size (); i++)
-    if (Slur::has_interface (extra_encompasses[i]))
-      {
-       Grob *small_slur = extra_encompasses[i];
-       Bezier b = Slur::get_curve (small_slur);
-
-       Offset z = b.curve_point (0.5);
-       z += Offset (small_slur->relative_coordinate (state.common_[X_AXIS], X_AXIS),
-                    small_slur->relative_coordinate (state.common_[Y_AXIS], Y_AXIS));
-
-       z[Y_AXIS] += state.dir_ * state.parameters_.free_slur_distance_;
-       avoid.push (z);
-      }
-
   Offset dz = attachment_[RIGHT]- attachment_[LEFT];;
   Offset dz_unit = dz;
   dz_unit *= 1 / dz.length ();
index ab945250b6a0a7df1a7d47f339206f21ae2badac..7239ba928977ea734297d09558087499b726fa57 100644 (file)
@@ -398,29 +398,37 @@ set_slur_control_points (Grob *me)
 Bezier
 Slur_score_state::get_best_curve ()
 {
-  for (int i = 0; i < configurations_.size (); i++)
-    {
-      configurations_[i]->score (*this);
-    }
-
-  Real opt = 1e6;
   int opt_idx = -1;
-  for (int i = 0; i < configurations_.size (); i++)
-    {
-      if (configurations_[i]->score_ < opt)
-       {
-         opt = configurations_[i]->score_;
-         opt_idx = i;
-       }
-    }
+  Real opt = 1e6;
 
 #if DEBUG_SLUR_SCORING
   SCM inspect_quants = slur_->get_property ("inspect-quants");
   if (to_boolean (slur_->get_layout ()
                  ->lookup_variable (ly_symbol2scm ("debug-slur-scoring")))
       && scm_is_pair (inspect_quants))
-    opt_idx = get_closest_index (inspect_quants);
+    {
+      opt_idx = get_closest_index (inspect_quants);
+      configurations_[opt_idx]->score (*this);
+      opt = configurations_[opt_idx]->score_;
+    }
+  else
+#endif
+    {
+      for (int i = 0; i < configurations_.size (); i++)
+       {
+         configurations_[i]->score (*this);
+       }
+      for (int i = 0; i < configurations_.size (); i++)
+       {
+         if (configurations_[i]->score_ < opt)
+           {
+             opt = configurations_[i]->score_;
+             opt_idx = i;
+           }
+       }
+    }
 
+#if DEBUG_SLUR_SCORING
   configurations_[opt_idx]->score_card_ += to_string ("=%.2f", opt);
   configurations_[opt_idx]->score_card_ += to_string ("i%d", opt_idx);
 
@@ -616,13 +624,54 @@ Slur_score_state::move_away_from_staffline (Real y,
   return y;
 }
 
+
+
+Array<Offset>
+Slur_score_state::generate_avoid_offsets () const
+{
+  Array<Offset> avoid;
+  Link_array<Grob> encompasses = columns_;
+
+  for (int i = 0; i < encompasses.size (); i++)
+    {
+      if (extremes_[LEFT].note_column_ == encompasses[i]
+         || extremes_[RIGHT].note_column_ == encompasses[i])
+       continue;
+
+      Encompass_info inf (get_encompass_info (encompasses[i]));
+      Real y = dir_ * (max (dir_ * inf.head_, dir_ * inf.stem_));
+
+      avoid.push (Offset (inf.x_, y + dir_ * parameters_.free_head_distance_));
+    }
+  
+  Link_array<Grob> extra_encompasses
+    = extract_grob_array (slur_, ly_symbol2scm ("encompass-objects"));
+  for (int i = 0; i < extra_encompasses.size (); i++)
+    if (Slur::has_interface (extra_encompasses[i]))
+      {
+       Grob *small_slur = extra_encompasses[i];
+       Bezier b = Slur::get_curve (small_slur);
+
+       Offset z = b.curve_point (0.5);
+       z += Offset (small_slur->relative_coordinate (common_[X_AXIS], X_AXIS),
+                    small_slur->relative_coordinate (common_[Y_AXIS], Y_AXIS));
+
+       z[Y_AXIS] += dir_ * parameters_.free_slur_distance_;
+       avoid.push (z);
+      }
+
+  return avoid;
+}
+
 void
 Slur_score_state::generate_curves () const
 {
   Real r_0 = robust_scm2double (slur_->get_property ("ratio"), 0.33);
   Real h_inf = staff_space_ * scm_to_double (slur_->get_property ("height-limit"));
+
+  Array<Offset> avoid = generate_avoid_offsets (); 
   for (int i = 0; i < configurations_.size (); i++)
-    configurations_[i]->generate_curve (*this, r_0, h_inf);
+    configurations_[i]->generate_curve (*this, r_0, h_inf, avoid);
 }
 
 Link_array<Slur_configuration>
index 060334d365c5d743ffb79acea13b316c995e4b56..c4acdd1694d9505e5a832df072351bce166f2ae5 100644 (file)
@@ -119,6 +119,7 @@ void
 Slur::add_extra_encompass (Grob *me, Grob *n)
 {
   Pointer_group_interface::add_grob (me, ly_symbol2scm ("encompass-objects"), n);
+  me->add_dependency (n);
 }
 
 MAKE_SCHEME_CALLBACK (Slur, outside_slur_callback, 2);
index 1c17298915553aed488a8afae4e1dad7100c7938..193c94bd8489cf5545325ea8c470c13357320caa 100644 (file)
@@ -1554,6 +1554,7 @@ def main ():
        file = files[0]
 
        basename = os.path.splitext (file)[0]
+       basename = os.path.split (basename)[1]
        
        global process_cmd, format
        if not format: