fix that scene.scaled returned an invalid camera if it had been defined.
add trimesh.scene.reconstruct_instances which uses trimesh.registration.procrustes and is actually very fast (10x faster on some simple data than scene.duplicate_nodes) and gives great results on baked scenes.
add a bunch of type hints to trimesh.registration
add a Scene.simplify_quadric_decimation which runs mesh.simplify_quadric_decimation for every mesh geometry in the scene.
set the VIRTUAL_ENV variable in the Dockerfile which lets upstream potentially use uv.
Attempt to add a body to the Github releases in CI.
Deprecations for April 2025
Scene.dump(concatenate=True) which should be replaced with Scene.to_geometry() or Scene.to_mesh(), as otherwise the return types are inconsistent. This also lays some groundwork for #2241 as trimesh.load_mesh will be a thin wrapper around trimesh.load_scene(...).to_mesh()
Scene.deduplicated is removed because it's one line and also mildly pointless, you can get the same effect with Scene(list({g.identifier_hash: g for g in self.geometry.values()}.values()))
scene.scaled
returned an invalid camera if it had been defined.trimesh.scene.reconstruct_instances
which usestrimesh.registration.procrustes
and is actually very fast (10x faster on some simple data thanscene.duplicate_nodes
) and gives great results on baked scenes.trimesh.registration
Scene.simplify_quadric_decimation
which runsmesh.simplify_quadric_decimation
for every mesh geometry in the scene.trimesh.convex.QhullOptions
dataclass with a blurb for every boolean flag option in https://github.com/mikedh/trimesh/pull/2278/commits/8b2d46e7cb5a17233075a2c32ec7f617b2efeb6e, so you can construct this string with something likeQhullOptions(QbB=True)
and read the docstrings as you're doing it.VIRTUAL_ENV
variable in the Dockerfile which lets upstream potentially useuv
.body
to the Github releases in CI.Scene.dump(concatenate=True)
which should be replaced withScene.to_geometry()
orScene.to_mesh()
, as otherwise the return types are inconsistent. This also lays some groundwork for #2241 astrimesh.load_mesh
will be a thin wrapper aroundtrimesh.load_scene(...).to_mesh()
Scene.deduplicated
is removed because it's one line and also mildly pointless, you can get the same effect withScene(list({g.identifier_hash: g for g in self.geometry.values()}.values())
)