X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fbeam-scoring-problem.hh;h=bbabfde7deca96823ca0477b84500af4f2cc22ca;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=08664049e8b331393e0933e5b53f5dc74f1fb5be;hpb=cadb80a98fffcf101886553dd1327e7c468682dc;p=lilypond.git diff --git a/lily/include/beam-scoring-problem.hh b/lily/include/beam-scoring-problem.hh index 08664049e8..bbabfde7de 100644 --- a/lily/include/beam-scoring-problem.hh +++ b/lily/include/beam-scoring-problem.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2011 Han-Wen Nienhuys + Copyright (C) 1996--2015 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -23,13 +23,14 @@ #include "beam.hh" #include "interval.hh" -#include "lily-guile.hh" -#include "lily-proto.hh" +#include "lily-guile.hh" +#include "lily-proto.hh" #include "main.hh" // DEBUG_BEAM_SCORING -#include "std-vector.hh" -#include "stem-info.hh" +#include "std-vector.hh" +#include "stem-info.hh" -enum Scorers { +enum Scorers +{ // Should be ordered by increasing expensiveness. ORIGINAL_DISTANCE, SLOPE_IDEAL, @@ -55,22 +56,21 @@ struct Beam_configuration Beam_configuration (); bool done () const; void add (Real demerit, const string &reason); - static Beam_configuration* new_config(Interval start, - Interval offset); + static Beam_configuration *new_config (Interval start, + Interval offset); }; // Comparator for a queue of Beam_configuration*. class Beam_configuration_less { public: - bool operator() (Beam_configuration* const& l, Beam_configuration* const& r) + bool operator () (Beam_configuration *const &l, Beam_configuration *const &r) { // Invert return l->demerits > r->demerits; } }; - struct Beam_quant_parameters { Real SECONDARY_BEAM_DEMERIT; @@ -93,11 +93,12 @@ struct Beam_quant_parameters Real COLLISION_PADDING; Real HORIZONTAL_INTER_QUANT_PENALTY; Real STEM_COLLISION_FACTOR; - + void fill (Grob *him); }; -struct Beam_collision { +struct Beam_collision +{ Real x_; Interval y_; Real base_penalty_; @@ -105,34 +106,31 @@ struct Beam_collision { // Need to add beam_config->y to get actual offsets. Interval beam_y_; }; - /* Parameters for a single beam. Precomputed to save time in scoring individual configurations. - TODO - use trailing _ on data members. - */ class Beam_scoring_problem { public: - Beam_scoring_problem (Grob *me, Drul_array ys); - Drul_array solve() const; + Beam_scoring_problem (Grob *me, Drul_array ys, bool); + Drul_array solve () const; private: - Grob *beam; + Spanner *beam_; - Interval unquanted_y; - - Real staff_space; - Real beam_thickness; - Real line_thickness; - Real musical_dy; + Interval unquanted_y_; + bool align_broken_intos_; + bool do_initial_slope_calculations_; - Interval x_span; - - vector stem_infos; + Real staff_space_; + Real beam_thickness_; + Real line_thickness_; + Real musical_dy_; + int normal_stem_count_; + Real x_span_; /* Do stem computations. These depend on YL and YR linearly, so we can @@ -142,36 +140,48 @@ private: affine linear in YL and YR. If YL == YR == 0, then we might have stem_y != 0.0, when we're cross staff. */ - vector base_lengths; - vector stem_xpositions; - - Grob *common[2]; - bool is_xstaff; - bool is_knee; + vector stem_infos_; + vector chord_start_y_; + vector head_positions_; + vector beam_multiplicity_; + vector is_normal_; + vector base_lengths_; + vector stem_xpositions_; + vector stem_ypositions_; - Beam_quant_parameters parameters; + bool is_xstaff_; + bool is_knee_; - Real staff_radius; - Drul_array edge_beam_counts; - Drul_array edge_dirs; + Beam_quant_parameters parameters_; + + Real staff_radius_; + Drul_array edge_beam_counts_; + Drul_array edge_dirs_; // Half-open intervals, representing allowed positions for the beam, // starting from close to the notehead to the direction of the stem // end. This is used for quickly weeding out invalid // Beam_configurations. - Drul_array quant_range; - Real beam_translation; + Drul_array quant_range_; + Real beam_translation_; vector collisions_; vector segments_; - - void init_stems (); - void init_collisions (vector grobs); + + vsize first_normal_index (); + vsize last_normal_index (); + + void init_instance_variables (Grob *me, Drul_array ys, bool align_broken_intos); void add_collision (Real x, Interval y, Real factor); - - void one_scorer (Beam_configuration* config) const; + void no_visible_stem_positions (); + void least_squares_positions (); + Real calc_concaveness (); + void slope_damping (); + void shift_region_to_valid (); + + void one_scorer (Beam_configuration *config) const; Beam_configuration *force_score (SCM inspect_quants, - const vector &configs) const; - Real y_at (Real x, Beam_configuration const* c) const; + const vector &configs) const; + Real y_at (Real x, Beam_configuration const *c) const; // Scoring functions: void score_forbidden_quants (Beam_configuration *config) const; @@ -179,8 +189,8 @@ private: void score_slope_ideal (Beam_configuration *config) const; void score_slope_direction (Beam_configuration *config) const; void score_slope_musical (Beam_configuration *config) const; - void score_stem_lengths (Beam_configuration* config) const; - void generate_quants(vector* scores) const; + void score_stem_lengths (Beam_configuration *config) const; + void generate_quants (vector *scores) const; void score_collisions (Beam_configuration *config) const; };