X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fspring.hh;h=9c6c41827923338f1de94eee4664940bf6a7ad1b;hb=3e89af67bc6a9e3fd5d9a28db256608ac79510e0;hp=9d8f341e58b2e0eb84fc9cf97be7574e705f434c;hpb=d9b43b93f2c885409bafdb157138158f65cc49aa;p=lilypond.git diff --git a/lily/include/spring.hh b/lily/include/spring.hh index 9d8f341e58..9c6c418279 100644 --- a/lily/include/spring.hh +++ b/lily/include/spring.hh @@ -1,43 +1,70 @@ -/* - spring.hh -- declare Spring, Column_spring - - source file of the GNU LilyPond music typesetter - - (c) 1999--2002 Han-Wen Nienhuys - - */ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1999--2015 Han-Wen Nienhuys + + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ #ifndef SPRING_HH #define SPRING_HH #include "lily-proto.hh" -#include "drul-array.hh" - -struct Column_spring { - Paper_column *other_l_; - Real distance_f_; - - /* - TODO: make 2 strengths: one for stretching, and one for shrinking. - */ - Real strength_f_; - - Column_spring (); -}; +#include "smobs.hh" + +class Spring : public Simple_smob +{ +public: + static SCM equal_p (SCM, SCM); + static const char type_p_name_[]; +private: + Real distance_; + Real min_distance_; + + Real inverse_stretch_strength_; + Real inverse_compress_strength_; -struct Spring{ - Drul_array item_l_drul_; - Real distance_f_; + Real blocking_force_; - /* - TODO: make 2 strengths: one for stretching, and one for shrinking. - */ - Real strength_f_; - void add_to_cols (); - void set_to_cols (); + void update_blocking_force (); + +public: Spring (); + Spring (Real distance, Real min_distance); + + Real distance () const {return distance_;} + Real min_distance () const {return min_distance_;} + Real inverse_stretch_strength () const {return inverse_stretch_strength_;} + Real inverse_compress_strength () const {return inverse_compress_strength_;} + Real blocking_force () const {return blocking_force_;} + + Real length (Real f) const; + + void set_distance (Real); + void set_min_distance (Real); + void ensure_min_distance (Real); + void set_inverse_stretch_strength (Real); + void set_inverse_compress_strength (Real); + void set_blocking_force (Real); + void set_default_strength (); + void set_default_compress_strength (); + void set_default_stretch_strength (); + + void operator *= (Real); + bool operator > (Spring const &) const; }; +Spring merge_springs (std::vector const &springs); #endif /* SPRING_HH */ -