Skip to main content

Real-time geometric processing on NumPy arrays. Easy to use, robust on real-world data.

Project description

trueform

Real-time geometric processing on NumPy arrays. Enriched NumPy arrays with support for vectorized spatial queries. Arrangements, booleans, registration, remeshing — at interactive speed on million-polygon meshes. Exact and robust to non-manifold flaps and pipeline artifacts. NumPy in, NumPy out.

Documentation | Live Examples

Installation

pip install trueform

Quick Tour

Primitives — typed NumPy arrays, single or batched:

import numpy as np
import trueform as tf

triangle = tf.Triangle(a=[0, 0, 0], b=[1, 0, 0], c=[0, 1, 0])
segment = tf.Segment([[0, 0, 0], [1, 1, 1]])
ray = tf.Ray(origin=[0.2, 0.2, -1], direction=[0, 0, 1])

# Add a leading dimension for batches
pts = tf.Point(np.random.rand(1000, 3).astype(np.float32))
segs = tf.Segment(start=np.random.rand(500, 3), end=np.random.rand(500, 3))

Meshes are created from NumPy arrays or read from files:

points = np.array([
    [0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]
], dtype=np.float32)
faces = np.array([
    [0, 1, 2], [0, 2, 3], [0, 3, 1], [1, 3, 2]
], dtype=np.int32)

mesh = tf.Mesh(faces, points)

# Or read from file
mesh = tf.Mesh(*tf.read_stl("model.stl"))

Queries — same functions for any combination. Batches broadcast:

# Batch × Primitive — distance field to a plane
plane = tf.Plane(normal=[0, 0, 1], offset=0.0)
scalars = tf.distance(pts, plane)                    # shape (1000,)

# Batch × Form — closest point on mesh for each segment
ids, dist2s, closest = tf.neighbor_search(mesh, segs) # 3 arrays, shape (500,)

# Single × Single
dist2, pt_a, pt_b = tf.closest_metric_point_pair(triangle, segment)

if (t := tf.ray_cast(ray, triangle)) is not None:
    hit_point = ray.origin + t * np.array(ray.direction)

Boolean operations:

(result_faces, result_points), labels, face_labels = tf.boolean_union(mesh0, mesh1)

# With intersection curves
(result_faces, result_points), labels, face_labels, (paths, curve_points) = tf.boolean_union(
    mesh0, mesh1, return_curves=True
)

Remeshing:

# Decimate to 50%
dec_faces, dec_points = tf.decimated(mesh, 0.5)

# Isotropic remesh to uniform edge lengths
dec_mesh = tf.Mesh(dec_faces, dec_points)
mel = tf.mean_edge_length(dec_mesh)
rem_faces, rem_points = tf.isotropic_remeshed(dec_mesh, mel)

Full documentation covers mesh analysis, topology, isocontours, curvature, and more.

Examples

Run examples locally:

git clone https://github.com/polydera/trueform.git
cd trueform/python/examples
pip install vtk  # for interactive examples
python vtk/collision.py mesh.stl

Blender Integration

Cached meshes with automatic dirty-tracking for live preview add-ons. See Blender docs.

Benchmarks

Operation Input Time Speedup Baseline TrueForm
Boolean Union 2 × 1M 28 ms 84× CGAL Simple_cartesian<double> exact predicates, canonical topology
Mesh–Mesh Curves 2 × 1M 7 ms 233× CGAL Simple_cartesian<double> exact predicates, canonical topology
ICP Registration 1M 7.7 ms 93× libigl AABB tree, random subsampling
Self-Intersection 1M 78 ms 37× libigl EPECK (GMP/MPFR) exact predicates, canonical topology
Isocontours 1M, 16 cuts 3.8 ms 38× VTK vtkContourFilter exact predicates
Connected Components 1M 15 ms 10× CGAL parallel union-find
Boundary Paths 1M 12 ms 11× CGAL Hierholzer's algorithm
k-NN Query 500K 1.7 µs nanoflann k-d tree AABB tree
Mesh–Mesh Distance 2 × 1M 0.2 ms Coal (FCL) OBBRSS OBBRSS tree
Decimation (50%) 1M 72 ms 50× CGAL edge_collapse parallel partitioned collapse
Principal Curvatures 1M 25 ms 55× libigl parallel k-ring quadric fitting

Apple M4 Max, 16 threads, Clang -O3. Full methodology

License

Dual-licensed: PolyForm Noncommercial 1.0.0 for noncommercial use, commercial licenses available.

Contributing

See CONTRIBUTING.md and open issues.

Citation

