% This file defines the softball symbols
% It is derived from Knuth's symbol.mf file of a \TeX\ math symbol font.
% Character codes '000--'004,'017 are generated.

font_coding_scheme:="TeX math symbols";
mode_setup; font_setup;

%currenttransform:=identity yscaled aspect_ratio shifted (0,-1pt) scaled 10;%granularity;
currenttransform:=identity shifted (0,4u#) yscaled aspect_ratio scaled granularity;

cmchar "SoftBall";
%beginchar(oct"017",9u#,v_center(7u#));
beginchar(oct"017",12u#,v_center(9u#));
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x6=hround u; x2=w-x6; top y8=h; y2=math_axis; circle_points;
filldraw z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
  ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle;  % circle and interior
z11=.7[z4,z5];
z12=.15[z3,z7];
%z13=1.1[z5,.5[z2,z8]];
z13=1[z5,.5[z2,z8]];
z14=.92[z3,z7];
z15=z6;
path p;
pair dpoint;
p=z11{z3-z11}..z12..z13..z14{z6-z8}..z15;
l:=length p;
pickup pencircle scaled bar;
for i=0 step (l/15) until l:
  pair cen, lef, rgh;
  dpoint:=unitvector(direction i of p);
  cen:=point i of p;
  lef:=cen shifted (1.5*(dpoint rotated 60));
  rgh:=cen shifted (1.5*(dpoint rotated -60));
  undraw lef--rgh;
endfor;
pickup pencircle scaled rule_thickness;
undraw p;
labels(1,2,3,4,5,6,7,8); endchar;

% Softball bat

bat_a_height#:= 21/7u#;
bat_a_width#:= .5bat_a_height#;
bat_a_vark#:= .25bat_a_height#;
bat_a_hark#:= .18bat_a_height#;
bat_a_vcorner#:= bat_a_hcorner#:= .05bat_a_height#;
bat_b_height#:= .4bat_a_height#;
bat_b_width#:= 1.5bat_a_width#;
bat_c_narrow_width#:= 6bat_a_width#;
bat_c_mid_width#:= 12bat_a_width#;
bat_c_wide_width#:= 4bat_a_width#;
bat_c_narrowmid_step#:= .2bat_a_height#;
bat_c_midwide_step#:= .2bat_a_height#;
bat_d_height#:= 1.5bat_a_height#;
bat_d_width#:= 1.5bat_b_width#;
bat_e_width#:= .8bat_a_height#;
bat_e_step#:= .33bat_d_height#;
bat_pen#:= rule_thickness#;
bat_handle_pen#:= .4rule_thickness#;
define_pixels(bat_a_height, bat_a_width, bat_a_vark, bat_a_hark, bat_a_vcorner,
        bat_a_hcorner, bat_b_height, bat_b_width, bat_c_narrow_width,
        bat_c_mid_width, bat_c_wide_width, bat_c_narrowmid_step,
        bat_c_midwide_step, bat_d_height, bat_d_width, bat_e_width,
        bat_e_step, bat_pen, bat_handle_pen);
vardef R[](expr mv)= z@ shifted (mv,0) enddef;
vardef L[](expr mv)= z@ shifted (-mv,0) enddef;
vardef T[](expr mv)= z@ shifted (0,mv) enddef;
vardef D[](expr mv)= z@ shifted (0,-mv) enddef;

cmchar "BatStart";      % a
beginchar(oct "000", bat_a_width#+bat_a_hcorner#, v_center(bat_a_height#));
  pickup pencircle scaled bat_pen;
  lft x1= 0; x2= x1;
  x3= x4= x5= x6= x1+bat_a_width; x7= x8= w+shrink_fit+eps;
  y1= y3= math_axis+bat_a_height; y2= y4= math_axis-bat_a_height;
  y5= y7= math_axis+bat_b_height; y6= y8= math_axis-bat_b_height;

  draw z7--R5(bat_a_hcorner){left}..{up}T5(bat_a_vcorner)--D3(bat_a_vark){up}
       ..{left}L3(bat_a_hark)--R1(bat_a_hark){left}..{down}D1(bat_a_vark)--
       T2(bat_a_vark){down}..{right}R2(bat_a_hark)--L4(bat_a_hark){right}..
       {up}T4(bat_a_vark)--D6(bat_a_vcorner){up}..R6(bat_a_hcorner){right}--z8;
  labels(1,2,3,4,5,6,7,8);
endchar;

cmchar "BatHandle";     % b
beginchar(oct"001", bat_b_width#, v_center(bat_b_height#));
  pickup pencircle scaled bat_pen; autorounded;
  x1= x2= -eps; x3= x4= w+shrink_fit+eps;
  bot y1= bot y3= math_axis+ bat_b_height; top y2= top y4= math_axis- bat_b_height;
  fill z1--z3--z4--z2--cycle;
  pickup pencircle scaled bat_handle_pen;
  undraw z2--z3;
  labels(1,2,3,4);
endchar;

cmchar "BatMiddle";     % c
beginchar(oct"002", bat_c_narrow_width#+bat_c_mid_width#+bat_c_wide_width#,
  v_center(bat_d_height#));
  pickup pencircle scaled bat_pen; autorounded;
  x1= x2= -eps; x3= x4= bat_c_narrow_width; x5= x6= x3+bat_c_mid_width;
  x7= x8= w+shrink_fit+eps;
  y1= math_axis+bat_b_height; y2=math_axis-bat_b_height;
  y3= math_axis+bat_b_height+bat_c_narrowmid_step;
  y4= math_axis-bat_b_height-bat_c_narrowmid_step;
  y5= math_axis+bat_d_height-bat_c_midwide_step;
  y6= math_axis-bat_d_height+bat_c_midwide_step;
  y7= math_axis+bat_d_height; y8= math_axis-bat_d_height;
  draw z1{right}..{right}z7;
  draw z2{right}..{right}z8;
  labels(1,2,3,4,5,6,7,8);
endchar;

cmchar "BatHead";       % d
beginchar(oct"003", bat_d_width#, v_center(bat_d_height#));%math_axis#+bat_d_height#,
          %math_axis#-bat_d_height#);
  pickup pencircle scaled bat_pen; autorounded;
  x1= x2= -eps; x3= x4= w+shrink_fit+eps;
  y1= y3= math_axis+ bat_d_height; y2= y4= math_axis- bat_d_height;
  draw z1--z3; draw z2--z4;
  pickup pencircle scaled bat_handle_pen;
  draw z2--z4 shifted (0,bat_d_height);
  draw (z2--z4) shifted (0,3*bat_handle_pen);
  draw (z2--z4) shifted (0,7*bat_handle_pen);
  labels(1,2,3,4);
endchar;

cmchar "BatEnd";        % e
beginchar(oct"004", bat_e_width#, v_center(bat_d_height#));
  pickup pencircle scaled bat_pen; autorounded;
  x1= x2= -eps; x3= x4= w;
  y1= math_axis+ bat_d_height; y2= math_axis- bat_d_height;
  y3= math_axis+ bat_d_height- bat_e_step;
  y4= math_axis- bat_d_height+ bat_e_step;
  fill z1{right}..{down}z3--z4{down}..{left}z2--cycle;
  labels(1,2,3,4);
endchar;

end;
