mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-01 17:36:27 +00:00
From this - https://i.imgur.com/hQuCcR3.png To this - https://i.imgur.com/qZ2Lyfo.png It's a bit hacky since we still use really small offsets to keep "The outer curve shall enclose all inner curves." rule for IfcArbitraryProfileDefWithVoids valid.
This commit is contained in:
@@ -262,16 +262,19 @@ def create_bm_window(
|
||||
frame_thickness,
|
||||
glass_thickness,
|
||||
position: Vector,
|
||||
frame_position: Vector = None,
|
||||
x_offsets: list = None
|
||||
):
|
||||
"""`lining_thickness` expected to be defined as a list,
|
||||
"""`lining_thickness` and `x_offsets` are expected to be defined as a list,
|
||||
similarly to `create_bm_window_frame` `thickness` argument"""
|
||||
|
||||
if x_offsets is None:
|
||||
x_offsets = [lining_to_panel_offset_x] * 4
|
||||
|
||||
# window lining
|
||||
window_lining_verts = create_bm_window_frame(bm, lining_size, lining_thickness)
|
||||
|
||||
# window frame
|
||||
if frame_position is None:
|
||||
frame_position = V(lining_to_panel_offset_x, lining_to_panel_offset_y_full, lining_to_panel_offset_x)
|
||||
frame_position = V(x_offsets[0], lining_to_panel_offset_y_full, x_offsets[3])
|
||||
frame_verts = create_bm_window_frame(bm, frame_size, frame_thickness, frame_position)
|
||||
|
||||
# window glass
|
||||
@@ -363,9 +366,6 @@ def update_window_modifier_bmesh(context):
|
||||
|
||||
frame_depth = props.frame_depth[panel_i]
|
||||
frame_thickness = props.frame_thickness[panel_i]
|
||||
base_frame_clear = lining_to_panel_offset_x + frame_thickness - lining_thickness
|
||||
current_offset_x = base_frame_clear - frame_thickness + mullion_thickness
|
||||
current_offset_z = base_frame_clear - frame_thickness + transom_thickness
|
||||
# add window
|
||||
window_lining_size = V(
|
||||
panel_width,
|
||||
@@ -383,20 +383,22 @@ def update_window_modifier_bmesh(context):
|
||||
]
|
||||
|
||||
lining_to_panel_offset_y_full = (lining_depth - frame_depth) + lining_to_panel_offset_y
|
||||
frame_position = V(
|
||||
current_offset_x if right_to_mullion else lining_to_panel_offset_x,
|
||||
lining_to_panel_offset_y_full,
|
||||
current_offset_z if top_to_transom else lining_to_panel_offset_x
|
||||
)
|
||||
|
||||
# x offsets can differ if there are mullions or transoms because we're trying to maintain symmetry
|
||||
base_frame_clear = lining_to_panel_offset_x + frame_thickness - lining_thickness
|
||||
current_offset_x = base_frame_clear - frame_thickness + mullion_thickness
|
||||
current_offset_z = base_frame_clear - frame_thickness + transom_thickness
|
||||
x_offsets = [
|
||||
current_offset_x if right_to_mullion else lining_to_panel_offset_x, # LEFT
|
||||
current_offset_z if bottom_to_transom else lining_to_panel_offset_x, # TOP
|
||||
current_offset_x if left_to_mullion else lining_to_panel_offset_x, # RIGHT
|
||||
current_offset_z if top_to_transom else lining_to_panel_offset_x, # BOTTOM
|
||||
]
|
||||
|
||||
frame_size = window_lining_size.copy()
|
||||
frame_size.y = frame_depth
|
||||
|
||||
frame_size.x -= current_offset_x if left_to_mullion else lining_to_panel_offset_x
|
||||
frame_size.x -= current_offset_x if right_to_mullion else lining_to_panel_offset_x
|
||||
|
||||
frame_size.z -= current_offset_z if top_to_transom else lining_to_panel_offset_x
|
||||
frame_size.z -= current_offset_z if bottom_to_transom else lining_to_panel_offset_x
|
||||
frame_size.x -= (x_offsets[0] + x_offsets[2])
|
||||
frame_size.z -= (x_offsets[1] + x_offsets[3])
|
||||
|
||||
window_position = V(accumulated_width, 0, accumulated_height[column_i])
|
||||
lining_verts, panel_verts, glass_verts = create_bm_window(
|
||||
@@ -409,7 +411,7 @@ def update_window_modifier_bmesh(context):
|
||||
frame_thickness,
|
||||
glass_thickness,
|
||||
window_position,
|
||||
frame_position
|
||||
x_offsets
|
||||
)
|
||||
|
||||
built_panels.append(panel_i)
|
||||
|
||||
Reference in New Issue
Block a user