Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal to make IfcRelVoidsElement a one to many relationship --> IfcRelVoidElement #2140

Closed
theoryshaw opened this issue Apr 14, 2022 · 9 comments
Assignees
Labels

Comments

@theoryshaw
Copy link
Member

theoryshaw commented Apr 14, 2022

Related conversations...

@Moult Moult added the Bonsai label Oct 26, 2022
@Moult Moult moved this from Todo to In Progress in BlenderBIM Add-on v0.0.230506 Mar 10, 2023
@Moult Moult self-assigned this Mar 10, 2023
@Moult
Copy link
Contributor

Moult commented Mar 10, 2023

I'm thinking of abusing IfcRelConnectsWithRealizingElements for this. Thoughts @aothms?

Window <-- Fills --> Opening <-- Voids --> Wall

Window <-- RelConnectsWithRealizingElement (Opening is RealizingElement) --> Covering (or whatever secondary thing the window is also voiding)

@aothms
Copy link
Member

aothms commented Mar 10, 2023 via email

@Moult
Copy link
Contributor

Moult commented Mar 10, 2023

Would that work? Is there a rule that voiding the aggregate also voids all parts? I can't find it in the spec?

I'm generally not a fan of decomposition during design stages, as it would be pretty annoying when modeling to manage 2 times the number of walls, then have to also consider the object placement of this aggregate which is not very meaningful. Decomposition is great when dealing with assemblies (e.g. steel) and modular design for fabrication, but it's pretty imposing when architects just want to slab together walls.

image

@Moult
Copy link
Contributor

Moult commented Mar 10, 2023

Huh, it does work. I still can't find the rule in the spec though?

If it really does work I guess I can look at ways to make the UX of authoring this less painful. I noticed some weird behaviour when trying to move the wall parts around but maybe that's just a BlenderBIM Add-on bug.

test2.ifc.txt

2023-03-10-223242_821x478_scrot

@aothms
Copy link
Member

aothms commented Mar 10, 2023 via email

Moult added a commit that referenced this issue Mar 11, 2023
… single aggregate, and customise the aggregate class.
Moult added a commit that referenced this issue Mar 11, 2023
…rectly contained in any previous indirect containers.
@Moult
Copy link
Contributor

Moult commented Mar 11, 2023

Awesome! I'm working through the UX of it and so far I think it can work out!

BTW I think this is actually a different issue to the elevator shaft problem. The "elevator shaft problem" could be mitigated through mapped representations of many openings, one per slab. However, this is slightly different, this is about a single filling element filling multiple openings... which as you say is solved via decomposition!

@aothms
Copy link
Member

aothms commented Mar 11, 2023

Hm indeed I missed that emphasis. There's another somewhat prevalent case that can't be solved by decomposition: when an opening exists for a window that vertically spans multiple walls.

@Moult Moult closed this as completed in 30c850e Mar 12, 2023
@github-project-automation github-project-automation bot moved this from In Progress to Done in BlenderBIM Add-on v0.0.230506 Mar 12, 2023
@Moult
Copy link
Contributor

Moult commented Mar 12, 2023

So this now works. I think over time we can refine the UX so that there are hotkeys to quickly combine wall parts (i.e. add to new aggregate, add as sibling to existing aggregate, unassign aggregate, delete aggregate), as well as manage how the voids are either affecting the aggregate or parts (i.e. promote fill/void to aggregate, or demote fill/void to part) but that will come with time and experience after playing with it more.

@aothms
Copy link
Member

aothms commented Jul 17, 2024

pass a list of elements

You'll have to iterate over the list yourself. I think it's better if the API to stays close to the schema.

void all the elements that the opening element intersects with

Again, you'll have to do it yourself. You can use ifcopenshell.geom.tree to get all intersecting elements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
Development

No branches or pull requests

3 participants