2 tie-configuration.cc -- implement Tie_configuration
4 source file of the GNU LilyPond music typesetter
6 (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
10 #include "tie-configuration.hh"
12 #include "tie-formatting-problem.hh"
16 Tie_configuration::compare (Tie_configuration const &a,
17 Tie_configuration const &b)
19 if (a.position_ - b.position_)
20 return sign (a.position_ - b.position_);
21 return sign (a.dir_ - b.dir_);
25 Tie_configuration::Tie_configuration ()
32 column_ranks_ = Drul_array<int> (0, 0);
37 Tie_configuration::center_tie_vertically (Tie_details const &details)
39 Bezier b = get_untransformed_bezier (details);
40 Offset middle = b.curve_point (0.5);
41 Offset edge = b.curve_point (0.0);
42 Real center = (edge[Y_AXIS] + middle[Y_AXIS])/2.0;
44 delta_y_ = - dir_ * center;
49 Tie_configuration::get_transformed_bezier (Tie_details const &details) const
51 Bezier b (get_untransformed_bezier (details));
54 b.translate (Offset (attachment_x_[LEFT],
55 delta_y_ + details.staff_space_ * 0.5 * position_));
61 Get bezier with left control at (0,0)
64 Tie_configuration::get_untransformed_bezier (Tie_details const &details) const
66 Real l = attachment_x_.length();
67 if (isinf (l) || isnan (l))
69 programming_error ("Inf or NaN encountered");
73 details.height_limit_,
78 Tie_configuration::column_span_length () const
80 return column_ranks_[RIGHT] - column_ranks_[LEFT];
84 Tie_configuration::column_span_length () const
86 return column_ranks_[RIGHT] - column_ranks_[LEFT];
90 Tie_configuration::distance (Tie_configuration const &a,
91 Tie_configuration const &b)
94 Real d = 3 * (a.position_ - b.position_);
96 return d + (2 + (b.dir_ - a.dir_));
98 return d + (2 + (a.dir_ - b.dir_));
103 Tie_configuration::add_score (Real s, string desc)
108 score_card_ += to_string ("%s=%.2f ", desc.c_str (), s);
112 Tie_configuration::height (Tie_details const &details) const
114 Real l = attachment_x_.length();
116 return slur_shape (l,
117 details.height_limit_,
118 details.ratio_).curve_point (0.5)[Y_AXIS];
121 Ties_configuration::Ties_configuration()
128 Ties_configuration::reset_score ()
133 tie_score_cards_.clear ();
137 Ties_configuration::add_tie_score (Real s, int i, string desc)
143 while (tie_score_cards_.size () < size ())
144 tie_score_cards_.push_back ("");
146 tie_score_cards_[i] += to_string ("%s=%.2f ", desc.c_str (), s);
151 Ties_configuration::add_score (Real s, string desc)
156 score_card_ += to_string ("%s=%.2f ", desc.c_str (), s);
160 Ties_configuration::score () const
166 Ties_configuration::card () const