Skip to main content

PyVoxSurf

A Python C++ extension based on VoxSurf for voxelization of 3D meshes.

NOTE: PyPi distribution is only compatible with Microsoft Windows

Principle

  1. Rasterize triangles using three 2D axis aligned grids, using integer arithmetic (fixed floating point) for robust triangle interior checks
  2. [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()

volume1

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()

volume2

Credits

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)

Source distribution for pyvoxsurf 1.0.7
File Size Uploaded
pyvoxsurf-1.0.7.tar.gz 3.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyvoxsurf 1.0.7
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.0.7 This release

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page