Walls dissapear when creating a void

edited June 2023 in General

Hello everyone,
When I create a void to link a door or window opening to a wall, the wall disappears in the Blender model, although it is in the IFC file. Does anyone know why?



Thanks in advance.

Comments

  • edited June 2023

    Did you use archipack or blenderbim, when creating and adding these windows/doors?

  • I used Archipack. Also note I am working with Blender version 3.5 and BlenderBIM version 0.0.230506 to assign IFC classes and create voids.

  • Not sure then.
    Pinging @stephen_l, he might know.

  • My best guess is that blenderbim do add her own boolean modifier when you assign a void to the wall, so blender fails to solve dual booleans.

    Ana1811
  • edited June 2023

    I don't think it's a good idea to use both Archipack smart walls and BlenderBIM ifc walls, the mesh will be recalculated by both and I wouldn't ever expect it to work well with ifc openings. BlenderBIM doesn't allow you to directly modify parametric wall geometry because it is essentially driven by a single axis line, and the final geometry is generated by the ifcopenshell engine. It doesn't use boolean modifiers - anymore.

    Ana1811
  • edited June 2023

    Thank you all for your replies. I've thought about what you've all said and done some more research.
    Please correct me if I'm saying something silly but I'm still learning about Blender, BlenderBIM, IFC, Python, etc., and I'm aware that I have a long way to go.
    The thing is that you are right @Gorgius, but I need to use this workflow between Archipack and BlenderBIM because I am doing some tests. So I've discovered that the problem with the wall visualisation is the context and the type of opening, that is, it only happens with window holes. If the wall disappears from the scene when creating the opening, it still exists and when I export the model to IFC, I can see the walls again.
    I have found a temporary solution and will explain it in case anyone else has the same problem.
    If I select a wall and go to Object Properties > IFC Geometry > IFC Representations, I can change the context from Model/Body/VIEW_MODEL to Model/Box/VIEW_MODEL.


    The problem is when I have several walls and not just one. If I want to automatize the process, I need to set the "box" context first through Python, then assigning IFC class to walls, creating the voids, and then setting again the "body" context:

    bpy.context.scene.BIMRootProperties.contexts = '17' <--- Box context. For walls and voids
    bpy.context.scene.BIMRootProperties.contexts = '15' <--- Body context. For the rest of elements

    I hope I have been able to explain myself.

  • Any console errors (Window - Toggle System Console)?

  • I get multiple errors when assigning IFC class to the walls, but not when creating the void. In any case, despite the errors, the class is assigned.

  • I get multiple errors when assigning IFC class to the walls, but not when creating the void. In any case, despite the errors, the class is assigned.

    Those errors aren't from BBIM. I'm not really familiar with Archipack and if it's like Gorgious says - it's recalculating walls in it's own way then it can lead to unpredictable results. I guess the solution in theory would be to somehow bake the geometry and stop Archipack from recalculating it and only then assign some IFC Class.
    If you can share some example project with the wall I may be able to investigate any further.

  • edited July 2023

    When you're happy with your wall geometry, and you want to turn it into an IFC object, I recommend you "Kill" Archipack parameters using the button in the interface.

    Otherwise you'll keep running into all sorts of problems. Here it's complaining because the callback that draws the handles on the screen can't find the object, most likely because BBIM did some magick and swapped the previous object or mesh with a fresh new one, and Archipack was not made aware of it. AFAIK the Void system in archipack is pretty straightforward compared to the IFC system (it uses Blender's vanilla boolean modifiers system) so you can apply everything when you are satisfied with your geometry, the booleans should still keep working.

    If you really want to keep authoring with Archipack I would advise you to use this workflow - Model your whole project with Archipack > Kill all archipack parameters > BBIM. But in my experience (I've tried this method in one full-scale project) it is cumbersome because your objects won't be parametric in the IFC sense so your file size will be huge and you won't benefit that much from the ifc schema. Plus if you don't use BBim's authoring features the wall connections won't be made automatically so it likely won't be recognized in third party softwares. Also, Archipack adds a lot of materials to each object which can be tricky to handle if you want to convert them to IFC materials. I actually coded parts of an AP > IFC exporter and learnt a lot in the process but I abandoned it since I elected on only using BBim's authoring workflow. Shame, since I dig the handles in the viewport, but we'll get there :)

    Just to be clear I'm a big fan of AP's workflow and features, I just made the disappointing realization that it is next to impossible to use its authoring features in conjunction with BBim's native ifc workflow. Different tools for different goals, I guess. :)

  • Thanks for your answer, @Gorgious. I've realised that I wasn't "killing" Archipack parameters. I've been trying and the workflow started working better when I added this little change. However, I still founded problems with some walls and I didn't know why, so I will try to explain it.

    Here it's another model I'm working with:

    The window marked in red belongs to Level 0, and the marked in green to Level 1. Level 1 is a copy from Level 0. I made the copy using the correspondent Archipack tool:

    You just select the Reference level and go to Archipack > Duplicate level. And that's it, you can duplicate as many levels as you want. The problem comes when creating the voids. In the first image I show, I've assign IFC class to the wall marked in red and I've created the void. The hole dissapears and I still see the wall, although now the window is apparently embedded inside the wall. But this is not really the problem. The hole on Level 1 (marked in green) now has a "different" geometry: a diagonal line crosses it. I checked it and the thing is that it goes from being manifold to non-manifold. I fixed this non-manifold problem and tried to create the void. But... the wall dissapeared again, as you can see in the image below:

    So, after a lot of testing, research and driving myself a little bit crazy , I've realised that when I duplicated the level, the objects were duplicated too, but the data properties of the holes were linked to the original object.

    That is, if the original hole disappears when creating the void, its data too, and therefore, there is a conflict in the linked hole. Therefore, the solution to avoid data loss and that walls do not disappear from the Blender visualisation when creating the corresponding voids is, when duplicating a level with Archipack, to make a copy of the level, not a linked level.

    Sorry for such a long explanation, but I hope it might be useful for someone in the same situation as me.

  • You can also de-duplicate data after the fact by selecting your objects in object mode and going Object > Relation > Make Single User > Object & Data. I suggest also unparenting your objects with ALT + P and applying modifiers with Object > Convert > Mesh. You will lose the benefit of parametric modelling and shared data but that will aleviate this kind of bugs.

    Ana1811
Sign In or Register to comment.