mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 01:41:57 +00:00
DoorData use refactor
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user