Window In Cavity Wall

Hello everyone,

I need help with an issue involving a single window cut through multiple walls using the same void. You can see the issue in the video below.

To give some context: as a workaround for the lack of material layer visualization in Bonsai (more details here), I modelled each element of my cavity wall individually:

The challenge I'm facing is figuring out how to cut out windows across all the layers of the cavity wall without having to create separate voids for each wall. Ideally, I'd like the window to automatically cut through all the wall elements without manually adding voids.

As seen in the video, every time I attempt to use the void from the window itself, I either encounter an error or it doesn't save when reopened.

My question is:
Is this a bug?
Is this a feature that hasn't been implemented?
Am I approaching this the wrong way?

https://drive.google.com/file/d/1r5Ksb0IcsBoOxV7HpJzRoOtUuIHAMKah/view?usp=sharing

John

Comments

  • this is the generated bug seen in the video

    os: Windows
    os_version: 10.0.22631
    python_version: 3.11.7
    architecture: ('64bit', 'WindowsPE')
    machine: AMD64
    processor: Intel64 Family 6 Model 151 Stepping 2, GenuineIntel
    blender_version: 4.2.0
    bonsai_version: 0.8.1-alpha240914
    bonsai_commit_hash: c487643
    last_actions: 
    # ifcopenshell.api: geometry.edit_object_placement
    >>> {"product": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "matrix": {"cast_type": "ndarray", "value": [[-1.0, -1.5099580252808664e-07, 0.0, 20.06390380859375], [1.5099580252808664e-07, -1.0, 0.0, -2.7076940536499023], [0.0, 0.0, 1.0, 1.0], [0.0, 0.0, 0.0, 1.0]]}, "is_si": "True"}
    # ifcopenshell.api: owner.update_owner_history
    >>> {"element": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}}
    # ifcopenshell.api: geometry.map_representation
    >>> {"representation": {"cast_type": "entity_instance", "value": 184074, "Name": null}}
    # ifcopenshell.api: geometry.assign_representation
    >>> {"product": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "representation": {"cast_type": "entity_instance", "value": 184086, "Name": null}}
    # ifcopenshell.api: owner.update_owner_history
    >>> {"element": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}}
    # ifcopenshell.api: void.add_opening
    >>> {"opening": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "element": {"cast_type": "entity_instance", "value": 183181, "Name": "Wall"}}
    # ifcopenshell.api: owner.create_owner_history
    >>> {}
    # ifcopenshell.api: geometry.edit_object_placement
    >>> {"product": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "matrix": {"cast_type": "ndarray", "value": [[-0.9999999999999887, -1.5099580252808492e-07, 0.0, 20063.90380859375], [1.5099580252808492e-07, -0.9999999999999887, 0.0, -2707.6940536499023], [0.0, 0.0, 1.0, 1000.0], [0.0, 0.0, 0.0, 1.0]]}, "is_si": "False"}
    # ifcopenshell.api: owner.update_owner_history
    >>> {"element": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}}
    # ifcopenshell.api: void.add_filling
    >>> {"opening": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "element": {"cast_type": "entity_instance", "value": 184013, "Name": "Window"}}
    # operator: BIM_OT_hotkey
    # operator: BIM_OT_show_openings
    # operator: BIM_OT_clone_opening
    # ifcopenshell.api: root.create_entity
    >>> {"ifc_class": "IfcOpeningElement"}
    # ifcopenshell.api: owner.create_owner_history
    >>> {}
    # operator: BIM_OT_add_opening
    # ifcopenshell.api: void.add_opening
    >>> {"opening": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "element": {"cast_type": "entity_instance", "value": 183553, "Name": "Covering"}}
    # ifcopenshell.api: owner.create_owner_history
    >>> {}
    # ifcopenshell.api: geometry.edit_object_placement
    >>> {"product": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}, "matrix": {"cast_type": "ndarray", "value": [[-0.9999999999999886, -1.5099580252808492e-07, 0.0, 20063.90380859375], [1.509958025280849e-07, -0.9999999999999887, 0.0, -2707.6940536499023], [0.0, 0.0, 1.0, 1000.0], [0.0, 0.0, 0.0, 1.0]]}, "is_si": "False"}
    # ifcopenshell.api: owner.update_owner_history
    >>> {"element": {"cast_type": "entity_instance", "value": 184059, "Name": "Opening"}}
    last_error: Traceback (most recent call last):
      File "C:\Users\Dayo\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\ifc.py", line 408, in execute_ifc_operator
        result = getattr(operator, "_execute")(context)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\Dayo\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\model\opening.py", line 871, in _execute
        ifcopenshell.api.run("void.add_opening", tool.Ifc.get(), opening=new_opening, element=wall)
                                                                                              ^^^^
    UnboundLocalError: cannot access local variable 'wall' where it is not associated with a value
    
    ifc: 00.SJCES - Main Building - 240907 - Window Test.ifc
    schema: IFC4X3
    preprocessor_version: IfcOpenShell 0.8.1-alpha240914
    originating_system: Bonsai 0.8.1-alpha240914-c487643
    
    • You have to aggregate all the wall parts into an IfcElementAssembly.

    • It will add an "empty" that represents the IfcElementAssembly. The empty will be create at the 3d cursor location.

    • Then, move the 3d cursor to the position you want the window to be created. With the window tool active, select the IfcElementAssembly and press shit+A:


    steverugiShegsMassimoRoelJohnOwura_quduarteframosGorgiousppaawweeuu
  • Thanks @bruno_perdigao, I'll test that out

Sign In or Register to comment.