+ Spanner *sp = dynamic_cast<Spanner *> (me);
+ if (! (sp->get_bound (LEFT) && sp->get_bound (RIGHT)))
+ {
+ programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
+ return;
+ }
+
+ Item *li = sp->get_bound (LEFT)->get_column ();
+ Item *ri = sp->get_bound (RIGHT)->get_column ();
+ Item *lb = li->find_prebroken_piece (RIGHT);
+ Item *rb = ri->find_prebroken_piece (LEFT);
+ Grob *spacing = unsmob_grob (li->get_object ("spacing"));
+ if (!spacing)
+ spacing = unsmob_grob (ri->get_object ("spacing"));
+ if (!spacing)
+ me->warning (_ ("Using naive multi measure rest spacing."));
+ else
+ {
+ Spacing_options options;
+ options.init_from_grob (me);
+ int dl = calc_measure_duration_log (me, false);
+ Duration dur = Duration (dl, 0);
+ Rational rat = dur.get_length ();
+ length = max (length, options.get_duration_space (rat));
+ }
+
+ Item *combinations[4][2] = {{li, ri},
+ {lb, ri},
+ {li, rb},
+ {lb, rb}
+ };
+
+ for (int i = 0; i < 4; i++)
+ {
+ Item *li = combinations[i][0];
+ Item *ri = combinations[i][1];
+
+ if (!li || !ri)
+ continue;
+
+ Rod rod;
+ rod.item_drul_[LEFT] = li;
+ rod.item_drul_[RIGHT] = ri;
+
+ rod.distance_ = Paper_column::minimum_distance (li, ri)
+ + length
+ + 2 * robust_scm2double (me->get_property ("bound-padding"), 1.0);
+
+ Real minlen = robust_scm2double (me->get_property ("minimum-length"), 0);
+ rod.distance_ = max (rod.distance_, minlen);
+ rod.add_to_cols ();
+ }