grid.locator              package:grid              R Documentation

Capture a Mouse Click

Description:

     Allows the user to click the mouse once within the current
     graphics device and returns the location of the mouse click within
     the current viewport, in the specified coordinate system.

Usage:

     grid.locator(unit = "native")

Arguments:

    unit: The coordinate system in which to return the location of the
          mouse click. See the 'unit' function for valid coordinate
          systems.

Details:

     This function is modal (like the graphics package function
     'locator') so the command line and graphics drawing is blocked
     until the use has clicked the mouse  in the current device.

Value:

     A unit object representing the location of the mouse click within
     the current viewport, in the specified coordinate system.

     If the user did not click mouse button 1, the function (invisibly)
     returns 'NULL'.

Author(s):

     Paul Murrell

See Also:

     'viewport', 'unit', 'locator' in package 'graphics', and for an
     application see 'trellis.focus' and 'panel.identify' in package
     'lattice'.

Examples:

     if (interactive()) {
       ## Need to write a more sophisticated unit as.character method
       unittrim <- function(unit) {
         sub("^([0-9]+|[0-9]+[.][0-9])[0-9]*", "\\1", as.character(unit))
       }
       do.click <- function(unit) {
         click.locn <- grid.locator(unit)
         grid.segments(unit.c(click.locn$x, unit(0, "npc")),
                       unit.c(unit(0, "npc"), click.locn$y),
                       click.locn$x, click.locn$y,
                       gp=gpar(lty="dashed", col="grey"))
         grid.points(click.locn$x, click.locn$y, pch=16, size=unit(1, "mm"))
         clickx <- unittrim(click.locn$x)
         clicky <- unittrim(click.locn$y)
         grid.text(paste("(", clickx, ", ", clicky, ")", sep=""),
                   click.locn$x + unit(2, "mm"), click.locn$y,
                   just="left")
       }
       do.click("inches")
       pushViewport(viewport(width=0.5, height=0.5,
                              xscale=c(0, 100), yscale=c(0, 10)))
       grid.rect()
       grid.xaxis()
       grid.yaxis()
       do.click("native")
       popViewport()  
     }

