Re: Bug with the binary operator `point ... on ...` from Metafun
Franck Pastor <[email protected]>
| Newsgroups | gmane.comp.tex.metapost |
|---|---|
| Message-ID | <[email protected]> |
> Le 9 mars 2015 à 17:17, Hans Hagen <[email protected]> a écrit : > > On 3/9/2015 5:01 PM, Franck Pastor wrote: >> I’ve just encountered a very puzzling bug with the binary operator `point <len> of <path>` defined in the Metafun format. >> >> In the Metafun manual (http://www.pragma-ade.com/general/manuals/metafun-p.pdf), p. 61, this binary operator is defined as such: >> >> primarydef len of pat = >> (arctime len of pat) of pat >> enddef; >> >> So if I write `point 0 on pat`, it should return the starting point of the path <pat>, right? But n. To the contrary, it returns the end point of <pat>! Stranger yet, if I try `point (arctime 0 of pat) of pat`, it returns the starting point, as expected. >> >> This weird behavior is illustrated by the following program, to be run with the Metafun format of course: >> >> beginfig(1); >> path line[]; line1 = origin -- 3cm*right; line2 = line1 yshifted -1cm; >> draw line1; draw line2; >> pickup pencircle scaled 3bp; >> draw point 0 of line1; % draw a dot at the start point, as expected >> draw point 0 on line1; % draws a dot at the end point!!!!! >> draw point (arctime 0 of line2) of line2; % draws a dot at the starting point… >> endfig; >> end. >> >> An idea about what is wrong? >> >> I use MetaPost 1.902 and Metafun version 1.004, from TeX Live 2014. > > change > into >= in mp-tool.* > > \startMPpage > > primarydef len on pat = % no outer ( ) .. somehow fails > (arctime if len>=0 : len else : (arclength(pat)+len) fi of pat) of pat > enddef ; > > path line[] ; > line1 = origin -- 3cm*right ; > line2 = line1 yshifted -1cm ; > drawarrow line1 ; > drawarrow line2 ; > pickup pencircle scaled 3bp ; > draw point 0 of line1 ; % draw a dot at the start point, as expected > draw point 0 on line1 withcolor blue ; % draws a dot at the end point!!!!! > draw point 2cm on line1 withcolor red ; % draws a dot at the end point!!!!! > draw point (arctime 0 of line2) of line2 ; % draws a dot at the starting point… > > \stopMPpage > > > ----------------------------------------------------------------- > Hans Hagen | PRAGMA ADE > Ridderstraat 27 | 8061 GH Hasselt | The Netherlands > tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com > | www.pragma-pod.nl > ----------------------------------------------------------------- > -- > http://tug.org/metapost/ I see. It did not think that the implementation of the `point … on …` operator could have become different from the way it is written in the Metafun manual. Now I understand from where this weird behavior came, and why. A little oversight with big consequences :-) I should have looked into the mp-tool files first. Groot bedankt! Franck Pastor Athénée royal Victor Horta Rue de la Réthorique 6 1060 Bruxelles BELGIQUE [email protected] -- http://tug.org/metapost/