2 bow.cc -- implement Bow
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 Jan Nieuwenhuizen <janneke@gnu.org>
12 #include "paper-def.hh"
13 #include "molecule.hh"
20 dy_f_drul_
[LEFT
] = dy_f_drul_
[RIGHT
] = 0.0;
21 dx_f_drul_
[LEFT
] = dx_f_drul_
[RIGHT
] = 0.0;
25 Bow::do_brew_molecule_p () const
27 Real thick
= paper_l ()->get_var ("slur_thickness");
28 Array
<Offset
> c
= get_controls ();
29 Real dy
= c
[3].y () - c
[0].y ();
32 SCM d
= get_elt_property (dashed_scm_sym
);
34 a
= lookup_l ()->slur (c
, thick
);
36 a
= lookup_l ()->dashed_slur (c
, thick
, gh_scm2int (SCM_CDR(d
)));
38 if (check_debug
&& !monitor
->silent_b ("Bow"))
41 cout
<< "******" << i
++ << "******" << endl
;
42 cout
<< "c0.y: " << c
[0].y () << endl
;
43 cout
<< "c3.y: " << c
[3].y () << endl
;
44 cout
<< "dy: " << dy
<< endl
;
45 cout
<< "dy_f_l: " << dy_f_drul_
[LEFT
] << endl
;
46 cout
<< "dy_f_r: " << dy_f_drul_
[RIGHT
] << endl
;
47 cout
<< "dy_f: " << dy_f_drul_
[RIGHT
] - dy_f_drul_
[LEFT
] << endl
;
49 return new Molecule (a
);
55 Real dy
= dy_f_drul_
[RIGHT
] - dy_f_drul_
[LEFT
];
56 Real dx
= extent(X_AXIS
).length ();
58 return Offset (dx
/ 2, dy
);
62 Ugh. Control points are too crude measures.
65 Bow::do_height () const
68 Array
<Offset
> c (get_controls());
69 for (int i
=0; i
< c
.size (); i
++)
71 Real y
= c
[i
][Y_AXIS
];
72 iv
.unite (Interval (y
,y
));
78 Bow::curve_extent_drul () const
80 Bezier_bow
b (paper_l ());
81 b
.set (get_encompass_offset_arr (), dir_
);
83 return b
.curve_extent_drul_
;
87 Bow::get_controls () const
89 Bezier_bow
b (paper_l ());
90 b
.set (get_encompass_offset_arr (), dir_
);
92 Array
<Offset
> controls
;
93 controls
.set_size (8);
94 for (int i
= 0; i
< 4; i
++)
95 controls
[i
] = b
.control_
[i
];
96 for (int i
= 0; i
< 4; i
++)
97 controls
[i
+ 4] = b
.return_
[i
];
102 Bow::get_encompass_offset_arr () const
104 Array
<Offset
> offset_arr
;
105 offset_arr
.push (Offset (dx_f_drul_
[LEFT
], dy_f_drul_
[LEFT
]));
106 offset_arr
.push (Offset (do_width ().length () + dx_f_drul_
[RIGHT
],