Mesh from Polygon Soup

Allows to get a consistent 3D mesh from a polygon soup, that is an unorganized set of polygons. The mesh can be triangulated and its exterior edges are computed.


PolygonSoup

Make a consistent mesh from a polygon soup.

R-CMD-check

A polygon soup is a set of unorganized polygons. For example, define a tetrahedron as follows:

vertices <- rbind(
  c(-1, -1, -1),
  c( 1,  1, -1),
  c( 1, -1,  1),
  c(-1,  1,  1)
)
faces <- rbind(
  c(1, 2, 3),
  c(3, 4, 2),
  c(4, 2, 1),
  c(4, 3, 1)
)

Now plot it by painting the front of its faces in blue and the back of its faces in red; then both colors appear:

library(rgl)
tmesh <- tmesh3d(
  vertices    = t(vertices),
  indices     = t(faces),
  homogeneous = FALSE
)
shade3d(tmesh, color = "blue", back = "cull")
shade3d(tmesh, color = "red", front = "cull")

To get a mesh with coherently oriented faces, use the Mesh function:

library(PolygonSoup)
mesh  <- Mesh(vertices, faces, normals = FALSE)
tmesh <- toRGL(mesh)
shade3d(tmesh, color = "blue", back = "cull")

The PolygonSoup package can deal with polygon soups whose polygons have any number of sides. For example, consider a pentagrammic prism:

The vertices and the faces of a pentagrammic prism are given in the package, in a list named PentagrammicPrism. Two faces, at the center of the two pentagramms, are pentagonal. Therefore one cannot directly plot the prism with rgl. The Mesh function allows to triangulate the faces:

mesh <- Mesh(
  mesh = pentagrammicPrism,
  triangulate = TRUE, normals = FALSE
)

Now we can plot the pentagrammic prism. We can also plot its edges with the help of the plotEdges function:

tmesh <- toRGL(mesh)
shade3d(tmesh, color = "maroon")
plotEdges(
  mesh[["vertices"]], mesh[["edges"]], color = "darkred",
  tubesRadius = 0.02, spheresRadius = 0.02
)

The triangulation introduces additional edges, and you probably don't want to see them. In mesh[["edges0"]], one has the edges before the triangulation:

shade3d(tmesh, color = "maroon")
plotEdges(
  mesh[["vertices"]], mesh[["edges0"]], color = "darkred",
  tubesRadius = 0.02, spheresRadius = 0.02
)

One can also plot only the exterior edges, that is to say the edges which are not between two coplanar faces:

shade3d(tmesh, color = "maroon")
plotEdges(
  mesh[["vertices"]], mesh[["exteriorEdges"]], color = "darkred",
  tubesRadius = 0.02, spheresRadius = 0.02
)

License

This package is provided under the GPL-3 license but it uses the C++ library CGAL. If you wish to use CGAL for commercial purposes, you must obtain a license from the GeometryFactory.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("PolygonSoup")

1.0.1 by Stéphane Laurent, 4 years ago


https://github.com/stla/PolygonSoup


Report a bug at https://github.com/stla/PolygonSoup/issues


Browse source code at https://github.com/cran/PolygonSoup


Authors: Stéphane Laurent [aut, cre]


Documentation:   PDF Manual  


GPL-3 license


Imports data.table, gmp, Rcpp, rgl

Suggests misc3d

Linking to BH, Rcpp, RcppCGAL, RcppEigen

System requirements: C++ 17, gmp, mpfr


See at CRAN