Outie
Turns every face of a mesh to point out, like an outie, even when the mesh is not closed.
A Python port of libigl's reorient_facets_raycast, the reference code for Takayama, Jacobson, Kavan and
Sorkine-Hornung, A Simple Method for Correcting Facet Orientations in Polygon Meshes Based on Ray Casting, 2014.
How
Faces that share edges are gathered into patches first, so a patch is decided as one. Rays are traced by Embree, through trimesh.
Use
import outie
polygons = outie.orient(polygons) # a list of rings, each n by 3
faces = outie.orient_mesh(vertices, faces) # triangles: vertices n by 3, faces m by 3
Both return what they were given, with the faces that pointed in turned round. Underneath are libigl's own two functions, with its names, arguments and outputs, for callers who need to know which faces moved or which patch each belongs to:
flip, patch = outie.reorient_facets_raycast(vertices, faces) # per triangle: turn it? and its patch
faces, patch = outie.bfs_orient(faces) # faces wound to agree, and their patches
The paper's settings are keyword arguments with libigl's defaults: rays_total, rays_minimum,
facet_wise, use_parity, and seed so a run repeats. Two additions, off unless asked for:
closed_by_volume settles a patch that is a closed surface by its signed volume, which is exact, and shoots
rays only for the rest; occluders are faces that block rays but are never turned, for the ground a model
stands on or the things around it, since a model with no floor is otherwise as open below as above.
Licence
MPL-2.0, as libigl is: this is a port of its code, taken at libigl commit 7100764. The method is its authors'.
Release files for outie 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| outie-0.1.4.tar.gz | 38.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| outie-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.6 kB
Release files / outie-0.1.4.tar.gz
| Download URL | outie-0.1.4.tar.gz |
|---|---|
| Size | 38.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab4aa2203c68f4227cdd7c452a4d72a7e82b1f18781164469720c04468a68d3f
|
|
BLAKE2b-256 checksum How to use checksums |
703f068285332dafefd28a57a7501dcadddfd522f4ee881df02de24744c5f224
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / outie-0.1.4-py3-none-any.whl
| Download URL | outie-0.1.4-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f9f102d05ffc3ba27468ff7442fd9f7bf3fffb78a102bac361b3ebf07f9d7062
|
|
BLAKE2b-256 checksum How to use checksums |
6778d65fd9cc09d64f88f8d4bde84a1e66a69ed62bd2d24c6f5efb5b788f3f54
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log