From 7c2c66cdb8db8f38edc57a890c0ec7ea28b9fad3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 10 Aug 2021 17:50:01 +1000 Subject: Fix T90268: Mesh.from_pydata error using numpy array for edges/faces Technically not a bug but worth supporting. --- release/scripts/modules/bpy_types.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'release/scripts/modules/bpy_types.py') diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index d60165f760c..8a1615ad99f 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -477,29 +477,34 @@ class Mesh(bpy_types.ID): face_lengths = tuple(map(len, faces)) - self.vertices.add(len(vertices)) - self.edges.add(len(edges)) + # NOTE: check non-empty lists by length because of how `numpy` handles truth tests, see: T90268. + vertices_len = len(vertices) + edges_len = len(edges) + faces_len = len(faces) + + self.vertices.add(vertices_len) + self.edges.add(edges_len) self.loops.add(sum(face_lengths)) - self.polygons.add(len(faces)) + self.polygons.add(faces_len) self.vertices.foreach_set("co", tuple(chain.from_iterable(vertices))) self.edges.foreach_set("vertices", tuple(chain.from_iterable(edges))) vertex_indices = tuple(chain.from_iterable(faces)) - loop_starts = tuple(islice(chain([0], accumulate(face_lengths)), len(faces))) + loop_starts = tuple(islice(chain([0], accumulate(face_lengths)), faces_len)) self.polygons.foreach_set("loop_total", face_lengths) self.polygons.foreach_set("loop_start", loop_starts) self.polygons.foreach_set("vertices", vertex_indices) - if edges or faces: + if edges_len or faces_len: self.update( # Needed to either: # - Calculate edges that don't exist for polygons. # - Assign edges to polygon loops. - calc_edges=bool(faces), + calc_edges=bool(faces_len), # Flag loose edges. - calc_edges_loose=bool(edges), + calc_edges_loose=bool(edges_len), ) @property -- cgit v1.2.3