diff --git a/src/blenderbim/blenderbim/bim/module/model/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py index a2a356d60f..4a9df1970a 100644 --- a/src/blenderbim/blenderbim/bim/module/model/prop.py +++ b/src/blenderbim/blenderbim/bim/module/model/prop.py @@ -256,18 +256,25 @@ class BIMArrayProperties(PropertyGroup): class BIMStairProperties(PropertyGroup): + stair_types = ( + ("CONCRETE", "Concrete", ""), + ("WOOD/STEEL", "Wood / Steel", ""), + ) + is_editing: bpy.props.IntProperty(default=-1) width: bpy.props.FloatProperty(name="Width", default=1.2, soft_min=0.01) height: bpy.props.FloatProperty(name="Height", default=1.0, soft_min=0.01) - number_of_treads: bpy.props.IntProperty(name="Number of Treads (Goings)", default=6, soft_min=1) + number_of_treads: bpy.props.IntProperty(name="Number of treads", default=6, soft_min=1) tread_depth: bpy.props.FloatProperty(name="Tread Depth", default=0.25, soft_min=0.01) tread_run: bpy.props.FloatProperty(name="Tread Run", default=0.3, soft_min=0.01) base_slab_depth: bpy.props.FloatProperty(name="Base slab depth", default=0.25, soft_min=0) top_slab_depth: bpy.props.FloatProperty(name="Top slab depth", default=0.25, soft_min=0) has_top_nib: bpy.props.BoolProperty(name="Has top nib", default=True) + stair_type: bpy.props.EnumProperty(name="Stair type", items=stair_types, default="CONCRETE") def get_props_kwargs(self): kwargs = { + "stair_type": self.stair_type, "width": self.width, "height": self.height, "number_of_treads": self.number_of_treads, diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index 60f1fd2950..b224920071 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -92,7 +92,7 @@ def generate_stair_2d_profile( has_top_nib, top_slab_depth, base_slab_depth, - stair_type="CONCRETE", + stair_type, ): vertices = [] edges = [] @@ -162,7 +162,6 @@ def update_stair_modifier(context): props = obj.BIMStairProperties props_kwargs = props.get_props_kwargs() - props_kwargs["stair_type"] = "CONCRETE" vertices, edges, faces = generate_stair_2d_profile(**props_kwargs) obj = context.object @@ -268,6 +267,7 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): element.NumberOfTreads = props.number_of_treads element.RiserHeight = props.height / element.NumberOfRisers element.TreadLength = props.tread_depth + element.PredefinedType = "STRAIGHT" return {"FINISHED"} @@ -320,6 +320,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): element.NumberOfTreads = props.number_of_treads element.RiserHeight = props.height / element.NumberOfRisers element.TreadLength = props.tread_depth + element.PredefinedType = "STRAIGHT" return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index 139f703476..0341a869f9 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -329,34 +329,39 @@ class BIM_PT_stair(bpy.types.Panel): if StairData.data["parameters"]: row = self.layout.row(align=True) - row.label(text="Stair", icon="IPO_CONSTANT") + row.label(text="Stair parameters", icon="IPO_CONSTANT") stair_data = StairData.data["parameters"]["data"] - box = self.layout.box() if props.is_editing != -1: - row = box.row(align=True) + row = self.layout.row(align=True) row.operator("bim.finish_editing_stair", icon="CHECKMARK", text="Finish editing") row.operator("bim.cancel_editing_stair", icon="CANCEL", text="") - row = box.row(align=True) + row = self.layout.row(align=True) for prop_name in props.get_props_kwargs(): - box.prop(props, prop_name) + self.layout.prop(props, prop_name) update_stair_modifier(context) else: - row = box.row(align=True) - row.label(text=f"Parameters:", icon="MOD_ARRAY") row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="") row.operator("bim.remove_stair", icon="X", text="") - row = box.row(align=True) + row = self.layout.row(align=True) for prop in props.get_props_kwargs(): prop_value = stair_data[prop] prop_value = round(prop_value, 5) if type(prop_value) is float else prop_value - box.label(text=f"{props.bl_rna.properties[prop].name}: {prop_value}") + row = self.layout.row(align=True) + row.label(text=f"{props.bl_rna.properties[prop].name}") + row.label(text=str(prop_value)) # calculated properties number_of_rises = props.number_of_treads + 1 - box.label(text=f"Number of risers: {number_of_rises}") - box.label(text=f"Tread rise: {round(props.height / number_of_rises, 5)}") - box.label(text=f"Length: {round(props.tread_run * number_of_rises, 5)}") + row = self.layout.row(align=True) + row.label(text="Number of risers") + row.label(text=str(number_of_rises)) + row = self.layout.row(align=True) + row.label(text="Tread rise") + row.label(text=str(round(props.height / number_of_rises, 5))) + row = self.layout.row(align=True) + row.label(text="Length") + row.label(text=str(round(props.tread_run * number_of_rises, 5))) else: row = self.layout.row() row.label(text="No Stair Found")