From 4df96d2263a6462adfacd0d2a299a95d8d4fc86a Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 25 Jun 2022 10:41:54 +0200 Subject: [PATCH 1/3] this works --- nodes/modifier_make/clip_verts.py | 4 ++++ utils/sv_bmesh_utils.py | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/nodes/modifier_make/clip_verts.py b/nodes/modifier_make/clip_verts.py index 7d99e11bc..4104b8fc8 100644 --- a/nodes/modifier_make/clip_verts.py +++ b/nodes/modifier_make/clip_verts.py @@ -56,6 +56,10 @@ class SvClipVertsNode(bpy.types.Node, SverchCustomTreeNode): faces_out = [] for verts, edges, faces in zip_long_repeat(verts_s, edges_s, faces_s): bm = bmesh_from_pydata(verts, edges, faces, normal_update=True) + if not edges: + bm.edges.index_update() + bm.edges.ensure_lookup_table() + new_bm = truncate_vertices(bm) bm.free() new_verts, new_edges, new_faces = pydata_from_bmesh(new_bm) diff --git a/utils/sv_bmesh_utils.py b/utils/sv_bmesh_utils.py index e524ed18b..574a1d352 100644 --- a/utils/sv_bmesh_utils.py +++ b/utils/sv_bmesh_utils.py @@ -529,16 +529,19 @@ def truncate_vertices(bm): new_bm_add_vert = new_bm.verts.new new_bm_add_face = new_bm.faces.new edge_centers = dict() + for edge in bm.edges: center_co = (edge.verts[0].co + edge.verts[1].co) / 2.0 edge_centers[edge.index] = new_bm_add_vert(center_co) + for face in bm.faces: new_face = [edge_centers[edge.index] for edge in face.edges] old_normal = face.normal new_normal = mathutils.geometry.normal(*[vert.co for vert in new_face]) if new_normal.dot(old_normal) < 0: - new_face = list(reversed(new_face)) + new_face = list(reversed(new_face)) new_bm_add_face(new_face) + for vertex in bm.verts: new_face = [edge_centers[edge.index] for edge in vertex.link_edges] if len(new_face) > 2: -- GitLab From de5ee23461b5c196ecde7448401f6e38fbe58b37 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 25 Jun 2022 11:00:45 +0200 Subject: [PATCH 2/3] index_update always --- nodes/modifier_make/clip_verts.py | 4 ---- utils/sv_bmesh_utils.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/nodes/modifier_make/clip_verts.py b/nodes/modifier_make/clip_verts.py index 4104b8fc8..7d99e11bc 100644 --- a/nodes/modifier_make/clip_verts.py +++ b/nodes/modifier_make/clip_verts.py @@ -56,10 +56,6 @@ class SvClipVertsNode(bpy.types.Node, SverchCustomTreeNode): faces_out = [] for verts, edges, faces in zip_long_repeat(verts_s, edges_s, faces_s): bm = bmesh_from_pydata(verts, edges, faces, normal_update=True) - if not edges: - bm.edges.index_update() - bm.edges.ensure_lookup_table() - new_bm = truncate_vertices(bm) bm.free() new_verts, new_edges, new_faces = pydata_from_bmesh(new_bm) diff --git a/utils/sv_bmesh_utils.py b/utils/sv_bmesh_utils.py index 574a1d352..193c26e71 100644 --- a/utils/sv_bmesh_utils.py +++ b/utils/sv_bmesh_utils.py @@ -105,7 +105,7 @@ def bmesh_from_pydata(verts=None, edges=[], faces=[], markup_face_data=False, ma if markup_edge_data: bm_edge[initial_index_layer] = idx - bm.edges.index_update() + bm.edges.index_update() if markup_vert_data: bm_verts.ensure_lookup_table() -- GitLab From 285067d0f14cffaa734bd213571173b09e2d9803 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 25 Jun 2022 11:03:21 +0200 Subject: [PATCH 3/3] correct indent --- utils/sv_bmesh_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/sv_bmesh_utils.py b/utils/sv_bmesh_utils.py index 193c26e71..fa30f667e 100644 --- a/utils/sv_bmesh_utils.py +++ b/utils/sv_bmesh_utils.py @@ -539,7 +539,7 @@ def truncate_vertices(bm): old_normal = face.normal new_normal = mathutils.geometry.normal(*[vert.co for vert in new_face]) if new_normal.dot(old_normal) < 0: - new_face = list(reversed(new_face)) + new_face = list(reversed(new_face)) new_bm_add_face(new_face) for vertex in bm.verts: -- GitLab