Hi dear friends
I developed a structural model in Revit structure, and attached a specialty equipment element on one of its structural framing. I searched for a custom node to check whether structural framing belongs to the specialty equipment from the list. I found “Elements in Room” custom node originally created by Peter Kompolschek which is used to check whether elements belongs to the room from the list. I tried to modify the Python code of this node to be used to check whether structural framing belongs to the specialty equipment from the list, but unfortunately it doesn’t work. My main purpose is to assign a parameter’s value of specialty equipments to a parameter of structural framings which are attached to them like what it was done between Furniture and Rooms as shown in attached picture from “https://revitbeyondbim.wordpress.com/2015/09/09/driving-a-sql-database-with-dynamo/”. I also attached the modified dyf file in this post which doesn’t work. It is kindly appreciated if you have time to look at my dyf file to see where the problems are. Thank u so much in advance for your time and cooperation.
Elements attached to Specialty Equipment (Modified Elements in Room).dyf (5.3 KB)
So you have a specialty equipment family “attached” to a structural framing family…
Is the specialty equipment hosted? Is it nested within the structural family? Is it just placed adjacent to the framing?
How you’ll be able to find them depends on how they’re “connected”. You could try grouping them, or you might have to try Geometry.DoesIntersect to find the related elements.
Thank you so much Nick for your response.
In fact, a specialty equipment element ( which was created in Revit as a family) was attached to a structural framing element. Both of specialty equipment and structural framing elements have a defined project type parameter. DamageFlag parameter for specialty equipment element, and Condition parameter for structural framing. I want to assign the expression assigned to “DamageFlag” parameter which is “Damaged” or “Undamaged” to the “Condition” parameter of structural framing to which the specialty equipment is attached. The parameters are shown in the attached pictures. The first picture shows the specialty equipment element attached to a structural element and one of its parameter namely “DamageFlag” and the second picture shows the structural framing element to which the specialty equipment is attached and its parameter namely “Condition”. I want to assign the parameter of specialty equipment to the structural framing’s parameter to which it’s attached to. For example, whenever the “DamageFlag” parameter of specialty equipment is “Damaged” or “Undamaged”, write “Damaged” or “Undamaged” in front of “Condition” parameter of structural framings to which the specialty equipments are attached. Thank u so much and your helps are kindly appreciated in advance.
Thanks Nick for your quick response
- Yes. I’ve just placed the specialty equipment on the framing member. If this doesn’t work, how can I make a connection between them?
- Yes. You were right. I deleted all parameters and defined the new ones with “instance” and “values can vary by group instance” options checked.
Could you please explain me how to connect the specialty equipment and structural framing element and how to cross data between them? Thank u so much in advance
You can try making your specialty equipment face based so you can host it to your framing, but I’m not sure if that will work based on the geometry.
You can try making the framing member and specialty equipment a group, but again, I don’t know how that will work with your workflow.
The other thing you can do is to get the geometry of both objects in Dynamo and check for intersections. If the specialty equipment intersects the framing you can assume those two objects are “connected” and filter everything out that way. There are plenty of threads on here to help you out if you’re unfamiliar with geometry intersections.
Does the attached picture show that the specialty equipment and structural framing objects are not intersected?
You return two booleans which tells me at least one element has two geometries. You’ll have to be careful with your lists and the lacing you use to check intersections. You’ll definitely want to set your lacing to Cross Product so that all geometries are checked against all other geometries. From there, you can filter your results down to find the elements that intersect.
Could you please show me a simple example in Dynamo? You may want to model two simple elements in Revit, make a connection between them, and check whether they are intersected or not. It will help me a lot to understand it better and do it on my model.
And when they were intersected, when am I able to cross the data between DamageFlag parameter of specialty equipment and Condition parameter of structural framing? Is there any example in this forum (e.g. code block, python code, etc) which is similar to my objective? Thanks friend
Pay close attention to the Lacing (the little icon in the bottom left of the node). You want DoesIntersect to check for every geometry in an element. Then you can flatten the booleans for each family and check to see if any part of that family intersects any part of the other family. That will give you your final result of True or False. As you can see in the background, one family intersects and one does not.
You can use a boolean mask to filter the objects and should be able to get a list of all your specialty equipment and another list of all your correlating framing members. Then you just pull the DamageFlag data from the one list and feed it into the Condition parameter of the other.
Just a small correction here “the little icon in the bottom right of the node”.
Thank u so much dear Nick and @Kulkul for your time. I will follow the procedure on my model and let you know. Thanks again
Thank u again Nick
After checking and modifying several times, finally the nodes said that the objects are connected to each other as shown in the first Figure. But for the second part (Pulling the DamageFlag data from the specialty equipment object and feeding it into the Condition parameter of the correlating framing member) actually I don’t know where to use “List.FilterByBoolMask” node to do it for me. I followed your framework and it gave me the wrong result. Instead of pulling the DamageFlag data from the specialty equipment object and feeding it into its correlating framing member (ID: 513453), the data was pulled and to another structural framing member that was not connected to it at all (as shown in the second picture). Could u please tell me how I can solve this issue by feeding the DamageFlag data into its correlating structural framing member? Could u please kindly show me an example like before? Thanx a lot Nick for your time and kindness.
You still haven’t changed the lacing. Right-click on a node and hover over Lacing to select the lacing for each node. Make sure you match what I have in my last image.
Also, show the preview for both geometry nodes. If both of your families have only one geometry (we can ignore the line) this becomes much easier.
I corrected the lacing. But the problem is that the correlating structural members to which the specialty equipments are attached are wrongly selected as shown in the attached pictures. Could u please tell me how to solve this issue? I want to feed the “DamageFlag” parameter data from specialty equipment members only into the correlating structural framing elements in the model. Thank u so much in advance
You’re checking one element against another for intersection but then setting parameters with all your specialty equipment and framing being pulled in a random (ID) order. It won’t magically know what to do based on your previous query.
You need to start with all structural framing elements queried against all specialty equipment with Geometry.DoesIntersect. I would also remove the Line portions of geometry from whichever family that is so that you only have one geometry per family for at least the one category. This makes list management a little easier.
Once you have all your elements queried against each other you can filter by boolean mask to get what you need. You will then have one list of families in their original order and the other list of families listed in their matching order. If you have structural framing elements without a matching specialty equipment family you will have some empty lists to deal with. But they can be replaced with a blank space ("") or null so you can pass them through the parameter node.
Thank you so much Nick for all your helps and time. Finally it worked as shown in the attached picture. You helped me a lot. Thanks again.