11#include " pybind11/pybind11.h"
22#include " pybind11/stl.h"
3+ #include " pybind11/numpy.h"
34
4- #include " tiny_obj_loader.h"
5+ // Use double precision for better python integration.
6+ #define TINYOBJLOADER_USE_DOUBLE
57
8+ // define some helper functions for pybind11
9+ #define TINY_OBJ_LOADER_PYTHON_BINDING
10+ #include " tiny_obj_loader.h"
611
712namespace py = pybind11;
813
@@ -31,7 +36,11 @@ PYBIND11_MODULE(tinyobj, tobj_module)
3136
3237 py::class_<attrib_t >(tobj_module, " attrib_t" )
3338 .def (py::init<>())
34- .def_property_readonly (" vertices" , &attrib_t ::GetVertices);
39+ .def_readonly (" vertices" , &attrib_t ::vertices)
40+ .def_readonly (" normals" , &attrib_t ::normals)
41+ .def_readonly (" texcoords" , &attrib_t ::texcoords)
42+ .def_readonly (" colors" , &attrib_t ::colors)
43+ ;
3544
3645 py::class_<shape_t >(tobj_module, " shape_t" )
3746 .def (py::init<>())
@@ -47,9 +56,61 @@ PYBIND11_MODULE(tinyobj, tobj_module)
4756 .def_readwrite (" texcoord_index" , &index_t ::texcoord_index)
4857 ;
4958
50- // TODO(syoyo): write more bindings
59+ // NOTE(syoyo): It looks it is rather difficult to expose assignment by array index to
60+ // python world for array variable.
61+ // For example following python scripting does not work well.
62+ //
63+ // print(mat.diffuse)
64+ // >>> [0.1, 0.2, 0.3]
65+ // mat.diffuse[1] = 1.0
66+ // print(mat.diffuse)
67+ // >>> [0.1, 0.2, 0.3] # No modification
68+ //
69+ // https://github.com/pybind/pybind11/issues/1134
70+ //
71+ // so, we need to update array variable like this:
72+ //
73+ // diffuse = mat.diffuse
74+ // diffuse[1] = 1.0
75+ // mat.diffuse = diffuse
76+ //
5177 py::class_<material_t >(tobj_module, " material_t" )
52- .def (py::init<>());
78+ .def (py::init<>())
79+ .def_readwrite (" name" , &material_t ::name)
80+ .def_property (" ambient" , &material_t ::GetAmbient, &material_t ::SetAmbient)
81+ .def_property (" diffuse" , &material_t ::GetDiffuse, &material_t ::SetDiffuse)
82+ .def_property (" specular" , &material_t ::GetSpecular, &material_t ::SetSpecular)
83+ .def_property (" transmittance" , &material_t ::GetTransmittance, &material_t ::SetTransmittance)
84+ .def_readwrite (" shininess" , &material_t ::shininess)
85+ .def_readwrite (" ior" , &material_t ::ior)
86+ .def_readwrite (" dissolve" , &material_t ::dissolve)
87+ .def_readwrite (" illum" , &material_t ::illum)
88+ .def_readwrite (" ambient_texname" , &material_t ::ambient_texname)
89+ .def_readwrite (" diffuse_texname" , &material_t ::diffuse_texname)
90+ .def_readwrite (" specular_texname" , &material_t ::specular_texname)
91+ .def_readwrite (" specular_highlight_texname" , &material_t ::specular_highlight_texname)
92+ .def_readwrite (" bump_texname" , &material_t ::bump_texname)
93+ .def_readwrite (" displacement_texname" , &material_t ::displacement_texname)
94+ .def_readwrite (" alpha_texname" , &material_t ::alpha_texname)
95+ .def_readwrite (" reflection_texname" , &material_t ::reflection_texname)
96+ // TODO(syoyo): Expose texture parameter
97+ // PBR
98+ .def_readwrite (" roughness" , &material_t ::roughness)
99+ .def_readwrite (" metallic" , &material_t ::metallic)
100+ .def_readwrite (" sheen" , &material_t ::sheen)
101+ .def_readwrite (" clearcoat_thickness" , &material_t ::clearcoat_thickness)
102+ .def_readwrite (" clearcoat_roughness" , &material_t ::clearcoat_roughness)
103+ .def_readwrite (" anisotropy" , &material_t ::anisotropy)
104+ .def_readwrite (" anisotropy_rotation" , &material_t ::anisotropy_rotation)
105+
106+ .def_readwrite (" roughness_texname" , &material_t ::roughness_texname)
107+ .def_readwrite (" metallic_texname" , &material_t ::metallic_texname)
108+ .def_readwrite (" sheen_texname" , &material_t ::sheen_texname)
109+ .def_readwrite (" emissive_texname" , &material_t ::emissive_texname)
110+ .def_readwrite (" normal_texname" , &material_t ::normal_texname)
111+
112+ .def (" GetCustomParameter" , &material_t ::GetCustomParameter)
113+ ;
53114
54115 py::class_<mesh_t >(tobj_module, " mesh_t" )
55116 .def (py::init<>())
0 commit comments