source file of the GNU LilyPond music typesetter
- (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ (c) 1999--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#ifndef SIMPLE_SPACER_HH
#include "std-vector.hh"
#include "lily-proto.hh"
+#include "spring.hh"
#include "smobs.hh"
-struct Spring_description
-{
- Real ideal_;
- Real inverse_hooke_;
- Real block_force_;
-
- Real length (Real force) const;
- Spring_description ();
-
- bool is_sane () const;
-
- bool operator> (const Spring_description &s) const
- {
- return block_force_ > s.block_force_;
- }
-
- bool operator< (const Spring_description &s) const
- {
- return block_force_ < s.block_force_;
- }
-};
-
class Simple_spacer
{
public:
void solve (Real line_len, bool ragged);
void add_rod (int l, int r, Real dist);
- void add_spring (Real, Real);
+ void add_spring (Spring const&);
Real range_ideal_len (int l, int r) const;
- Real range_stiffness (int l, int r) const;
+ Real range_stiffness (int l, int r, bool stretch) const;
Real configuration_length (Real) const;
vector<Real> spring_positions () const;
Real force () const;
+ Real force_penalty (bool ragged) const;
bool fits () const;
DECLARE_SIMPLE_SMOBS (Simple_spacer);
Real compress_line ();
Real rod_force (int l, int r, Real dist);
- vector<Spring_description> springs_;
+ vector<Spring> springs_;
Real line_len_;
Real force_;
bool ragged_;