--- /dev/null
+\version "2.15.22"
+
+\header {
+ texidoc = "Cross staff beams do collision avoidance.
+"
+}
+
+\new PianoStaff <<
+ \new Staff = up \relative c' { s2 }
+ \new Staff \relative c' {
+ \clef bass \time 2/4
+ g,32 [ d' \change Staff = up d'
+ gis a c d g ] r4 |
+ }
+>>
{
Grob *beam_grob = beams_[i].grob ();
+ extract_grob_set (beam_grob, "normal-stems", stems);
+ Interval_t<int> vertical_span;
+ for (vsize j = 0; j < stems.size (); j++)
+ {
+ int vag = Grob::get_vertical_axis_group_index (stems[j]);
+ if (vag >= 0)
+ vertical_span.add_point (vag);
+ }
Context *beam_context = beams_[i].context ();
Interval_t<int> beam_spanned_rank_ = beam_grob->spanned_rank_interval ();
for (vsize j = start; j < covered_grobs_.size (); j++)
{
Grob *covered_grob = covered_grobs_[j].grob ();
+ int vag = Grob::get_vertical_axis_group_index (covered_grob);
+ if (!vertical_span.contains (vag))
+ continue;
Context *covered_grob_context = covered_grobs_[j].context ();
Interval_t<int> covered_grob_spanned_rank = covered_grob->spanned_rank_interval ();
base_lengths_.push_back (y / staff_space_);
stem_xpositions_.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS) - x_pos[LEFT] + x_span_);
stem_ypositions_.push_back (s->relative_coordinate (common[Y_AXIS], Y_AXIS) - my_y);
+
if (is_normal_.back ())
{
if (beam_width[LEFT] == -1.0)
continue;
b[X_AXIS] += (x_span_ - x_pos[LEFT]);
+ b[Y_AXIS] -= my_y;
Real width = b[X_AXIS].length ();
Real width_factor = sqrt (width / staff_space_);
Interval y;
y.set_full ();
y[-stem_dir] = Stem::chord_start_y (*it) + (*it)->relative_coordinate (common[Y_AXIS], Y_AXIS)
- - beams[i]->relative_coordinate (common[Y_AXIS], Y_AXIS);
+ - my_y;
Real factor = parameters_.STEM_COLLISION_FACTOR;
if (!unsmob_grob (s->get_object ("beam")))
\consists "Ledger_line_engraver"
\consists "Staff_symbol_engraver"
\consists "Collision_engraver"
- \consists "Beam_collision_engraver"
\consists "Grob_pq_engraver"
\consists "Rest_collision_engraver"
\consists "Accidental_engraver"
\consists "Bar_number_engraver"
\consists "Parenthesis_engraver"
\consists "Concurrent_hairpin_engraver"
+ \consists "Beam_collision_engraver"
\defaultchild "Staff"