mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
New feature to manipulate cost item quantities
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
import ifcopenshell.api
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {"cost_item": None, "ifc_class": "IfcQuantityCount"}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
quantity = self.file.create_entity(self.settings["ifc_class"], Name="Unnamed")
|
||||
quantity[3] = 0.0
|
||||
cost_item = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcCostItem")
|
||||
quantities = list(self.settings["cost_item"].CostQuantities or [])
|
||||
quantities.append(quantity)
|
||||
self.settings["cost_item"].CostQuantities = quantities
|
||||
return quantity
|
||||
@@ -5,17 +5,20 @@ class Data:
|
||||
is_loaded = False
|
||||
cost_schedules = {}
|
||||
cost_items = {}
|
||||
physical_quantities = {}
|
||||
|
||||
@classmethod
|
||||
def purge(cls):
|
||||
cls.is_loaded = False
|
||||
cls.cost_schedules = {}
|
||||
cls.cost_items = {}
|
||||
cls.physical_quantities = {}
|
||||
|
||||
@classmethod
|
||||
def load(cls, file):
|
||||
cls.cost_schedules = {}
|
||||
cls.cost_items = {}
|
||||
cls.physical_quantities = {}
|
||||
|
||||
for cost_schedule in file.by_type("IfcCostSchedule"):
|
||||
data = cost_schedule.get_info()
|
||||
@@ -36,7 +39,6 @@ class Data:
|
||||
data = cost_item.get_info()
|
||||
del data["OwnerHistory"]
|
||||
del data["CostValues"]
|
||||
del data["CostQuantities"]
|
||||
data["RelatedObjects"] = []
|
||||
data["Controls"] = []
|
||||
for rel in cost_item.IsNestedBy:
|
||||
@@ -44,4 +46,16 @@ class Data:
|
||||
for rel in cost_item.Controls:
|
||||
[data["Controls"].append(o.id()) for o in rel.RelatedObjects or []]
|
||||
cls.cost_items[cost_item.id()] = data
|
||||
cls.load_cost_item_quantities(cost_item, data)
|
||||
cls.is_loaded=True
|
||||
|
||||
@classmethod
|
||||
def load_cost_item_quantities(cls, cost_item, data):
|
||||
data["CostQuantities"] = []
|
||||
data["TotalCostQuantities"] = 0.0
|
||||
for quantity in cost_item.CostQuantities or []:
|
||||
quantity_data = quantity.get_info()
|
||||
del quantity_data["Unit"]
|
||||
cls.physical_quantities[quantity.id()] = quantity_data
|
||||
data["CostQuantities"].append(quantity.id())
|
||||
data["TotalCostQuantities"] += quantity[3]
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {"physical_quantity": 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["physical_quantity"], name, value)
|
||||
@@ -0,0 +1,14 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {"cost_item": None, "physical_quantity": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
if len(self.file.get_inverse(self.settings["physical_quantity"])) == 1:
|
||||
self.file.remove(self.settings["physical_quantity"])
|
||||
return
|
||||
quantities = list(self.settings["cost_item"].CostQuantities or [])
|
||||
quantities.remove(self.settings["physical_quantity"])
|
||||
self.settings["cost_item"].CostQuantities = quantities
|
||||
Reference in New Issue
Block a user