1 """Mesh loading methods.
2
3 @todo: Implement loading from obj, ply etc.
4
5 @author: Stephan Wenger
6 @date: 2012-03-06
7 """
8
9 import os
10 import h5py
11 from glitter.convenience.pipeline import Pipeline
12 from glitter.convenience.defaultpipeline import get_default_program
13
14 -def load_mesh(filename, context=None, **kwargs):
15 loader = globals().get("load_%s" % (os.path.splitext(filename)[1][1:].lower()))
16 if not loader:
17 raise ValueError("no loader for '%s'" % filename)
18 return loader(filename, context=context, **kwargs)
19
20 -def load_hdf5(filename, color_defaults_to_position=True, context=None, **kwargs):
21 with h5py.File(filename, "r") as f:
22 kwargs["in_position"] = f["vertices"].value
23 if "colors" in f:
24 kwargs["in_color"] = f["colors"].value
25 elif color_defaults_to_position:
26 kwargs["in_color"] = kwargs["in_position"]
27 if "indices" in f:
28 kwargs["elements"] = f["indices"].value
29 return Pipeline(get_default_program(color=("in_color" in kwargs), context=context), use_framebuffer=False, **kwargs)
30
31 load_mesh.supported_formats = tuple(sorted(key[5:] for key, value in globals().items()
32 if key.startswith("load_") and callable(value) and value is not load_mesh))
33
34 __all__ = ["load_mesh", "load_hdf5"]
35