Re: Stroke Font

Laurent Méhats <[email protected]>
Newsgroups gmane.comp.tex.metapost
Message-ID <[email protected]>
Le 16/05/2015 15:37, Troy Henderson a écrit :
> Is there a preferred method for converting a
>
> btex Here is my sentence etex
>
> from a picture to an array of closed paths that can be filled and stroked
> different colors?  Thus, I would like to convert the btex ... etex
> sentence picture into an array of outlines for each letter (in the current
> font) used in the sentence so that I can fill the outlines one color and
> draw them with another color.
>
> Thanks in advance,
>
> Troy Henderson


Hello,

Given a stroked token tkn within a btex/etex picture,
1. is it always the case that tkn is stroked with linecap set to butt ?
2. If not, is there a way to get a 'linecappart' from tkn ?
3. Then, if linecap is set correctly, can I always expect 'fill envelope 
(makepen makepath penpart tkn) of pathpart tkn' to look like tkn ?

Regards,
Laurent Méhats


--%<-- oln-test.mp
verbatimtex%&latex
\documentclass{article}
\usepackage[T1]{fontenc}
%\usepackage{cmbright}
%\usepackage{fourier}
%\usepackage{arev}
\begin{document}
etex;

vardef oln_init (suffix glp_num, pth_num, glp_pth, stk_num, stk_vlp) expr pct=
%  pct            btex .. etex material
%  glp_num        number of glyphs within pct
%  pth_num[i]     number of paths defining the rank i glyph
%                   (i ranges from 0 to glp_num-1)
%  glp_pth[i][j]  rank j path of the rank i glyph
%                   (j ranges from 0 pth_num[i]-1)
%  stk_num        number of stroked lines within pct
%  stk_vlp[i]     rank i envelope
%                   (i ranges from 0 to stk_num-1)
interim linecap:=butt;
glp_num:=0;
stk_num:=0;
for tkn within pct:
   if textual tkn:
     string fnt_str, txt_str, sub_str;
     transform trn;
     numeric txt_wd, pth_idx;
     picture sub_pct;
     fnt_str:=fontpart tkn;
     txt_str:=textpart tkn;
     (0, 0) transformed trn=(xpart tkn, ypart tkn);
     (0, 1) transformed trn=(xpart tkn+xypart tkn, ypart tkn+yypart tkn);
     (1, 0) transformed trn=(xpart tkn+xxpart tkn, ypart tkn+yxpart tkn);
     txt_wd:=0;
     for glp_idx=0 upto (length txt_str-1):
       sub_str:=substring (glp_idx, glp_idx+1) of txt_str;
       sub_pct:=sub_str infont fnt_str;
       pth_idx:=0;
       for sub_tkn within glyph ASCII sub_str of fnt_str
           scaled (fontsize fnt_str/1000)
           shifted (txt_wd, 0)
           transformed trn:
         glp_pth[glp_num][pth_idx]:=pathpart sub_tkn;
         pth_idx:=pth_idx+1;
       endfor
       txt_wd:=txt_wd+xpart (urcorner sub_pct-llcorner sub_pct);
       pth_num[glp_num]:=pth_idx;
       glp_num:=glp_num+1;
     endfor
   elseif stroked tkn:
     stk_vlp[stk_num]:=envelope (makepen makepath penpart tkn) of pathpart 
tkn;
     stk_num:=stk_num+1;
   fi
endfor
enddef;

vardef oln_draw (expr pct) text opt=
numeric glp_num, pth_num[], stk_num;
path glp_pth[][], stk_vlp[];
oln_init (glp_num, pth_num, glp_pth, stk_num, stk_vlp) pct;
for glp_idx=0 upto glp_num-1:
   for pth_idx=0 upto pth_num[glp_idx]-1:
     draw glp_pth[glp_idx][pth_idx] opt;
   endfor
endfor
for stk_idx=0 upto stk_num-1:
   draw stk_vlp[stk_idx] opt;
endfor
enddef;

picture pct;
pct:=btex$\displaystyle\left(\sqrt{\frac{\sqrt{123}}{\sqrt{a}}}\right\}$etex
   rotated 15 scaled 10;

beginfig(0)
   oln_draw (pct);
endfig;

beginfig(1)
   oln_draw (pct) withpen pencircle scaled 2;
   draw pct withcolor (0.7, 0.7, 0.7);
endfig;

beginfig(2)
   oln_draw (pct) withpen pencircle scaled 2 dashed evenly;
   draw pct withcolor (0.7, 0.7, 0.7);
endfig;

beginfig(3)
   draw pct withcolor (0.7, 0.7, 0.7);
   oln_draw (pct) withpen pencircle dashed evenly;
endfig;

end
--%<-- oln-test.mp
--
http://tug.org/metapost/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.