From ee0d594f9f557fbbc4ffd22f2d2a1df30e39912b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 16 Aug 2021 20:34:28 +1000 Subject: [PATCH] WIP window tool progress. --- .../blenderbim/bim/module/model/opening.py | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index c7bd2008e7..dfbbc37aad 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -77,7 +77,7 @@ class AddElementOpening(bpy.types.Operator): return {"FINISHED"} if filling_obj: - opening = self.generate_opening_from_filling(filling_obj) + opening = self.generate_opening_from_filling(filling_obj, voided_obj) else: # The opening shall be based on the smallest bounding dimension of the element dimension = min(voided_obj.dimensions) @@ -121,18 +121,42 @@ class AddElementOpening(bpy.types.Operator): if obj and obj.BIMObjectProperties.ifc_definition_id: return obj - def generate_opening_from_filling(self, filling_obj): + def generate_opening_from_filling(self, filling_obj, voided_obj): x, y, z = filling_obj.dimensions - verts = [ - Vector((0, 0, 0)), - Vector((0, 0, z)), - Vector((0, y, 0)), - Vector((0, y, z)), - Vector((x, 0, 0)), - Vector((x, 0, z)), - Vector((x, y, 0)), - Vector((x, y, z)), - ] + dimension = min(voided_obj.dimensions) + if dimension == voided_obj.dimensions[0]: + verts = [ + Vector((-0.1, 0, 0)), + Vector((-0.1, 0, z)), + Vector((-0.1, y, 0)), + Vector((-0.1, y, z)), + Vector((dimension+0.1, 0, 0)), + Vector((dimension+0.1, 0, z)), + Vector((dimension+0.1, y, 0)), + Vector((dimension+0.1, y, z)), + ] + elif dimension == voided_obj.dimensions[1]: + verts = [ + Vector((0, -0.1, 0)), + Vector((0, -0.1, z)), + Vector((0, dimension+0.1, 0)), + Vector((0, dimension+0.1, z)), + Vector((x, -0.1, 0)), + Vector((x, -0.1, z)), + Vector((x, dimension+0.1, 0)), + Vector((x, dimension+0.1, z)), + ] + elif dimension == voided_obj.dimensions[2]: + verts = [ + Vector((0, 0, -0.1)), + Vector((0, 0, dimension+0.1)), + Vector((0, y, -0.1)), + Vector((0, y, dimension+0.1)), + Vector((x, 0, -0.1)), + Vector((x, 0, dimension+0.1)), + Vector((x, y, -0.1)), + Vector((x, y, dimension+0.1)), + ] edges = [] faces = [ [0, 1, 3, 2], @@ -146,6 +170,10 @@ class AddElementOpening(bpy.types.Operator): mesh.from_pydata(verts, edges, faces) obj = bpy.data.objects.new("Opening", mesh) obj.matrix_world = filling_obj.matrix_world + + filling_obj.rotation_euler = voided_obj.rotation_euler + obj.parent = filling_obj + obj.matrix_parent_inverse = filling_obj.matrix_world.inverted() return obj