OSArch Community

Layered walls in BlenderBIM

  1. T

    @Coen said:

    @theoryshaw said:

    Unfortunately you cannot visualize layers yet

    https://github.com/IfcOpenShell/IfcOpenShell/issues/1227

    I don't get why so many IFC viewers are not capable of doing this... Is it because there's no relationship being defined between the different layers? Intuivelity it should be something very straighforward I think? ?

    Yeah not sure to tell you the truth.

  2. C

    Yeah not sure to tell you the truth.

    Drag Racing

  3. C

    In Blender I have made a geometry node group, that can brake up a 'Wall' into layers.

    Based on the way Blender BIM generates walls, a 'Wall' mesh has the following characteristics:

    • The origin is on the "lower-left" corner of a mesh (on the outer face), wall length is measured on positive X and all other orientations. (Walls along negative X are walls rotated 180 deg.)

    • Walls with layer sets do not currently have their own representation, they are shown without the layers

    • Blender BIM handles walls by generating a mesh with the width described by it's type class and the length and height given in the IFC parameters. The mesh geometry is drawn accordingly, while every object is scaled at X/Y/Z=1/1/1 and only rotation is applied at the object level

    • Every time a wall is edited from the 'Object' panel it is regenerated

    • Any wall mesh geometry -eg. triangular pediments or walls with openings- as long as one, the outer face is on the XZ plane

    See the Geometry Node setup here:

    https://blenderartists.org/t/geometry-notes-to-slice-a-cube/1461588/8?u=csimeon

    Limitations:

    • Cannot yet handle miters, at corners between wall elements

    • Cannot yet handle rotation angles on X, meaning non-vertical walls (Z rotations work fine!)

    • Cannot yet handle alignments other than outer face of wall

    To do:

    1. Query the Ifc database for thickness of layers, how can I pass the thickness values of of the wall layer set as input parameters to the geometry node? < HELP! with this one please, preferably as a variable in Blender not reading the Ifc file.

    2. Edit the Geometry Node Group, to represent different layers, using the Ifc material and matching to a Blender Material.

    3. Add a button [Represent wall layers] to the object menu for any wall with Ifc layered walls (for active object only)

    4. Interface with Blender BIM code, in regenerating a wall when the Ifc values are edited, a wall that has layers to be drawn with layers when edited automatically

    5. Add a button to add layers to all selected walls with Ifc layers (not just the active) and one to select and represent layers for all layered walls

  4. T
  5. M

    I believe the reason this is not very extensively implemented are:

    1. There are many layer usage details to account for, such as axis offsets, negative direction sense of layers (straightforward, but people forget about these)

    2. Walls can curve and slope (e.g. circular walls, angled walls)

    3. Wall can have holes in them.

    4. Walls are joined to other walls. (mitred corners is only one option out of many) ATPATH joins are a bit special compared to ATEND/ATSTART.

    5. Walls may be joined to other walls that are not parametrically layered. What happens then?

    6. Walls may be joined with a priority, and thus layers of the other wall need to overlap this wall (therefore the clipping curve for the connection relationships needs to be correct too) - I believe this is possibly the hardest aspect to get right.

    7. 3D booleans are expensive.

    8. Joins may not be through the entire height of the wall (e.g. the join may only be partway through the height)

    9. Many tools make mistakes with the axis representation (e.g. stops and starts at openings in the case of Revit)

    10. Junctions between AXIS2 and AXIS3 layers are also additionally more complex as they must be resolved in 3D (e.g. layered wall joining layered roof / slab / insulation above).

    That said, I think we're close to getting a rudimentary implementation in that accounts for 1, 3, 4, 5, 7, and 9.

    Note that there is nothing special here about how the BlenderBIM Add-on defines walls: we define them the way IFC defines standard case walls.

  6. P

    @Moult said:

    I believe the reason this is not very extensively implemented are:

    ...

    That said, I think we're close to getting a rudimentary implementation in that accounts for 1, 3, 4, 5, 7, and 9.

    Curious to learn more, or any pointer to, what are your solutions to these problems.

    In FreeCAD, there is something simple. E.g. walls with multiple continuous segments with identical layers would works; window / door opening works etc. Some of other problems you pointed out seems common to either systems.

    Thanks :)

  7. C

    @Moult

    Without getting into details now, I believe it's straightforward to implement most points you listed above using geometry nodes. Conceptually if the layering geometry nodes keep the outline surfacesof the wall object that Blender BIM creates -as it currently does- and layers the "inside" of it, most the points above (2,3,4,5,8,9) are resolved - that is assuming BB already handles these cases correctly without the layers. Does BB currently handle these cases correctly as non-layered?

    The key here is that geometry nodes start with the container geometry already produced by BB and modify that non-destucively.

    Point 1 is adjusting for positive x and axis offset from origin to be possible with a query and adjustment of translations of the layered wall.

    Point 6, seems the hardest and is not about just layering the container since priorities influence layers specifically.

    Is there a document of variable names that BB uses.

    Please help me how to query the data of walls from within Blender, i will use values of wall parameters as inputs to geometry nodes.

    Thanks

  8. M

    @csimeon sure thing, you can indeed do an implementation with geometry nodes. You can query this data in IFC (there is no document of variable names since no data is actually stored in Blender properties, it's all in IFC). For example:

    
    import blenderbim. tool as tool
    
    element = tool.Ifc.get_entity(bpy.context.active_object)
    
    material = ifcopenshell.util.element.get_material(element) # May be an IfcMaterialLayerSetUsage
    
    layer_set = material.ForLayerSet
    
    print(layer_set.TotalThickness)
    
    print(layer_set.MaterialLayers)
    

    Out of curiosity what are you trying to achieve with a geometry nodes implementation? The functionality almost already exists within IfcOpenShell already via APPLY_LAYERSETS (though ATPATH implementation is missing), and with a few tweaks to the existing viewport slicing which also already exists, we'll have it in vector drawings too.

  9. C

    Thanks for the query info. Layered walls was a good useful way for me to start my first exercises in Geometry Nodes, in a way that might be useful to me as an architect.

    I thought the implementation does not exist... what do you mean

    @Moult said:

    The functionality almost already exists within IfcOpenShell already via APPLY_LAYERSETS (though ATPATH implementation is missing), and with a few tweaks to the existing viewport slicing which also already exists, we'll have it in vector drawings too.

    I assume this can be found on a menu of the Blender BIM addon? where please?

    Vector dxf / dwg ?

  10. M

    When we talk about layered walls there are a few aspects:

    1. Defining the semantics of layered walls. This involves creating layers, layer sets, layer set usages, and rel connects relationships. This is fully implemented and already well covered in tutorials. It has been implemented for a couple years now, and rel connects implemented probably for a year.

    2. Viewing layers in real time. This is also mostly implemented for most basic walls and you can see it in the animated GIF in the previous post. This was implemented recently and you can use it now via the daily builds, or wait until the stable release next week. There is no menu for this, just create a new drawing and you'll see it - it's always enabled.

    3. Having vector drawings with CSS-stylable filled and merged sliced layers. This is not yet implemented, but probably will be soon (fingers crossed it'll be done in the next week, but if not, pretty soon after as it's just a small extension from number 2). There will probably be a drawing setting you can use to enable or disable this, as some drawings should show slices, whereas other drawings shouldn't.

    4. Full 3D evaluation of the layers, sliced into 3D geometry. This is mostly implemented in IfcOpenShell but not exposed in the UI as it is missing a few things like ATPATH and there are some discrepancies with how axes are dealt with (see issue 1227). This feature has been around for perhaps a decade: https://blenderbim.org/docs-python/ifcopenshell/geometry_settings.html#apply-layersets

    Vector drawings right now means vector SVG, which is semantically significantly richer than DXF/DWG. As mentioned in the other thread we also support automated conversion from SVG into DXF if using DXF is important for you.

  11. C

    Wow @csimeon that node looks impressive!! Out of curiosity, how is this done? C, Python? could you point to any resource on how to build custom geometry nodes?

  12. C

    It's a group node, which is a combination of Blender's native nodes, with a group input and output, that acts as one node with customized functionality, no coding language.

    The Blender manual offers complete documentation, YouTube has numerous tutorials and usage examples.

    @cvillagrasa said:

    Wow @csimeon that node looks impressive!

    Thanks, but not really, there are examples of using geometry nodes that do really amazing things, from parametric cities to abstract geometric constructs of great complexity.

  13. C

    @Moult said:

    1. Viewing layers in real time. This is also mostly implemented for most basic walls and you can see it in the animated GIF in the previous post. This was implemented recently and you can use it now via the daily builds, or wait until the stable release next week. There is no menu for this, just create a new drawing and you'll see it - it's always enabled.

    My BB version was pretty recent 23.03.04 and it did not have this (or I did not find it), so I downloaded today's build 23.05.01.

    I have a basic Ifc file, just a few walls made a couple weeks ago with BB 23.03.04, some layered walls included. Not surprisingly loading the .blend file was the same, but loading the .ifc file lead to different 3D objects:

    1. Walls (simple vertical) with the previous version were meshes, orthogonal parallelipeds with each of the 6 faces triangulated /2=12 faces. With today's BB version the representation of the same walls is with quads =6 faces, except for (some?! walls) for which the faces on the tops and on the bottoms of walls are triangulated =8 faces total! Shown above, on the left a simple wall constructed with 8faces (4 triangular at top and bottom), at right a layered wall, that only appears as a mesh with 6 faces.

    2. The wall objects are identified as meshes in the outliner (Ifc hierarchy loaded) BUT trying to edit them returns a warning message "only mesh-compatible representations can be edited in edit mode". Strange message! a first in my experience with Blender of many years, so I figured the message is from BB that also is behind the edit restriction.

    3. Unload BB and sure enough the object is a mesh.

    4. @Moult No sign of layers in 3D mesh object. Are layers created with the cuts only? like the case in the gif you posted?

    If indeed there are no layers in 3D, that for me is an important feature missing: as an architect owning a small scale business, BIM for me is a wish for an all purpose tool, including 3D modeling, 2D representations, Quantifying and Coordinating disciplines.

    In 3D I want enough features there to start my renderings and image production. Layers are useful not only for quantifying but also to have the right materials setup to start texturing, on the road to producing rendered images.

    That is why in my approach with the geometry nodes, I was was subdividing the thickness and adding the layer information in the 3D.

    I'm sure you are way ahead of me in programming, after all I made a first effort only a couple days ago with the geometry nodes, but I do wonder if you intend to have wall layers in 3D or just in 2D representations?

    What am I missing?

  14. M

    @csimeon there seem to be a few misunderstandings with your post. Firstly, I'd advise never to load a .blend file. The .blend file contains nothing but your session settings. All the data is in IFC. Treat the IFC as your native format, so save and load IFC. The "Import / Export" buttons are merely a remnant of the past and to aid discoverability for new users. Remember: you're now authoring an IFC database, not Blender anymore. Blender is just an interface.

    Versions also change very, very quickly as this is still alpha software. So 23.03.04 (which is the last stable release) is actually extremely old and is missing hundreds of new features and fixes. You'll see this weekend when the next stable release is out of exactly how much has changed in 2 months in the release notes.

    When IfcOpenShell loads geometry, it performs a tessellation function. This is because Blender is a mesh based software. However, the underlying representation in IFC may not be meshes. For walls, they are almost always not a mesh, instead, they are a solid extrusion. IFC has many geometry types, because in the AEC industry, there are many geometry types which are appropriate for different usecases. For the majority of simple AEC objects, meshes are not desirable, instead, solid extrusions are used (walls, slabs, columns, beams, etc). During the tessellation process, you may see extra triangles in Blender. These Blender mesh stats are meaningless. The underlying geometry is not a mesh. See the Object Properties > IFC Geometry panel to see what geometry types the wall has (unlike Blender, IFC objects may have multiple geometries).

    A common problem with beginners is that they don't realise this difference and choose to edit non-mesh geometry as a Blender mesh. One of the recent changes is to block that to prevent incompatible solid geometries. There is always an option to cast a solid geometry into a mesh-like geometry (such as an IFC Tessellation or Faceted BRep), and then you can edit it as a mesh.

    And yes, at the moment layers are only shown in cuts. The intention is to allow showing the layers in 3D too, and in theory with one line of code change you can already achieve it (see APPLY_LAYERSETS already mentioned above). But in my view this is not yet ready, so is not yet enabled. There is still some work to be done (ATPATH implementation, axis reconciliation) and this work needs to be done in C++ to be done properly (especially for multicore processing). Note that the visual absense of 3D layers has zero impact on quantification, all the semantic data is there. If this feature is critical for you, then maybe the BlenderBIM Add-on is not yet ready for you. The two best ways to accelerate this (apart from contributing to the C++ codebase of course) is to voice your support here https://github.com/IfcOpenShell/IfcOpenShell/issues/1227 and make a donation here https://opencollective.com/opensourcebim

    Hope this helps explain! I hope you can tolerate the lack of maturity as alpha software, and continue to help testing and reporting bugs when you inevitably find them. It's a long road ahead, and end-to-end project delivery is one of the hardest usecases to achieve.

  15. C

    Most these points I understood already and thank you for laying them out in writing.

    APPLY_LAYERSETS is the remaining question.... How please? I'll try typing at console...

  16. M

    You can test APPLY_LAYERSETS by adding this line:

    
    self.settings.set(self.settings.APPLY_LAYERSETS, True)
    

    ... in blenderbim/bim/import_ifc.py underneath the existing line self.settings.set(self.settings.STRICT_TOLERANCE, True). Then, if you load an IFC with layered walls, they will be sliced.

  17. T
  18. N

    @theoryshaw I am keen to see this work being done. I have read through the links provided and have the following questions...

    Would this apply to floor and roof layers?

    What is the thinking for representing non-solid layers like timber (lumber, wood) framing with insulation where graphically seeing correct centres and offsets?

    Excited to see progress :)

  19. T

    Would this apply to floor and roof layers?

    Yes, any object that is defined with a IfcMaterialLayerSet. Theoretically, the representation (or geometry) of any object, from any IFC class, that uses IfcMaterialLayerSet, would apply.

    What is the thinking for representing non-solid layers like timber (lumber, wood) framing with insulation where graphically seeing correct centres and offsets?

    I would think similar to other BIM programs, that is, these types of 'layers' would be just abstracted as 'cubes'... that is, they would not be articulated with actual studs, or as repeating insulation cavities. I think that would be outside of scope. Even the main BIM authoring applications on the market don't provide this level of articulation of the various 'parts'.

  20. R
    1. Having vector drawings with CSS-stylable filled and merged sliced layers. This is not yet implemented, but probably will be soon (fingers crossed it'll be done in the next week, but if not, pretty soon after as it's just a small extension from number 2). There will probably be a drawing setting you can use to enable or disable this, as some drawings should show slices, whereas other drawings shouldn't.

    hi, is this already available? I'm trying to create a drawing showing multiple wall layers with individual hatches. Is ist possible with IfcMaterialLayerSet or do I have to use another way like IfcBuildingElementParts to create a drawing like this?

  21. T

    From my understanding, this is not implemented yet.

  22. A

    How is the 'coverings' tool supposed to work? Is there documentation anywhere?

  23. S

    hi @Andyro

    How is the 'coverings' tool supposed to work? Is there documentation anywhere?

    I use it to create flooring, suspended ceilings

    when you select the tool check the top menu, you can generate them automatically by simply positioning the 3D cursor inside the walls making a room

    or you can use it in vertical layer to create plastering or generic cladding

    let me know if the above is enough, cheers

  24. A

    Thanks, I tried for example to create a modified wall, re-assign it as an IfcCovering, SKIRTINGBOARD (named Skirt2), select the covering tool, look for that type - nothing there, so added new generic one (but the profile - how do I edit profiles?), but I guess I expected the 'covering' behaviour to glue-itself to the parent, which it doesn't - it's a free floating, separate element. So, maybe my broader question is how to create any profile? And can profiles exist in a project without being in the modelspace? (so they can be managed and drawn on when needed?).

  25. S

    Hi @Andyro

    please see video attached if could be useful

  1. Page 1
  2. 2
  3. 3

Login or Register to reply.