Como usar o penpos/penstroke dentro de uma macro parametrizada?

Como usar o penpos/penstroke dentro de uma macro parametrizada?

Estou tentando criar uma macro parametrizada para desenhar uma forma com macros penpos e penstroke no MetaPost (Metafont?) Com plain.mpbase, mas estou recebendo um erro. Executando o código abaixo,

def curve_st(expr p) = begingroup
    save z;
    pair z[];

    z0 = p;
    z1 = p + (2,-2);
    z2 = z1 + (0, 5);
    z3 = z2 + (3, 0);

    penpos0(tip,  180);
    penpos1(stem, -30);
    penpos2(stem, 0);
    penpos3(tip,  180);

    penstroke z0e{down}.. z1e{up} .. z2e{up} .. z3e;
    %draw z0{down}.. z1{up} .. z2{up} .. z3;

endgroup enddef;
beginfig(1);
    xstep = 3; stem = 1.5; tip = .2;

    curve_st((-3,0)); curve_st((0,0)); 
endfig; end.

dá o seguinte erro:

>> unknown path path_.l
>> z0l
! Equation cannot be performed (unknown path=numeric).
<to be read again>

Pelo que entendi, penstrokeé uma macro que apenas chama fille unfilldepois calcula os valores "esquerdo" e "direito" dos pontos com base no (radius,angle)passado para a penposmacro. Suponho que isso não funcione fora beginfige endfig. E é por isso que o Metafont não consegue encontrar arquivos z0l. Porque o comando draw funciona sem nenhum erro.

Como posso usar penpose penstrokeaqui? Ou preciso calcular manualmente os valores esquerdo/direito e chamar o fill/ unfill?

Tenha em mente que sou um iniciante em MetaPost/Metafont. Obrigado.

Responder1

O

save z;
pair z[];

parece ser a parte problemática. zé especial. Substituindo-o por

clearxy;

parece fazer isso aqui. Fazendo isso e compilando seu arquivo, recebo esta saída.

coisas metapost

informação relacionada