On 12/10/2020 6:44 PM, Aditya Mahajan wrote:
On Thu, 10 Dec 2020, Otared Kavian wrote:
Hi all,
In Metafun when representing a point I woul dlike to have some dots represented by a square (or even by another scalable symbol): for instance in the following I would like the dot at the point B to be a square:
\starttext \startMPcode draw (2cm,3cm) -- (3cm,5cm) ; dotlabel(textext("\switchtobodyfont[8pt]" & "A"), (2cm,3cm)) withpen pencircle scaled 12pt withcolor transparent("exclusion",.5,red) ;
dotlabel(textext("\switchtobodyfont[8pt]" & "B"), (3cm,5cm)) withpen pencircle scaled 12pt withcolor transparent("exclusion",.5,red) ; \stopMPcode \stoptext
I wonder whether it is possible to define something like « drawsquaredot » or « squaredotlabel » in order to do this.
dotlabel uses a pen to draw the dot, and I am not sure why it uses that rather than a path. Here is a (to me) simpler definition, where you can change the shape:
just look in the pdf ... in your case the dot is a n point path while otherwise it uses the default postscript pen (which is a dot) actually fullcircle is pencircle so you can ponder why that is the case -)
\startMPdefinitions newpath dotlabelshape;
dotlabelshape := fullcircle;
vardef dotlabel@#(expr s,z) text t_ = label@#(s,z) t_ ; fill (dotlabelshape scaled 2dotlabeldiam) shifted z t_; enddef ; \stopMPdefinitions
\starttext \startMPcode newpath p ; p := (2cm, 3cm) -- (3cm, 5cm); dotlabeldiam := 12pt;
% Default draw p; dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) withcolor transparent("exclusion",.5,red) ;
dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) withcolor transparent("exclusion",.5,red) ;
% Using a square "dot" p := p shifted (5cm, 0); dotlabelshape := fullsquare;
draw p; dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) withcolor transparent("exclusion",.5,red) ;
dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) withcolor transparent("exclusion",.5,red) ; \stopMPcode \stoptext
These types of macros are also a good candidate for the new LMTX syntax, where we can make all components configurable via a key-value interface (labeldistance etc. as well). it surprised me that a math guru like you doesn't do this:
vardef dotlabel@#(expr s,z) text t_ = % draw textext("$\bullet$") scaled (1/2) shifted z ; % draw textext("$\blacktriangle$") scaled (1/4) shifted z ; draw textext("$\blacksquare$") scaled (1/4) shifted z ; label@#(s,z) t_ ; enddef ; \stopMPdefinitions ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------