Roof slope as percentage property

This commit is contained in:
Eduardo Schilling
2024-01-17 05:01:46 -03:00
parent 881f38e163
commit 144f028c84
@@ -19,6 +19,7 @@
import bpy import bpy
import ifcopenshell import ifcopenshell
import blenderbim.tool as tool import blenderbim.tool as tool
import math
from blenderbim.bim.prop import ObjProperty from blenderbim.bim.prop import ObjProperty
from blenderbim.bim.module.model.data import AuthoringData from blenderbim.bim.module.model.data import AuthoringData
from bpy.types import PropertyGroup, NodeTree from bpy.types import PropertyGroup, NodeTree
@@ -692,6 +693,7 @@ class BIMRoofProperties(PropertyGroup):
"roof_type", "roof_type",
"generation_method", "generation_method",
"angle", "angle",
"percentage",
"rafter_edge_angle", "rafter_edge_angle",
) )
roof_types = (("HIP/GABLE ROOF", "HIP/GABLE ROOF", ""),) roof_types = (("HIP/GABLE ROOF", "HIP/GABLE ROOF", ""),)
@@ -710,7 +712,8 @@ class BIMRoofProperties(PropertyGroup):
height: bpy.props.FloatProperty( height: bpy.props.FloatProperty(
name="Height", default=1.0, description="Maximum height of the roof to be generated.", subtype="DISTANCE" name="Height", default=1.0, description="Maximum height of the roof to be generated.", subtype="DISTANCE"
) )
angle: bpy.props.FloatProperty(name="Slope Angle", default=pi / 18, subtype="ANGLE") angle: bpy.props.FloatProperty(name="Slope Angle", default=pi / 18, subtype="ANGLE", update=lambda self, context: self.update_percentage())
percentage: bpy.props.FloatProperty(name="Slope %", default=17.63269754733197, subtype="PERCENTAGE", update=lambda self, context: self.update_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")
@@ -727,6 +730,7 @@ class BIMRoofProperties(PropertyGroup):
kwargs["height"] = self.height kwargs["height"] = self.height
else: else:
kwargs["angle"] = self.angle kwargs["angle"] = self.angle
kwargs["percentage"] = self.percentage
if not convert_to_project_units: if not convert_to_project_units:
return kwargs return kwargs
@@ -736,3 +740,9 @@ class BIMRoofProperties(PropertyGroup):
kwargs = tool.Model.convert_data_to_si_units(kwargs, self.non_si_units_props) kwargs = tool.Model.convert_data_to_si_units(kwargs, self.non_si_units_props)
for prop_name in kwargs: for prop_name in kwargs:
setattr(self, prop_name, kwargs[prop_name]) setattr(self, prop_name, kwargs[prop_name])
def update_angle(self):
self.angle = math.atan(self.percentage / 100)
def update_percentage(self):
self.percentage = math.tan(self.angle)*100