2 molecule.cc -- implement Molecule
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "molecule.hh"
15 #include "killing-cons.tcc"
18 Molecule::extent() const
24 Molecule::extent(Axis a) const
30 Molecule::translate (Offset o)
32 for (Cons<Atom> * ptr = atom_list_; ptr; ptr = ptr->next_)
40 Molecule::translate_axis (Real x,Axis a)
42 for (Cons<Atom> * ptr = atom_list_; ptr; ptr = ptr->next_)
43 ptr->car_->off_[a] += x;
49 Molecule::add_molecule (Molecule const &m)
51 Cons_list<Atom> al (copy_killing_cons_list (m.atom_list_));
55 *al.tail_ = atom_list_;
56 atom_list_ = al.head_;
62 Molecule::add_atom (Atom const *al)
64 Atom *a = new Atom(*al);
66 atom_list_ = new Killing_cons<Atom> (a, atom_list_);
70 Molecule::operator=(Molecule const & src)
72 if (&src == this) return;
79 Molecule::Molecule (Molecule const &s)
85 Molecule::~Molecule ()
91 Molecule::print() const
97 for (Axis i=X_AXIS; i < NO_AXES; incr (i))
98 DOUT << axis_name_str (i) << " = " << dim_[i].str ();
103 Molecule::do_center (Axis a)
105 Interval i (extent (a));
106 translate_axis (-i.center (), a);
109 Molecule::Molecule ()
111 dim_ = Box (Interval(0,0),Interval( 0,0 ));
117 Molecule::add_at_edge (Axis a, Direction d, Molecule const &m, Real padding)
119 Real my_extent= dim_[a][d];
121 Real offset = my_extent - m.extent ()[a][-d];
123 toadd.translate_axis (offset + d * padding, a);
124 add_molecule (toadd);