mp-grid.mpxl /size: 4812 b    last modification: 2021-10-28 13:50
1%D \module
2%D   [       file=mp-grid.mpiv,
3%D        version=2000.07.10,
4%D          title=\CONTEXT\ \METAPOST\ graphics,
5%D       subtitle=grid support,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
12%C details.
13
14%D Under construction.
15
16if known metafun_loaded_grid : endinput ; fi ;
17
18newinternal boolean metafun_loaded_grid ; metafun_loaded_grid := true ; immutable metafun_loaded_grid ;
19
20string  fmt_separator  ; fmt_separator  := "@" ;
21numeric fmt_precision  ; fmt_precision  := 3 ;
22boolean fmt_initialize ; fmt_initialize := false ;
23boolean fmt_zerocheck  ; fmt_zerocheck  := true ;
24
25if unknown fmt_loaded : input "mp-form.mpxl" ; fi ;
26
27boolean fmt_pictures ; fmt_pictures := true ;
28
29def  do_format = if fmt_pictures :  format else :  formatstr fi enddef ;
30def do_mformat = if fmt_pictures : Mformat else : Mformatstr fi enddef ;
31
32numeric grid_eps ; grid_eps = eps ;
33
34def hlingrid (expr asked_min, asked_max, asked_step, asked_length, asked_width) text t =
35    image (
36        for i=asked_min step asked_step until asked_max+grid_eps :
37            draw (origin--(asked_width,0)) shifted (0,i*(asked_length/asked_max)) t ;
38        endfor ;
39    ) ;
40enddef ;
41
42def vlingrid (expr asked_min, asked_max, asked_step, asked_length, asked_height) text t =
43    image (
44        for i=asked_min step asked_step until asked_max+grid_eps :
45            draw (origin--(0,asked_height)) shifted (i*(asked_length/asked_max),0) t ;
46        endfor ;
47    ) ;
48enddef ;
49
50def hloggrid (expr asked_min, asked_max, asked_step, asked_length, asked_width) text t =
51    image (
52        for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
53            draw (origin--(asked_width,0)) shifted (0,asked_length*log(i)) t ;
54        endfor ;
55    ) ;
56enddef ;
57
58def vloggrid (expr asked_min, asked_max, asked_step, asked_length, asked_height) text t =
59    image (
60        for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
61            draw (origin--(0,asked_height)) shifted (asked_length*log(i),0) t ;
62        endfor ;
63    ) ;
64enddef ;
65
66vardef hlintext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
67    image (
68        for i=asked_min step asked_step until asked_max+grid_eps :
69            draw textext@#(mfun_format_number(asked_format,i)) shifted (0,i*(asked_length/asked_max)) t ;
70        endfor ;
71    )
72enddef ;
73
74vardef vlintext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
75    image (
76        for i=asked_min step asked_step until asked_max+grid_eps :
77            draw textext@#(mfun_format_number(asked_format,i)) shifted (i*(asked_length/asked_max),0) t ;
78        endfor ;
79    )
80enddef ;
81
82vardef hlogtext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
83    image (
84        for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
85            draw textext@#(mfun_format_number(asked_format,i)) shifted (0,asked_length*log(i)) t ;
86        endfor ;
87    )
88enddef ;
89
90vardef vlogtext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
91    image (
92        for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
93            draw textext@#(mfun_format_number(asked_format,i)) shifted (asked_length*log(i),0) t ;
94        endfor ;
95    )
96enddef ;
97
98vardef hlinlabel@#(expr asked_min, asked_max, asked_step, asked_length) text t =
99    image (
100        for i=asked_min step asked_step until asked_max+grid_eps :
101            draw thelabel@#(decimal i,(0,i*(asked_length/asked_max))) t ;
102        endfor ;
103    )
104enddef ;
105
106vardef vlinlabel@#(expr asked_min, asked_max, asked_step, asked_length) text t =
107    image (
108        for i=asked_min step asked_step until asked_max+grid_eps :
109            draw thelabel@#(decimal i,(i*(asked_length/asked_max),0)) t ;
110        endfor ;
111    )
112enddef ;
113
114% these will be replace by lmt_* variants
115
116vardef linlog(expr xy) = (    xpart xy,  log(ypart xy)) enddef ;
117vardef loglin(expr xy) = (log(xpart xy),     ypart xy)  enddef ;
118vardef loglog(expr xy) = (log(xpart xy), log(ypart xy)) enddef ;
119vardef linlin(expr xy) = (   (xpart xy),    (ypart xy)) enddef ;
120
121vardef loglinpath primary p = processpath (p) (loglin) enddef ;
122vardef linlogpath primary p = processpath (p) (linlog) enddef ;
123vardef loglogpath primary p = processpath (p) (loglog) enddef ;
124vardef linlinpath primary p = processpath (p) (linlin) enddef ;
125
126permanent hlingrid, vlingrid, hloggrid, vloggrid, hlintext, vlintext, hlogtext, vlogtext, hlinlabel, vlinlabel ;
127permanent linlog, loglin, loglog, linlin, loglinpath, linlogpath, loglogpath, linlinpath ;
128