door black formatting

This commit is contained in:
Andrej730
2023-02-10 16:58:36 +05:00
parent 3654e49f87
commit 9e383959c8
2 changed files with 76 additions and 84 deletions
@@ -109,27 +109,21 @@ def update_door_modifier_representation(context):
def bm_sort_out_geom(geom_data): def bm_sort_out_geom(geom_data):
geom_dict = { geom_dict = {"verts": [], "edges": [], "faces": []}
'verts': [],
'edges': [],
'faces': []
}
for el in geom_data: for el in geom_data:
if isinstance(el, BMVert): if isinstance(el, BMVert):
geom_dict['verts'].append(el) geom_dict["verts"].append(el)
elif isinstance(el, BMFace): elif isinstance(el, BMFace):
geom_dict['faces'].append(el) geom_dict["faces"].append(el)
else: else:
geom_dict['edges'].append(el) geom_dict["edges"].append(el)
return geom_dict return geom_dict
def bm_mirror(bm, verts, def bm_mirror(
mirror_axes: Vector = V(1,0,0).freeze(), bm, verts, mirror_axes: Vector = V(1, 0, 0).freeze(), mirror_point: Vector = V(0, 0, 0).freeze(), create_copy=False
mirror_point: Vector = V(0,0,0).freeze(), ):
create_copy=False):
matrix = Matrix.Translation(mirror_point) matrix = Matrix.Translation(mirror_point)
for i, v in enumerate(mirror_axes): for i, v in enumerate(mirror_axes):
if not v: if not v:
@@ -143,19 +137,23 @@ def bm_mirror(bm, verts,
# and matrix kind of work diffrently than transform so I chose `bmesh.ops.transform` # and matrix kind of work diffrently than transform so I chose `bmesh.ops.transform`
if create_copy: if create_copy:
faces = set() faces = set()
for v in verts: faces.update(v.link_faces) for v in verts:
faces.update(v.link_faces)
duplicated = bmesh.ops.duplicate(bm, geom=list(faces)) duplicated = bmesh.ops.duplicate(bm, geom=list(faces))
verts = bm_sort_out_geom(duplicated['geom'])['verts'] verts = bm_sort_out_geom(duplicated["geom"])["verts"]
bmesh.ops.transform(bm, verts=verts, matrix=matrix, space=Matrix.Identity(4)) bmesh.ops.transform(bm, verts=verts, matrix=matrix, space=Matrix.Identity(4))
return verts return verts
def create_bm_extruded_profile( def create_bm_extruded_profile(
bm, points, edges=None, faces=None, bm,
points,
edges=None,
faces=None,
position: Vector = V(0, 0, 0).freeze(), position: Vector = V(0, 0, 0).freeze(),
magnitude=1.0, magnitude=1.0,
extrusion_vector: Vector = V(0,0,1).freeze() extrusion_vector: Vector = V(0, 0, 1).freeze(),
): ):
bm.verts.index_update() bm.verts.index_update()
bm.edges.index_update() bm.edges.index_update()
@@ -170,13 +168,13 @@ def create_bm_extruded_profile(
new_edges = [bm.edges.new([new_verts[vi] for vi in edge]) for edge in edges] new_edges = [bm.edges.new([new_verts[vi] for vi in edge]) for edge in edges]
if not faces: if not faces:
new_faces = bmesh.ops.contextual_create(bm, geom=new_edges)['faces'] new_faces = bmesh.ops.contextual_create(bm, geom=new_edges)["faces"]
else: else:
new_faces = [bm.faces.new([new_verts[vi] for vi in face]) for face in faces] new_faces = [bm.faces.new([new_verts[vi] for vi in face]) for face in faces]
extruded = bmesh.ops.extrude_face_region(bm, geom=new_faces) extruded = bmesh.ops.extrude_face_region(bm, geom=new_faces)
extrusion_vector = extrusion_vector * magnitude extrusion_vector = extrusion_vector * magnitude
extruded_verts = bm_sort_out_geom(extruded['geom'])['verts'] extruded_verts = bm_sort_out_geom(extruded["geom"])["verts"]
bmesh.ops.translate(bm, vec=extrusion_vector, verts=extruded_verts) bmesh.ops.translate(bm, vec=extrusion_vector, verts=extruded_verts)
bmesh.ops.translate(bm, vec=position, verts=new_verts + extruded_verts) bmesh.ops.translate(bm, vec=position, verts=new_verts + extruded_verts)
@@ -204,7 +202,7 @@ def create_bm_door_lining(bm, size: Vector, thickness: Vector, position:Vector=V
(4, [width - th_side, 0.0, 0.0]), (4, [width - th_side, 0.0, 0.0]),
(5, [width, 0.0, height]), (5, [width, 0.0, height]),
(6, [th_side, 0.0, 0.0]), (6, [th_side, 0.0, 0.0]),
(7, [width, 0.0, 0.0]) (7, [width, 0.0, 0.0]),
] ]
edges = [ edges = [
@@ -292,7 +290,6 @@ def update_door_modifier_bmesh(context):
handle_offset = V(60, 0, 1000) * 0.001 * si_conversion # to the handle center handle_offset = V(60, 0, 1000) * 0.001 * si_conversion # to the handle center
handle_center_offset = V(handle_size.y / 2, 0, handle_size.z) / 2 handle_center_offset = V(handle_size.y / 2, 0, handle_size.z) / 2
if transfom_offset: if transfom_offset:
panel_height = transfom_offset + transom_thickness - lining_to_panel_offset_x - threshold_thickness panel_height = transfom_offset + transom_thickness - lining_to_panel_offset_x - threshold_thickness
lining_height = transfom_offset + transom_thickness lining_height = transfom_offset + transom_thickness
@@ -325,7 +322,7 @@ def update_door_modifier_bmesh(context):
inner_casing_thickness = [ inner_casing_thickness = [
casing_thickness - panel_lining_overlap_x, casing_thickness - panel_lining_overlap_x,
casing_thickness-panel_top_lining_overlap_x casing_thickness - panel_top_lining_overlap_x,
] ]
inner_casing_position = V(-casing_wall_overlap, lining_depth, 0) inner_casing_position = V(-casing_wall_overlap, lining_depth, 0)
inner_casing_verts = create_bm_door_lining(bm, casing_size, inner_casing_thickness, inner_casing_position) inner_casing_verts = create_bm_door_lining(bm, casing_size, inner_casing_thickness, inner_casing_position)
@@ -348,23 +345,23 @@ def update_door_modifier_bmesh(context):
V(handle_size.y / 2, 0, 0), V(handle_size.y / 2, 0, 0),
] ]
handle_position = panel_position + handle_offset - handle_center_offset handle_position = panel_position + handle_offset - handle_center_offset
door_handle_verts = create_bm_extruded_profile(bm, handle_points, door_handle_verts = create_bm_extruded_profile(bm, handle_points, magnitude=handle_size.z, position=handle_position)
magnitude=handle_size.z,
position=handle_position)
door_handles_verts.extend(door_handle_verts) door_handles_verts.extend(door_handle_verts)
if door_type == 'SINGLE_SWING_LEFT': if door_type == "SINGLE_SWING_LEFT":
bm_mirror(bm, door_handle_verts, bm_mirror(
mirror_axes=V(1,0,0), bm, door_handle_verts, mirror_axes=V(1, 0, 0), mirror_point=panel_position + V(panel_size.x / 2, 0, 0)
mirror_point=panel_position + V(panel_size.x/2, 0, 0)) )
door_handle_mirrored_verts = bm_mirror(bm, door_handle_verts, door_handle_mirrored_verts = bm_mirror(
bm,
door_handle_verts,
mirror_axes=V(0, 1, 0), mirror_axes=V(0, 1, 0),
mirror_point=handle_position + V(0, panel_size.y / 2, 0), mirror_point=handle_position + V(0, panel_size.y / 2, 0),
create_copy=True) create_copy=True,
)
door_handles_verts.extend(door_handle_mirrored_verts) door_handles_verts.extend(door_handle_mirrored_verts)
# add on top window # add on top window
if not transom_thickness: if not transom_thickness:
window_lining_verts = [] window_lining_verts = []
@@ -422,12 +419,7 @@ class BIM_OT_add_door(Operator):
obj.location = spawn_location obj.location = spawn_location
body_context = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW") body_context = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
element = blenderbim.core.root.assign_class( element = blenderbim.core.root.assign_class(
tool.Ifc, tool.Ifc, tool.Collector, tool.Root, obj=obj, ifc_class="IfcDoor", should_add_representation=False
tool.Collector,
tool.Root,
obj=obj,
ifc_class="IfcDoor",
should_add_representation=False
) )
element.PredefinedType = "DOOR" element.PredefinedType = "DOOR"
@@ -197,8 +197,9 @@ class Usecase:
lining_thickness = [lining_thickness_default, top_lining_thickness] lining_thickness = [lining_thickness_default, top_lining_thickness]
def l_shape_check(lining_thickness): def l_shape_check(lining_thickness):
return lining_to_panel_offset_y_full < lining_depth \ return lining_to_panel_offset_y_full < lining_depth and any(
and any(lining_to_panel_offset_x < th for th in lining_thickness) lining_to_panel_offset_x < th for th in lining_thickness
)
# create 2d representation # create 2d representation
if self.settings["context"].TargetView == "PLAN_VIEW": if self.settings["context"].TargetView == "PLAN_VIEW":
@@ -285,9 +286,7 @@ class Usecase:
casing_thickness - panel_top_lining_overlap_x, casing_thickness - panel_top_lining_overlap_x,
] ]
inner_casing_position = V(-casing_wall_overlap, lining_depth, 0) inner_casing_position = V(-casing_wall_overlap, lining_depth, 0)
inner_casing = create_ifc_door_lining( inner_casing = create_ifc_door_lining(builder, casing_size, inner_casing_thickness, inner_casing_position)
builder, casing_size, inner_casing_thickness, inner_casing_position
)
casing_items.append(inner_casing) casing_items.append(inner_casing)
# add door panel # add door panel
@@ -312,13 +311,12 @@ class Usecase:
door_handle = builder.extrude(handle_polyline, handle_size.z, position=handle_position) door_handle = builder.extrude(handle_polyline, handle_size.z, position=handle_position)
door_handles_items.append(door_handle) door_handles_items.append(door_handle)
if door_type == 'SINGLE_SWING_LEFT': if door_type == "SINGLE_SWING_LEFT":
builder.mirror(door_handle, mirror_axes=V(1,0), builder.mirror(door_handle, mirror_axes=V(1, 0), mirror_point=panel_position.xy + V(panel_size.x / 2, 0))
mirror_point=panel_position.xy + V(panel_size.x/2, 0))
door_handle_mirrored = builder.mirror(door_handle, mirror_axes=V(0, 1), door_handle_mirrored = builder.mirror(
mirror_point=handle_position.xy + V(0, panel_size.y/2), door_handle, mirror_axes=V(0, 1), mirror_point=handle_position.xy + V(0, panel_size.y / 2), create_copy=True
create_copy=True) )
door_handles_items.append(door_handle_mirrored) door_handles_items.append(door_handle_mirrored)
# add on top window # add on top window
@@ -344,7 +342,9 @@ class Usecase:
window_position, window_position,
) )
lining_offset_items = lining_items + panel_items + window_lining_items + frame_items + glass_items + door_handles_items lining_offset_items = (
lining_items + panel_items + window_lining_items + frame_items + glass_items + door_handles_items
)
builder.translate(lining_offset_items, V(0, lining_offset, 0)) builder.translate(lining_offset_items, V(0, lining_offset, 0))
output_items = lining_offset_items + threshold_items + casing_items output_items = lining_offset_items + threshold_items + casing_items