System: Load multiple ifc into a scene
Original requirements
We currently see the following use cases that require loading multiple IFC into a scene:
- Engineering disciplines: as an architect or engineer I want to be able to load multiple models, e.g. the architecture model and the HVAC model into one scene to compare them visually
- Big projects: as an architect I want to load multiple models of one project, i.e. models of multiple houses into the scene to see the whole project
- Versioning: as an architect or engineer I want to load different versions of a model into a scene to compare them visually
Besides the core functionality of loading two models we see the following requirements:
- UI load - need to create screens on how to load multiple models (add, drag n drop, select from list)
- UI toggle - have an icon in the UI that allows toggling whole models on and off
- Collision detection - for the backlog, add collision detection
- Show diffs - for the backlog, show/highlight diffs of models
Solution
- There are two types of models. The first loaded model is considered the "main model", models that are being added to the scene are considered "attached models".
- In the treeview all models - both main models and attached models - are represented as root nodes in the tree.
- In the treeview there is a button "attach model" to attach additional models
- In the treeview on each attached model there is a button to detach them (unload)
- Both main models and attached models can be shown/hidden with the existing toggle functionality
- The Bldrs URL only specifies the main model, additional models are not part of the URL
- Matrix Widget API allows to list, attach and detach models
- Matrix Widget API messages must specify which model to operate on - if omitted it defaults to the main model
@pablo-mayrgundter - does the work you did with the cars, address this issue?
No. I think we want to use the IFCjs loader to handle multiple models. Let's leave this open to track that.
Apparently this is already possible with ifc.js: https://stackoverflow.com/questions/68222208/how-to-load-multiple-files-in-ifc-js
Updated the description. I propose to start with the easiest version in the UI and just add a "add model" to the "Open IFC" screen. What do you think?
Sounds good as a start @pablo-mayrgundter
I think we have two related concepts here: Levels of a building and Layers of a building. "Show me MEP & Architecture for level 4 of the building" includes both of these.
I propose 2 tool icons (on right side), one for each:
- Section tool has the usual stack of squares, and allows toggling floors on and off.
- Layer tool is next to it, different icon, and allows toggling e.g. MEP & architecture on and off.
- Layer tool also includes a "+" symbol, which triggers a file upload of an IFC that creates a new layer, that can also be toggled.
Separately, loading files in the top-level search dialog area is always "start a new project by removing all current content", or perhaps there's a checkbox to leave current content. However, that raises the problem of whether the new content is in its own layer, and if so why not use the layer tool approach.
Talked with Oleg on this.. think we need some mocks.
Not sure I agree to the "layer tool" ... this is about loading another ifc model into a scene. The "layer tool" in my view would be one ifc model but I mark MEP as a layer inside that. Maybe this is just naming but if I want to upload another ifc into a scene I am not searching for "layer tool", especially if that other model is another building and not a specialized model of the same building. Regarding the mock ups: I am sure we can come up with a nice ui over time ... for now adding a "load additional model" on the open screen would work I think.
Ok, as discussed, this is really just loading top-level models, i.e. with separate trees, no particular merging of layers (how do we know what's a layer?). Good good
Fits to product strategy: yes Estimation: needs R&D work for Layering, potentially Q1
@pablo-mayrgundter do you see an issue if we start with this one already even though the core/rendering refactoring on your end is in progress?
Really depends how complex this will be. If it's pretty simple, then it's ok as we're not committing too much work before the new datamodel is active. So I'd suggest a day or two looking at it to see if there's a quick approach.
We analyzed the requirements and updated the issue description accordingly. We think it's doable with an OK-ish amount of effort and will tackle this one.
Good to hear.
IFCjs has support for this, and we'll be following that API for the new datamodel.