+
+ /* todo: the horizon_padding is somewhat arbitrary */
+ chord_outlines_[key] = Skyline (boxes, details_.skyline_padding_, Y_AXIS, -dir);
+ if (bounds[0]->break_status_dir ())
+ {
+ Interval iv (Axis_group_interface::staff_extent (bounds[0], x_refpoint_, X_AXIS, y_refpoint_, Y_AXIS));
+ if (iv.is_empty ())
+ iv.add_point (bounds[0]->relative_coordinate (x_refpoint_, X_AXIS));
+
+ chord_outlines_[key].set_minimum_height (iv[-dir]);
+ }
+ else
+ {
+ Interval x;
+ for (vsize j = 0; j < head_boxes.size (); j++)
+ {
+ x.unite (head_boxes[j][X_AXIS]);
+ }
+
+ chord_outlines_[key].set_minimum_height (x[dir]);
+ }
+
+ head_extents_[key].set_empty ();
+ for (vsize i = 0; i < head_boxes.size (); i++)
+ {
+ head_extents_[key].unite (head_boxes[i]);
+ }
+}
+
+void
+Tie_formatting_problem::set_chord_outline (vector<Item*> bounds,
+ Direction dir)
+
+{
+ vector<int> ranks;
+ for (vsize i = 0; i < bounds.size (); i++)
+ ranks.push_back (bounds[i]->get_column ()->get_rank ());
+
+ vector_sort (ranks, less<int> ());
+ uniq (ranks);
+
+ for (vsize i = 0; i < ranks.size (); i++)
+ {
+ vector<Item*> col_items;
+ for (vsize j = 0; j < bounds.size (); j ++)
+ {
+ if (bounds[j]->get_column ()->get_rank () == ranks[i])
+ col_items.push_back (bounds[j]);
+ }
+
+ set_column_chord_outline (col_items, dir, ranks[i]);
+ }