A module for creating GLTF files with various geometric primitives and 3D text labels.
Project description
plot2gltf
A Claude-created Python module to save different types of simple geometry and annotations to glTF. You can view the result in any GLTF viewer, such as:
- The
<model-viewer>tag - Online viewers like https://gltf-viewer.donmccurdy.com/
- Three.js-based web viewers
- Blender
Key features:
- Supports multiple geometry types:
- Triangle meshes
- Line segments and line strips (as hairlines or cylinder tubes)
- Points (as dots or spheres)
- Normal vectors (as lines or arrows)
- Text labels
- Automatic color generation using the golden ratio for visually distinct colors
- Optional manual color specification
- All geometries are combined into a single GLTF file
- Proper material setup with metallic-roughness PBR workflow
It is meant to be as easy to use as generating a 3D matplotlib plot.
Example
# Example usage:
from plot2gltf import GLTFGeometryExporter
exporter = GLTFGeometryExporter()
# Add a triangle mesh
vertices = [
[0, 0, 0],
[1, 0, 0],
[0, 1, 0]
]
faces = [[0, 1, 2]]
exporter.add_triangles(vertices, faces, color=(1, 0, 0)) # Red triangles
# Add some lines
line_vertices = [
[0, 0, 0],
[1, 1, 1]
]
edges = [[0, 1]]
exporter.add_lines(line_vertices, edges) # Auto-generated color
# Create a square as a line strip
points = [
[0,0,0],
[1,0,0],
[1,1,0],
[0,1,0]
]
exporter.add_linestrip(points, color=(1,0,0)) # Creates a line strip
# The same but as cylinders with sphere mitering and endcaps
exporter.add_cylinder_strips(points, color=(1,0,0), radius=0.03, add_spheres=True)
# Add labels for some points
exporter.add_text([0, 0, 0.1], "Origin", size=0.2, color=(1, 1, 1)) # White text
exporter.add_text([1, 1, 1.1], "Point 2", size=0.3) # Auto-colored text
# Or for a curve
t = np.linspace(0, 2*np.pi, 50)
curve_points = np.column_stack([
np.cos(t),
np.sin(t),
np.zeros_like(t)
])
exporter.add_linestrip(curve_points, color=(0,1,0)) # Creates a smooth curve
# The same but as cylinders with sphere mitering and endcaps
exporter.add_cylinder_strips(curve_points, color=(0,1,0), radius=0.03, add_spheres=True)
# Add points
points = [
[0, 0, 0],
[1, 0, 0],
[0, 1, 0]
]
exporter.add_points(points, color=(0, 1, 0)) # Green points
# The same but as spheres
exporter.add_spheres(points, color=(0, 1, 0)) # Green points
# Add normals
normal_points = [[0, 0, 0]]
normal_directions = [[0, 0, 1]]
exporter.add_normals(normal_points, normal_directions, color=(0, 0, 1)) # Blue normals
# The same but as cylinders with cone caps
exporter.add_normal_arrows(
normal_points, normal_directions, color=(0, 0, 1),
shaft_radius=0.02, head_radius=0.04
)
# Save the file
exporter.save("output.gltf")
Installation
pip install plot2gltf
If you want to hack on it, you can just copy the plot2gltf directory and install dependencies via:
pip install -r requirements.txt
Demo
There is a weird, Claude-generated comprehensive demo. Run it via:
python demo.py
The output file is named demo_scene.gltf.
This demo file showcases:
-
Geometric Primitives:
- Triangles (cube and house)
- Lines (coordinate axes)
- Points (spiral pattern)
- Normals (orientation vectors)
-
Text Features:
- Different sizes
- Different colors
- Labels for geometric objects
- Stand-alone text examples
-
Color Usage:
- Manual color specification
- Automatic color generation
- Different colors for different object types
-
Complex Shapes:
- A cube with multiple faces
- A spiral point cloud
- A simple house shape
- Coordinate axes
The scene includes a variety of objects arranged in a way that makes it easy to see all the features.
License
Public Domain (CC0)
The included DejaVu font has its own (free) license.
Publish to PyPi
Increment __version__. Commit changes.
FLIT_USERNAME=__token__ flit publish
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plot2gltf-1.0.7.tar.gz.
File metadata
- Download URL: plot2gltf-1.0.7.tar.gz
- Upload date:
- Size: 351.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
729e7b4a6e884b7ca5a574bd0b54185c3dccb4d29e1e4eda53c511b98ec7fb75
|
|
| MD5 |
e1ad427d69968edd62e4d86a1cc0e4d2
|
|
| BLAKE2b-256 |
32986f02382f5779483678007a02f963952c63e34f97daa2b157f61b49a6929d
|
File details
Details for the file plot2gltf-1.0.7-py2.py3-none-any.whl.
File metadata
- Download URL: plot2gltf-1.0.7-py2.py3-none-any.whl
- Upload date:
- Size: 222.3 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e565ae701502cd28ce6d31c5274b9814b996cd4a035f136ebf1dd978de8b0583
|
|
| MD5 |
3fd21d5f0dc8c1dea0be2b615631e376
|
|
| BLAKE2b-256 |
73d4a9b153033b23f1b1b411a649ca6363aaa963efb608ba57e5bcd20130a9f0
|