% File src/library/grid/man/grobX.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2007 R Core Team
% Distributed under GPL 2 or later

\name{grobX}
\alias{grobX}
\alias{grobY}
\title{Create a Unit Describing a Grob Boundary Location}
\description{
  These functions create a unit object describing a location somewhere
  on the boundary of
  a grob.  They are generic.
}
\usage{
grobX(x, theta)
grobY(x, theta)
}
\arguments{
  \item{x}{A grob, or gList, or gTree, or gPath.}
  \item{theta}{An angle indicating where the location is
    on the grob boundary.  Can be one of \code{"east"},
    \code{"north"}, \code{"west"}, or \code{"south"},
    which correspond to angles 0, 90, 180, and 270,
    respectively.}
}
\details{
  The angle is anti-clockwise with zero corresponding to a line
  with an origin centred between the extreme
  points of the shape, and pointing at 3 o'clock.

  If the grob describes a single shape, the boundary value should
  correspond to the exact edge of the shape.

  If the grob describes multiple shapes, the boundary
  value will either correspond to the edge of a bounding box around all of
  the shapes described by the grob (for multiple rectangles, circles,
  xsplines, or text), or to a
  convex hull around all vertices of all shapes described by the grob
  (for multiple polygons, points, lines, polylines,
  and segments).

  Points grobs are currently a special case because the convex hull
  is based on the data symbol \emph{locations} and does not take
  into account the extent of the data symbols themselves.

  The extents of any arrow heads are currently \emph{not} taken into account.
}
\value{
  A unit object.
}
\author{Paul Murrell}
\seealso{
  \code{\link{unit}} and
  \code{\link{grobWidth}}
}
\keyword{dplot}
