\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL 4.12 - 3D Skin Surface Meshing
3D Skin Surface Meshing Reference

small.png
Nico Kruithof
This package allows to build a triangular mesh of a skin surface. Skin surfaces are used for modeling large molecules in biological computing. The surface is defined by a set of balls, representing the atoms of the molecule, and a shrink factor that determines the size of the smooth patches gluing the balls together. The construction of a triangular mesh of a smooth skin surface is often necessary for further analysis and for fast visualization. This package provides functions to construct a triangular mesh approximating the skin surface from a set of balls and a shrink factor. It also contains code to subdivide the mesh efficiently.


Introduced in: CGAL 3.3
Depends on: 3D Triangulations and 3D Polyhedral Surface
BibTeX: cgal:k-ssm3-18a
License: GPL

Classified Reference Pages

Concepts

Classes

Functions

Modules

 Concepts
 

Classes

class  CGAL::Skin_surface_3< SkinSurfaceTraits_3 >
 The Skin_surface_3 is the main class in this package. More...
 
struct  CGAL::Skin_surface_polyhedral_items_3< SkinSurface3 >
 An items class for the Polyhedron_3 that stores information in faces instead of an auxiliary data structure. More...
 
class  CGAL::Skin_surface_traits_3< K >
 The class Skin_surface_traits_3 is designed as a default traits class for the class Skin_surface_3<SkinSurfaceTraits_3>. More...
 
class  CGAL::Union_of_balls_3< SkinSurfaceTraits_3 >
 The Union_of_balls_3 is used to represent a skin surface with shrink factor equal to one, which is the boundary of the union of the input balls. More...
 

Functions

template<class WP_iterator , class Polyhedron >
void CGAL::make_skin_surface_mesh_3 (Polyhedron &p, WP_iterator begin, WP_iterator end, double shrink_factor=.5, int nSubdivisions=0, bool grow_balls=true)
 constructs a mesh of the skin surface defined by the weighted points and the shrink factor. More...
 
template<typename SkinSurface_3 , typename Polyhedron >
void CGAL::mesh_skin_surface_3 (const SkinSurface_3 &skin_surface, Polyhedron &p)
 constructs a mesh of the skin_surface in p. More...
 
template<class SkinSurface_3 , class Polyhedron >
void CGAL::subdivide_skin_surface_mesh_3 (const SkinSurface_3 &skin_surface, Polyhedron &p, int nSubdiv=1)
 subdivides a skin surface mesh constructed by the function mesh_skin_surface_3() using nSubdiv 1-4 split operations (each triangle is split into four sub-triangles) and the new vertices are moved towards the skin surface. More...
 

Function Documentation

◆ make_skin_surface_mesh_3()

template<class WP_iterator , class Polyhedron >
void CGAL::make_skin_surface_mesh_3 ( Polyhedron &  p,
WP_iterator  begin,
WP_iterator  end,
double  shrink_factor = .5,
int  nSubdivisions = 0,
bool  grow_balls = true 
)

#include <CGAL/make_skin_surface_mesh_3.h>

constructs a mesh of the skin surface defined by the weighted points and the shrink factor.

The function make_skin_surface_mesh_3() constructs a mesh isotopic to the skin surface based on the algorithm in [2]. It takes as input a range of weighted points and a shrink factor and outputs the mesh in a Polyhedron_3 object. A number of subdivision steps might be applied to refine the mesh.

Template Parameters
WP_iteratormust be an input iterator with weighted points as value type.
Polyhedronmust be an instance of Polyhedron_3.
Precondition
Polyhedron::HDS can be used as the template argument of the Polyhedron_incremental_builder_3<HDS>.
Examples:
Skin_surface_3/skin_surface_simple.cpp.

◆ mesh_skin_surface_3()

template<typename SkinSurface_3 , typename Polyhedron >
void CGAL::mesh_skin_surface_3 ( const SkinSurface_3 skin_surface,
Polyhedron &  p 
)

#include <CGAL/mesh_skin_surface_3.h>

constructs a mesh of the skin_surface in p.

The function mesh_skin_surface_3() constructs a mesh isotopic to the skin surface based on the algorithm in [2]. It takes as input a SkinSurface_3 object, which is a model of the SkinSurface_3 concept and outputs the mesh in a Polyhedron_3 object.

Template Parameters
SkinSurface_3must be a model of the concept SkinSurface_3.
Polyhedronmust be an instance of Polyhedron_3.
Precondition
Polyhedron::HDS can be used as the template argument of the Polyhedron_incremental_builder_3<HDS>.
Examples:
Skin_surface_3/skin_surface_pdb_reader.cpp, Skin_surface_3/skin_surface_retrieve_defining_weighted_points.cpp, Skin_surface_3/skin_surface_subdiv.cpp, and Skin_surface_3/skin_surface_subdiv_with_normals.cpp.

◆ subdivide_skin_surface_mesh_3()

template<class SkinSurface_3 , class Polyhedron >
void CGAL::subdivide_skin_surface_mesh_3 ( const SkinSurface_3 skin_surface,
Polyhedron &  p,
int  nSubdiv = 1 
)

#include <CGAL/subdivide_skin_surface_mesh_3.h>

subdivides a skin surface mesh constructed by the function mesh_skin_surface_3() using nSubdiv 1-4 split operations (each triangle is split into four sub-triangles) and the new vertices are moved towards the skin surface.

Template Parameters
SkinSurface_3must be a model of the concept SkinSurface_3.
Polyhedronmust be an instance of Polyhedron_3.
Examples:
Skin_surface_3/skin_surface_subdiv.cpp, and Skin_surface_3/skin_surface_subdiv_with_normals.cpp.