mesh-to-tetrahedra
v0.0.12
Published
quickly convert a triangle mesh into a set of tetrahedra that occupy approximately the same volume as the original mesh
Downloads
8
Maintainers
Readme
mesh-to-tetrahedra
quickly convert a triangle mesh into a set of tetrahedra that occupy approximately the same volume as the original mesh.
meant to help convert "surfaces" into "volumes" for building implicit distance functions.
converts a mesh with N triangles into N tetrahedra. each resulting tetrahedron extends from a surface triangle, towards the local "deep part" of the mesh [uses mesh-to-skeleton
to achieve this].
note:
- the tetrahedra will almost certainly NOT "perfectly" fill the mesh. there may be gaps/overlaps, especially near the "inner tips" of the tetrahedra. this tool is not a replacement for marching cubes etc.
- in some cases the number of result tetrahedra may be smaller than the number of triangles, eg if there was an error determining the inside/outside of the mesh due to open seams in the mesh.
Installation
npm i mesh-to-tetrahedra
Usage
var m2t = require('mesh-to-tetrahedra');
var bunny = require('bunny'); //indexed mesh of stanford bunny {cells, positions}
var tets = m2t.meshIndexed2Tetrahedra(bunny); //if you have a mesh {cells, positions}
//m2t.mesh2Tetrahedra(triangles); //if you have a list of triangles [[x,y,z],[x,y,z],[x,y,z]]
//result is list of tetra, each tetra has format
// [[x,y,z],[x,y,z],[x,y,z],[x,y,z]]
//full params:
//mesh2Tetrahedra(triangles, tetPercent=1.0, tetDist= 2.0, rescaleAmt = 1.0)
//set tetPercent < 1.0 if you only want the tetra's to extend only partially into the mesh.
//eg if tetPercent = 0.5, then the tetra's only go halfway deep into the mesh.
//the tetDist param works similarly but it works using absolute distance rather than percentage.
//note - tetDist is IGNORED unless tetPercent is zero/null/undefined.
//convert a tetra to triangles with correct winding using
//m2t.tetra2Triangles(tetra);
//also
//m2t.tetraNormalLines(tetra) ==> list of 4 line segments representing face-centered normal directions, each one [[x,y,z],[x,y,z]]
//m2t.triangleNormal(triangle) ==> returns [x,y,z] normal direction
^ standford bunny built from 3674 seemless tetrahedra -- looks identical to the original...
^ with tetrahedra shrunk to 75% size using rescaleAmt=0.75
^ detail
^ setting tetPercent
to a negative number to make a "spiky" mesh
^ slightly negative tetPercent
applied to npm icosphere
resembles Epcot's Spaceship Earth