X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fspring.cc;h=60bc0aec77ca736084ed1afd18430b6a4bc0d9ea;hb=c58b9bd118958423656e674c25d940cdec71f58a;hp=84ad56d8f1a12b39321836a7b44d2acc33124817;hpb=b7a0cffbf9d1069860368f289a5b50e9d1d90ba8;p=lilypond.git diff --git a/lily/spring.cc b/lily/spring.cc index 84ad56d8f1..60bc0aec77 100644 --- a/lily/spring.cc +++ b/lily/spring.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2007--2009 Joe Neeman + Copyright (C) 2007--2011 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -51,9 +51,11 @@ Spring::update_blocking_force () blocking_force_ = (min_distance_ - distance_) / inverse_compress_strength_; // If the spring is fixed, it's not clear what the natural value - // of blocking_force_ would be. -infinity_f works fine for now. + // of blocking_force_ would be (because it always blocks). + // -infinity_f works fine for now. + // If inverse_stretch_strength > 0, the spring is not fixed (because it can stretch). if (isnan (blocking_force_) || blocking_force_ == infinity_f) - blocking_force_ = -infinity_f; + blocking_force_ = (inverse_stretch_strength_ > 0) ? 0.0 : -infinity_f; if (blocking_force_ >= 0) inverse_compress_strength_ = 0; @@ -174,12 +176,24 @@ Spring::set_blocking_force (Real f) void Spring::set_default_strength () +{ + set_default_stretch_strength (); + set_default_compress_strength (); +} + +void +Spring::set_default_compress_strength () { inverse_compress_strength_ = (distance_ >= min_distance_) ? distance_ - min_distance_ : 0; - inverse_stretch_strength_ = distance_; update_blocking_force (); } +void +Spring::set_default_stretch_strength () +{ + inverse_stretch_strength_ = distance_; +} + Real Spring::length (Real f) const {