ifcopenshell.api.control

Processes and costs may be controlled by other entities which indicate constraints that determine how they can change

This is an advanced feature mostly used in 4D/5D

Submodules

Package Contents

ifcopenshell.api.control.assign_control(file: ifcopenshell.file, relating_control: ifcopenshell.entity_instance, related_object: ifcopenshell.entity_instance) ifcopenshell.entity_instance | None

Assigns a planning control or constraint to an object

IFC can describe concepts that control other objects. For example, a planning calendar controls the availability of working days for construction planning. As another example, a cost item might constrain or limit the ability to procure and build a product.

This usecase lets you assign controls following the rules of the IFC specification. This is an advanced topic and assumes knowledge of the IFC concepts to determine what is allowed to control what. In the future, this API will likely be deprecated in favour of multiple usecase specific APIs.

Parameters:
  • relating_control (ifcopenshell.entity_instance) – The IfcControl entity that is creating the control or constraint

  • related_object (ifcopenshell.entity_instance) – The IfcObjectDefinition that is being controlled

Returns:

The newly created IfcRelAssignsToControl. If relationship already existed before and wasn’t changed then returns None.

Return type:

ifcopenshell.entity_instance, None

Example:

# One common usecase is to assign a calendar to a task
calendar = ifcopenshell.api.sequence.add_work_calendar(model)
schedule = ifcopenshell.api.sequence.add_work_schedule(model)
task = ifcopenshell.api.sequence.add_task(model,
    work_schedule=schedule)

# All subtasks will inherit this calendar, so assigning a single
# calendar to the root task effectively defines a "default" calendar
ifcopenshell.api.control.assign_control(model,
    relating_control=calendar, related_object=task)

# Another common example might be relating a cost item and a product
wall = ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall")
schedule = ifcopenshell.api.cost.add_cost_schedule(model)
cost_item = ifcopenshell.api.cost.add_cost_item(model,
    cost_schedule=schedule)
ifcopenshell.api.control.assign_control(model,
    relating_control=cost_item, related_object=wall)
ifcopenshell.api.control.unassign_control(file: ifcopenshell.file, relating_control: ifcopenshell.entity_instance, related_object: ifcopenshell.entity_instance) ifcopenshell.entity_instance | None

Unassigns a planning control or constraint to an object

Parameters:
  • relating_control (ifcopenshell.entity_instance) – The IfcControl entity that is creating the control or constraint

  • related_object (ifcopenshell.entity_instance) – The IfcObjectDefinition that is being controlled

Returns:

If the control still is related to other objects, the IfcRelAssignsToControl is returned, otherwise None.

Return type:

ifcopenshell.entity_instance, None

Example:

# Let's relate a cost item and a product
wall = ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall")
schedule = ifcopenshell.api.cost.add_cost_schedule(model)
cost_item = ifcopenshell.api.cost.add_cost_item(model,
    cost_schedule=schedule)
ifcopenshell.api.control.assign_control(model,
    relating_control=cost_item, related_object=wall)

# And now let's change our mind
ifcopenshell.api.control.unassign_control(model,
    relating_control=cost_item, related_object=wall)