-void
-Simple_spacer_wrapper::add_columns (Link_array<Grob> const &icols)
-{
- Link_array<Grob> cols (icols);
-
- for (int i = cols.size (); i--;)
- if (ly_c_pair_p (cols[i]->get_property ("between-cols")))
- {
- loose_cols_.push (cols[i]);
- cols.del (i);
- }
-
- spaced_cols_ = cols;
- for (int i=0; i < cols.size () - 1; i++)
- {
- Spring_smob *spring = 0;
-
- for (SCM s = cols[i]->get_property ("ideal-distances");
- !spring && ly_c_pair_p (s);
- s = ly_cdr (s))
- {
- Spring_smob *sp = unsmob_spring (ly_car (s));
-
-
- if (sp->other_ == cols[i+1])
- spring = sp;
- }
-
- if (!spring)
- programming_error (_f ("No spring between column %d and next one",
- Paper_column::get_rank (cols[i])
- ));
-
- Real ideal = (spring) ? spring->distance_ : spacer_->default_space_;
- Real hooke = (spring) ? spring->strength_ : 1.0;
-
- spacer_->add_spring (ideal, hooke);
- }
-
- for (int i=0; i < cols.size () - 1; i++)
- {
- for (SCM s = Spaceable_grob::get_minimum_distances (cols[i]);
- ly_c_pair_p (s); s = ly_cdr (s))
- {
- Grob * other = unsmob_grob (ly_caar (s));
- int oi = cols.find_index (other);
- if (oi >= 0)
- {
- spacer_->add_rod (i, oi, ly_scm2double (ly_cdar (s)));
- }
- }
- }
-}