awesome. ?Thank you very much for the quick response. I think this is
exactly what I was looking for.
Here's a basic framework:
`idloc` <-
function(xy,n=1, tol=0.25){
tol2=tol^2
icoords = cbind(grconvertX(xy[,1],to="inches"),grconvertY(xy[,2],to="inches"))
hit = c()
missed = matrix(ncol=2,nrow=0)
for(i in 1:n){
ptU = locator(1)
pt = c(grconvertX(ptU$x,to='inches'),grconvertY(ptU$y,to="inches"))
d2 = (icoords[,1]-pt[1])^2 + (icoords[,2]-pt[2])^2
if (any(d2 < tol2)){
print("clicked")
hit = c(hit, (1:dim(xy)[1])[d2 < tol2])
}else{
print("missed")
missed=rbind(missed,c(ptU$x,ptU$y))
}
}
return(list(hit=hit,missed=missed))
}
Test:
xy = cbind(1:10,runif(10))
plot(xy)
idloc(xy,10)
now click ten times, on points or off points. You get back:
$hit
[1] 4 6 7 10
$missed
[,1] [,2]
[1,] 5.698940 0.6835392
[2,] 6.216171 0.6144229
[3,] 5.877982 0.5752569
[4,] 6.773190 0.2895761
[5,] 7.210847 0.3126149
[6,] 9.239985 0.5614337
- $hit is the indices of the points you hit (in order, including
duplicates) and $missed are the coordinates of the misses.
It crashes out if you hit the middle button for the locator, but that
should be easy enough to fixup. It doesn't label hit points, but
that's also easy enough to do.
Barry