%
% Functions for direct and embedded PostScript
-/blot-diameter { lilypondpaperblotdiameter } bind def
+
+/set_tex_dimen {
+ cvr def
+} bind def
+
+
/euclidean_length
{
% FIXME. translate to middle of box.
% Nice rectangle with rounded corners
-% FIXME: linewidth hardcoded. check: too round?
/draw_box % breapth width depth height
{
- %% FIXME: hardcoded
- currentdict /testing known {
+% currentdict /testing known {
%% real thin lines for testing
/blot 0.005 def
- }{
- /blot blot-diameter def
- } ifelse
+% }{
+% /blot blot-diameter def
+% } ifelse
0 setlinecap
blot setlinewidth
blot 2 div sub /h exch def
blot 2 div sub /d exch def
-
- %% UGH huh?
- %% Where does this correction come from?
- %% Why don't we need this in x direction?
- h blot 2 div sub /h exch def
- d blot 2 div sub /d exch def
-
blot 2 div sub /w exch def
blot 2 div sub /b exch def
} ifelse
} bind def
-% Nice beam with rounded corners
-% FIXME: linewidth hardcoded. check: too round?
-/draw_beam % slope width thick
+
+/draw_round_box % breapth width depth height blot
{
- %% FIXME: hardcoded
+ /blot exch def
+
+ 0 setlinecap
+ blot setlinewidth
+ 1 setlinejoin
+
+ blot 2 div sub /h exch def
+ blot 2 div sub /d exch def
+ blot 2 div sub /w exch def
+ blot 2 div sub /b exch def
+
+ b neg d neg moveto
+ b w add 0 rlineto
+ 0 d h add rlineto
+ b w add neg 0 rlineto
+ 0 d h add neg rlineto
+
currentdict /testing known {
- %% real thin lines for testing
- /blot 0.005 def
+ %% outline only, for testing:
+ stroke
}{
- /blot blot-diameter def
+ closepath gsave stroke grestore fill
} ifelse
+} bind def
+
+% Nice beam with rounded corners
+/draw_beam % slope width thick blot
+{
+ /blot exch def
blot setlinewidth
0 setlinecap
1 setlinejoin
- blot 2 mul sub /t exch def
- blot 2 mul sub /w exch def
+ blot sub /t exch def
+ blot sub /w exch def
w mul /h exch def
- blot t 2 div neg moveto
+ blot 2 div t 2 div neg moveto
w h rlineto
0 t rlineto
w neg h neg rlineto
} ifelse
} bind def
+/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot
+{
+ /blot exch def
+
+ 0 setlinecap
+ blot setlinewidth
+ 1 setlinejoin
+
+ /points exch def
+ 2 copy
+ moveto
+ 1 1 points {pop lineto} for
+ currentdict /testing known {
+ %% outline only, for testing:
+ stroke
+ }{
+ closepath gsave stroke grestore fill
+ } ifelse
+} bind def
+
/draw_repeat_slash % width slope thick
{
1 setlinecap
closepath fill
} bind def
-/draw_hairpin % width start_h end_h thick
-{
- 1 setlinecap
- 1 setlinejoin
- setlinewidth
- /end_h exch def
- /start_h exch def
- /wid exch def
- 0 start_h moveto
- wid end_h lineto
- stroke
- 0 start_h neg moveto
- wid end_h neg lineto
- stroke
+/draw_white_text % text scale font
+{
+ %font
+ findfont
+ %scale
+ exch scalefont setfont
+ 1 setgray
+ 0 0 moveto
+ %-0.05 -0.05 moveto
+ % text
+ show
} bind def
-/draw_tuplet % height gap dx dy thick dir
-{
- 1 setlinecap
- 1 setlinejoin
-
- /dir exch def
- setlinewidth
- /tuplet_dy exch def
- /tuplet_dx exch def
- /tuplet_gapx exch def
- /tuplet_h exch def
- tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def
-
-
- 0 tuplet_h neg dir mul moveto
- 0 0 lineto
- tuplet_dx tuplet_gapx sub 2 div
- tuplet_dy tuplet_gapy sub 2 div lineto
- tuplet_dx tuplet_gapx add 2 div
- tuplet_dy tuplet_gapy add 2 div moveto
- tuplet_dx tuplet_dy lineto
- tuplet_dx tuplet_dy tuplet_h dir neg mul add lineto
- stroke
-} bind def
-
/draw_ez_ball % ch letter_col ball_col font
{
% font
show
} bind def
-/draw_volta % h w thick vert_start vert_end
-{
- 1 setlinecap
- 1 setlinejoin
-
- /vert_end exch def
- /vert_start exch def
- setlinewidth
- /volta_w exch def
- /volta_h exch def
- vert_start 0 eq {
- 0 0 moveto
- 0 volta_h lineto
- } if
- 0 volta_h moveto
- volta_w volta_h lineto
- vert_end 0 eq {
- volta_w 0 lineto
- } if
- stroke
-} bind def
-
% this is for drawing slurs.
/draw_bezier_sandwich % thickness controls
-{
+{
+ % round ending and round beginning
+ 1 setlinejoin 1 setlinecap
setlinewidth
moveto
curveto
lineto
- curveto
+ curveto
+ closepath
gsave
fill
grestore
stroke
} bind def
+/draw_dot % x1 y2 R
+{
+% 0 360 arc fill stroke
+ 0 360 arc closepath fill stroke
+} bind def
+
+/draw_white_dot % x1 y2 R
+{
+% 0 360 arc fill stroke
+ 0 360 arc closepath % fill stroke
+gsave
+ 1 setgray fill
+grestore
+% 0 360 arc closepath % fill stroke
+ 0.05 setlinewidth 0 setgray stroke
+} bind def
+
/draw_dashed_line % dash thickness dx dy
{
1 setlinecap
} bind def
+% a b c d subvec == a-c b-d
+/subvec {
+ 3 2 roll exch sub
+ 3 1 roll
+ sub exch
+} bind def
+
+
+% centre? zzwidth zzheight thickness x0 y0 x1 y1
+/draw_zigzag_line {
+ newpath
+ 6 dict begin
+
+ 4 2 roll % zzuw zzh th x1 y1 x0 y0
+ 2 copy
+ moveto
+ subvec % zzuw zzh th dx dy
+
+ 2 copy euclidean_length /l exch def
+ l div /uy exch def
+ l div /ux exch def
+ setlinewidth
+ /zzh exch def
+ l exch div round /n exch def
+ n 0 gt { %if
+ /zzw l n 2 mul div def
+ {
+ uy zzh mul 2 div ux zzh mul -2 div rmoveto
+ } if
+ 1 1 n {
+ ux zzw mul uy zzh mul sub
+ uy zzw mul ux zzh mul add
+ rlineto
+ ux zzw mul uy zzh mul add
+ uy zzw mul ux zzh mul sub
+ rlineto
+ } bind for
+ }{ %else
+ pop
+ ux l mul uy l mul rlineto
+ } ifelse
+ stroke
+ end
+} bind def
/bracket_traject
{
stroke
} bind def
+%end music-drawing-routines.ps