diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/third/simpleslides/t-slidesvisualcounter.tex')
-rw-r--r-- | Master/texmf-dist/tex/context/third/simpleslides/t-slidesvisualcounter.tex | 502 |
1 files changed, 502 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/third/simpleslides/t-slidesvisualcounter.tex b/Master/texmf-dist/tex/context/third/simpleslides/t-slidesvisualcounter.tex new file mode 100644 index 00000000000..2c0bea60ae0 --- /dev/null +++ b/Master/texmf-dist/tex/context/third/simpleslides/t-slidesvisualcounter.tex @@ -0,0 +1,502 @@ +% macros=mkvi + +%D \module +%D [ file=t-visualcounter, +%D version=2011.10.05, +%D title=\CONTEXT\ User Module, +%D subtitle=Visual Counter, +%D author=Aditya Mahajan, +%D date=\currentdate, +%D copyright=Aditya Mahajan, +%D email=adityam <at> ieee <dot> org, +%D license=Simplified BSD License] + +\writestatus{loading}{Visual Counter (ver: 2011.10.05)} + +\startmodule [visualcounter] + +\unprotect + +\startinterface all + \setinterfaceconstant {last} {last} + \setinterfaceconstant {palette} {palette} + \setinterfaceconstant {path} {path} +\stopinterface + +\definenamespace + [visualcounter] + [ \c!type=module, + \c!name=visualcounter, + \c!command=\v!yes, + setup=\v!list, + \c!style=\v!yes, + \s!parent=visualcounter, + ] + +\setupvisualcounter + [ \s!counter=, + \c!n={\rawstructurecounter[\visualcounterparameter\s!counter]}, + \c!text={\getstructurecounter[\visualcounterparameter\s!counter]}, + \c!max\c!text={\laststructurecounter[\visualcounterparameter\s!counter]}, + \c!last={\laststructurecounter[\visualcounterparameter\s!counter]}, + \c!style=, + \c!color=, + \c!mp=visualcounter:countdown, + \c!palette=visualcounter:countdown, + \c!width=1EmWidth, + \c!height=1ExHeight, + \c!rulethickness=1bp, + \c!distance=1cm, + % Parameters passed to scale + \c!maxwidth=\maxdimen, + \c!maxheight=\maxdimen, + ] + + +\def\usevisualcounter#{name}% + {\edef\currentvisualcounter{#{name}}% + \scale + [ + \c!maxwidth=\visualcounterparameter\c!maxwidth, + \c!maxheight=\visualcounterparameter\c!maxheight, + ]{\useMPgraphic{\visualcounterparameter\c!mp}}} + +\unexpanded\def\getvisualcountertext + {\dosetvisualcounterattributes\c!style\c!color + \visualcounterparameter\c!text} + +\unexpanded\def\getmaxvisualcountertext + {\dosetvisualcounterattributes\c!style\c!color + \visualcounterparameter{\c!max\c!text}} + +%D \section {The counters} +%D +%D \subsection {SqareMarker} + +\definevisualcounter + [squaremarkers] + [ \c!mp=visualcounter:squaremarkers, + \c!palette=visualcounter:squaremarkers, + \c!width=1EmWidth, + \c!distance=1EmWidth, + ] + +\definepalet + [visualcounter:squaremarkers] + [active=orange, + past=blue, + future=gray] + +\startuseMPgraphic{visualcounter:squaremarkers} + begingroup ; + + newnumeric n, m ; + % current count + n := \visualcounterparameter\c!n ; + % total count + m := max(\visualcounterparameter\c!last, 1) ; + + newnumeric width ; width := \visualcounterparameter\c!width ; + newnumeric height ; height := \visualcounterparameter\c!height ; + newnumeric distance ; distance := \visualcounterparameter\c!distance ; + + newpath marker ; + + pickup pencircle scaled \visualcounterparameter\c!rulethickness ; + + for i := 1 upto m : +% fill marker shifted (i*(width + distance), 0) +% hmm, I found no more elegant way of including the scaling + if i < n : marker := \visualcounterparameter{path} xyscaled (width, height) ; + fill marker shifted (i*(width + distance), 0) withcolor \MPcolor{\visualcounterparameter{\c!palette}:past} + elseif i = n : marker := \visualcounterparameter{path} xyscaled (width, 2*height) ; + fill marker shifted (i*(width + distance), -height) withcolor \MPcolor{\visualcounterparameter{\c!palette}:active} + else : marker := \visualcounterparameter{path} xyscaled (width, height) ; + fill marker shifted (i*(width + distance), 0) withcolor \MPcolor{\visualcounterparameter{\c!palette}:future} + fi ; + endfor ; + endgroup ; +\stopuseMPgraphic + +% +% save diff ;numeric diff; +% diff = .3cm ; +% +% save w; numeric w; +% w = xpart (lrcorner Field[Text][Text] - llcorner Field[Text][Text]) - diff ; +% +% save factor; numeric factor; +% if NOfPages <= 1 : +% factor = w ; +% else : +% factor = w/(NOfPages - 1) ; +% fi ; +% +% save p; path p ; +% p = unitsquare xyscaled (diff,diff) +% shifted (xpart llcorner Field[Text][Text],0.85cm) ; +% +% for i = 1 upto NOfPages: +% if PageNumber = i: +% fill p xyscaled (0,2) shifted ( (i-1)*factor,-diff-0.85cm) +% withcolor \MPcolor{simpleslides:contrastcolor} ; +% else : +% fill p shifted ( (i-1)*factor, 0) +% withcolor \MPcolor{simpleslides:variantcolor} ; +% fi ; +% endfor ; + +%D +%D \subsection {Dots} + +\definevisualcounter + [markers] + [ \c!mp=visualcounter:markers, + \c!palette=visualcounter:markers, + \c!width=1EmWidth, + \c!distance=1EmWidth, + path=unitcircle, + ] + +\definepalet + [visualcounter:markers] + [active=orange, + past=blue, + future=gray] + +\startuseMPgraphic{visualcounter:markers} + begingroup ; + + newnumeric n, m ; + % current count + n := \visualcounterparameter\c!n ; + % total count + m := max(\visualcounterparameter\c!last, 1) ; + + newnumeric width ; width := \visualcounterparameter\c!width ; + newnumeric distance ; distance := \visualcounterparameter\c!distance ; + + newpath marker ; + marker := \visualcounterparameter{\c!path} % + xyscaled (width, width) ; + + pickup pencircle scaled \visualcounterparameter\c!rulethickness ; + + for i := 1 upto m : + fill marker shifted (i*(width + distance), 0) withcolor + if i < n : \MPcolor{\visualcounterparameter{\c!palette}:past} + elseif i = n : \MPcolor{\visualcounterparameter{\c!palette}:active} + else : \MPcolor{\visualcounterparameter{\c!palette}:future} + fi ; + endfor ; +\stopuseMPgraphic + +%D \subsection {Count down} + +\definevisualcounter + [countdown] + [ \c!mp=visualcounter:countdown, + \c!palette=visualcounter:countdown, + \c!width=1EmWidth, + \c!height=1ExHeight, + \c!distance=1cm, + ] + +\definepalet + [visualcounter:countdown] + [active=orange, + past=blue, + future=gray] + +\startMPdefinitions + % mp-tool does not define new pair. + def newpair text v = forsuffixes i=v : save i ; pair i ; endfor ; enddef ; +\stopMPdefinitions + +\startuseMPgraphic{visualcounter:countdown} + begingroup ; + + % label + newpicture countertext ; countertext := textext("\getvisualcountertext") ; + newpicture max_countertext ; max_countertext := textext("\getmaxvisualcountertext") ; + + newnumeric inner_diameter, outer_diameter ; + inner_diameter := 1.5 * max(bbwidth(max_countertext), bbheight(max_countertext)); + outer_diameter := inner_diameter + + max(\visualcounterparameter\c!width, \visualcounterparameter\c!height) ; + + newpath inner_circle, outer_circle ; + % make the circle start at 12 o'clock and go clockwise + inner_circle := reverse (fullcircle scaled inner_diameter) rotated 90; + outer_circle := reverse (fullcircle scaled outer_diameter) rotated 90; + + newnumeric n, m ; + % current count + n := \visualcounterparameter\c!n ; + % total count + m := max(\visualcounterparameter\c!last, 1) ; + + % boundary distance + newnumeric inner_boundary, outer_boundary ; + inner_boundary := \visualcounterparameter\c!distance/m * (inner_diameter)/(outer_diameter) ; + outer_boundary := \visualcounterparameter\c!distance/m ; + + % step size + newnumeric inner_time, outer_time ; + inner_time := arclength (inner_circle)/m ; + outer_time := arclength (outer_circle)/m ; + + newpath slice ; + + newpair pt_inner_left, pt_inner_right ; + newpair pt_outer_left, pt_outer_right ; + + for i = 1 upto m : + pt_inner_left := point ((i-1)*inner_time) on inner_circle ; + pt_inner_right := point (i*inner_time - inner_boundary) on inner_circle ; + + pt_outer_left := point ((i-1)*outer_time) on outer_circle ; + pt_outer_right := point (i*outer_time - outer_boundary) on outer_circle ; + + slice := inner_circle cutbefore pt_inner_left cutafter pt_inner_right + --- reverse (outer_circle cutbefore pt_outer_left cutafter pt_outer_right ) + --- cycle ; + + fill slice withcolor + if i < n : \MPcolor{\visualcounterparameter{\c!palette}:past} + elseif i = n : \MPcolor{\visualcounterparameter{\c!palette}:active} + else : \MPcolor{\visualcounterparameter{\c!palette}:future} + fi ; + + endfor ; + + label (countertext, origin) ; + + endgroup ; + +\stopuseMPgraphic + +%D \subsection {Pulse line} + +\definevisualcounter + [pulseline] + [ \c!mp=visualcounter:pulseline, + \c!path={origin -- (((n-1)*width, 0) .. ((n-0.5)*width, -0.2height) + -- (n*width, height) -- ((n+0.5)*width, -0.2height) + .. ((n+1)*width,0)) -- ((m+1)*width, 0) + randomized 0.3width}, + \c!palette=visualcounter:pulseline, + \c!width=0.5EmWidth, + \c!height=3ExHeight, + \c!rulethickness=1bp, + ] + + +\definepalet + [visualcounter:pulseline] + [active=lightgreen, + past=darkgreen, + future=gray] + +\startuseMPgraphic{visualcounter:pulseline} + begingroup ; + + newnumeric width ; width := \visualcounterparameter\c!width ; + newnumeric height ; height := \visualcounterparameter\c!height ; + + numeric n ; n := \visualcounterparameter\c!n ; + numeric m ; m := max(\visualcounterparameter\c!last, 5) ; + + + newpath pulse ; + pulse := \visualcounterparameter\c!path ; + + newpath helper_line ; + helper_line := (0,-height) -- (0,height) ; + + newpair start_pulse, stop_pulse ; + start_pulse := pulse intersectionpoint (helper_line shifted ((n-1)*width, 0)) ; + stop_pulse := pulse intersectionpoint (helper_line shifted ((n+1)*width, 0)) ; + + + newpath past_pulse, active_pulse, future_pulse ; + past_pulse := pulse cutafter start_pulse ; + active_pulse := pulse cutbefore start_pulse cutafter stop_pulse ; + future_pulse := pulse cutbefore stop_pulse ; + + pickup pencircle scaled \visualcounterparameter\c!rulethickness ; + draw past_pulse withcolor \MPcolor{\visualcounterparameter{\c!palette}:past} ; + draw active_pulse withcolor \MPcolor{\visualcounterparameter{\c!palette}:active} ; + draw future_pulse withcolor \MPcolor{\visualcounterparameter{\c!palette}:future} ; + + endgroup ; +\stopuseMPgraphic + +%D \subsection {Scratch Marks} + +\definevisualcounter + [scratchmarks] + [ \c!mp=visualcounter:scratchmarks, + \c!palette=visualcounter:scratchmarks, + \c!width=3bp, + \c!height=3ExHeight, + \c!distance=0.5EmWidth, + angle=75, + ] + +\definepalet + [visualcounter:scratchmarks] + [active=orange, + past=blue, + future=gray] + +\startuseMPgraphic{visualcounter:scratchmarks} + begingroup ; + + linecap := rounded ; + + newnumeric distance ; distance := \visualcounterparameter\c!distance ; + newnumeric width ; width := \visualcounterparameter\c!width ; + newnumeric height ; height := \visualcounterparameter\c!height ; + newnumeric theta ; theta := \visualcounterparameter{angle} ; + + numeric n ; n := \visualcounterparameter\c!n ; + numeric m ; m := max(\visualcounterparameter\c!last, 1) ; + + + newpath left_marker, right_marker ; + + left_marker := origin -- height*dir(theta) ; + right_marker := (-4*width, height*sind(theta)) -- origin ; + + save marker ; + def marker (expr i) = + (if i mod 5 = 0 : right_marker else : left_marker fi) + shifted (i*distance, 0) + withcolor + if i < n : \MPcolor{\visualcounterparameter{\c!palette}:past} + elseif i = n : \MPcolor{\visualcounterparameter{\c!palette}:active} + else : \MPcolor{\visualcounterparameter{\c!palette}:future} + fi ; + enddef ; + + pickup pencircle scaled \visualcounterparameter\c!width ; + + for i := m downto 1 : + draw marker(i) ; + endfor ; + + draw marker(n) ; + + endgroup ; +\stopuseMPgraphic + +%D \subsection {Maya markers} + +\definevisualcounter + [mayanumbers] + [ \c!mp=visualcounter:mayanumbers, + \c!palette=visualcounter:mayanumbers, + \c!width=1EmWidth, + \c!height=1ExHeight, + \c!distance=0.25EmWidth, + ] + +\definepalet + [visualcounter:mayanumbers] + [active=orange, + past=blue, + future=gray] + + +\startuseMPgraphic{visualcounter:mayanumbers} + begingroup ; + + newnumeric n, m ; + % current count + n := \visualcounterparameter\c!n ; + % total count + m := max(\visualcounterparameter\c!last, 1) ; + + newnumeric distance ; distance := \visualcounterparameter\c!distance ; + + newnumeric width ; width := \visualcounterparameter\c!width ; + newnumeric height; height := \visualcounterparameter\c!height ; + + newnumeric linewidth ; linewidth := 4width + 5distance ; + newnumeric linedistance ; linedistance := 2distance ; + + newpath marker; + marker := ((0,0.5height) .. (0.5width,-0.1height) .. (0.5width, -0.4height) + .. (0,-0.8height) + .. (-0.5width,-0.4height) .. (-0.5width, -0.1height) .. cycle) ; + + newpath line ; + line := (-0.5width - distance, 0) .. (0.1width,0.8height) + --- (3.1width + 3distance, 0.8height) .. (3.5width + 4distance, 0) .. (3.6width + 2distance, -0.8height) + --- (0.1width, -0.8height) .. cycle ; + + newpath boundary ; + boundary := (linewidth -0.5width - distance, 0.9height) + -- ( (1 + floor(m/5))*(linewidth+linedistance), 0.9height) + -- ( (1 + floor(m/5))*(linewidth+linedistance), -0.9height) + -- (linewidth -0.5width - distance, -0.9height) + -- cycle; + + + % Draw the filled solid lines + newnumeric linecount ; linecount := floor ((n - 1) / 5) ; + for i = 1 upto linecount : + fill line shifted (i*(linewidth + linedistance), 0) + withcolor \MPcolor{\visualcounterparameter{\c!palette}:past} ; + endfor + + % Draw the filled dots + newnumeric offset ; offset := (linecount + 1)*(linewidth + linedistance) ; + + newnumeric markercount ; markercount := n - linecount*5 ; + if markercount = 5 : + fill line shifted (offset,0) + withcolor + \MPcolor{\visualcounterparameter{\c!palette}:active} ; + else : for i = 1 upto markercount : + fill marker shifted (offset + (i-1)*(width+distance), 0 ) + withcolor + if i = markercount : + \MPcolor{\visualcounterparameter{\c!palette}:active} ; + else : + \MPcolor{\visualcounterparameter{\c!palette}:past} ; + fi + endfor fi + + % Draw the empty dots + newnumeric markermax ; markermax := min(m - linecount*5, 4) ; + if markercount < 4 : + for i = markercount + 1 upto markermax : + fill marker shifted (offset + (i-1)*(width+distance),0) + withcolor + \MPcolor{\visualcounterparameter{\c!palette}:future} ; + endfor + fi + + for blockcount = linecount + 1 upto ceiling(m/5) : + offset := (blockcount + 1)*(linewidth + linedistance) ; + markercount := min(4, m - blockcount*5) ; + for i = 1 upto markercount : + fill marker shifted (offset + (i-1)*(width+distance),0) + withcolor + \MPcolor{\visualcounterparameter{\c!palette}:future} ; + endfor + endfor + + setbounds currentpicture to boundary ; + + endgroup ; + +\stopuseMPgraphic + + +\protect + +\stopmodule + |