mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 09:02:29 +00:00
You can now change wall heights in bulk
This commit is contained in:
@@ -27,6 +27,7 @@ classes = (
|
|||||||
product.DynamicallyVoidProduct,
|
product.DynamicallyVoidProduct,
|
||||||
workspace.Hotkey,
|
workspace.Hotkey,
|
||||||
wall.AlignWall,
|
wall.AlignWall,
|
||||||
|
wall.ChangeExtrusionDepth,
|
||||||
wall.FlipWall,
|
wall.FlipWall,
|
||||||
wall.JoinWall,
|
wall.JoinWall,
|
||||||
wall.MergeWall,
|
wall.MergeWall,
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ class BIMModelProperties(PropertyGroup):
|
|||||||
)
|
)
|
||||||
occurrence_name_function: bpy.props.StringProperty(name="Occurrence Name Function")
|
occurrence_name_function: bpy.props.StringProperty(name="Occurrence Name Function")
|
||||||
getter_enum = {"ifc_class": get_ifc_class, "relating_type": get_relating_type}
|
getter_enum = {"ifc_class": get_ifc_class, "relating_type": get_relating_type}
|
||||||
|
extrusion_depth: bpy.props.FloatProperty(default=42.0)
|
||||||
|
|
||||||
|
|
||||||
def get_relating_type_info(self, context):
|
def get_relating_type_info(self, context):
|
||||||
|
|||||||
@@ -215,6 +215,43 @@ class RecalculateWall(bpy.types.Operator):
|
|||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
class ChangeExtrusionDepth(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.change_extrusion_depth"
|
||||||
|
bl_label = "Change Extrusion Depth"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
depth: bpy.props.FloatProperty()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
return context.selected_objects
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
for obj in context.selected_objects:
|
||||||
|
element = tool.Ifc.get_entity(obj)
|
||||||
|
if not element:
|
||||||
|
return
|
||||||
|
representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
|
||||||
|
if not representation:
|
||||||
|
return
|
||||||
|
extrusion = self.get_extrusion(representation)
|
||||||
|
if not extrusion:
|
||||||
|
return
|
||||||
|
print(extrusion)
|
||||||
|
extrusion.Depth = self.depth
|
||||||
|
print(extrusion)
|
||||||
|
DumbWallRecalculator().recalculate(context.selected_objects)
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
def get_extrusion(self, representation):
|
||||||
|
item = representation.Items[0]
|
||||||
|
while True:
|
||||||
|
if item.is_a("IfcExtrudedAreaSolid"):
|
||||||
|
return item
|
||||||
|
elif item.is_a("IfcBooleanClippingResult"):
|
||||||
|
item = item.FirstOperand
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
def recalculate_dumb_wall_origin(wall, new_origin=None):
|
def recalculate_dumb_wall_origin(wall, new_origin=None):
|
||||||
if new_origin is None:
|
if new_origin is None:
|
||||||
new_origin = wall.matrix_world @ Vector(wall.bound_box[0])
|
new_origin = wall.matrix_world @ Vector(wall.bound_box[0])
|
||||||
|
|||||||
@@ -131,6 +131,11 @@ class BimTool(WorkSpaceTool):
|
|||||||
|
|
||||||
if ifc_classes:
|
if ifc_classes:
|
||||||
if ifc_class == "IfcWallType":
|
if ifc_class == "IfcWallType":
|
||||||
|
row = layout.row(align=True)
|
||||||
|
row.prop(data=props, property="extrusion_depth", text="Height")
|
||||||
|
op = row.operator("bim.change_extrusion_depth", icon="FILE_REFRESH", text="")
|
||||||
|
op.depth = props.extrusion_depth
|
||||||
|
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.label(text="Join")
|
row.label(text="Join")
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user