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")