[Bf-blender-cvs] [7c2c66cdb8d] master: Fix T90268: Mesh.from_pydata error using numpy array for edges/faces

Campbell Barton noreply at git.blender.org
Tue Aug 10 09:53:11 CEST 2021


Commit: 7c2c66cdb8db8f38edc57a890c0ec7ea28b9fad3
Author: Campbell Barton
Date:   Tue Aug 10 17:50:01 2021 +1000
Branches: master
https://developer.blender.org/rB7c2c66cdb8db8f38edc57a890c0ec7ea28b9fad3

Fix T90268: Mesh.from_pydata error using numpy array for edges/faces

Technically not a bug but worth supporting.

===================================================================

M	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



More information about the Bf-blender-cvs mailing list