OBJ — Non-manifold Edge (three faces on one edge)
The reference cube with a two-triangle fin welded along one top edge, so that edge is shared by three faces instead of two. Non-manifold edges have no defined surface orientation, which is why slicers refuse them and why subdivision and offsetting produce garbage.
Interactive preview rendered from the equivalent glTF (non-manifold-edge.glb); drag to orbit. Download the file above for the OBJ original.
Specifications
- Format
- Wavefront OBJ
- Vertices
- 10
- Triangles
- 14
- Non Manifold Edges
- 1
- Faces On That Edge
- 3
- Boundary Edges
- 3
- Manifold Edges
- 18
- Defect
- welded fin
- Manifold
- false
Testing contract
Expected to recover- Scenario
- Build an edge-to-face adjacency map and count the incident faces on every edge.
- Expected result
- 18 edges report two faces, three report one (the fin's free boundary) and exactly one reports three; a slicer should refuse the solid rather than guess an orientation for that edge.
What is a .obj file?
OBJ (Wavefront OBJ) is a text-based 3D geometry format defining vertices, texture coordinates, normals, and faces, and referencing materials through a companion MTL file. It is simple, widely supported, and can represent polygonal meshes with UV mapping. It is a common interchange format across 3D tools.
How to use this file
Use an example OBJ to test mesh and UV parsing, MTL material resolution, and importers in 3D engines, renderers, and modeling applications.
How to use this file for testing
“OBJ — Non-manifold Edge (three faces on one edge)” is a deterministic Novus Examples fixture for Mesh repair testing, Mesh processing QA. A watertight mesh paired with a deliberately broken twin (holes, missing faces, open ends) — the input and intended result for a mesh-repair / hole-filling tool.
Documented properties for this file: Wavefront OBJ. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
3D and CAD fixtures carry one small, documented solid or scene. Convert and inspect against the known geometry, units, and structure; format twins let you diff interchange fidelity, and the 3D viewer previews the actual mesh.
Code examples
import trimesh # pip install trimesh
mesh = trimesh.load("non-manifold-edge.obj")
print(mesh.bounds, mesh.faces.shape)Related files
- glbGLB — Clean Reference CubeThe clean reference cube as a GLB, so the same baseline is available to glTF tooling and to the site's 3D preview. Identical topology to the OBJ twin in this group.

- glbGLB — Duplicate Vertices, Split SeamThe duplicated-corner cube as a GLB. Because glTF stores every attribute per vertex, the duplication doubles the position and normal buffers for a shape that needs eight corners — the cheapest optimisation an asset pipeline can make, and the one this fixture measures.

- glbGLB — Inverted Normals / Mixed WindingThe mixed-winding cube as a GLB with a default single-sided material, so the reversed faces are culled and you can see straight through the model. Turning on doubleSided hides the defect without fixing it, which is the trap this fixture is for.

- glbGLB — Zero-area TrianglesThe same four degenerate triangles inside a structurally valid GLB. The file passes every glTF schema check — nothing in the format forbids a zero-area face — so this is the fixture for geometry validation as opposed to document validation.

- objOBJ — Clean Reference CubeA welded, manifold, consistently-wound unit cube: 8 vertices, 12 triangles, 18 edges each shared by exactly two faces, and a signed volume of exactly 1.0. This is the answer key — each defect fixture in the degenerate/ subcategory is this mesh with exactly one thing wrong.

- objOBJ — Duplicate Vertices, Split SeamThe reference cube with all eight corners stored twice at bit-identical coordinates: the first six triangles use one copy, the last six use the other. It renders as a closed cube but is topologically two disconnected surface patches with a split seam, which is why smoothing, subdivision and boolean operations all misbehave on it.

Generated by generation/models_p7.py. Free for any use, no attribution required — license.