[IfcOpenShell-Python] IfcTask - PredefinedType [CONSTRUCTION,DEMOLITION,MOVE]

edited September 2022 in General

Here we have seen how to create IfcTask with PredefinedType CONSTRUCTION and assign it to a IfcElement.

When you look it in BlenderBIM, they just pop out of nowhere with green light, when they are "constructed" .

I did afterwards test the PredefinedType DEMOLITION, it's the same code -> just with DEMOLITION instead of CONSTRUCTION. Now when you look at them in BlenderBIM, they just vanish with red light, when they are "demolished".

So now we have a way to represent temporary structures, and that's already incredible.

However in the IFC Schema there are many more PredefinedType's for IfcTask -> http://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcTaskTypeEnum.htm

And i am interested in the PredefinedType MOVE -> Moving things from one place to another.
So how do i get to move for example an IfcWall to another place? I know how to change in the code the PredefinedType from CONSTRUCTION to MOVE, but where can i specify the displacement?

Comments

  • It is useful to understand generically tasks in IFC follow the "ICOM" model, inputs, constraints, outputs, and mechanisms.

    • Inputs: the task consumes a product (in theory, this should be DEMOLITION)
    • Outputs: the task produces a thing (e.g. CONSTRUCTION)
    • Controls: the task is constrained by a control (e.g. cost item, calendar availability, etc)
    • Resources (the IFC word for "Mechanisms"): the task requires these resources to happen (e.g. materials, equipment, labour, ...)

    So a "MOVE" in IFC requires both an Input and an Output. Input is where the product was before, and Output is where the product is going to be. So if you wanted to show a "Move" of a jump form where the jump is at each building storey, then you will need to duplicate that jump form for each storey on every location it is going to be.

    If your reaction is "Ugh, it would be more elegant to keep the same product with the same GUID, and simply modify its ObjectPlacement", the answer is "Yes, you're right. This is IFC's second version only, it's going to get better in the future I reckon".

    BTW you can see the animation presets here: https://github.com/IfcOpenShell/IfcOpenShell/blob/v0.7.0/src/blenderbim/blenderbim/bim/module/sequence/operator.py#L1157-L1167

    Martin156131
  • Thanks for the explanation.

    Did i unterstand it correctly?

    IfcTask with PredefinedType CONSTRUCTION -> Output -> Use IfcRelAssignsToProduct where RelatedObjects points to the task(s) and RelatingProduct points to the object, that is being constructed

    IfcTask with PredefinedType DEMOLITION -> Input -> Use IfcRelAssignsToProcess where RelatingProcess points to the task and RelatedObjects points to the object, that is being demolished

    IfcTask with PredefinedType MOVE -> Input and Output -> Use IfcRelAssignsToProcess where RelatingProcess points to the task and RelatedObjects points to the object with the old position. Use IfcRelAssignsToProduct where RelatedObjects points to the task(s) and RelatingProduct points to the duplicate object with the new position.

  • edited September 2022

    So to test, what i have learned, i created this jupyter notebook . This notebook creates from this file -> this file with three IfcTask.

    the base ifc file has two IfcWall with identical cubus geometry. So what my script is doing is.

    First IfcTask: it construct the first IfcWall
    Second IfcTask: it "moves" the first IfcWall to the second IfcWall
    Third IfcTask: it demolate the second IfcWall

    All IfcTask have the same duration.

Sign In or Register to comment.