mesh-to-skeleton
v0.0.54
Published
convert a triangle mesh into a list of "skeletal points" - points of maximum distance from the surface
Downloads
19
Readme
mesh-to-skeleton
convert a triangle mesh into a list of "skeletal points" - points of "maximum distance from the surface".
intuitively, if the mesh was "dissolving" from the outside in, the skeletal points would be the last points locally dissolved.
works by raycasting through the mesh from each triangle and taking the midpoint of each result.
this is useful to assist in converting meshes into implicit surfaces / signed distance functions, and other purposes.
Installation
npm i mesh-to-skeleton
Usage
var mts = require('mesh-to-skeleton');
var getSkeletalPoints = mts.getSkeletalPoints;
var getSkeletalPoints_resampled = mts.getSkeletalPoints_resampled;
var bunny = require('bunny'); //stanford bunny model
var ti = require('triangles-index'); //tool to convert indexed model into triangle list
var triangles = ti.deindexTriangles_meshView(bunny); //raw list of triangles
//each triangle is an array of 3 pts [[x,y,z],[x,y,z],[x,y,z]]
var skeletonPtsObjs = getSkeletalPoints(triangles); //list of {pt: [x,y,z], dist: distanceToSurface, triangleIndex: i}
//instead of using triangles to generate the points,
//you can generate X random points uniformly distributed
//across the mesh surface
//here we generate 5000
var skeletonPtsObjs_resampled = getSkeletalPoints_resampled(triangles, 5000);
//getSkeletalPoints(triangles, eps=0.01, relaxIters=0, quickRelaxBailOut=true, nKNNNeighbors=5)
//getSkeletalPoints_resampled(triangles, numPts, eps=0.01, relaxIters = 0, quickRelaxBailOut=true, nKNNNeighbors=5)
// the following used to make 'relaxed' image in readme [this may take a few minutes!]
// var skeletonPtsObjs_resampled = getSkeletalPoints_resampled(triangles, 3000, 0.01, 32, false, 10);
^ original bunny mesh
^ resampled, relaxed skeletal points (3000 total)
^ quick [nonrelaxed] skeletal points, one for each triangle (3674 total)
^ nonrelaxed, using 500 random points
^ nonrelaxed, using 50000 random points