#include "beam.hh"
+#include "beam-scoring-problem.hh"
#include "beaming-pattern.hh"
#include "directional-element-interface.hh"
-#include "main.hh"
+#include "grob-array.hh"
#include "international.hh"
#include "interval-set.hh"
#include "item.hh"
#include "least-squares.hh"
#include "lookup.hh"
+#include "main.hh"
#include "misc.hh"
#include "output-def.hh"
#include "pointer-group-interface.hh"
#include "staff-symbol-referencer.hh"
#include "stem.hh"
#include "warn.hh"
-#include "grob-array.hh"
#if DEBUG_BEAM_SCORING
#include "text-interface.hh" // debug output.
dir_ = CENTER;
}
+bool
+beam_segment_less (Beam_segment const& a, Beam_segment const& b)
+{
+ return a.horizontal_[LEFT] < b.horizontal_[LEFT];
+}
+
Beam_segment::Beam_segment ()
{
vertical_count_ = 0;
typedef map<int, vector<Beam_stem_segment> > Position_stem_segments_map;
+// TODO - should store result in a property?
vector<Beam_segment>
Beam::get_beam_segments (Grob *me_grob, Grob **common)
{
#if (DEBUG_BEAM_SCORING)
SCM annotation = me->get_property ("annotation");
- if (!scm_is_string (annotation))
- {
- SCM debug = me->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring"));
- if (to_boolean (debug))
- annotation = me->get_property ("quant-score");
- }
-
if (scm_is_string (annotation))
{
extract_grob_set (me, "stems", stems);
string str;
SCM properties = Font_interface::text_font_alist_chain (me);
+ properties = scm_cons(scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-5), SCM_EOL),
+ properties);
+
Direction stem_dir = stems.size () ? to_dir (stems[0]->get_property ("direction")) : UP;
Stencil score = *unsmob_stencil (Text_interface::interpret_markup
- (me->layout ()->self_scm (), properties, annotation));
+ (me->layout ()->self_scm (), properties, annotation));
if (!score.is_empty ())
{
if (normal_stem_count (me) <= 1)
return posns;
-
SCM s = me->get_property ("damping");
Real damping = scm_to_double (s);
Real concaveness = robust_scm2double (me->get_property ("concaveness"), 0.0);
return ly_interval2scm (pos);
}
+
+MAKE_SCHEME_CALLBACK (Beam, quanting, 2);
+SCM
+Beam::quanting (SCM smob, SCM posns)
+{
+ Grob *me = unsmob_grob (smob);
+ Drul_array<Real> ys(0, 0);
+ ys = robust_scm2drul (posns, ys);
+ Beam_scoring_problem problem (me, ys);
+
+ ys = problem.solve ();
+ return ly_interval2scm (ys);
+}
+
+
/*
Report slice containing the numbers that are both in (car BEAMING)
and (cdr BEAMING)
"break-overshoot "
"clip-edges "
"concaveness "
+ "covered-grobs "
"damping "
"details "
"direction "
"neutral-direction "
"normal-stems "
"positions "
- "quant-score "
"quantized-positions "
"shorten "
"stems "