From: Garulfo <garulfo@azules.eu>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: MetaFun - "remove the paths of text" from a rectangle to let the background visible
Date: Mon, 21 Dec 2020 16:09:35 +0100 [thread overview]
Message-ID: <50497bef-784f-816e-6471-9524ccdd17d9@azules.eu> (raw)
Hi,
* I try to "remove the paths of text" from a metapost pictures to let
the background visible.
* Using
https://mailman.ntg.nl/pipermail/ntg-context/2018/thread.html#92725
* I was able to get the following with one glyph (MVE code below)
https://wiki.contextgarden.net/images/d/d2/test_extract_glyphs.pdf
2 questions:
1/ for some fonts (e.g. dejavu vs latin modern) the "encompassing" path
of the B glyph can switch from B[1] to B[Bn]. Is there a trick to
identify which id match with "the encompassing" path ?
2/ now, I would like to do the same, but for text... a kind of
derivative of "textext" or "outlinetext".
Would you please give me some guidelines ?
does it already exist ?
should I use something like \handletokens, \scantokens ?
do you have examples where I can get inspiration ?
Thanks again for your help,
Garulfo
%==============================================================================
\starttext
%------------------------------------------------------------------------------
\startluacode
function document.outlinepaths(character)
local chardata = fonts.hashes.characters[true] -- by unicode
local shapedata = fonts.hashes.shapes[true] -- by index
local c = chardata[character]
if c and c.index and shapedata then
local shapeglyphs = shapedata.glyphs or { }
local glyph = shapeglyphs[c.index]
if glyph and (glyph.segments or glyph.sequence) then
local units = shapedata.units or 1000
local factor = 100/units
return fonts.metapost.paths(glyph,factor)
end
end
return { }
end
function document.defineoutline(char,target)
local outlines = document.outlinepaths(char)
local nofpaths = #outlines
context("path %s[] ;",target)
context("numeric %sn ; %sn := %s ;",target,target,nofpaths)
for i=1,nofpaths do
context("%s[%i] := %s ; ",target,i,outlines[i])
end
end
\stopluacode
%------------------------------------------------------------------------------
\def\mpdefineoutlines#1#2{\ctxlua{document.defineoutline(\number`#1,"#2")}}
%------------------------------------------------------------------------------
\startMPpage
numeric dimA ; dimA := 20cm;
path pathbackground ;
pathbackground := unitsquare scaled dimA ;
fill pathbackground withshademethod "linear" withshadedirection(0,1)
withshadecolors (red,blue);
%--------------------------------------
\mpdefineoutlines{B}{B}
%--------------------------------------
numeric dimB ; dimB := 2cm;
numeric vratio ; vratio := 2;
path frame ;
frame := unitsquare
xscaled (dimA - 2 * dimB)
yscaled (dimA / vratio)
shifted (dimB , (dimA - (dimA / vratio))/2 );
%--------------------------------------
pair shift ; shift := center frame;
numeric scal ; scal := (0.9) * (10cm / (bbheight B[1])) ;
picture monImageB; monImageB := nullpicture;
addto monImageB contour
(B[1] shifted (- center B[1]) scaled scal)
shifted shift
withpostscript "collect";
addto monImageB contour
frame
withpostscript "evenodd";
for i=2 upto Bn :
addto monImageB contour
(B[i] shifted (- center B[1]) scaled scal)
shifted shift;
endfor ;
%--------------------------------------
draw monImageB withcolor white;
\stopMPpage
\stoptext
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________
next reply other threads:[~2020-12-21 15:09 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-21 15:09 Garulfo [this message]
2020-12-21 15:29 ` Taco Hoekwater
2020-12-23 23:14 ` Garulfo
2020-12-23 23:46 ` Otared Kavian
2020-12-24 0:42 ` Hans Hagen
2020-12-23 23:58 ` Hans Hagen
2020-12-24 9:02 ` Taco Hoekwater
2020-12-24 17:04 ` Garulfo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50497bef-784f-816e-6471-9524ccdd17d9@azules.eu \
--to=garulfo@azules.eu \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).