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

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

Issue 5626052: Gets vertical skylines from grob stencils (Closed)
Left Patch Set: Adds support for path stencils. Created 13 years, 1 month 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);
77 }
78
79 Real
80 Skyline_pair::left () const
81 {
82 return min (skylines_[UP].left (), skylines_[DOWN].left ());
83 }
84
85 Real
86 Skyline_pair::right () const
87 {
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 ));
60 } 123 }
61 124
62 void 125 void
63 Skyline_pair::merge (Skyline_pair const &other) 126 Skyline_pair::merge (Skyline_pair const &other)
64 { 127 {
65 skylines_[UP].merge (other[UP]); 128 skylines_[UP].merge (other[UP]);
66 skylines_[DOWN].merge (other[DOWN]); 129 skylines_[DOWN].merge (other[DOWN]);
67 } 130 }
68 131
69 void 132 void
70 Skyline_pair::print () const 133 Skyline_pair::print () const
71 { 134 {
72 skylines_[UP].print (); 135 skylines_[UP].print ();
73 skylines_[DOWN].print (); 136 skylines_[DOWN].print ();
74 } 137 }
75 138
76 void 139 void
77 Skyline_pair::print_points () const 140 Skyline_pair::print_points () const
78 { 141 {
79 skylines_[UP].print_points (); 142 skylines_[UP].print_points ();
80 skylines_[DOWN].print_points (); 143 skylines_[DOWN].print_points ();
81 } 144 }
82 145
83 bool 146 bool
84 Skyline_pair::is_empty () const 147 Skyline_pair::is_empty () const
85 { 148 {
86 return skylines_[UP].is_empty () 149 return skylines_[UP].is_empty ()
87 && 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 ();
88 } 158 }
89 159
90 Skyline & 160 Skyline &
91 Skyline_pair::operator [] (Direction d) 161 Skyline_pair::operator [] (Direction d)
92 { 162 {
93 return skylines_[d]; 163 return skylines_[d];
94 } 164 }
95 165
96 Skyline const & 166 Skyline const &
97 Skyline_pair::operator [] (Direction d) const 167 Skyline_pair::operator [] (Direction d) const
(...skipping 29 matching lines...) Expand all
127 Direction dir = robust_scm2dir (dir_scm, UP); 197 Direction dir = robust_scm2dir (dir_scm, UP);
128 198
129 if (dir == CENTER) 199 if (dir == CENTER)
130 { 200 {
131 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"));
132 dir = UP; 202 dir = UP;
133 } 203 }
134 204
135 return (*sp)[dir].smobbed_copy (); 205 return (*sp)[dir].smobbed_copy ();
136 } 206 }
LEFTRIGHT

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