Coverage for bim2sim/tasks/common/serialize_elements.py: 50%
18 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
1import pickle
2from typing import Tuple, Dict
4from bim2sim.elements.base_elements import SerializedElement
5from bim2sim.tasks.base import ITask
8class SerializeElements(ITask):
9 """Serialize element structure, run() method holds detailed information."""
11 reads = ('elements',)
12 touches = ('serialized_elements',)
13 single_use = True
15 def run(self, elements: dict) -> Tuple[Dict]:
16 """Make the element structure serializable.
18 As due to swigPy objects coming from IfcOpenShell we can't
19 directly serialize a whole bim2sim project or even the elements
20 structure with serializers like pickle. To still keep the element
21 structure information after a project run, we just copy the relevant
22 information like the attributes from the AttributeManager, guid and
23 type of the element to a simple SerializedElement instance and store it
24 with pickle.
26 Args:
27 elements: dict[guid: element] of bim2sim element structure
29 Returns:
30 serialized_elements: dict[guid: serializedElement] of serialized
31 elements
32 """
33 all_elements = {**elements,}
34 serialized_elements = {}
35 for ele in all_elements.values():
36 se = SerializedElement(ele)
37 serialized_elements[se.guid] = se
38 pickle_path = self.paths.export / "serialized_elements.pickle"
39 with open(pickle_path, "wb") as outfile:
40 pickle.dump(serialized_elements, outfile)
42 return serialized_elements,