as.mesh3d.ashape3d converts an alphashape3d::ashape3d object into a nat/rgl compatible mesh3d surface

Note that this provides a link to the Rvcg package

as.mesh3d.boundingbox converts a nat boundingbox object into an rgl compatible mesh3d object.

# S3 method for ashape3d
as.mesh3d(x, tri_to_keep = 2L, ...)

# S3 method for hxsurf
as.mesh3d(x, Regions = NULL, material = NULL, drop = TRUE, ...)

# S3 method for boundingbox
as.mesh3d(x, ...)

Arguments

x

Object to convert to mesh3d

tri_to_keep

Which alphashape triangles to keep (expert use only - see triang entry in Value section of ashape3d docs for details.)

...

Additional arguments for methods

Regions

Character vector or regions to select from hxsurf object

material

rgl materials such as color

drop

Whether to drop unused vertices (default TRUE)

Value

a mesh3d object which can be plotted and manipulated using rgl and nat packages.

Details

An alpha shape is a generalisation of a convex hull enclosing a set of points. Unlike a convex hull, the resultant surface can be partly concave allowing the surface to more closely follow the set of points.

In this implementation, the parameter alpha is a scale factor with units of length that defines a spatial domain. When alpha is larger the alpha shape approaches the convex hull; when alpha is smaller the alpha shape has a greater number of faces / vertices i.e. it follows the points more closely.

Examples

# \donttest{
library(alphashape3d)
#> Loading required package: geometry
kcs20.a=ashape3d(xyzmatrix(kcs20), alpha = 10)
plot(kcs20.a)
#> Device  1  : alpha =  10 

# convert to mesh3d
kcs20.mesh=as.mesh3d(kcs20.a)

# check that all points are inside mesh
all(pointsinside(kcs20, kcs20.mesh))
#> [1] FALSE
# and show that we can also use the alphashape directly
all(pointsinside(kcs20, kcs20.a))
#> [1] TRUE

nclear3d()
wire3d(kcs20.mesh)
plot3d(kcs20, col=type, lwd=2)
# }
bb=boundingbox(kcs20)
mbb=as.mesh3d(bb)
# \donttest{
plot3d(kcs20)
# simple plot
plot3d(bb)
shade3d(mbb, col='red', alpha=0.3)
# }