PLY — NaN Vertex Coordinates
A structurally perfect ASCII PLY in which one vertex reads `nan nan nan` — the value an exporter writes after dividing by a zero-length vector. The header, counts and face list are all correct, so the file parses; every bounding box, centroid and normal computed from it is then poisoned.
ply
model/ply
- Format
- PLY (ASCII)
- Vertices
- 8
- Faces
- 12
- Nan Vertices
- 1
- Nan Literal
- nan
- Header Valid
- true
Binary ply — no in-browser preview. Download it above to open in a compatible application.
Specifications
- Format
- PLY (ASCII)
- Vertices
- 8
- Faces
- 12
- Nan Vertices
- 1
- Nan Literal
- nan
- Header Valid
- true
- Geometry Valid
- false
Testing contract
Expected to fail- Scenario
- Parse the file, compute the bounding box, and compute a per-face normal for each of the three faces touching vertex 6.
- Expected result
- Parsing succeeds; the bounding box and those three normals are NaN. A robust importer rejects or repairs the vertex instead of propagating NaN into the scene graph.
What is a .ply file?
PLY (.ply, Polygon/Stanford Triangle Format) is a flexible 3D format storing a list of vertices and faces with arbitrary per-element properties (position, colour, normals, confidence), in ASCII or binary. It is standard for scanned meshes and point clouds.
How to use this file
Use an example .ply file to test mesh/point-cloud parsers (Open3D, MeshLab), per-vertex colour handling, and PLY conversion.
How to use this file for testing
“PLY — NaN Vertex Coordinates” is a deterministic Novus Examples fixture for Mesh repair testing, Error handling. 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: PLY (ASCII). 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("nan-coordinates.ply")
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 — Non-manifold Edge (three faces on one edge)The finned cube as a GLB. It renders without complaint in any viewer — rasterisation never asks about adjacency — so this is the fixture that separates tools which actually analyse topology from tools which merely draw triangles.

- 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.

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