X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fskyline.hh;h=b84a5de953bcdafe0b9fb7c0c6500717ec901faa;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=f24781a7505289782746e069ed7a5bacb501f501;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index f24781a750..b84a5de953 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -1,41 +1,76 @@ /* - skyline.hh -- declare Skyline_entry and funcbs. + skyline.hh -- declare Skyline class. source file of the GNU LilyPond music typesetter - (c) 2002--2006 Han-Wen Nienhuys + (c) 2006--2008 Joe Neeman */ #ifndef SKYLINE_HH #define SKYLINE_HH -#include "std-vector.hh" +#include "lily-proto.hh" +#include "axis.hh" #include "box.hh" +#include "interval.hh" +#include "direction.hh" +#include "std-vector.hh" +#include "smobs.hh" + +#include + +struct Building +{ + Real end_; + Real y_intercept_; + Real slope_; -struct Skyline_entry + 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_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 { - Interval width_; - Real height_; - Skyline_entry (); - Skyline_entry (Interval, Real); +private: + list buildings_; + Direction sky_; + + void internal_merge_skyline (list*, list*, + list *const result); + list internal_build_skyline (list*, Real, Axis, Direction); + + DECLARE_SIMPLE_SMOBS(Skyline); + +public: + Skyline (); + Skyline (Skyline const &src); + Skyline (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 &, Real horizon_padding, Axis); + void print () const; + void print_points () const; + void raise (Real); + void shift (Real); + Real distance (Skyline const &) const; + Real height (Real airplane) const; + Real max_height () const; + void set_minimum_height (Real height); + bool is_empty () const; }; -void -merge_skyline (std::vector *a1, std::vector const &a2, - Direction); -void insert_extent_into_skyline (std::vector *line, Box b, Axis line_axis, - Direction d); -std::vector -extents_to_skyline (std::vector const &extents, Axis a, Direction d); -std::vector empty_skyline (Direction d); -void heighten_skyline (std::vector *buildings, Real ground); -Real -skyline_meshing_distance (std::vector const &buildings, - std::vector const &clouds); - -Real -skyline_height (std::vector const &buildings, - Real airplane, Direction sky_dir); +extern bool debug_skylines; #endif /* SKYLINE_HH */