X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fskyline.hh;h=bdb8be78131f448921c1459413dae4b2417635c9;hb=058370efc7e9710f149d0f444328bb1fcd7bdec1;hp=638fd6d3f3b4c688634491a7d9ceee60e8c4b0a6;hpb=3ef893f1fe182e9f6cf5841cbff0706789bd3361;p=lilypond.git diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index 638fd6d3f3..bdb8be7813 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2011 Joe Neeman + Copyright (C) 2006--2014 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 @@ -32,20 +32,21 @@ struct Building { + Real start_; Real end_; Real y_intercept_; Real 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); + Building (Box const &b, 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; + Real shift_to_intersect (Real x, Real y) const; }; class Skyline @@ -54,44 +55,53 @@ private: list buildings_; Direction sky_; - void internal_merge_skyline (list*, list*, - list *const result); - list internal_build_skyline (list*, Real, Axis, Direction); + void internal_merge_skyline (list *, list *, + list *result) const; + list internal_build_skyline (list *) const; + Real internal_distance (Skyline const &, Real horizon_padding, Real *touch_point) const; + Real internal_distance (Skyline const &, Real *touch_point) const; + void normalize (); 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, Real horizon_padding, Axis a, Direction sky); - Skyline (Box const &b, Real horizon_padding, Axis a, Direction sky); + Skyline (vector const &bldgs, Axis a, Direction sky); + Skyline (vector > const &bldgs, Axis a, Direction sky); + Skyline (vector const &skypairs, Direction sky); + Skyline (Box const &b, Axis a, Direction sky); vector to_points (Axis) const; + void deholify (); void merge (Skyline const &); - void insert (Box const &, Real horizon_padding, Axis); + void insert (Box const &, Axis); void print () const; void print_points () const; void raise (Real); void shift (Real); Real distance (Skyline const &, Real horizon_padding = 0) const; Real touching_point (Skyline const &, Real horizon_padding = 0) const; + Real shift_to_avoid (Skyline const &other, Real, Direction d, Real horizon_padding = 0); + Real raise_to_avoid (Skyline const &other, Real, Direction d, Real horizon_padding = 0); + Drul_array shifts_to_avoid_intersection (Skyline const &, Real horizon_padding = 0) const; + Interval raises_to_avoid_intersection (Skyline const &, Real horizon_padding = 0) const; Real height (Real airplane) const; Real max_height () const; Real max_height_position () const; + Real left () const; + Real right () const; + Direction direction () const; void set_minimum_height (Real height); void clear (); bool is_empty () const; + Skyline padded (Real horizon_padding) const; DECLARE_SCHEME_CALLBACK (get_touching_point, (SCM, SCM, SCM)); DECLARE_SCHEME_CALLBACK (get_distance, (SCM, SCM, SCM)); DECLARE_SCHEME_CALLBACK (get_max_height, (SCM)); DECLARE_SCHEME_CALLBACK (get_max_height_position, (SCM)); DECLARE_SCHEME_CALLBACK (get_height, (SCM, SCM)); - -protected: - Real internal_distance (Skyline const &, Real horizon_padding, Real *touch_point) const; }; extern bool debug_skylines;