From efdf814c439bcf3ccc291e578ab88ebde7427cfd Mon Sep 17 00:00:00 2001 From: Thomas Barlow Date: Wed, 17 Jan 2024 13:28:53 +0000 Subject: [PATCH] gltf: Use the new ShapeKey.points with faster foreach_get/set Added to Blender 4.1.0 in ??????????, ShapeKey.points gives optimized access to shape key points data (meshes/lattices) when accessed with #foreach_get and #foreach_set. --- .../blender/exp/gltf2_blender_gather_primitives_extract.py | 4 ++-- io_scene_gltf2/blender/imp/gltf2_blender_mesh.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives_extract.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives_extract.py index ef9c3e849..0bbccab1b 100644 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives_extract.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives_extract.py @@ -871,14 +871,14 @@ class PrimitiveCreator: def __get_positions(self): self.locs = np.empty(len(self.blender_mesh.vertices) * 3, dtype=np.float32) - source = self.key_blocks[0].relative_key.data if self.key_blocks else self.blender_mesh.vertices + source = self.key_blocks[0].relative_key.points if self.key_blocks else self.blender_mesh.vertices source.foreach_get('co', self.locs) self.locs = self.locs.reshape(len(self.blender_mesh.vertices), 3) self.morph_locs = [] for key_block in self.key_blocks: vs = np.empty(len(self.blender_mesh.vertices) * 3, dtype=np.float32) - key_block.data.foreach_get('co', vs) + key_block.points.foreach_get('co', vs) vs = vs.reshape(len(self.blender_mesh.vertices), 3) self.morph_locs.append(vs) diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py b/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py index c0c252a57..6e52e2ff6 100755 --- a/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py +++ b/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py @@ -370,7 +370,7 @@ def do_primitives(gltf, mesh_idx, skin_idx, mesh, ob): ob.shape_key_add(name=sk_name) key_block = mesh.shape_keys.key_blocks[sk_name] - key_block.data.foreach_set('co', squish(sk_vert_locs[sk_i])) + key_block.points.foreach_set('co', squish(sk_vert_locs[sk_i])) sk_i += 1 -- 2.30.2