From 229a3565e62b69fd5de8d008af3f34215bca2f5a Mon Sep 17 00:00:00 2001 From: Alessandro Zomparelli Date: Fri, 29 Dec 2023 17:29:50 +0100 Subject: [PATCH] Fixed bugs in Polyhedral Wireframe Solved bugs in Polyhedral Wireframe: - error with coincident faces - error with edges crease --- README.md | 2 +- __init__.py | 2 +- polyhedra.py | 30 ++++++++++++++++-------------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index f1216b3..54d61b0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Tissue is already shipped with both Blender. However I recommend to update the d ### Blender 4.0.2 -Tissue v0.3.65 for Blender 4.0.2 (latest stable version): https://github.com/alessandro-zomparelli/tissue +Tissue v0.3.66 for Blender 4.0.2 (latest stable version): https://github.com/alessandro-zomparelli/tissue Current development branch (usually the most updated version): https://github.com/alessandro-zomparelli/tissue/tree/b401-dev diff --git a/__init__.py b/__init__.py index 15992dc..4ef6f27 100644 --- a/__init__.py +++ b/__init__.py @@ -34,7 +34,7 @@ bl_info = { "name": "Tissue", "author": "Alessandro Zomparelli", - "version": (0, 3, 65), + "version": (0, 3, 66), "blender": (4, 0, 2), "location": "", "description": "Tools for Computational Design", diff --git a/polyhedra.py b/polyhedra.py index f5722dc..ec28d44 100644 --- a/polyhedra.py +++ b/polyhedra.py @@ -627,12 +627,19 @@ def execute(self, context): wireframe_indexes = [f.index for f in new_faces] outer_indexes = [f.index for f in outer_wireframe_faces] + edges_to_crease = [f.edges[2].index for f in new_faces] layer_is_wireframe = bm1.faces.layers.int.new('tissue_is_wireframe') for id in wireframe_indexes: bm1.faces[id][layer_is_wireframe] = 1 layer_is_outer = bm1.faces.layers.int.new('tissue_is_outer') for id in outer_indexes: bm1.faces[id][layer_is_outer] = 1 + if props.crease > 0 and props.dissolve != 'INNER': + crease_layer = bm1.edges.layers.float.new('crease_edge') + bm1.edges.index_update() + crease_edges = [] + for edge_index in edges_to_crease: + bm1.edges[edge_index][crease_layer] = props.crease end_time = time.time() print('Tissue: Polyhedral wireframe, frames in {:.4f} sec'.format(end_time-start_time)) @@ -669,20 +676,6 @@ def execute(self, context): print('Tissue: Polyhedral wireframe, corners displace in {:.4f} sec'.format(end_time-start_time)) start_time = time.time() - # set crease values - if props.crease > 0 and props.dissolve != 'INNER': - crease_layer = bm1.edges.layers.float.new('crease_edge') - bm1.edges.index_update() - crease_edges = [] - for f in new_faces: - #e = f.edges[0] - #e[creaseLayer] = props.crease - e = f.edges[2] - e[crease_layer] = props.crease - #for f in flat_faces: - # for e in f.edges: - # e[crease_layer] = props.crease - if props.dissolve != 'NONE': if props.dissolve == 'INNER': dissolve_id = 2 if props.dissolve == 'OUTER': dissolve_id = 0 @@ -895,8 +888,16 @@ def get_decomposed_polyhedra(bm): for key, val in polyhedra_from_facekey.items(): polyhedra[unique_index[val]].append(key) polyhedra = list(set(tuple(i) for i in polyhedra if i)) + polyhedra = remove_double_faces_from_polyhedra(polyhedra) return polyhedra +def remove_double_faces_from_polyhedra(polyhedra): + new_polyhedra = [] + for polyhedron in polyhedra: + new_polyhedron = [key for key in polyhedron if not -key in polyhedron] + new_polyhedra.append(new_polyhedron) + return new_polyhedra + def get_unique_polyhedra_index(count, to_merge): out = list(range(count)) keep_going = True @@ -970,6 +971,7 @@ def add_polyhedron(bm,source_faces): for verts_keys in faces_verts_key: new_faces[count] = bm.faces.new([polyhedron_verts_dict.get(key) for key in verts_keys]) count+=1 + bm.faces.ensure_lookup_table() bm.faces.index_update() return new_faces