@software{trueform2025,
    title={trueform: Real-time Geometric Processing},
    author={Sajovic, {\v{Z}}iga and {et al.}},
    organization={XLAB d.o.o.},
    year={2025},
    url={https://github.com/polydera/trueform}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trueform-0.8.0.tar.gz (853.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

trueform-0.8.0-cp313-cp313-win_amd64.whl (24.2 MB view details)

Uploaded CPython 3.13Windows x86-64

trueform-0.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (71.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

trueform-0.8.0-cp313-cp313-macosx_11_0_arm64.whl (43.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

trueform-0.8.0-cp312-cp312-win_amd64.whl (24.2 MB view details)

Uploaded CPython 3.12Windows x86-64

trueform-0.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (71.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

trueform-0.8.0-cp312-cp312-macosx_11_0_arm64.whl (43.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

trueform-0.8.0-cp311-cp311-win_amd64.whl (24.2 MB view details)

Uploaded CPython 3.11Windows x86-64

trueform-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (71.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

trueform-0.8.0-cp311-cp311-macosx_11_0_arm64.whl (43.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file trueform-0.8.0.tar.gz.

File metadata

  • Download URL: trueform-0.8.0.tar.gz
  • Upload date:
  • Size: 853.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trueform-0.8.0.tar.gz
Algorithm Hash digest
SHA256 45ddc13ef622d9710beb6863b55e9052384be3054dc704bd538e22a42178548c
MD5 e3ba931404fadc6e362d14dde34e2397
BLAKE2b-256 c617db54afc8c5ad51b1a1bbe9d49e22744185ca87f34703e7243ee8db04bd38

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: trueform-0.8.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 24.2 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trueform-0.8.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 82990f24a72dfe701da2b3441c330464bf9d1067fd94b874c062b0f2b12436ed
MD5 f7848ce66cbea492a9706cbab885f483
BLAKE2b-256 ac50082f534a9d92a6c163deca7eac21583408c3a74d6fa320cd8eb064374c1f

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for trueform-0.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 022d251bdc4f297685d1630681b9d1ec5c43c54cd30191b5d87da3b3720f610d
MD5 b4a4ad0e01d9ada56bf18311b9e4b768
BLAKE2b-256 9e71093372afbc4c3ad0c4dce1f1ca28f8b1f662bbcc95ca86c64974768c53ae

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for trueform-0.8.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c99a68bb38c1c7ff5c08ad5dfb75c3e7d6b90eceb568dd8cff44300c62b88700
MD5 efe5bdce6a8731c4344a7e55c9fccabb
BLAKE2b-256 a1ca0d8a87bbcd1887f0076baf1cab0d4ce5f1228b899dab161ba82d02203d74

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: trueform-0.8.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 24.2 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trueform-0.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9dcb6bedd9a718e972fe4c50f3d39d4328b88b9fb88bfee50a0167d7432ffa2d
MD5 8140917b6997166f0b78dad01baa11a2
BLAKE2b-256 39915596155dcf6692b018a6c44e72f74f99b9c2da4972f3fb87105f9bb0ba35

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for trueform-0.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9092f263785b27deecc074a6403baf6bc6bbdd562c5512f63a9778c7dafa49aa
MD5 1f05ab8d71d8b0ca0879109a9bc20d36
BLAKE2b-256 ff69450a29ff2c8e40afd119dadac648a3e271d9a73650212465f6f7fd9aceb8

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for trueform-0.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 12f6e41f3605923dfe353ad8b9da0e02d6359dbe7c40a72069b98a5a0cc400ab
MD5 b05b287cc32298b69f28a52ee9883625
BLAKE2b-256 a74a767719690ca3d6ce13e6d5229ce351ed04e40b909ce2d1b304bca4e54432

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: trueform-0.8.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 24.2 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trueform-0.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1f13d06f0b896acc4fe09f07251c6f5329bd00300096cb77537345ca38c88f36
MD5 ffc43a3e3d39e54bac331f91681b9536
BLAKE2b-256 46cb1a1c75fea530a689aee38d736248bf041504a74e92df4a74b142405f00b3

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for trueform-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6e0f85a30c8de632e800a1a068aa4b2adca530b1f772df57ec561277b27d045d
MD5 ed0035c9a56e2a8eb4af3212ddc9ff12
BLAKE2b-256 05ffb63175b18d0e5a2f8c173feaf7abe3410caec98d592dc3f79a598fea79a9

See more details on using hashes here.

File details

Details for the file trueform-0.8.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for trueform-0.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f7d43c9a50334d6a8d31ebe6d4e069ef66dc5b8e23b4a9e7802a9945d6985a25
MD5 279a391e1d6e25b3970755c9907f4d52
BLAKE2b-256 64f8540fb8668b50e850b7d86e33421856eca95515229e3d7856391710294165

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page