DoorData use refactor

This commit is contained in:
Andrej730
2023-07-13 10:57:45 +05:00
parent cd1a813630
commit d633733d18
3 changed files with 66 additions and 36 deletions
@@ -380,17 +380,50 @@ class DoorData:
@classmethod
def load(cls):
cls.is_loaded = True
cls.data = {"parameters": cls.parameters()}
cls.data = {}
cls.data["parameters"] = cls.pset_data()
cls.data["general_params"] = cls.general_params()
cls.data["lining_params"] = cls.lining_params()
cls.data["panel_params"] = cls.panel_params()
@classmethod
def parameters(cls):
element = tool.Ifc.get_entity(bpy.context.active_object)
if element:
psets = ifcopenshell.util.element.get_psets(element)
parameters = psets.get("BBIM_Door", None)
if parameters:
parameters["data_dict"] = json.loads(parameters.get("Data", "[]") or "[]")
return parameters
def pset_data(cls):
return tool.Model.get_modeling_bbim_pset_data(bpy.context.active_object, "BBIM_Door")
@classmethod
def general_params(cls):
props = bpy.context.active_object.BIMDoorProperties
data = cls.data["parameters"]["data_dict"]
general_params = {}
general_props = props.get_general_kwargs()
for prop_name in general_props:
prop_readable_name, prop_value = get_prop_from_data(props, data, prop_name)
general_params[prop_readable_name] = prop_value
return general_params
@classmethod
def lining_params(cls):
props = bpy.context.active_object.BIMDoorProperties
data = cls.data["parameters"]["data_dict"]
lining_data = data["lining_properties"]
lining_params = {}
lining_props = props.get_lining_kwargs(door_type=data["door_type"], lining_data=lining_data)
for prop_name in lining_props:
prop_readable_name, prop_value = get_prop_from_data(props, lining_data, prop_name)
lining_params[prop_readable_name] = prop_value
return lining_params
@classmethod
def panel_params(cls):
props = bpy.context.active_object.BIMDoorProperties
data = cls.data["parameters"]["data_dict"]
panel_data = cls.data["parameters"]["data_dict"]["panel_properties"]
panel_params = {}
panel_props = props.get_panel_kwargs(lining_data=data["lining_properties"])
for prop_name in panel_props:
prop_readable_name, prop_value = get_prop_from_data(props, panel_data, prop_name)
panel_params[prop_readable_name] = prop_value
return panel_params
class RailingData:
@@ -485,28 +485,35 @@ class BIMDoorProperties(PropertyGroup):
return kwargs
return tool.Model.convert_data_to_project_units(kwargs, ["door_type"])
def get_lining_kwargs(self, convert_to_project_units=False):
def get_lining_kwargs(self, convert_to_project_units=False, door_type=None, lining_data=None):
if not door_type:
door_type = self.door_type
transom_thickness = lining_data["transom_thickness"] if lining_data else self.transom_thickness
lining_offset = lining_data["lining_offset"] if lining_data else self.lining_offset
threshold_thickness = lining_data["threshold_thickness"] if lining_data else self.threshold_thickness
kwargs = {
"lining_depth": self.lining_depth,
"lining_thickness": self.lining_thickness,
"lining_offset": self.lining_offset,
"lining_offset": lining_offset,
}
if "SLIDING" not in self.door_type:
if "SLIDING" not in door_type:
kwargs["lining_to_panel_offset_x"] = self.lining_to_panel_offset_x
kwargs["lining_to_panel_offset_y"] = self.lining_to_panel_offset_y
kwargs["transom_thickness"] = self.transom_thickness
if self.transom_thickness:
kwargs["transom_thickness"] = transom_thickness
if transom_thickness:
kwargs["transom_offset"] = self.transom_offset
if not self.lining_offset:
if not lining_offset:
kwargs["casing_thickness"] = self.casing_thickness
if self.casing_thickness:
kwargs["casing_depth"] = self.casing_depth
kwargs["threshold_thickness"] = self.threshold_thickness
if self.threshold_thickness:
kwargs["threshold_thickness"] = threshold_thickness
if threshold_thickness:
kwargs["threshold_depth"] = self.threshold_depth
kwargs["threshold_offset"] = self.threshold_offset
@@ -514,10 +521,11 @@ class BIMDoorProperties(PropertyGroup):
return kwargs
return tool.Model.convert_data_to_project_units(kwargs)
def get_panel_kwargs(self, convert_to_project_units=False):
def get_panel_kwargs(self, convert_to_project_units=False, lining_data=None):
transom_thickness = lining_data["transom_thickness"] if lining_data else self.transom_thickness
kwargs = {"panel_depth": self.panel_depth, "panel_width_ratio": self.panel_width_ratio}
if self.transom_thickness:
if transom_thickness:
kwargs["frame_thickness"] = self.frame_thickness
kwargs["frame_depth"] = self.frame_depth
@@ -463,8 +463,6 @@ class BIM_PT_door(bpy.types.Panel):
row = self.layout.row(align=True)
row.label(text="Door parameters", icon="OUTLINER_OB_LATTICE")
door_data = DoorData.data["parameters"]["data_dict"]
if props.is_editing:
row = self.layout.row(align=True)
row.operator("bim.finish_editing_door", icon="CHECKMARK", text="Finish Editing")
@@ -491,32 +489,23 @@ class BIM_PT_door(bpy.types.Panel):
row.operator("bim.remove_door", icon="X", text="")
box = self.layout.box()
general_props = props.get_general_kwargs()
for prop in general_props:
prop_value = door_data[prop]
prop_value = round(prop_value, 5) if type(prop_value) is float else prop_value
for prop_name, prop_value in DoorData.data["general_params"].items():
row = box.row(align=True)
row.label(text=f"{props.bl_rna.properties[prop].name}")
row.label(text=prop_name)
row.label(text=str(prop_value))
lining_props = props.get_lining_kwargs()
self.layout.label(text="Lining properties")
lining_box = self.layout.box()
for prop in lining_props:
prop_value = door_data["lining_properties"][prop]
prop_value = round(prop_value, 5) if type(prop_value) is float else prop_value
for prop_name, prop_value in DoorData.data["lining_params"].items():
row = lining_box.row(align=True)
row.label(text=f"{props.bl_rna.properties[prop].name}")
row.label(text=prop_name)
row.label(text=str(prop_value))
panel_props = props.get_panel_kwargs()
self.layout.label(text="Panel properties")
panel_box = self.layout.box()
for prop in panel_props:
prop_value = door_data["panel_properties"][prop]
prop_value = round(prop_value, 5) if type(prop_value) is float else prop_value
for prop_name, prop_value in DoorData.data["panel_params"].items():
row = panel_box.row(align=True)
row.label(text=f"{props.bl_rna.properties[prop].name}")
row.label(text=prop_name)
row.label(text=str(prop_value))
else:
row = self.layout.row()