将 mesh3d material 更改为 RGL 中的线
Changing mesh3d material to lines in RGL
刚刚注意到我无法再通过更改对象内的 materials 列表来创建将 cube3d() material 更改为线。不过,这仍然适用于颜色。下面的代码片段用于创建一个实心的绿色立方体,然后在更改 3 个参数后,一个立方体的蓝色轮廓。
当我用 'shapelist3d()' 绘制许多对象并想勾勒出其中一些对象时,我会使用此功能。有没有一种新方法可以选择性地更改某些对象 materials?
使用 rgl v0.107.14 和 R 4.1.1,但也注意到以前的版本。
library(rgl)
cb <- cube3d(col = "green") #Solid green cube
rgl::shapelist3d(list(cb))
cb$material$color <- "blue"
cb$material$front <- "line"
cb$material$back <- "line"
rgl::shapelist3d(list(cb)) #Solid blue cube, but should be wire
由 reprex package (v2.0.1)
于 2021-09-06 创建
这看起来像是 shade3d
中的错误,由 shapelist3d
调用。
有 3 种方法可以指定一个形状应该画成轮廓:
- 作为 material 属性(您使用的)
- 作为 shade3d 的参数
- 通过调用 wire3d 而不是 shade3d
不幸的是,假设使用第三种方法:shade3d
被调用时没有参数,但它忽略了 material 属性.
对此有几个解决方法。您可以将轮廓对象保存在单独的列表中,然后调用 lapply(outlinelist, wire3d)
将它们绘制成轮廓。或者您可以自己编写 shade3d
的替代品来修复错误,例如
myshade3d <- function(x, front = "filled", back = "filled", ...) {
if (!is.null(x$material$front)) front <- x$material$front
if (!is.null(x$material$back)) back <- x$material$back
rgl::shade3d(x, front = front, back = back, ...)
}
然后将其命名为 lapply(fulllist, myshade3d)
。
编辑添加:此错误现已在开发版本中修复,可安装(如果您有先决条件!)as
remotes::install_github("dmurdoch/rgl")
刚刚注意到我无法再通过更改对象内的 materials 列表来创建将 cube3d() material 更改为线。不过,这仍然适用于颜色。下面的代码片段用于创建一个实心的绿色立方体,然后在更改 3 个参数后,一个立方体的蓝色轮廓。
当我用 'shapelist3d()' 绘制许多对象并想勾勒出其中一些对象时,我会使用此功能。有没有一种新方法可以选择性地更改某些对象 materials?
使用 rgl v0.107.14 和 R 4.1.1,但也注意到以前的版本。
library(rgl)
cb <- cube3d(col = "green") #Solid green cube
rgl::shapelist3d(list(cb))
cb$material$color <- "blue"
cb$material$front <- "line"
cb$material$back <- "line"
rgl::shapelist3d(list(cb)) #Solid blue cube, but should be wire
由 reprex package (v2.0.1)
于 2021-09-06 创建这看起来像是 shade3d
中的错误,由 shapelist3d
调用。
有 3 种方法可以指定一个形状应该画成轮廓:
- 作为 material 属性(您使用的)
- 作为 shade3d 的参数
- 通过调用 wire3d 而不是 shade3d
不幸的是,假设使用第三种方法:shade3d
被调用时没有参数,但它忽略了 material 属性.
对此有几个解决方法。您可以将轮廓对象保存在单独的列表中,然后调用 lapply(outlinelist, wire3d)
将它们绘制成轮廓。或者您可以自己编写 shade3d
的替代品来修复错误,例如
myshade3d <- function(x, front = "filled", back = "filled", ...) {
if (!is.null(x$material$front)) front <- x$material$front
if (!is.null(x$material$back)) back <- x$material$back
rgl::shade3d(x, front = front, back = back, ...)
}
然后将其命名为 lapply(fulllist, myshade3d)
。
编辑添加:此错误现已在开发版本中修复,可安装(如果您有先决条件!)as
remotes::install_github("dmurdoch/rgl")