]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/slur-configuration.cc
*** empty log message ***
[lilypond.git] / lily / slur-configuration.cc
index 4d4e3de17119b243803a211958d7a932d3438b0a..f5698104ade42dc01bf2a506485daa4d5583628c 100644 (file)
@@ -8,13 +8,12 @@
 
 #include "slur-configuration.hh"
 
-#include <math.h>
 
 #include "stem.hh"
 #include "warn.hh"
 #include "misc.hh"
 #include "item.hh"
-#include "group-interface.hh"
+#include "pointer-group-interface.hh"
 #include "slur.hh"
 #include "slur-scoring.hh"
 #include "spanner.hh"
@@ -87,48 +86,16 @@ fit_factor (Offset dz_unit, Offset dz_perp,
 
       Real y = curve.get_other_coordinate (X_AXIS, p[X_AXIS]);
       if (y)
-       {
-         fit_factor = fit_factor >? (p[Y_AXIS] / y);
-       }
+       fit_factor = max (fit_factor, (p[Y_AXIS] / y));
     }
   return fit_factor;
 }
 
 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_ * ((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 ();
@@ -151,7 +118,7 @@ Slur_configuration::generate_curve (Slur_score_state const &state,
   (control3 - control0).  */
 
   Real max_indent = len / 3.1;
-  indent = indent <? max_indent;
+  indent = min (indent, max_indent);
 
   Real a1 = sqr (len) / 3.0;
   Real a2 = 0.75 * sqr (indent + len / 3.0);
@@ -163,14 +130,12 @@ Slur_configuration::generate_curve (Slur_score_state const &state,
       max_h = len / 3.0;
     }
   else
-    {
-      max_h = sqrt (max_h);
-    }
+    max_h = sqrt (max_h);
 
-  Real excentricity = robust_scm2double (state.slur_->get_property ("excentricity"), 0);
+  Real eccentricity = robust_scm2double (state.slur_->get_property ("eccentricity"), 0);
 
-  Real x1 = (excentricity + indent);
-  Real x2 = (excentricity - indent);
+  Real x1 = (eccentricity + indent);
+  Real x2 = (eccentricity - indent);
 
   Bezier curve;
   curve.control_[0] = attachment_[LEFT];
@@ -182,7 +147,7 @@ Slur_configuration::generate_curve (Slur_score_state const &state,
 
   Real ff = fit_factor (dz_unit, dz_perp, curve, state.dir_, avoid);
 
-  height = height >? ((height * ff) <? max_h);
+  height = max (height, min (height * ff, max_h));
 
   curve.control_[0] = attachment_[LEFT];
   curve.control_[1] = attachment_[LEFT] + dz_perp * height * state.dir_
@@ -238,7 +203,7 @@ Slur_configuration::score_encompass (Slur_score_state const &state)
              Real hd = (head_dy)
                ? (1 / fabs (head_dy) - 1 / state.parameters_.free_head_distance_)
                : state.parameters_.head_encompass_penalty_;
-             hd = (hd >? 0)<? state.parameters_.head_encompass_penalty_;
+             hd = min (max (hd, 0.0), state.parameters_.head_encompass_penalty_);
 
              demerit += hd;
            }
@@ -253,8 +218,7 @@ Slur_configuration::score_encompass (Slur_score_state const &state)
            {
 
              Real closest
-               = state.dir_ * (state.dir_ * state.encompass_infos_[j].get_point (state.dir_)
-                               >? state.dir_ * line_y);
+               = state.dir_ * max (state.dir_ * state.encompass_infos_[j].get_point (state.dir_), state.dir_ * line_y);
              Real d = fabs (closest - y);
 
              convex_head_distances.push (d);
@@ -278,9 +242,8 @@ Slur_configuration::score_encompass (Slur_score_state const &state)
 
          // ?
          demerit += -state.parameters_.closeness_factor_
-           * (state.dir_
-              * (y - (ext[state.dir_] + state.dir_ * state.parameters_.free_head_distance_))
-              <? 0)
+           * min (state.dir_
+                  * (y - (ext[state.dir_] + state.dir_ * state.parameters_.free_head_distance_)), 0.0)
            / state.encompass_infos_.size ();
        }
     }
@@ -293,7 +256,7 @@ Slur_configuration::score_encompass (Slur_score_state const &state)
       Real min_dist = infinity_f;
       for (int j = 0; j < convex_head_distances.size (); j++)
        {
-         min_dist = min_dist <? convex_head_distances[j];
+         min_dist = min (min_dist, convex_head_distances[j]);
          avg_distance += convex_head_distances[j];
        }
 
@@ -317,10 +280,9 @@ Slur_configuration::score_encompass (Slur_score_state const &state)
       variance_penalty = state.parameters_.head_slur_distance_max_ratio_;
       if (min_dist > 0.0)
        variance_penalty
-         = (avg_distance / (min_dist + state.parameters_.absolute_closeness_measure_) - 1.0)
-         <? variance_penalty;
+         = min ((avg_distance / (min_dist + state.parameters_.absolute_closeness_measure_) - 1.0), variance_penalty);
 
-      variance_penalty = variance_penalty >? 0.0;
+      variance_penalty = max (variance_penalty, 0.0);
       variance_penalty *= state.parameters_.head_slur_distance_factor_;
     }
 
@@ -382,7 +344,7 @@ Slur_configuration::score_extra_encompass (Slur_score_state const &state)
 
       Real dist = state.extra_encompass_infos_[j].extents_[Y_AXIS].distance (y);
       demerit
-       += fabs (0 >? (state.parameters_.extra_encompass_free_distance_ - dist))
+       += fabs (max (0.0, (state.parameters_.extra_encompass_free_distance_ - dist)))
        / state.parameters_.extra_encompass_free_distance_
        * state.extra_encompass_infos_[j].penalty_;
     }
@@ -430,8 +392,8 @@ Slur_configuration ::score_slopes (Slur_score_state const &state)
   Real slur_dy = slur_dz[Y_AXIS];
   Real demerit = 0.0;
 
-  demerit += ((fabs (slur_dy / slur_dz[X_AXIS])
-              - state.parameters_.max_slope_) >? 0)
+  demerit += max ((fabs (slur_dy / slur_dz[X_AXIS])
+                  - state.parameters_.max_slope_), 0.0)
     * state.parameters_.max_slope_factor_;
 
   /* 0.2: account for staffline offset. */
@@ -441,10 +403,10 @@ Slur_configuration ::score_slopes (Slur_score_state const &state)
 
   if (!state.is_broken_)
     demerit += state.parameters_.steeper_slope_factor_
-      * ((fabs (slur_dy) -max_dy) >? 0);
+      * (max (fabs (slur_dy) -max_dy, 0.0));
 
-  demerit += ((fabs (slur_dy / slur_dz[X_AXIS])
-              - state.parameters_.max_slope_) >? 0)
+  demerit += max ((fabs (slur_dy / slur_dz[X_AXIS])
+                  - state.parameters_.max_slope_), 0.0)
     * state.parameters_.max_slope_factor_;
 
   if (sign (dy) == 0