summaryrefslogtreecommitdiff
path: root/metapost/context/base/mpxl/mp-grid.mpxl
diff options
context:
space:
mode:
Diffstat (limited to 'metapost/context/base/mpxl/mp-grid.mpxl')
-rw-r--r--metapost/context/base/mpxl/mp-grid.mpxl142
1 files changed, 142 insertions, 0 deletions
diff --git a/metapost/context/base/mpxl/mp-grid.mpxl b/metapost/context/base/mpxl/mp-grid.mpxl
new file mode 100644
index 000000000..466d82555
--- /dev/null
+++ b/metapost/context/base/mpxl/mp-grid.mpxl
@@ -0,0 +1,142 @@
+%D \module
+%D [ file=mp-grid.mpiv,
+%D version=2000.07.10,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=grid support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
+%C details.
+
+%D Under construction.
+
+if known context_grid : endinput ; fi ;
+
+boolean context_grid ; context_grid := true ; immutable context_grid ;
+
+string fmt_separator ; fmt_separator := "@" ;
+numeric fmt_precision ; fmt_precision := 3 ;
+boolean fmt_initialize ; fmt_initialize := false ;
+boolean fmt_zerocheck ; fmt_zerocheck := true ;
+
+if unknown fmt_loaded : input "mp-form.mpxl" ; fi ;
+
+boolean fmt_pictures ; fmt_pictures := true ;
+
+def do_format = if fmt_pictures : format else : formatstr fi enddef ;
+def do_mformat = if fmt_pictures : Mformat else : Mformatstr fi enddef ;
+
+numeric grid_eps ; grid_eps = eps ;
+
+def hlingrid (expr asked_min, asked_max, asked_step, asked_length, asked_width) text t =
+ image (
+ for i=asked_min step asked_step until asked_max+grid_eps :
+ draw (origin--(asked_width,0)) shifted (0,i*(asked_length/asked_max)) t ;
+ endfor ;
+ ) ;
+enddef ;
+
+def vlingrid (expr asked_min, asked_max, asked_step, asked_length, asked_height) text t =
+ image (
+ for i=asked_min step asked_step until asked_max+grid_eps :
+ draw (origin--(0,asked_height)) shifted (i*(asked_length/asked_max),0) t ;
+ endfor ;
+ ) ;
+enddef ;
+
+def hloggrid (expr asked_min, asked_max, asked_step, asked_length, asked_width) text t =
+ image (
+ for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
+ draw (origin--(asked_width,0)) shifted (0,asked_length*log(i)) t ;
+ endfor ;
+ ) ;
+enddef ;
+
+def vloggrid (expr asked_min, asked_max, asked_step, asked_length, asked_height) text t =
+ image (
+ for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
+ draw (origin--(0,asked_height)) shifted (asked_length*log(i),0) t ;
+ endfor ;
+ ) ;
+enddef ;
+
+vardef hlintext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
+ image (
+ for i=asked_min step asked_step until asked_max+grid_eps :
+ draw textext@#(mfun_format_number(asked_format,i)) shifted (0,i*(asked_length/asked_max)) t ;
+ endfor ;
+ )
+enddef ;
+
+vardef vlintext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
+ image (
+ for i=asked_min step asked_step until asked_max+grid_eps :
+ draw textext@#(mfun_format_number(asked_format,i)) shifted (i*(asked_length/asked_max),0) t ;
+ endfor ;
+ )
+enddef ;
+
+vardef hlogtext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
+ image (
+ for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
+ draw textext@#(mfun_format_number(asked_format,i)) shifted (0,asked_length*log(i)) t ;
+ endfor ;
+ )
+enddef ;
+
+vardef vlogtext@#(expr asked_min, asked_max, asked_step, asked_length, asked_format) text t =
+ image (
+ for i=max(asked_min,1) step asked_step until min(asked_max,10)+grid_eps :
+ draw textext@#(mfun_format_number(asked_format,i)) shifted (asked_length*log(i),0) t ;
+ endfor ;
+ )
+enddef ;
+
+vardef hlinlabel@#(expr asked_min, asked_max, asked_step, asked_length) text t =
+ image (
+ for i=asked_min step asked_step until asked_max+grid_eps :
+ draw thelabel@#(decimal i,(0,i*(asked_length/asked_max))) t ;
+ endfor ;
+ )
+enddef ;
+
+vardef vlinlabel@#(expr asked_min, asked_max, asked_step, asked_length) text t =
+ image (
+ for i=asked_min step asked_step until asked_max+grid_eps :
+ draw thelabel@#(decimal i,(i*(asked_length/asked_max),0)) t ;
+ endfor ;
+ )
+enddef ;
+
+vardef linlog(expr xy) = ( xpart xy, log(ypart xy)) enddef ;
+vardef loglin(expr xy) = (log(xpart xy), ypart xy) enddef ;
+vardef loglog(expr xy) = (log(xpart xy), log(ypart xy)) enddef ;
+vardef linlin(expr xy) = ( (xpart xy), (ypart xy)) enddef ;
+
+vardef loglinpath primary p = processpath (p) (loglin) enddef ;
+vardef linlogpath primary p = processpath (p) (linlog) enddef ;
+vardef loglogpath primary p = processpath (p) (loglog) enddef ;
+vardef linlinpath primary p = processpath (p) (linlin) enddef ;
+
+vardef processpath (expr p) (text pp) =
+ if path p :
+ for i=0 upto length(p)-1 :
+ pp(point i of p) .. controls
+ pp(postcontrol i of p) and
+ pp(precontrol (i+1) of p) ..
+ endfor
+ if cycle p :
+ cycle
+ else :
+ pp(point length(p) of p)
+ fi
+ elseif pair p :
+ pp(p)
+ else :
+ p
+ fi
+enddef ;
+