Fix bug where large resizing of walls could result in broken geometry.

This commit is contained in:
Dion Moult
2021-10-22 15:21:26 +11:00
parent a5b8728aec
commit f19e334cd5
@@ -965,8 +965,11 @@ class DumbWallPlaner:
min_face, max_face = self.get_wall_end_faces(obj, bm) min_face, max_face = self.get_wall_end_faces(obj, bm)
self.thicken_face(min_face, delta_thickness) verts_to_move = []
self.thicken_face(max_face, delta_thickness) verts_to_move.extend(self.thicken_face(min_face, delta_thickness))
verts_to_move.extend(self.thicken_face(max_face, delta_thickness))
for vert_to_move in verts_to_move:
vert_to_move["vert"].co += vert_to_move["vector"]
bm.to_mesh(obj.data) bm.to_mesh(obj.data)
obj.data.update() obj.data.update()
@@ -975,6 +978,7 @@ class DumbWallPlaner:
def thicken_face(self, face, delta_thickness): def thicken_face(self, face, delta_thickness):
slide_magnitude = abs(delta_thickness) slide_magnitude = abs(delta_thickness)
results = []
for vert in face.verts: for vert in face.verts:
slide_vector = None slide_vector = None
for edge in vert.link_edges: for edge in vert.link_edges:
@@ -994,7 +998,8 @@ class DumbWallPlaner:
if not slide_vector: if not slide_vector:
continue continue
slide_vector *= slide_magnitude / abs(slide_vector.y) slide_vector *= slide_magnitude / abs(slide_vector.y)
vert.co += slide_vector results.append({"vert":vert, "vector":slide_vector})
return results
# An end face is a quad that is on one end of the wall or the other. It must # An end face is a quad that is on one end of the wall or the other. It must
# have at least one vertex on either extreme X-axis, and a non-insignificant # have at least one vertex on either extreme X-axis, and a non-insignificant