Как использовать penpos/penstroke внутри параметризованного макроса?

Как использовать penpos/penstroke внутри параметризованного макроса?

Я пытаюсь создать параметризованный макрос для рисования фигуры с помощью макросов penpos и penstroke в MetaPost (Metafont?) с plain.mpбазой, но получаю ошибку. Запуск кода ниже,

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.

выдает следующую ошибку:

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

Насколько я понимаю, это penstrokeмакрос, который просто вызывает fillи unfillпосле вычисления значений "left" и "right" точек на основе (radius,angle)переданного в penposмакрос. Я предполагаю, что это не работает вне beginfigи endfig. И именно поэтому Metafont не может найти z0l. Потому что команда draw работает без ошибок.

Как здесь использовать penposand penstroke? Или мне придется вручную вычислять значения left/right и вызывать fill/ unfill?

Пожалуйста, имейте в виду, что я полный новичок в MetaPost/Metafont. Спасибо.

решение1

The

save z;
pair z[];

кажется, проблемная часть. zособенная. Заменить ее на

clearxy;

кажется, делает это здесь. Делая это и компилируя ваш файл, я получаю этот вывод.

метапост штучки

Связанный контент