mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
black format
This commit is contained in:
@@ -564,7 +564,15 @@ class BIMRailingProperties(PropertyGroup):
|
|||||||
|
|
||||||
|
|
||||||
class BIMRoofProperties(PropertyGroup):
|
class BIMRoofProperties(PropertyGroup):
|
||||||
non_si_units_props = ("is_editing", "path_data", "roof_type", "roof_added_previously", "generation_method", "angle", "rafter_edge_angle")
|
non_si_units_props = (
|
||||||
|
"is_editing",
|
||||||
|
"path_data",
|
||||||
|
"roof_type",
|
||||||
|
"roof_added_previously",
|
||||||
|
"generation_method",
|
||||||
|
"angle",
|
||||||
|
"rafter_edge_angle",
|
||||||
|
)
|
||||||
roof_types = (("HIP/GABLE ROOF", "HIP/GABLE ROOF", ""),)
|
roof_types = (("HIP/GABLE ROOF", "HIP/GABLE ROOF", ""),)
|
||||||
roof_generation_methods = (
|
roof_generation_methods = (
|
||||||
("HEIGHT", "HEIGHT", ""),
|
("HEIGHT", "HEIGHT", ""),
|
||||||
@@ -584,7 +592,7 @@ class BIMRoofProperties(PropertyGroup):
|
|||||||
)
|
)
|
||||||
angle: bpy.props.FloatProperty(name="Slope Angle", default=pi / 18, subtype="ANGLE")
|
angle: bpy.props.FloatProperty(name="Slope Angle", default=pi / 18, subtype="ANGLE")
|
||||||
roof_thickness: bpy.props.FloatProperty(name="Roof Thickness", default=0.1, subtype="DISTANCE")
|
roof_thickness: bpy.props.FloatProperty(name="Roof Thickness", default=0.1, subtype="DISTANCE")
|
||||||
rafter_edge_angle: bpy.props.FloatProperty(name="Rafter Edge Angle", min=0, max = pi, default=pi / 2, subtype="ANGLE")
|
rafter_edge_angle: bpy.props.FloatProperty(name="Rafter Edge Angle", min=0, max=pi, default=pi / 2, subtype="ANGLE")
|
||||||
|
|
||||||
def get_general_kwargs(self, convert_to_project_units=False):
|
def get_general_kwargs(self, convert_to_project_units=False):
|
||||||
kwargs = {
|
kwargs = {
|
||||||
|
|||||||
@@ -108,7 +108,9 @@ def is_valid_roof_footprint(bm):
|
|||||||
return ({"FINISHED"}, "")
|
return ({"FINISHED"}, "")
|
||||||
|
|
||||||
|
|
||||||
def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, roof_thickness = 0.1, angle=pi / 18, rafter_edge_angle = pi / 2, mutate_current_bmesh=True):
|
def generate_hiped_roof_bmesh(
|
||||||
|
bm, mode="ANGLE", height=1.0, roof_thickness=0.1, angle=pi / 18, rafter_edge_angle=pi / 2, mutate_current_bmesh=True
|
||||||
|
):
|
||||||
"""return bmesh with gable roof geometry
|
"""return bmesh with gable roof geometry
|
||||||
|
|
||||||
`mutate_current_bmesh` is a flag to indicate whether the input bmesh
|
`mutate_current_bmesh` is a flag to indicate whether the input bmesh
|
||||||
@@ -230,7 +232,7 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, roof_thickness = 0.1
|
|||||||
verts_to_change = {}
|
verts_to_change = {}
|
||||||
verts_to_rip = []
|
verts_to_rip = []
|
||||||
bottom_chords_to_remove = []
|
bottom_chords_to_remove = []
|
||||||
|
|
||||||
def is_footprint_vert(v):
|
def is_footprint_vert(v):
|
||||||
return float_is_zero(v.co.z - footprint_z)
|
return float_is_zero(v.co.z - footprint_z)
|
||||||
|
|
||||||
@@ -320,7 +322,7 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, roof_thickness = 0.1
|
|||||||
extrusion_geom = bm_sort_out_geom(bmesh.ops.extrude_face_region(bm, geom=bm.faces)["geom"])
|
extrusion_geom = bm_sort_out_geom(bmesh.ops.extrude_face_region(bm, geom=bm.faces)["geom"])
|
||||||
extruded_edges = extrusion_geom["edges"]
|
extruded_edges = extrusion_geom["edges"]
|
||||||
extruded_verts = extrusion_geom["verts"]
|
extruded_verts = extrusion_geom["verts"]
|
||||||
rafter_edge_angle = pi/2 - rafter_edge_angle
|
rafter_edge_angle = pi / 2 - rafter_edge_angle
|
||||||
default_offset_dir = Vector([0, 0, 1]) * roof_thickness
|
default_offset_dir = Vector([0, 0, 1]) * roof_thickness
|
||||||
footprint_verts = set()
|
footprint_verts = set()
|
||||||
|
|
||||||
@@ -340,14 +342,14 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, roof_thickness = 0.1
|
|||||||
|
|
||||||
if len(non_footprint_verts) == 1:
|
if len(non_footprint_verts) == 1:
|
||||||
return non_footprint_verts[0]
|
return non_footprint_verts[0]
|
||||||
|
|
||||||
return min(non_footprint_verts, key=lambda v1: (v1.co-v.co).length)
|
return min(non_footprint_verts, key=lambda v1: (v1.co - v.co).length)
|
||||||
|
|
||||||
top_verts = dict()
|
top_verts = dict()
|
||||||
for v in footprint_verts:
|
for v in footprint_verts:
|
||||||
top_verts[v] = get_top_vert(v)
|
top_verts[v] = get_top_vert(v)
|
||||||
|
|
||||||
# TODO: rafter_edge_angle might differ
|
# TODO: rafter_edge_angle might differ
|
||||||
# if footprint edges are not connected by 90 degrees
|
# if footprint edges are not connected by 90 degrees
|
||||||
verts_offsets = dict()
|
verts_offsets = dict()
|
||||||
for edge in footprint_edges:
|
for edge in footprint_edges:
|
||||||
@@ -371,7 +373,6 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, roof_thickness = 0.1
|
|||||||
# for different rafter edge angles
|
# for different rafter edge angles
|
||||||
v.co = mathutils.geometry.intersect_line_line(bot, top, base, offsetted)[0]
|
v.co = mathutils.geometry.intersect_line_line(bot, top, base, offsetted)[0]
|
||||||
|
|
||||||
|
|
||||||
verts = [v for v in extruded_verts if v not in footprint_verts]
|
verts = [v for v in extruded_verts if v not in footprint_verts]
|
||||||
bmesh.ops.translate(bm, vec=default_offset_dir, verts=verts)
|
bmesh.ops.translate(bm, vec=default_offset_dir, verts=verts)
|
||||||
bmesh.ops.recalc_face_normals(bm, faces=bm.faces[:])
|
bmesh.ops.recalc_face_normals(bm, faces=bm.faces[:])
|
||||||
@@ -454,8 +455,14 @@ def update_roof_modifier_bmesh(context):
|
|||||||
return
|
return
|
||||||
|
|
||||||
generate_hiped_roof_bmesh(
|
generate_hiped_roof_bmesh(
|
||||||
bm, props.generation_method, props.height, props.roof_thickness,
|
bm,
|
||||||
props.angle, props.rafter_edge_angle, mutate_current_bmesh=True)
|
props.generation_method,
|
||||||
|
props.height,
|
||||||
|
props.roof_thickness,
|
||||||
|
props.angle,
|
||||||
|
props.rafter_edge_angle,
|
||||||
|
mutate_current_bmesh=True,
|
||||||
|
)
|
||||||
tool.Blender.apply_bmesh(obj.data, bm)
|
tool.Blender.apply_bmesh(obj.data, bm)
|
||||||
|
|
||||||
|
|
||||||
@@ -675,8 +682,13 @@ class EnableEditingRoofPath(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
main_bm.edges.layers.int.new("BBIM_preview")
|
main_bm.edges.layers.int.new("BBIM_preview")
|
||||||
|
|
||||||
second_bm = generate_hiped_roof_bmesh(
|
second_bm = generate_hiped_roof_bmesh(
|
||||||
bm,props.generation_method, props.height, props.roof_thickness,
|
bm,
|
||||||
props.angle, props.rafter_edge_angle, mutate_current_bmesh=False
|
props.generation_method,
|
||||||
|
props.height,
|
||||||
|
props.roof_thickness,
|
||||||
|
props.angle,
|
||||||
|
props.rafter_edge_angle,
|
||||||
|
mutate_current_bmesh=False,
|
||||||
)
|
)
|
||||||
bmesh.ops.translate(second_bm, verts=second_bm.verts, vec=Vector((0, 0, 1)))
|
bmesh.ops.translate(second_bm, verts=second_bm.verts, vec=Vector((0, 0, 1)))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user