PyVoxSurf
A Python C++ extension based on VoxSurf for voxelization of 3D meshes.
NOTE: PyPi distribution is only compatible with Microsoft Windows
Principle
- Rasterize triangles using three 2D axis aligned grids, using integer arithmetic (fixed floating point) for robust triangle interior checks
- [Optional] Fill interior of voxelized surface with either of two schemes: Inside - fastest method evaluates whether a voxel is inside from only one direction or Robust - evaluates whether a voxel is inside from all three directions and a voting determines final status
Usage
pyvoxsurf.voxelize_stl
| Argument | Type | Default | Description |
|---|---|---|---|
filename |
string | Filename of .stl file | |
resolution |
integer | Number of voxel slices in the z-axis | |
bounds |
[2x3] array | [Optional] Min and max bounds in (x, y, z) coordinates of desired voxel volume | |
voxel_fill |
string | "None" | [Optional] "None", "Inside", or "Robust" type of filling |
import pyvoxsurf
from mayavi import mlab
volume1 = pyvoxsurf.voxelize_stl("model.stl",200,[],"Robust")
print(volume1.shape)
# Visualize voxelized model
from tvtk.util.ctf import PiecewiseFunction
mlab.figure(size=(800,800))
vol = mlab.pipeline.volume(mlab.pipeline.scalar_field(volume1))
mlab.title('Voxelized model',height=0.9,size=0.5)
mlab.orientation_axes()
otf = PiecewiseFunction()
otf.add_point(0,0)
otf.add_point(0.001, 1)
otf.add_point(1,1)
vol._otf = otf
vol._volume_property.set_scalar_opacity(otf)
mlab.show()
pyvoxsurf.voxelize
| Argument | Type | Default | Description |
|---|---|---|---|
vertices |
[nx3] array | Vertex positions in (x, y, z) coordinates | |
triangle_indices |
[nx3] array | Indices of connected vertices forming triangles of mesh | |
bounds |
[2x3] array | Min and max bounds in (x, y, z) coordinates of desired voxel volume | |
resolution |
integer | Number of voxel slices in the z-axis | |
voxel_fill |
string | "None" | [Optional] "None", "Inside", or "Robust" type of filling |
import pyvoxsurf
import trimesh
import numpy as np
from mayavi import mlab
mesh = trimesh.load("model.stl") # Load stl file
# Find the max and min coordinates of the mesh to form a bounding box
mesh_min_corner = [np.min(mesh.vertices[:,0]), np.min(mesh.vertices[:,1]), np.min(mesh.vertices[:,2])]
mesh_max_corner = [np.max(mesh.vertices[:,0]), np.max(mesh.vertices[:,1]), np.max(mesh.vertices[:,2])]
bounds = np.stack((mesh_min_corner,mesh_max_corner))
volume2 = pyvoxsurf.voxelize(mesh.vertices,mesh.faces,bounds,100,"Inside")
print(volume2.shape)
# Visualize voxelized model
from tvtk.util.ctf import PiecewiseFunction
mlab.figure(size=(800,800))
vol = mlab.pipeline.volume(mlab.pipeline.scalar_field(volume2))
mlab.title('Voxelized model',height=0.9,size=0.5)
mlab.orientation_axes()
otf = PiecewiseFunction()
otf.add_point(0,0)
otf.add_point(0.001, 1)
otf.add_point(1,1)
vol._otf = otf
vol._volume_property.set_scalar_opacity(otf)
mlab.show()
Credits
- VoxSurf by sylefeb
- VoxSurf Pybind11 bindings by mjgalindo
- PyVoxSurf packaging and documentation by jttoombs
- STL model of 3D knot by chylld
Release files for pyvoxsurf 1.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyvoxsurf-1.0.7.tar.gz | 3.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyvoxsurf-1.0.7-cp38-cp38-win_amd64.whl | CPython 3.8 | CPython 3.8 | Windows x86-64 | Details |
Total release size:102.8 kB
Release files / pyvoxsurf-1.0.7.tar.gz
| Download URL | pyvoxsurf-1.0.7.tar.gz |
|---|---|
| Size | 3.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e872a37c5e9ea9f400bbfc268b6af2723ce59b6575d56f269e2c206049dc3e42
|
|
BLAKE2b-256 checksum How to use checksums |
bb16402dd4328b556040bfa3f8f7ddc1af44e5493b753372f4708c670ed71e57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3
|
Release files / pyvoxsurf-1.0.7-cp38-cp38-win_amd64.whl
| Download URL | pyvoxsurf-1.0.7-cp38-cp38-win_amd64.whl |
|---|---|
| Size | 99.2 kB |
| Tags | CPython 3.8 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
999d0877e50ddb5cb67c350c07d9d2a60f9e75e6110ef2301db16971ffeed070
|
|
BLAKE2b-256 checksum How to use checksums |
8381f37687b9d44384017c334caf8b12352ffcf4a874010326085a8c15e77f7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3
|