blob: 9d4c480d2aa65bb95f1d4ea5a6670de4fa05b2d1 [file] [log] [blame]
% File src/library/grid/man/viewportTransform.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2020 R Core Team
% Distributed under GPL 2 or later
\name{viewportTransform}
\alias{viewportTransform}
\alias{viewportTranslate}
\alias{viewportScale}
\alias{viewportRotate}
\alias{defnTranslate}
\alias{defnScale}
\alias{defnRotate}
\alias{useTranslate}
\alias{useScale}
\alias{useRotate}
\alias{groupTranslate}
\alias{groupScale}
\alias{groupRotate}
\alias{groupShear}
\alias{groupFlip}
\title{ Define a Group Transformation }
\description{
These functions define the transformation that will be applied
when a \code{grid.define()}d group is \code{grid.use()}d.
}
\usage{
viewportTransform(group, shear=groupShear(), flip=groupFlip(), device=TRUE)
viewportTranslate(group, device=TRUE)
viewportScale(group, device=TRUE)
viewportRotate(group, device=TRUE)
defnTranslate(group, inverse=FALSE, device=TRUE)
defnScale(group, inverse=FALSE)
defnRotate(group, inverse=FALSE, device=TRUE)
useTranslate(inverse=FALSE, device=TRUE)
useScale(inverse=FALSE)
useRotate(inverse=FALSE, device=TRUE)
groupTranslate(dx=0, dy=0)
groupRotate(r=0, device=TRUE)
groupScale(sx=1, sy=1)
groupShear(sx=0, sy=0)
groupFlip(flipX=FALSE, flipY=FALSE)
}
\arguments{
\item{group}{The group that is being transformed.}
\item{inverse}{A logical indicating whether we want the
forward or backward transformation.}
\item{shear}{An affine transformation matrix that describes
a shear transformation.}
\item{flip}{An affine transformation matrix that describes
a scaling inversion.}
\item{dx, dy}{The translation to apply.}
\item{r}{The rotation to apply.}
\item{sx, sy}{The scaling (or shear) to apply.}
\item{flipX, flipY}{Whether to negate the x-scaling or y-scaling
(logical).}
\item{device}{A logical indicating whether transformation should be
relative to the device or relative to the current viewport.}
}
\value{
An affine transformation matrix.
}
\details{
The \code{viewport*()} functions are not called directly. They
are passed as the \code{transform} argument to
\code{\link{grid.use}}.
The \code{defn*()} and \code{use*()} functions are also not called
directly, but can be useful to create custom transformation
functions. For example, see the source code for
\code{viewportTransform}.
The \code{group*()} functions generate basic affine transformation
matrices and may also be useful to create custom transformation
functions. For example, the \code{groupShear()} function can be
used to specify a shear transform to \code{viewportTransform()}.
It is also possible to define any function that returns a 3x3 matrix
(as long as the last column contains 0, 0, and 1)
and use it as the \code{transform} argument to
\code{\link{grid.use}}, but the results will probably be
device-dependent, and may be \emph{very} difficult
to predict. The function will be called with two arguments:
\code{group} and \code{device}.
}
\author{Paul Murrell}
\seealso{
\link{Grid}
}
\examples{
## NOTE: on devices without support for groups nothing will be drawn
grid.newpage()
## Define and use group in same viewport
pushViewport(viewport(width=.2, height=.2))
grid.define(circleGrob(gp=gpar(lwd=5)), name="circle")
grid.use("circle")
popViewport()
## Use group in viewport that is translated and scaled
pushViewport(viewport(x=.2, y=.2, width=.1, height=.1))
grid.use("circle")
popViewport()
## Use group in viewport that is translated and scaled
## BUT only make use of the translation
pushViewport(viewport(x=.2, y=.8, width=.1, height=.1))
grid.use("circle", transform=viewportTranslate)
popViewport()
## Use group in viewport that is translated and scaled
## unevenly (distorted)
pushViewport(viewport(x=.8, y=.7, width=.2, height=.4))
grid.use("circle")
popViewport()
}
\keyword{dplot}