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.
- Parameters:
cost_item (ifcopenshell.entity_instance) – The IfcCostItem to assign parametric quantities to
products (list[ifcopenshell.entity_instance]) – The IfcObjects to assign parametric quantities to
prop_name (str, optional) – 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
- Return type:
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")