ifcopenshell.api.cost.assign_cost_item_quantity
¶
Module Contents¶
- class ifcopenshell.api.cost.assign_cost_item_quantity.Usecase¶
- add_quantity_from_qto(qto: ifcopenshell.entity_instance) None ¶
- assign_cost_control(related_object: ifcopenshell.entity_instance, cost_item: ifcopenshell.entity_instance) ifcopenshell.entity_instance ¶
- execute()¶
- update_cost_item_count()¶
- file: ifcopenshell.file¶
- settings: dict[str, Any]¶
- ifcopenshell.api.cost.assign_cost_item_quantity.assign_cost_item_quantity(file: ifcopenshell.file, cost_item: ifcopenshell.entity_instance, products: list[ifcopenshell.entity_instance], prop_name: str = '') None ¶
Adds a cost item quantity that is parametrically connected to a product
A cost item may have its subtotal calculated by multiplying a unit value by a quantity associated with the cost item. That quantity may be either manually specified or parametrically connected to a quantity on a product. This API function lets you create that parametric connection.
For example, you may wish to have a cost item linked to the “NetVolume” quantity on all IfcSlabs. Each quantity has a name which you can specify. If the quantity is updated in-place (which should occur for Native IFC applications) then the quantity for the cost item will automatically update as well. If the quantity is deleted and then re-added, then the parametric relationship is also lost.
This API also automatically assigns a control relationship between the cost item and the product, so it is not necessary to use ifcopenshell.api.control.assign_control.
If cost item has just 1 quantity and it’s IfcQuantityCount, API will assume that quantity is used for counting controlled objects and it will recalculate the quantity value at the end of the API call as long as the RelatedObjects are not IfcConstructionResource which do not count towards the cost item (they only provide value).
- Parameters:
cost_item – The IfcCostItem to assign parametric quantities to
products – The IfcObjects to assign parametric quantities to
prop_name – The name of the quantity. If this is not specified, then it is assumed that there is no calculated quantity, and the number of objects are counted instead.
- Returns:
None
Example:
schedule = ifcopenshell.api.cost.add_cost_schedule(model) item = ifcopenshell.api.cost.add_cost_item(model, cost_schedule=schedule) # Let's imagine a unit cost of 5.0 per unit volume value = ifcopenshell.api.cost.add_cost_value(model, parent=item) ifcopenshell.api.cost.edit_cost_value(model, cost_value=value, attributes={"AppliedValue": 5.0}) slab = ifcopenshell.api.root.create_entity(model, ifc_class="IfcSlab") # Usually the quantity would be automatically calculated via a # graphical authoring application but let's assign a manual quantity # for now. qto = ifcopenshell.api.pset.add_qto(model, product=slab, name="Qto_SlabBaseQuantities") ifcopenshell.api.pset.edit_qto(model, qto=qto, properties={"NetVolume": 42.0}) # Now let's parametrically link the slab's quantity to the cost # item. If the slab is edited in the future and 42.0 changes, then # the updated value will also automatically be applied to the cost # item. ifcopenshell.api.cost.assign_cost_item_quantity(model, cost_item=item, products=[slab], prop_name="NetVolume")