X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fskyline.hh;h=bb637a21bb4a56710c188e53dbdcb136a49b629a;hb=94ecf2d9c75797163920353c5199d02c43e0a4e6;hp=a5284fbb11e3e88b1372b7f2b242fc7ed13c1ee4;hpb=546e3e78ca8edfb057d4b8262d36793800c0d263;p=lilypond.git diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index a5284fbb11..bb637a21bb 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -1,39 +1,51 @@ /* - skyline.hh -- declare Skyline class. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2006--2011 Joe Neeman - (c) 2006 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 + 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 SKYLINE_HH #define SKYLINE_HH -#include - +#include "lily-proto.hh" #include "axis.hh" #include "box.hh" #include "interval.hh" #include "direction.hh" #include "std-vector.hh" -#include "stencil.hh" +#include "smobs.hh" + +#include struct Building { - Interval iv_; - Real start_height_; - Real end_height_; + Real end_; + Real y_intercept_; + Real slope_; - /* fixme: variable naming */ - Real m_; - Real b_; - - Building (Real start, Real start_height, Real end_height, Real end, Real max_slope); + void precompute (Real start, Real start_height, Real end_height, Real end); + Building (Real start, Real start_height, Real end_height, Real end); + Building (Box const &b, Real horizon_padding, Axis a, Direction d); + void print () const; Real height (Real x) const; - Real intersection (Building const &other) const; - void leading_part (Real chop, Real h); - bool obstructs (Building const &other) const; + Real intersection_x (Building const &other) const; + void leading_part (Real chop); + bool conceals (Building const &other, Real x) const; + Building sloped_neighbour (Real start, Real horizon_padding, Direction d) const; }; class Skyline @@ -41,27 +53,37 @@ class Skyline private: list buildings_; Direction sky_; - Real max_slope_; + void internal_merge_skyline (list*, list*, list *const result); - void internal_build_skyline (list*, - list *const result); - bool is_legal_skyline () const; + list internal_build_skyline (list*, Real, Axis, Direction); + + DECLARE_SIMPLE_SMOBS(Skyline); public: Skyline (); + Skyline (Skyline const &src); + Skyline (Skyline const &src, Real horizon_padding, Axis a); Skyline (Direction sky); - Skyline (vector const &bldgs, Axis a, Direction sky); + Skyline (vector const &bldgs, Real horizon_padding, Axis a, Direction sky); + Skyline (Box const &b, Real horizon_padding, Axis a, Direction sky); + vector to_points (Axis) const; void merge (Skyline const &); - void insert (Box const &, Axis); + void insert (Box const &, Real horizon_padding, Axis); + void print () const; + void print_points () const; void raise (Real); - Real distance (Skyline const &) const; + void shift (Real); + Real distance (Skyline const &, Real horizon_padding = 0) const; Real height (Real airplane) const; Real max_height () const; void set_minimum_height (Real height); - Stencil stencil (); + void clear (); + bool is_empty () const; }; +extern bool debug_skylines; + #endif /* SKYLINE_HH */