hover3d.Rd
This adds text to identify points within a plot when the mouse is near them.
Coordinates of point to identify. Any reasonable way of defining the
coordinates is acceptable. See the function xyz.coords
for details.
Alternatively, x
may be the id of a single existing
object, and its vertices will be used.
A function to display information about identified points. NULL
indicates the default function, described in Details.
How close (in pixels) the mouse should be to a point to display the information.
Should the label persist? If "no"
(the default), it will be removed
when the mouse moves away. If "one"
, it will be removed when
another point is closer to the mouse. If "yes"
, it will
not be removed.
If the default labeller
is used, these labels will be displayed.
If the default labeller
is used, this adjustment will be passed
to text3d
to display the labels.
Arguments to pass to setUserCallbacks
.
The applyToDev
argument to that function is always
TRUE
.
Additional arguments that will be passed to the labeller.
If specified, the labeller
argument should specify a
function with arguments
compatible with function(index, ...)
. It will be called with
index
being the index of the point that was selected. It should
plot the label, and return the rgl ids of the objects that were
plotted.
When applyToScene
is TRUE
, all labels
or labelling objects will be created and attached to the scene. You may want to
delete them (using the ids returned in idverts
and
idtexts
) once rglwidget
has been called,
as they serve no purpose in the current device.
Only one hover handler is supported per scene or device.
A lowlevel
vector of ids is returned invisibly.
If applyToScene
is TRUE
, it will contain the
ids of the temporary objects created for Javascript.
It will also have these attributes:
identify3d
and selectpoints3d
work in the rgl device and return information
about the selections. setUserCallbacks
is the underlying function used by hover3d
.
# Create a labeller to show the coordinates of the selected point.
labelLocation <- function(x, y = NULL, z = NULL) {
xyz <- xyz.coords(x, y, z)
function(sel, ...) {
p <- with(xyz, matrix(c(x[sel], y[sel], z[sel]), ncol = 3))
c(text3d(p, texts = sprintf("x:%.2f", p[1]),
adj = c(-0.2, -0.6), ...),
text3d(p, texts = sprintf("y:%.2f", p[2]),
adj = c(-0.2, 0.5), ...),
text3d(p, texts = sprintf("z:%.2f", p[3]),
adj = c(-0.2, 1.6), ...))
}
}
xyz <- matrix(rnorm(30), ncol = 3)
open3d()
ids <- plot3d(xyz)
hover3d(xyz, labeller = labelLocation(xyz), col = "red", cex = 0.8)
3D plot
# The same thing using the data id:
# hover3d(ids["data"],
# labeller = labelLocation(rgl.attrib(ids["data"], "vertices")),
# col = "red", cex = 0.8)