+ Grob *covered_grob = covered_grobs_[j].grob ();
+ Context *covered_grob_context = covered_grobs_[j].context ();
+
+ Interval_t<int> covered_grob_spanned_rank = covered_grob->spanned_rank_interval ();
+ if (covered_grob_spanned_rank[LEFT] > beam_spanned_rank_[RIGHT])
+ break;
+ /*
+ Only consider grobs whose end falls at or after the beam's beginning.
+ If the grob is a beam, it cannot start before beams_[i].
+ Also, if the user wants to check for collisions only in the beam's voice,
+ then make sure the beam and the covered_grob are in the same voice.
+ */
+ if ((covered_grob_spanned_rank[RIGHT] >= beam_spanned_rank_[LEFT])
+ && !(to_boolean (beam_grob->get_property ("collision-voice-only"))
+ && (covered_grob_context != beam_context))
+ && !(Beam::has_interface (covered_grob)
+ && (covered_grob_spanned_rank[LEFT] <= beam_spanned_rank_[LEFT]))
+ && covered_grob_has_interface (covered_grob, beam_grob))
+ {
+ // Do not consider note heads attached to the beam.
+ if (Stem::has_interface (covered_grob))
+ if (unsmob_grob (covered_grob->get_object ("beam")))
+ continue;
+
+ if (Grob *stem = unsmob_grob (covered_grob->get_object ("stem")))
+ if (Grob *beam = unsmob_grob (stem->get_object ("beam")))
+ if (beam == beam_grob)
+ continue;
+
+ Pointer_group_interface::add_grob (beam_grob, ly_symbol2scm ("covered-grobs"), covered_grob);
+ }