Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(7)

Delta Between Two Patch Sets: lily/skyline-pair.cc

Issue 5626052: Gets vertical skylines from grob stencils (Closed)
Left Patch Set: Caches certain grobs' vertical-skylines Created 13 years ago
Right Patch Set: Run astyle on c++ files Created 12 years, 6 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« lily/skyline.cc ('K') | « lily/skyline.cc ('k') | lily/slur.cc » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 /* 1 /*
2 This file is part of LilyPond, the GNU music typesetter. 2 This file is part of LilyPond, the GNU music typesetter.
3 3
4 Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org> 4 Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
5 5
6 6
7 LilyPond is free software: you can redistribute it and/or modify 7 LilyPond is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or 9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
(...skipping 10 matching lines...) Expand all
21 #include "skyline-pair.hh" 21 #include "skyline-pair.hh"
22 22
23 #include "international.hh" 23 #include "international.hh"
24 #include "ly-smobs.icc" 24 #include "ly-smobs.icc"
25 25
26 Skyline_pair::Skyline_pair () 26 Skyline_pair::Skyline_pair ()
27 : skylines_ (Skyline (DOWN), Skyline (UP)) 27 : skylines_ (Skyline (DOWN), Skyline (UP))
28 { 28 {
29 } 29 }
30 30
31 Skyline_pair::Skyline_pair (vector<Box> const &boxes, Real padding, Axis a) 31 Skyline_pair::Skyline_pair (vector<Box> const &boxes, Axis a)
32 : skylines_ (Skyline (boxes, padding, a, DOWN), Skyline (boxes, padding, a, UP )) 32 : skylines_ (Skyline (boxes, a, DOWN), Skyline (boxes, a, UP))
33 { 33 {
34 } 34 }
35 35
36 Skyline_pair::Skyline_pair (Box const &b, Real padding, Axis a) 36 Skyline_pair::Skyline_pair (vector<Drul_array<Offset> > const &buildings, Axis a )
37 : skylines_ (Skyline (b, padding, a, DOWN), Skyline (b, padding, a, UP)) 37 : skylines_ (Skyline (buildings, a, DOWN), Skyline (buildings, a, UP))
38 {
39 }
40
41 Skyline_pair::Skyline_pair (vector<Skyline_pair> const &skypairs)
42 : skylines_ (Skyline (skypairs, DOWN), Skyline (skypairs, UP))
43 {
44 }
45
46 Skyline_pair::Skyline_pair (Box const &b, Axis a)
47 : skylines_ (Skyline (b, a, DOWN), Skyline (b, a, UP))
38 { 48 {
39 } 49 }
40 50
41 void 51 void
42 Skyline_pair::raise (Real r) 52 Skyline_pair::raise (Real r)
43 { 53 {
44 skylines_[UP].raise (r); 54 skylines_[UP].raise (r);
45 skylines_[DOWN].raise (r); 55 skylines_[DOWN].raise (r);
46 } 56 }
47 57
48 void 58 void
59 Skyline_pair::deholify ()
60 {
61 skylines_[UP].deholify ();
62 skylines_[DOWN].deholify ();
63 }
64
65 void
49 Skyline_pair::shift (Real r) 66 Skyline_pair::shift (Real r)
50 { 67 {
51 skylines_[UP].shift (r); 68 skylines_[UP].shift (r);
52 skylines_[DOWN].shift (r); 69 skylines_[DOWN].shift (r);
53 } 70 }
54 71
55 void 72 void
56 Skyline_pair::insert (Box const &b, Real padding, Axis a) 73 Skyline_pair::insert (Box const &b, Axis a)
57 { 74 {
58 skylines_[UP].insert (b, padding, a); 75 skylines_[UP].insert (b, a);
59 skylines_[DOWN].insert (b, padding, a); 76 skylines_[DOWN].insert (b, a);
60 } 77 }
61 78
62 Real 79 Real
63 Skyline_pair::left () 80 Skyline_pair::left () const
64 { 81 {
65 return min (skylines_[UP].left (), skylines_[DOWN].left ()); 82 return min (skylines_[UP].left (), skylines_[DOWN].left ());
66 } 83 }
67 84
68 Real 85 Real
69 Skyline_pair::right () 86 Skyline_pair::right () const
70 { 87 {
71 return max (skylines_[UP].right (), skylines_[DOWN].right ()); 88 return max (skylines_[UP].right (), skylines_[DOWN].right ());
89 }
90
91 // This function comes with the same caveats as smallest_shift:
92 // if the skylines are not contiguous, we may report false
93 // intersections.
94 bool
95 Skyline_pair::intersects (Skyline_pair const &other) const
96 {
97 return skylines_[UP].distance (other[DOWN]) > 0
98 && other[UP].distance (skylines_[DOWN]) > 0;
99 }
100
101 Real
102 Skyline_pair::smallest_shift (Skyline_pair const &other, Direction d,
103 Real h_pad, Real v_pad)
104 {
105 // If skylines_[UP] avoids other[DOWN] or skylines_[DOWN] avoids
106 // other[UP] then we will not intersect.
107 // Note that this is not guaranteed to return the smallest shift
108 // if one Skyline_pair is not connected: the smallest_shift left
109 // in the case of
110 // AAA
111 // BBBBBB
112 // AAA
113 // will result in
114 // AAA
115 // BBBBBB
116 // AAA
117 // even though the originals did not collide. If it becomes necessary,
118 // this case could be handled by splitting the Skyline_pairs up into
119 // their connected components.
120
121 return d * min (d * skylines_[UP].smallest_shift (other[DOWN], d, h_pad, v_pad ),
122 d * skylines_[DOWN].smallest_shift (other[UP], d, h_pad, v_pad ));
72 } 123 }
73 124
74 void 125 void
75 Skyline_pair::merge (Skyline_pair const &other) 126 Skyline_pair::merge (Skyline_pair const &other)
76 { 127 {
77 skylines_[UP].merge (other[UP]); 128 skylines_[UP].merge (other[UP]);
78 skylines_[DOWN].merge (other[DOWN]); 129 skylines_[DOWN].merge (other[DOWN]);
79 } 130 }
80 131
81 void 132 void
82 Skyline_pair::rebuild_skyline_padding (Real horizon_padding, Axis horizon_axis)
83 {
84 skylines_[UP].rebuild_skyline_padding (horizon_padding, horizon_axis, UP);
85 skylines_[DOWN].rebuild_skyline_padding (horizon_padding, horizon_axis, DOWN);
86 }
87
88 void
89 Skyline_pair::print () const 133 Skyline_pair::print () const
90 { 134 {
91 skylines_[UP].print (); 135 skylines_[UP].print ();
92 skylines_[DOWN].print (); 136 skylines_[DOWN].print ();
93 } 137 }
94 138
95 void 139 void
96 Skyline_pair::print_points () const 140 Skyline_pair::print_points () const
97 { 141 {
98 skylines_[UP].print_points (); 142 skylines_[UP].print_points ();
99 skylines_[DOWN].print_points (); 143 skylines_[DOWN].print_points ();
100 } 144 }
101 145
102 bool 146 bool
103 Skyline_pair::is_empty () const 147 Skyline_pair::is_empty () const
104 { 148 {
105 return skylines_[UP].is_empty () 149 return skylines_[UP].is_empty ()
106 && skylines_[DOWN].is_empty (); 150 && skylines_[DOWN].is_empty ();
151 }
152
153 bool
154 Skyline_pair::is_singleton () const
155 {
156 return skylines_[UP].is_singleton ()
157 && skylines_[DOWN].is_singleton ();
107 } 158 }
108 159
109 Skyline & 160 Skyline &
110 Skyline_pair::operator [] (Direction d) 161 Skyline_pair::operator [] (Direction d)
111 { 162 {
112 return skylines_[d]; 163 return skylines_[d];
113 } 164 }
114 165
115 Skyline const & 166 Skyline const &
116 Skyline_pair::operator [] (Direction d) const 167 Skyline_pair::operator [] (Direction d) const
(...skipping 29 matching lines...) Expand all
146 Direction dir = robust_scm2dir (dir_scm, UP); 197 Direction dir = robust_scm2dir (dir_scm, UP);
147 198
148 if (dir == CENTER) 199 if (dir == CENTER)
149 { 200 {
150 warning (_f ("direction must not be CENTER in ly:skyline-pair::skyline")); 201 warning (_f ("direction must not be CENTER in ly:skyline-pair::skyline"));
151 dir = UP; 202 dir = UP;
152 } 203 }
153 204
154 return (*sp)[dir].smobbed_copy (); 205 return (*sp)[dir].smobbed_copy ();
155 } 206 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b