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
> ______________________________________________________________________ 
> _____________

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

Reply via email to