IfcRelAssignsToProduct

Hello,
I am currently working in the creation of themathic views that should isolate certain elements in an ifc .
One of these cases, is showing a room and the ventilation damper that is controlling the flow of air to that room.
In the IFC4 schema there are several relations that can be useful:
IfcDamper has ReferencedBy property (IfcRelAssignsToProduct) so has also the IfcSpace. So, my idea, is to store in an objetc IfcRelAssignToProduct the damper as RelatingProduct and the spaces as RelatedObjects that are being controlled by the damper (and also assign a name to that relation). The same principle should work for the room being the RelatingProduct.
I have not found how to implement the object IfcRelAssignToProduct via ifcopenshell (python) or via BlenderBim. Do you think that it is somehow possible?
Thanks to all :)

Comments

  • Hi @Pit,
    I believe you know how to create an IfcSpace, otherwise here's a video tutorial. Thanks @theoryshaw.
    If the relationship you want to create is a spatial hierarchy, the IfcSpace documentation already shows the way.
    I think that creating a relationship to get views is perhaps a "cannon shot to kill a mosquito...". Blender Collections is perhaps a simpler way to go, unless you want this to be reflected in the IFC file. I could be wrong, it depends on what you really want.
    In the documentation for IfcRelAssignsToProduct you can see that more emphasis has been placed on using this relationship for tasks and costs, I don't see why it can't be used for other purposes, but maybe this is not the relationship you're looking for.
    Please clarify what your objective is.
    Here you find an implementation of IfcRelAssignsToProduct.

  • PitPit
    edited August 2023

    Hello @walpa thanks for your help.
    I don't think I was clear enough in my explanation, so I'll expand a little.
    We are trying to find out which dampers control the airflow in a particular room. This is a fairly common case. In the operational phase, the installation and maintenance teams are faced with situations involving these two elements on a daily basis.

    So in a sense it would be a one to many relationship: one damper can control the air flow of many rooms for a particular system, let's say cooling air.
    When I said " I am preparing some views" I meant that I would like to make a query to the ifc to extract a csv file or isolate in a Blender viewport this information so that I can easily know that if a particular damper is cut, rooms X,Y,Z will be affected.
    If I check the ifc4 documentation for a damper, the inverse attribute ReferencedBy at the IfcProduct level can do this job.

    As it is written in the definition : Reference to the IfcRelAssignsToProduct relationship, by which other products, processes, controls, resources or actors (as subtypes of IfcObjectDefinition) can be related to this product.

    Other relations are too specific and doesn't seem be useful for this particular usecase.

    We believe that the IFC schema can solve many of the relational situations that can occur in a building. This is a usecase that happens very often not only between dampers and rooms but also between valves and rooms or any other physical product that is not necessarily a controller but has an influence on others.
    So I wonder how we can implement this in an IFC using either blenderbim or the ifcopenshel api.

  • Ok, I got it.
    I searched and couldn't find a diagram that showed this relationship more explicitly.
    So I made the diagram below that shows a way to implement.
    What do you think?

  • Hi, @walpa and @Pit , you question is very interesting.
    I'm not an expert about ifc relationships but in this case i think that the relation IfcRelReferencedInSpatialStructure should be used.
    I would also use IfcRelServicesBuilding but it seems deprecated in IFC 4.3...

    I have not found how to implement the object IfcRelAssignToProduct via ifcopenshell (python) or via BlenderBim. Do you think that it is somehow possible?

    I searched here in the doc if there are api functions to do that but with no success ... the only api function that returns a IfcRelAssignsToProduct relation seems to be sequence.assign_product but clearly it's not your case.
    I think btw that can be added a new api function, let's say "system.assign_space", that should does what are you describing. If we file a bug with this request it would be implemented i guess..
    What do you think?

  • @Massimo said:
    I would also use IfcRelServicesBuilding but it seems deprecated in IFC 4.3...

    Sorry, forgot to mention it was IFC 4.1

    I think btw that can be added a new api function, let's say "system.assign_space", that should does what are you describing. If we file a bug with this request it would be implemented i guess..

    +1

  • This is a great discussion. Indeed it seems that prior to IFC4X3, you'd have distribution elements grouped into distribution systems, then those distribution systems would "service" spatial elements.

    However of course this makes it incredibly impractical for fine grained queries like you're looking for: i.e. a single damper, not the whole system. In theory you could split the system into subsystems and so on but this starts to get ridiculous.

    In IFC4.3 they fixed this mess and simplified it to use spatial referencing which works for both groups and products. We already have API functions for referencing / dereferencing: https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.7.0/src/ifcopenshell-python/ifcopenshell/api/spatial

    I'd say that even though officially you shouldn't use referencing for this purpose in IFC4, I'd personally go ahead and do it anyway. Firstly because it's 100% compatible (no new relationships) and secondly because this is not a well-established concept (the vast majority of vendors do not care much about referencing and regardless of vendors, modelers typically don't care much (except for @Cyril who does an incredible job) about the quality of their distribution system relationships.

    Massimo
Sign In or Register to comment.