Thank you, I'll try that later.
> Thanks Max that works perfectly! But It would still be useful if I could
> change families inside a MPpage.
Sure, but you'll need to store the x-heights first:
\starttexdefinition storexheight [#1]
% Placing the first use of \switchtobodyfont inside a group messes
% with the definitions, so we need to reset the font family manually.
\edef\oldfontclass{\fontclass}
\switchtobodyfont[#1]
\expandafter\newcount\csname #1_xheight\endcsname
\global\csname #1_xheight\endcsname=\numexpr 100 * \number\dimexpr1em\relax / \number\dimexpr1ex\relax \relax
\switchtobodyfont[\oldfontclass]
\stoptexdefinition
\starttexdefinition setxheight [#1][#2]
% Combining these two lines into one sometimes fails. No idea why.
\switchtobodyfont[#1]
\switchtobodyfont[\the\dimexpr#2 * \csname #1_xheight\endcsname / 100 \relax]
\stoptexdefinition
\storexheight[adventor]
\storexheight[pagella]
\storexheight[heros]
\starttext
\startMPpage
draw textext.origin("\setxheight[adventor][1cm]Hello!");
draw (0, 1cm) -- (6cm, 1cm);
\stopMPpage
\startMPpage
draw textext.origin("\setxheight[pagella][1cm]Hello!");
draw (0, 1cm) -- (6cm, 1cm);
\stopMPpage
\startMPpage
draw textext.origin("\setxheight[heros][6pt]Hello!");
draw textext.origin("\setxheight[heros][24pt]Hello!");
draw (0, 6pt) -- (6cm, 6pt);
draw (0, 24pt) -- (6cm, 24pt);
\stopMPpage
\stoptext
It's pretty ugly code, but it seems to work alright.
-- Max