Thanks for sharing this, Wolfgang. Very nice effects! Duane Johnson (canadaduane) On Sep 19, 2007, at 5:55 AM, Wolfgang Schuster wrote:
Hi Mike,
you can control the rotation placement with the location key and the value middle for location seems to be what you want but the the result looks to me weird or broken and tried to fix this with the new value center, you can see the results in small example below.
\unprotect
\def\dodorotatenextbox#1#2% quite some trial and error -) {\dontshowcomposition \dontcomplain \ifnum#2=\plusfour % new, location=middle \!!widthb \nextboxwd \!!heightb\nextboxht \!!depthb \nextboxdp \setbox\nextbox\vbox{\vskip.5\nextboxht\hskip-.5\nextboxwd \flushnextbox}% \smashbox\nextbox \else\ifnum#2=\plusfive % wolf: location=center \!!widthb \nextboxwd \!!heightb\nextboxht \!!depthb \nextboxdp \setbox\nextbox\vbox{\vskip.5\nextboxht\hskip-.5\nextboxwd \flushnextbox}% \smashbox\nextbox \fi\fi \!!widtha \nextboxwd \!!heighta\nextboxht \!!deptha \nextboxdp \!!doneafalse \!!donebfalse \ifcase#2\or % 1: fit \or % 2: depth, not fit \!!doneatrue \!!donebtrue \or % 3: depth, fit \!!donebtrue \fi \setbox\nextbox\vbox{\hbox{\raise\nextboxdp\flushnextbox}}% \!!dimena \nextboxht \calculatecos\@@rorotation\edef\cos{\calculatedcos\@@rorotation}% \calculatesin\@@rorotation\edef\sin{\calculatedsin\@@rorotation}% \@@layerxpos\zeropoint \@@layerypos\zeropoint \@@layerxoff\zeropoint \@@layeryoff\zeropoint \ifdim\sin\points>\zeropoint \ifdim\cos\points>\zeropoint \@@layerxsiz \cos\!!widtha \@@layerysiz \sin\!!widtha \advance\@@layerxsiz \sin\!!dimena \advance\@@layerysiz \cos\!!dimena \@@layerypos \cos\!!dimena \if!!donea \@@layerxoff \negated\sin\!!dimena \advance\@@layerxoff \sin\!!deptha \fi \if!!doneb \@@layeryoff \cos\!!deptha \fi \dododorotatenextbox \else \@@layerxsiz \negated\cos\!!widtha \@@layerysiz \sin\!!widtha \advance\@@layerxsiz \sin\!!dimena \advance\@@layerysiz \negated\cos\!!dimena \@@layerxpos \negated\cos\!!widtha \if!!donea \@@layerxoff -\@@layerxsiz \advance\@@layerxoff \sin\!!deptha \fi \if!!doneb \@@layeryoff \negated\cos\!!heighta \fi \dododorotatenextbox \wd\nextbox\if!!donea\sin\!!deptha\else\@@layerxsiz\fi \fi \else \ifdim\cos\points<\zeropoint \@@layerxsiz \negated\cos\!!widtha \@@layerysiz \negated\sin\!!widtha \advance\@@layerxsiz \negated\sin\!!dimena \advance\@@layerysiz \negated\cos\!!dimena \@@layerxpos \@@layerxsiz \@@layerypos \negated\sin\!!widtha \if!!donea \@@layerxoff -\@@layerxsiz \advance\@@layerxoff \negated\sin\!!heighta \fi \if!!doneb \@@layeryoff \@@layerysiz \advance\@@layeryoff \cos\!!deptha \fi \dododorotatenextbox \wd\nextbox\if!!donea\negated\sin\!!heighta\else\@@layerxsiz\fi \else \@@layerxsiz \cos\!!widtha \@@layerysiz \negated\sin\!!widtha \advance\@@layerxsiz \negated\sin\!!dimena \advance\@@layerysiz \cos\!!dimena \ifdim\sin\points=\zeropoint \@@layerxpos \zeropoint \@@layerxoff \zeropoint \@@layerypos \@@layerysiz \if!!doneb \@@layeryoff \!!deptha \fi \else \@@layerypos \@@layerysiz \@@layerxpos \negated\sin\!!dimena \if!!donea \@@layerxoff -\@@layerxsiz \advance\@@layerxoff \negated\sin\!!heighta \fi \if!!doneb \@@layeryoff \negated\sin\!!deptha \fi \fi \dododorotatenextbox \ifdim\sin\points=\zeropoint \else \wd\nextbox\if!!donea\negated\sin\!!heighta\else \@@layerxsiz\fi \fi \fi \fi % new, location=middle \ifnum#2=\plusfour \setbox\nextbox\vbox{\vskip-.5\!!heightb\hskip.5\!!heightb \flushnextbox}% \nextboxwd\!!widthb \nextboxht\!!heightb \nextboxdp\!!depthb \else\ifnum#2=\plusfive % wolf: location=center \setbox\nextbox\vbox{\vskip.5\!!heightb\ifnum#1=270\relax \hskip2\!! heightb\fi\flushnextbox}% \nextboxwd\!!widthb \nextboxht\!!heightb \nextboxdp\!!depthb \fi\fi}
\def\complexrotate[#1]% framed met diepte ! {\getparameters[\??ro][#1]% \processaction [\@@rolocation] [ \v!depth=>\!!counta\plusthree\donefalse,% depth fit - raw box \v!fit=>\!!counta\plustwo \donefalse,% depth tight - raw box \v!broad=>\!!counta\plusone \donefalse,% nodepth fit - raw box \v!high=>\!!counta\plusone \donetrue ,% nodepth fit - framed \v!middle=>\!!counta\plusfour \donefalse,% centered, keep dimensions \v!center=>\!!counta\plusfive \donefalse,% \s!default=>\!!counta\plusthree\donetrue ,% depth fit - framed \s!unknown=>\!!counta\plusthree\donetrue ]% depth fit - framed \ifdone \def\docommand{\localframed[\??ro][#1,\c!location=]}% \else \let\docommand\relax \fi \dowithnextbox{\dorotatenextbox\@@rorotation\!!counta\egroup}\vbox \docommand}
\protect
\setuppapersize[A4,landscape][A4,landscape]
\starttext
\input knuth \rotate[rotation=0]{\framed[width=4cm,height=2cm,align={middle,lohi}] {Text}} text \rotate[rotation=90,location=center]{\framed [width=4cm,height=2cm,align={middle,lohi}]{Text}} text \rotate [rotation=180]{\framed[width=4cm,height=2cm,align={middle,lohi}] {Text}} text \rotate[rotation=270,location=center]{\framed [width=4cm,height=2cm,align={middle,lohi}]{Text}} text %\rotate [rotation=270]{\framed[width=4cm,height=2cm,align={middle,lohi}] {Text}} \input knuth
\stoptext
Wolfgang ______________________________________________________________________ _____________ 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://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ______________________________________________________________________ _____________