Skip to content

Commit 0fd8b20

Browse files
committed
Make python binding sample work without numpy installed.
1 parent 0a67aaa commit 0fd8b20

File tree

1 file changed

+33
-7
lines changed

1 file changed

+33
-7
lines changed

python/sample.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import sys
22
import tinyobjloader
33

4+
is_numpy_available = False
5+
try:
6+
import numpy
7+
is_numpy_available = True
8+
except:
9+
print("NumPy not installed. Do not use numpy_*** API. If you encounter slow performance, see a performance tips for non-numpy API https://github.com/tinyobjloader/tinyobjloader/issues/275")
10+
411
filename = "../models/cornell_box.obj"
512

613

@@ -24,9 +31,9 @@
2431
print("Warn:", reader.Warning())
2532

2633
attrib = reader.GetAttrib()
27-
print("attrib.vertices = ", len(attrib.vertices))
28-
print("attrib.normals = ", len(attrib.normals))
29-
print("attrib.texcoords = ", len(attrib.texcoords))
34+
print("len(attrib.vertices) = ", len(attrib.vertices))
35+
print("len(attrib.normals) = ", len(attrib.normals))
36+
print("len(attrib.texcoords) = ", len(attrib.texcoords))
3037

3138
# vertex data must be `xyzxyzxyz...`
3239
assert len(attrib.vertices) % 3 == 0
@@ -37,6 +44,19 @@
3744
# texcoords data must be `uvuvuv...`
3845
assert len(attrib.texcoords) % 2 == 0
3946

47+
# Performance note
48+
# (direct?) array access through member variable is quite slow.
49+
# https://github.com/tinyobjloader/tinyobjloader/issues/275#issuecomment-753465833
50+
#
51+
# We encourage first copy(?) varible to Python world:
52+
#
53+
# vertices = attrib.vertices
54+
#
55+
# for i in range(...)
56+
# v = vertices[i]
57+
#
58+
# Or please consider using numpy_*** interface(e.g. numpy_vertices())
59+
4060
for (i, v) in enumerate(attrib.vertices):
4161
print("v[{}] = {}".format(i, v))
4262

@@ -46,7 +66,10 @@
4666
for (i, v) in enumerate(attrib.texcoords):
4767
print("vt[{}] = {}".format(i, t))
4868

49-
print("numpy_vertices = {}".format(attrib.numpy_vertices()))
69+
if is_numpy_available:
70+
print("numpy_v = {}".format(attrib.numpy_vertices()))
71+
print("numpy_vn = {}".format(attrib.numpy_normals()))
72+
print("numpy_vt = {}".format(attrib.numpy_texcoords()))
5073

5174
materials = reader.GetMaterials()
5275
print("Num materials: ", len(materials))
@@ -73,6 +96,9 @@
7396
print("[{}] v_idx {}".format(i, idx.vertex_index))
7497
print("[{}] vn_idx {}".format(i, idx.normal_index))
7598
print("[{}] vt_idx {}".format(i, idx.texcoord_index))
76-
print("numpy_indices = {}".format(shape.mesh.numpy_indices()))
77-
print("numpy_num_face_vertices = {}".format(shape.mesh.numpy_num_face_vertices()))
78-
print("numpy_material_ids = {}".format(shape.mesh.numpy_material_ids()))
99+
print("material_ids = {}".format(shape.mesh.material_ids))
100+
101+
if is_numpy_available:
102+
print("numpy_indices = {}".format(shape.mesh.numpy_indices()))
103+
print("numpy_num_face_vertices = {}".format(shape.mesh.numpy_num_face_vertices()))
104+
print("numpy_material_ids = {}".format(shape.mesh.numpy_material_ids()))

0 commit comments

Comments
 (0)