Learn R Programming

MeshesOperations (version 0.1.0)

clipMesh: Clip a mesh

Description

Clip a mesh to the volume bounded by another mesh.

Usage

clipMesh(mesh, clipper, clipVolume = TRUE, normals = FALSE)

Value

A triangle mesh represented as the output of the

Mesh function.

Arguments

mesh

a mesh given either as a list containing (at least) the fields vertices and faces, otherwise a rgl mesh (i.e. a mesh3d object)

clipper

a mesh given either as a list containing (at least) the fields vertices and faces, otherwise a rgl mesh (i.e. a mesh3d object)

clipVolume

Boolean, whether the clipping has to be done on the volume bounded by mesh rather than on its surface (i.e. mesh will be kept closed if it is closed)

normals

Boolean, whether to compute the vertex normals of the output mesh

Examples

Run this code
# cube clipped to sphere
library(MeshesOperations)
library(rgl)
mesh    <- cube3d()
clipper <- sphereMesh(r= sqrt(2))
clippedMesh <- clipMesh(mesh, clipper)
open3d(windowRect = c(50, 50, 562, 562))
view3d(zoom = 0.9)
shade3d(toRGL(clippedMesh), color = "purple")

# Barth sextic ####
library(MeshesOperations)
library(rgl)
library(rmarchingcubes)
# isosurface function
gold <- (1+sqrt(5))/2
f <- function(x,y,z){
	x2 <- x*x; y2 <- y*y; z2 <- z*z
	4*(gold^2*x2-y2)*(gold^2*y2-z2)*(gold^2*z2-x2) -
			(1+2*gold)*(x2+y2+z2-1)^2
}
# grid
n <- 200L
x <- y <- z <- seq(-sqrt(3), sqrt(3), length.out = n)
g <- expand.grid(X = x, Y = y, Z = z)
# calculate voxel
voxel <- array(with(g, f(X, Y, Z)), dim = c(n, n, n))
# calculate isosurface
contour_shape <- contour3d(
		griddata = voxel, level = 0, x = x, y = y, z = z
)
# make rgl mesh (plotted later)
mesh <- tmesh3d(
		vertices = t(contour_shape[["vertices"]]),
		indices  = t(contour_shape[["triangles"]]),
		normals  = contour_shape[["normals"]],
		homogeneous = FALSE
)
# clip to sphere of radius sqrt(3)
clipper <- sphereMesh(r = sqrt(3))
clippedMesh <- clipMesh(mesh, clipper, clipVolume = FALSE, normals = TRUE)
# plot
open3d(windowRect = c(50, 50, 950, 500))
mfrow3d(1, 2)
view3d(zoom = 0.8)
shade3d(mesh, color = "darkred")
next3d()
view3d(zoom = 0.8)
shade3d(toRGL(clippedMesh), color = "darkred")

Run the code above in your browser using DataLab