ifcopenshell.api.sequence.assign_process¶
Module Contents¶
- ifcopenshell.api.sequence.assign_process.assign_process(file: ifcopenshell.file, relating_process: ifcopenshell.entity_instance, related_object: ifcopenshell.entity_instance) ifcopenshell.entity_instance¶
Assigns an object as an input, control, or resource of a process
Processes work using the ICOM (Input, Controls, Outputs, Mechanisms) paradigm in IFC. This process model is commonly used in modeling manufacturing functions.
For example, processes (such as tasks) consume Inputs and transform them into Outputs. The process may only occur within the limits of Controls (e.g. cost items) and may require Mechanisms (ISO9000 calls them Mechanisms, whereas IFC calls them resources, such as raw materials, labour, or equipment).
Controls
V
+——–+ +———+ +———+ | Inputs | –> | Process | –> | Outputs | +——–+ +———+ +———+
Resources
There are three main scenarios where an object may be related to a task: defining inputs, controls, and resources of a process.
For inputs, a product (i.e. wall) may be defined as an input to a task, such as when the task is to demolish the wall (i.e. the wall is an input, and there is no output).
For controls, a cost item may be defined as a control to a task.
For resources, any construction resource may be assigned to a task.
Warning
This function creates an Input relationship (
IfcRelAssignsToProcess), meaning the product is consumed or operated on by the task — the typical case is demolition or maintenance.If the task constructs or installs a product (e.g. erecting a wall or fitting a window), use
assign_product()instead, which creates an Output relationship (IfcRelAssignsToProduct).- Parameters:
relating_process – The IfcProcess (typically IfcTask) that the input, control, or resource is related to.
related_object – The IfcProduct (for input), IfcCostItem (for control) or IfcConstructionResource (for resource).
- Returns:
The newly created IfcRelAssignsToProcess relationship
Example:
# Let's imagine we are creating a construction schedule. All tasks # need to be part of a work schedule. schedule = ifcopenshell.api.sequence.add_work_schedule(model, name="Construction Schedule A") # Let's create a demolition task. Note that the predefined type is # important to distinguish types of tasks. task = ifcopenshell.api.sequence.add_task(model, work_schedule=schedule, name="Demolish existing", identification="A", predefined_type="DEMOLITION") # Let's say we have a wall somewhere. wall = ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall") # The wall is an INPUT to the demolition task (it will be consumed). ifcopenshell.api.sequence.assign_process(model, relating_process=task, related_object=wall) # For a construction task that BUILDS a wall, use assign_product instead: # build_task = ifcopenshell.api.sequence.add_task(model, ..., predefined_type="CONSTRUCTION") # ifcopenshell.api.sequence.assign_product(model, relating_product=wall, related_object=build_task)