IfcElementAssembly in the BlenderBIM add-on
Related to this comment by @bruno_perdigao.
I am using the latest development release of the BlenderBIM add-on.
How do I recreate what you are doing in your .gif from your post?
This is my attempt, I just have one IfcElementAssembly with two beams, but copy pasting the IfcElementAssembly didn't copy all the related items in the IfcElementAssembly
It seems to be merged as I read here:
https://github.com/IfcOpenShell/IfcOpenShell/pull/3328
Tagged:
Comments
did you select the aggregate's empty, and
crtl + shift + d
?@theoryshaw

I tried several buttons, but nothing seems to happen.
hmm.. not sure.
could it be this?...
@theoryshaw
I indeed didn't check that, but now it "copies" only the empty.
But for you it works as intended?
yes.
Did you make sure to use
crtl + shift + d
?Yes, I did. :(. I am doing something wrong...
Are you on the latest stable release?
yes.
Are you holding
ctrl
andshift
down at the same time, and then hittingd
:)are you on windows/mac/linux?
@theoryshaw

I'm on Windows 11 with Blender 3.5 and BlenderBIM latest stable release installed:
I created three IfcBeams from the IFC4 Demo library and made them into an IfcElementAssembly using the IFC aggregates tab

I selected the Selectable/Selectable, no ide what this does.


I made the BIM tool active and now select the IfcElementAssembly/Assembly empty, then I press ctrl shift D, only the empty appears, same when having the Select Box active.
Just to be sure, I expected when duplicating the empty of the IfcElementAssembly the entire related IFC elements would be copied with it. or is that not intended behaviour? I can make this work but then i just dumb copying the IfcElementAssemblies.
PR was pulled only 4 days ago. Sorry, when you said stable release, i thought you meant the latest release.

I would recommend using the following method to get the bleeding, bleeding edge.
you can handle it. ;)
https://blenderbim.org/docs/devs/installation.html#live-development-environment
Yes, it was recently merged. I hope it works now
For anyone willing to try this feature, a few warnings about it:
refresh
operator deletes and recreates all duplicates. So it can become very slow if you have a lot of objects.@bruno_perdigao
Nice feature!

Is it possible to update/replace/modify one IFC element in each of the assemblies?
Can one of the IFCElementAssemblys also be rotated relative to the ground plane? ( I struggle in Revit which won't allow this transform).
@Bedson
Don't really understand your question, you want to rotate an assembly? If so, is the

Select Parts
an option?I don't know if I fully understand, but for now, any changes you want to make have to be done in the parent IfcElementAssembly. Then, if you use the refresh operator, the changes will reflect on the duplicate.
There are a few things that I want to implement to make things easier: a button to select the parent (right now you have to know where it is) and a button to unlink the duplicate if you want to make it independent.
Yes. Not the best demo, but the GIF in this comment shows a little bit of how it works
@bruno_perdigao
Where is this refresh operator button hidden? ?
For a future roadmap, i do like the idea of being to edit any of the assemblies instances throughout the project, and then they all update.
And I would like to add the possibility to array assemblies.
Dumb question, why not use Blender's collection instances for these typed assemblies? There might be some performance advantages.
A blender collection won't survive an IFC roundtrip?
If collection instances too, could use something like the following to edit any child aggregate type, to change them all.
https://bartoszstyperek.gumroad.com/l/GroupPro
It could. :) It's only a matter of code.
It actually did at one point: https://github.com/IfcOpenShell/IfcOpenShell/issues/1194
Sorry, it is hidden. You have to select the children duplicate (the empty with the IfcElementAssembly class), press F3 and type "refresh aggregate". And you have to do it for each duplicate. I know, not ideal...
@theoryshaw I'm trying to finish this basic implementation, and then I'll investigate how to improve with a different system. Thanks for the references, I'll dig in when I have the time.