Implement load management and assigning activities with named loads. Thanks Jesusbill!

This commit is contained in:
Dion Moult
2021-05-13 18:04:50 +10:00
parent de7ddd9b97
commit b3c918f15f
10 changed files with 338 additions and 31 deletions
@@ -21,8 +21,7 @@ class Usecase:
ifc_class=self.settings["ifc_class"],
predefined_type=self.settings["predefined_type"],
)
# TODO
# activity.AppliedLoad = self.settings["applied_load"]
activity.AppliedLoad = self.settings["applied_load"]
activity.GlobalOrLocal = self.settings["global_or_local"]
rel = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcRelConnectsStructuralActivity")
@@ -0,0 +1,15 @@
import ifcopenshell.api
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"name": None,
"ifc_class": "IfcStructuralLoadLinearForce",
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
return self.file.create_entity(self.settings["ifc_class"], Name=self.settings["name"])
@@ -7,7 +7,7 @@ class Data:
connects_structural_members = {}
members = {}
structural_activities = {}
applied_loads = {}
structural_loads = {}
connects_structural_activities = {}
load_cases = {}
@@ -24,7 +24,7 @@ class Data:
cls.connects_structural_members = {}
cls.members = {}
cls.structural_activities = {}
cls.applied_loads = {}
cls.structural_loads = {}
cls.connects_structural_activities = {}
cls.load_cases = {}
@@ -49,6 +49,7 @@ class Data:
cls.load_structural_load_case_combinations()
cls.load_structural_load_groups()
cls.load_structural_activities()
cls.load_structural_loads()
cls.is_loaded = True
@classmethod
@@ -195,8 +196,14 @@ class Data:
cls.connects_structural_members[rel.id()] = rel_data
@classmethod
def load_applied_load(cls, applied_load):
cls.applied_loads[applied_load.id()] = applied_load.get_info()
def load_structural_loads(cls):
cls.structural_loads = {}
for load in cls._file.by_type("IfcStructuralLoad"):
cls.load_structural_load(load)
@classmethod
def load_structural_load(cls, load):
cls.structural_loads[load.id()] = load.get_info()
@classmethod
def load_connects_structural_activity(cls, rel):
@@ -206,7 +213,7 @@ class Data:
rel_data["RelatedStructuralActivity"] = rel.RelatedStructuralActivity.id()
if rel.RelatedStructuralActivity.AppliedLoad:
cls.load_applied_load(rel.RelatedStructuralActivity.AppliedLoad)
cls.load_structural_load(rel.RelatedStructuralActivity.AppliedLoad)
# rel_data["AppliedCondition"] = rel.RelatedStructuralActivity.AppliedLoad.id()
cls.connects_structural_activities[rel.id()] = rel_data
@@ -238,4 +245,4 @@ class Data:
data["ConnectedBy"].append(rel.id())
cls.members[member.id()] = data
cls.members[member.id()] = data
@@ -0,0 +1,13 @@
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {
"structural_load": None,
"attributes": {}
}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
for name, value in self.settings["attributes"].items():
setattr(self.settings["structural_load"], name, value)
@@ -0,0 +1,9 @@
class Usecase:
def __init__(self, file, **settings):
self.file = file
self.settings = {"structural_load": None}
for key, value in settings.items():
self.settings[key] = value
def execute(self):
self.file.remove(self.settings["structural_load"])