X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftie-configuration.cc;h=5ae6f821659b56cca72b8224dc56ee8c92a8ac80;hb=436440663fe93a8bb94776a3363376ee5c7c57af;hp=d5a238f9f1066ac77c27c832f6f7febad70690f3;hpb=498009ebeb0f902eb18a9e21db8e0a2b7e694fa0;p=lilypond.git diff --git a/lily/tie-configuration.cc b/lily/tie-configuration.cc index d5a238f9f1..5ae6f82165 100644 --- a/lily/tie-configuration.cc +++ b/lily/tie-configuration.cc @@ -1,13 +1,25 @@ /* - tie-configuration.cc -- implement Tie_configuration + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2010 Han-Wen Nienhuys - (c) 2005 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "tie-configuration.hh" + #include "warn.hh" #include "tie-formatting-problem.hh" #include "bezier.hh" @@ -27,6 +39,9 @@ Tie_configuration::Tie_configuration () dir_ = CENTER; position_ = 0; delta_y_ = 0.0; + score_ = 0.0; + scored_ = false; + column_ranks_ = Drul_array (0, 0); } @@ -60,7 +75,7 @@ Tie_configuration::get_transformed_bezier (Tie_details const &details) const Bezier Tie_configuration::get_untransformed_bezier (Tie_details const &details) const { - Real l = attachment_x_.length(); + Real l = attachment_x_.length (); if (isinf (l) || isnan (l)) { programming_error ("Inf or NaN encountered"); @@ -71,6 +86,12 @@ Tie_configuration::get_untransformed_bezier (Tie_details const &details) const details.ratio_); } +int +Tie_configuration::column_span_length () const +{ + return column_ranks_[RIGHT] - column_ranks_[LEFT]; +} + Real Tie_configuration::distance (Tie_configuration const &a, Tie_configuration const &b) @@ -83,12 +104,110 @@ Tie_configuration::distance (Tie_configuration const &a, return d + (2 + (a.dir_ - b.dir_)); } + +void +Tie_configuration::add_score (Real s, string desc) +{ + assert (!scored_); + score_ += s; + if (s) + score_card_ += to_string ("%s=%.2f ", desc.c_str (), s); +} + Real Tie_configuration::height (Tie_details const &details) const { - Real l = attachment_x_.length(); + Real l = attachment_x_.length (); return slur_shape (l, details.height_limit_, details.ratio_).curve_point (0.5)[Y_AXIS]; } + +Ties_configuration::Ties_configuration () +{ + score_ = 0.0; + scored_ = false; +} + +void +Ties_configuration::reset_score () +{ + score_ = 0.0; + scored_ = false; + score_card_ = ""; + tie_score_cards_.clear (); +} + +void +Ties_configuration::add_tie_score (Real s, int i, string desc) +{ + assert (!scored_); + score_ += s; + if (s) + { + while (tie_score_cards_.size () < size ()) + tie_score_cards_.push_back (""); + + tie_score_cards_[i] += to_string ("%s=%.2f ", desc.c_str (), s); + } +} + +void +Ties_configuration::add_score (Real s, string desc) +{ + assert (!scored_); + score_ += s; + if (s) + score_card_ += to_string ("%s=%.2f ", desc.c_str (), s); +} + +Real +Ties_configuration::score () const +{ + return score_; +} + + +string +Ties_configuration::complete_tie_card (vsize i) const +{ + string s; + s += to_string ("%d (%.2f) %c: ", (*this)[i].position_, (*this)[i].delta_y_, + ((*this)[i].dir_ == UP ? 'u' : 'd')) + + (*this)[i].card () + (*this).tie_card (i); + + /* + this is a little awkward, but we must decide where to put + aggregrates. + */ + if (i == 0) + s += card (); + + if (i + 1 == size ()) + s += to_string ("TOTAL=%.2f", score ()); + + return s; +} + +/* for use inside GDB */ +string +Ties_configuration::complete_score_card () const +{ + string s; + for (vsize i = 0; i < size (); i++) + { + s += complete_tie_card (i); + } + + return s; +} + + + +string +Ties_configuration::card () const +{ + return score_card_; +} +