R: Capture a Mouse Click

grid.locator {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 (dev.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(paste0("(", clickx, ", ", clicky, ")"),
                  click.locn$x + unit(2, "mm"), click.locn$y,
                  just="left")
      }

      grid.newpage() # (empty slate)
      ## device
      do.click("inches")
      Sys.sleep(1)

      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()
    }

[Package grid version 4.0.5 Index]