ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Metafun: is it possible to redefine dotlabel to draw a square ?
@ 2020-12-10 17:30 Otared Kavian
  2020-12-10 17:44 ` Aditya Mahajan
  0 siblings, 1 reply; 8+ messages in thread
From: Otared Kavian @ 2020-12-10 17:30 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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.
If I use for B the command
	withpen pensquare scaled 12pt
then the dot is a square, but the label B is drawn in a strange way.

Thanks for any help: Otared
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 17:30 Metafun: is it possible to redefine dotlabel to draw a square ? Otared Kavian
@ 2020-12-10 17:44 ` Aditya Mahajan
  2020-12-10 17:57   ` Otared Kavian
  2020-12-10 18:07   ` Hans Hagen
  0 siblings, 2 replies; 8+ messages in thread
From: Aditya Mahajan @ 2020-12-10 17:44 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 2104 bytes --]

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:

\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).

Aditya


[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 17:44 ` Aditya Mahajan
@ 2020-12-10 17:57   ` Otared Kavian
  2020-12-10 18:04     ` Aditya Mahajan
  2020-12-10 18:07   ` Hans Hagen
  1 sibling, 1 reply; 8+ messages in thread
From: Otared Kavian @ 2020-12-10 17:57 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hi Aditya,
Thank you very much !
That's great indeed, you gave me an elegant solution.
 
One more question, in order for me to understand a little more: when defining a new dotlabel as you do, might it not conflict with the internal definitions of dotlabel in Metafun in some other place?
Maybe it is safer for me to call it something like  « dotshapelabel » ?

Best regards and agin many thanks: Otared

> On 10 Dec 2020, at 18:44, Aditya Mahajan <adityam@umich.edu> 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:
> 
> \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).
> 
> Aditya
> 
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
> 
> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
> archive  : https://bitbucket.org/phg/context-mirror/commits/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 17:57   ` Otared Kavian
@ 2020-12-10 18:04     ` Aditya Mahajan
  2020-12-10 18:50       ` Hans Hagen
  0 siblings, 1 reply; 8+ messages in thread
From: Aditya Mahajan @ 2020-12-10 18:04 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 625 bytes --]

On Thu, 10 Dec 2020, Otared Kavian wrote:

> Hi Aditya,
> Thank you very much !
> That's great indeed, you gave me an elegant solution.
>  
> One more question, in order for me to understand a little more: when defining a new dotlabel as you do, might it not conflict with the internal definitions of dotlabel in Metafun in some other place?
> Maybe it is safer for me to call it something like  « dotshapelabel » ?

In general, I agree. Redefining internal macros has the advantage that your code doesn't have to change. See, for example:

https://github.com/adityam/mp-sketch/blob/master/mp-sketch.mp

Aditya

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 17:44 ` Aditya Mahajan
  2020-12-10 17:57   ` Otared Kavian
@ 2020-12-10 18:07   ` Hans Hagen
  2020-12-10 19:37     ` Aditya Mahajan
  1 sibling, 1 reply; 8+ messages in thread
From: Hans Hagen @ 2020-12-10 18:07 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Aditya Mahajan

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
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 18:04     ` Aditya Mahajan
@ 2020-12-10 18:50       ` Hans Hagen
  0 siblings, 0 replies; 8+ messages in thread
From: Hans Hagen @ 2020-12-10 18:50 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Aditya Mahajan

On 12/10/2020 7:04 PM, Aditya Mahajan wrote:
> On Thu, 10 Dec 2020, Otared Kavian wrote:
> 
>> Hi Aditya,
>> Thank you very much !
>> That's great indeed, you gave me an elegant solution.
>>   
>> One more question, in order for me to understand a little more: when defining a new dotlabel as you do, might it not conflict with the internal definitions of dotlabel in Metafun in some other place?
>> Maybe it is safer for me to call it something like  « dotshapelabel » ?
> 
> In general, I agree. Redefining internal macros has the advantage that your code doesn't have to change. See, for example:

it depends a bit ... redefing dotlabel in a compatible way is kind of 
ok, but using/redefining \foo_bar_something_internal is a real bad idea 
as that is not part of the interface (okay, i know that there are macro 
packages out there where it's part of the concept to redefine low level 
stuff for styles but in context we should try to avoid it ... we should 
then adapt the high level interface to suport something)

it also depends who does it ... i know that aditya knows the internals 
well enough to deal with it

(one of my concerns is always that while we try to come up with 
efficient solutions it's easy to make things inefficient but that's not 
the case here ... unless of course we want to nurture the 'context is 
slow' meme)

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 18:07   ` Hans Hagen
@ 2020-12-10 19:37     ` Aditya Mahajan
  2020-12-10 21:36       ` Hans Hagen
  0 siblings, 1 reply; 8+ messages in thread
From: Aditya Mahajan @ 2020-12-10 19:37 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Thu, 10 Dec 2020, Hans Hagen wrote:

> > 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)

Ah, that makes sense. 

> 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

Ha! I know that you said this as a joke, but as someone who did try to use the old font-based picture environment in LaTeX back in the day, I would never try to use fonts for "drawing". Especially, math fonts, where every designer has a different idea of what the shape should look like. 

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Metafun: is it possible to redefine dotlabel to draw a square ?
  2020-12-10 19:37     ` Aditya Mahajan
@ 2020-12-10 21:36       ` Hans Hagen
  0 siblings, 0 replies; 8+ messages in thread
From: Hans Hagen @ 2020-12-10 21:36 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Aditya Mahajan

On 12/10/2020 8:37 PM, Aditya Mahajan wrote:
> On Thu, 10 Dec 2020, Hans Hagen wrote:
> 
>>> 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)
> 
> Ah, that makes sense.
> 
>> 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
> 
> Ha! I know that you said this as a joke, but as someone who did try to use the old font-based picture environment in LaTeX back in the day, I would never try to use fonts for "drawing". Especially, math fonts, where every designer has a different idea of what the shape should look like.
ah pictex memories ... drawing lines with cmr5 periods ...

but actually, we can define a stable font with symbols in metafun and 
use that (quite efficient too) and then one can even cut'n'paste those 
tiny symbols (don't worry ... not much of a challenge so low on my list)

Hans


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-12-10 21:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-10 17:30 Metafun: is it possible to redefine dotlabel to draw a square ? Otared Kavian
2020-12-10 17:44 ` Aditya Mahajan
2020-12-10 17:57   ` Otared Kavian
2020-12-10 18:04     ` Aditya Mahajan
2020-12-10 18:50       ` Hans Hagen
2020-12-10 18:07   ` Hans Hagen
2020-12-10 19:37     ` Aditya Mahajan
2020-12-10 21:36       ` Hans Hagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).