Release: Refactor Load Types (#2241)
A very common source of annoyance and confusion is that trimesh.load
can return lots of different types depending on what type of file was
passed (i.e. #2239). This refactor changes the return types for the
loading functions to:
trimesh.load_scene -> Scene
- This loads into a
Scene
, the most general container which can hold
any loadable type. Most people should probably use this to load
geometry. trimesh.load_mesh -> Trimesh
- Forces all mesh objects in a scene into a single
Trimesh
object.
This potentially has to drop information and irreversibly concatenate
multiple meshes. - The implementation of the concatenation logic is now in
Scene.to_mesh
rather than load. trimesh.load_path -> Path
- This loads into either a
Path2D
orPath3D
which both inherit from
Path
trimesh.load -> Geometry
- This was the original load entry point and is deprecated, but there
are no current plans to remove it. It has been modified into a thin
wrapper forload_scene
that attempts to match the behavior of the
previous loader for backwards compatibility. In my testing against the
currentmain
branch it was returning the same types 99.8% of the
time
although there may be other subtle differences. trimesh.load(..., force='mesh')
will emit a deprecation warning in
favor ofload_mesh
trimesh.load(..., force='scene')
will emit a deprecation warning in
favor ofload_scene
Additional changes:
- Removes
Geometry.metadata['file_path']
in favor of
Geometry.source.file_path
. Everything that inherits fromGeometry
should now have a.source
attribute which is a typed dataclass. This
was something of a struggle asfile_path
was populated into metadata
on load, but we also try to make suremetadata
is preserved through
round-trips if at all possible. And so theload
inserted different
keys into the metadata. Making it first-class information rather than a
loose key seems like an improvement, but users will have to replace
mesh.metadata["file_name"]
withmesh.source.file_name
. - Moves all network fetching into
WebResolver
so it can be more easily
gated byallow_remote
. - Removes code for the following deprecations:
- January 2025 deprecation for
trimesh.resources.get
in favor of the
typed alternatives (get_json
,get_bytes
, etc). - January 2025 deprecation for
Scene.deduplicated
in favor of a very
short list comprehension onScene.duplicate_nodes
- March 2024 deprecation for
trimesh.graph.smoothed
in favor of
trimesh.graph.smooth_shaded
. - Adds the following new deprecations:
- January 2026
Path3D.to_planar
->Path3D.to_2D
to be consistent
withPath2D.to_3D
. - Fixes #2335
- Fixes #2330
- Fixes #2239
- Releases #2313
- Releases #2327
- Releases #2336
- Releases #2339