X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fskyline.cc;h=bf95fe35418153ce65237a415a29c4d4553ecde0;hb=0d1e65a22f4689d6f497243cf65df1a8d3fc8561;hp=1d6e4d5e78e81c2efb24b88a54ddae297035e4fa;hpb=01df8ad908c92687d0c352e5ad5f067e52809423;p=lilypond.git diff --git a/lily/skyline.cc b/lily/skyline.cc index 1d6e4d5e78..bf95fe3541 100644 --- a/lily/skyline.cc +++ b/lily/skyline.cc @@ -213,6 +213,7 @@ Skyline::normalize () { bool last_empty = false; list::iterator i; + for (i = buildings_.begin (); i != buildings_.end (); i++) { if (last_empty && i->y_intercept_ == -infinity_f) @@ -330,11 +331,13 @@ single_skyline (Building b, list *const ret) { if (b.end_ > b.start_ + EPS) { - ret->push_back (Building (-infinity_f, -infinity_f, - -infinity_f, b.start_)); + if (b.start_ != -infinity_f) + ret->push_back (Building (-infinity_f, -infinity_f, + -infinity_f, b.start_)); ret->push_back (b); - ret->push_back (Building (b.end_, -infinity_f, - -infinity_f, infinity_f)); + if (b.end_ != infinity_f) + ret->push_back (Building (b.end_, -infinity_f, + -infinity_f, infinity_f)); } else { @@ -553,6 +556,7 @@ Skyline::Skyline (Box const &b, Axis horizon_axis, Direction sky) sky_ = sky; Building front (b, horizon_axis, sky); single_skyline (front, &buildings_); + normalize (); } void @@ -766,6 +770,12 @@ Skyline::max_height () const return sky_ * ret; } +Direction +Skyline::direction () const +{ + return sky_; +} + Real Skyline::left () const { @@ -922,3 +932,12 @@ Skyline::get_height (SCM skyline_scm, SCM x_scm) Real x = robust_scm2double (x_scm, 0.0); return scm_from_double (Skyline::unsmob (skyline_scm)->height (x)); } + +LY_DEFINE (ly_skyline_empty_p, "ly:skyline-empty?", + 1, 0, 0, (SCM sky), + "Return whether @var{sky} is empty.") +{ + Skyline *s = Skyline::unsmob (sky); + LY_ASSERT_SMOB (Skyline, sky, 1); + return scm_from_bool (s->is_empty ()); +}