From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/36656 Path: news.gmane.org!not-for-mail From: Wolfgang Schuster Newsgroups: gmane.comp.tex.context Subject: Re: externalfigure rotation Date: Wed, 19 Sep 2007 13:55:32 +0200 Message-ID: <20070919135532.de5137de.schuster.wolfgang@googlemail.com> References: <6703815B292B664DBAEC55EE3192386A20BB70@poseidon.in.dynetics.com> Reply-To: mailing list for ConTeXt users NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1190202998 21324 80.91.229.12 (19 Sep 2007 11:56:38 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 19 Sep 2007 11:56:38 +0000 (UTC) To: ntg-context@ntg.nl Original-X-From: ntg-context-bounces@ntg.nl Wed Sep 19 13:56:38 2007 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane.org Original-Received: from ronja.vet.uu.nl ([131.211.172.88] helo=ronja.ntg.nl) by lo.gmane.org with esmtp (Exim 4.50) id 1IXyAV-0005pq-Ic for gctc-ntg-context-518@m.gmane.org; Wed, 19 Sep 2007 13:56:35 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id BA06D20060; Wed, 19 Sep 2007 13:56:31 +0200 (CEST) Original-Received: from ronja.ntg.nl ([127.0.0.1]) by localhost (smtp.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 10010-08; Wed, 19 Sep 2007 13:56:20 +0200 (CEST) Original-Received: from ronja.vet.uu.nl (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 6E9B52003F; Wed, 19 Sep 2007 13:56:20 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 080C52003F for ; Wed, 19 Sep 2007 13:56:16 +0200 (CEST) Original-Received: from ronja.ntg.nl ([127.0.0.1]) by localhost (smtp.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 09636-04-2 for ; Wed, 19 Sep 2007 13:55:56 +0200 (CEST) Original-Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.171]) by ronja.ntg.nl (Postfix) with ESMTP id 8875D2003C for ; Wed, 19 Sep 2007 13:55:56 +0200 (CEST) Original-Received: by ug-out-1314.google.com with SMTP id h2so223638ugf for ; Wed, 19 Sep 2007 04:55:56 -0700 (PDT) Original-Received: by 10.66.221.5 with SMTP id t5mr1845081ugg.1190202956039; Wed, 19 Sep 2007 04:55:56 -0700 (PDT) Original-Received: from eve ( [89.51.234.87]) by mx.google.com with ESMTPS id x26sm1184518ugc.2007.09.19.04.55.44 (version=SSLv3 cipher=OTHER); Wed, 19 Sep 2007 04:55:51 -0700 (PDT) In-Reply-To: <6703815B292B664DBAEC55EE3192386A20BB70@poseidon.in.dynetics.com> X-Mailer: Sylpheed 2.4.4 (GTK+ 2.10.13; i686-pc-mingw32) X-Virus-Scanned: amavisd-new at ntg.nl X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.9 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: ntg-context-bounces@ntg.nl Errors-To: ntg-context-bounces@ntg.nl X-Virus-Scanned: amavisd-new at ntg.nl Xref: news.gmane.org gmane.comp.tex.context:36656 Archived-At: On Mon, 17 Sep 2007 08:38:06 -0500 "Santy, Michael" wrote: > > Hello, > > I'm looking to rotate an externalfigure inside of its bounding box in increments of 90 deg. Its real easy with 0 and 180, you can just do: > > \externalfigure[blah.pdf][width=5.0in, height=2.0in] > \rotate[rotation=180]{\externalfigure[blah.pdf][width=5.0in, height=2.0in]} > > Both commands result with an image that is 5.0in wide and 2.0in tall. > > But the problem comes when rotating a externalfigure at 90 and 270 degrees (or more generally, anything besides 0 and 180). The rotation is applied to the whole bounding box instead of rotating the picture within a bounding box. The following images will be rendered 2.0in wide and 5.0in tall. > > \rotate[rotation=90]{\externalfigure[blah.pdf][width=5.0in, height=2.0in]} > \rotate[rotation=270]{\externalfigure[blah.pdf][width=5.0in, height=2.0in]} > > Are there any plans to add support for specify an externalfigure's rotation within its bounding box, similar to this: > \externalfigure[blah.pdf][width=5.0in, height=2.0in, rotation=90] > > Cheers, > Mike 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 ___________________________________________________________________________________