How to host face-based families on elements in linked Revitmodels

I need to insert a light fixture according to the ceiling grid in a arquiteture model link,
i try used BimorphNodes but i’m didn’t have sucess,
does anyone can recommend a node for this job.

Kind Regards!
#Brasil

1 Like

Try searching the forum for posts about getting linked elements. There are plenty. Are you wanting to host to the ceiling as well?

@ViniXavier firstly, please be more specific about your problem as you’ll get an answer faster. I think what you mean is, you haven’t be able to host face-based families on linked elements.

If that is the case, the problem is caused by the face reference from the linked element (which is stored in the Dynamo surface derived from the face) not calling the required method from Revit’s Reference class (CreateLinkReference() specifically) so any attempts to use say, OOTB FamilyInstace.ByFace node to place the light fixture, fails as the reference is invalid.

As far as I’m aware, no OOTB or custom nodes call this method either so I’ve added it to the Bimorph LinkElement.Faces node to enable support. It looks like this method/functionality has been around at least since Revit 2016 looking at the API’s, so there shouldn’t be any version limitations either.

You’ll find the update in BimorphNodes v2.2.7 available for download via the Package Manager.

@Kulkul I would also suggest renaming the OP title to: How to host face-based families on elements in linked Revit models in case other Dynamo users experience the same issue, it’ll be easier to find :+1:

8 Likes

Hi @Thomas_Mahon

Done!

1 Like

@Thomas_Mahon

Thanks for the Tips Thomas, i got it.

@Thomas_Mahon, thanks for your contribution to this thread, it has brought me one step closer to finishing a script I’ve been working on for weeks!

Like OP, I’m trying to host fixtures on ceilings/floors/roofs/ref planes that are coming from an architectural link in our MEP file. I’m doing a raybounce from the room locations to find whatever is above in that room, which is giving me a list of elements from the architectural link. When I try to use the FamilyInstance.ByFace node with the list of elements combined with LinkElement.Faces, it fails to create any of the fixtures, but if I pull a list of LinkElements using the LinkElement.OfCategory node with the LinkElement.Faces, it creates the fixtures!

I could do some SetIntersection with the Element IDs to get the LinkElements instead of the elements, but I thought I’d ask here if it’s possible to get the LinkElements directly from the elements? Basically trying to do the opposite of the Bimorph LinkElement.Element node :smile:

Hi @xduckyy how are you performing your ray bounce against the linked elements - are you collecting them first and plugging them into a node which performs the ray bounce test? If that is the case, then the solution is simple; use LinkElement.OfCategory node to get the LinkElement instances, then input them into your ray bounce procedure.

Note that the special functionality of the LinkElement query nodes (aka properties) only works if LinkElement instances are input. What is a bit confusing is if you input ordinary Elements, Dynamo’s VM executes the property from the ‘Element’ class instead due to dynamic dispatch (it finds a property from the instances class that matches the calling property, then executes).

1 Like

I’m using the RayBounce on Linked Model node from data-shapes to draw a ray from the center of each room vertically to grab whatever element is above in that room, which is usually a ceiling but sometimes it’s a floor or roof.

I’m able to get the LinkElements by doing a SetIntersection of the Element IDs, but thought I’d ask if there was a way to save a few nodes.
Example:

1 Like

If you need LinkElements your workflow seems sensible. An alternative would be to create a dictionary of the LinkElements where the ID is the key and instance is the value, then use the ID’s from the ray bounce result as value keys to regather the corresponding LinkElements from the dictionary. You could also streamline your category selection by doing something like this (remember to keep the list free of duplicates if you do adopt this approach):

In the meantime I will look into adding a new node to the LinkElement class, namely LinkElement.ByRayBounce if you think that would be useful? It doesn’t appear to be that difficult to implement and if there are no complications, I’ll publish it maybe as soon as next week if I find the time.

2 Likes

@Thomas_Mahon Hi, thank you for the tips with BimorphNodes, unfortunately it’s not working in my case : I would like to place hosted family on a beam face which is not a system family and so the placement is incorrect.

Would you have any idea how I would figure this out?

Hi @anne-solene.dris can you add some images, detail the steps to reproduce the problem, and provide the family file?

Hi @Thomas_Mahon. Here is the approach I am trying to figure out.
It worked properly with walls and slabs in the linked file. But not for the beams : the FacedFamily seems to be placed in the middle of the link and not on the beam’s face whereas when I manually select the face, the FamilyInstancebyFace worked properly.


I used the standard beam concrete in a linked file and try to put the faced family in the middle of the face (for example).

I cannot send you the facefamily because “I am a new user” and i am not able to upload file but it is a very basic one.
Thanks

Hi @anne-solene.dris thanks for reporting this; I can reproduce the problem. It’s hosting on the beams location curve rather than the face and will require some investigatation to establish what the problem is. I’m extremely busy at the moment so it won’t be with the next few weeks until I find some time but I’ll update you on this thread as soon i as I find out the cause. :+1:

Hi @anne-solene.dris this is fixed in BimorphNodes v2.3 available on the package manager. For beams, it seems that extracting the instance geometry rather than the symbol geometry is the cause of the problem. The change does add some overhead to the extraction procedure as the solids need to be transformed twice to locate them at their host location, but I’ve optimised it so you shouldn’t notice any impacts.

2 Likes

i have a issues, i need place (“hosted” )face-based Connector families (lights/receptacle) exactly where fixtures located in linked Architectural model.
all electrical connector are not placing as per coordinated point XYZ of electrical fixture in linked Arch Model

Problem facing it not taking wall/ceiling face host, it is placing like orphan…
image ArchTOElecModel-1.dyn (112.1 KB)

could any body can explain what wen wrong i have upload the file and snap for reference.

hello, I have a problem, all the elements (lighting devices) are placed on the floor and not on the wall, do you have any suggestions

Hi @ardimifta ,
you have already opened a topic on this subject,

please do not dig up old topics

1 Like