I am trying to get doors and then the door marks from filtered exterior/interior walls…
Is there any opportunity to do this ?
I don’t know if my solution is the most concise, but I couldn’t find a built in node that collected all of the elements hosted by a particular wall so I worked in reverse. There is an out of the box node that can get the host element of a particular element. I grabbed all of the doors with the categories node, then collected the host and the host’s ID of each door in my project to use in a second boolean filter.
For the second == node I set the lacing to “Cross Product”. It’s important to place the element ID’s in the appropriate input for this one as well. You want the ID from the “GetHost” elements to be in the x input and the ID from the wall function filter to be in the y input. This gives you a sublist for every “GetHost” ID you have in the project that checks if that ID matches any of the filtered wall ID’s.
Wrong Input Order
Right Input Order
Next I added a “List.ContainsItem” node with the lacing set to “Longest”. The list input should be the result of the previous == node, and for the item input I used a simple boolean toggle node set to true. This runs through each sublist and returns a true result if it has any true in the sublist.
Then you can use another filter by bool mask on the original all elements of category doors node from the beginning with the mask being the result of the previous List.ContainsItem node. This gives you all of the doors hosted to a wall of the desired function type. Finally, all you have to do from here is grab an Element.GetParameterByName node and grab the mark parameter to get the mark for each of these doors. I hope this helps! Sorry if it’s a bit long winded. Here’s the Dynamo file for reference: Doors and Door Marks from Wall Functionality.dyn (16.9 KB)
I believe there is a node called get inserts in clockwork that can get the doors.
To add to that, Element.Inserts will get all hosted objects of a wall so you’ll need to filter out some of the stuff it returns. I would recommend using Element.IsOfCategory (also from Clockwork) to narrow your results down to doors only.
Hi Brandon, thanks for your filtering method, but it seems it is not proper working and gives an error.
I used standard categories for filtering, I think it is a little bit shorter …
Yes with that node it works and allows me to get doors and then I can get marks. Thank you for the advice
But I have a problem further, I want to get in the end Doors Only,
it seems that there are also curtain walls there. Using List.FilterByBoolMask doesnˇt give any result.
Is there a solution to solve that ?
Hi, there’s also a node called Wall inserts in Modelical
Thanks Andreas for advice , Clockworks node works fine
Hi Yna, I can`t find this node , in what package is it ?
@Serg_Rvachev: the name of the package is “Modelical”
Sorry, my fault.
Yes it works as Element.Inserts from Clockwork, thank you , but I can`t now filter exterior doors from exterior curtain walls… trying find the solution
´Hi everyone what I get now is that, I have 3 different categories from exterior walls … 1st is doors, 2nd is Empty list that I guess Curtain walls and the 3rd category is Windows, the question is: how to sort these three categories and get the Doors categorie list, Empty list list and Windows list separate ?
The lists you are working with at this point aren’t sorted by category. They are the items hosted to the walls in the order they are inserted into the Element.Inserts node. The empty lists are because are feeding in walls which don’t host anything to them. Reading your lists I see this (though could be wrong as I’m not testing the files):
- The first wall (index 0) hosts a single door, element ID 155278.
- The second wall (index 1) hosts nothing.
- The third wall (index 2) hosts nothing.
- The fourth wall (index 3) hosts a lot of windows (more than fit in your preview - some could even be a door, or curtain wall, or anything really).
- There may be a fifth wall (index 4) and so on.
It’s been a while but i know that a bool mask works for this.
Try wiring a flatten node from the Element.Inserts node. That should then be wired to the Element.GetCategory you already have. The output of that goes to a == node on the list of categories for input X, and input Y should be a string stating “doors”. Lastly use a List.FilterByBoolMask with on the flattened list of hosted items as the input list and the mask is the result of the == node. This will produce a list of the items you are looking to work with.
Let us know if this works out for you, and if not I’ll take a stab at it tomorrow when I have a few minutes to spare.
Hi Jacob, thanks for your assistance.
When I try to filter with boolean mask as you offered. The thing is that after node == with string “Doors” it doesn`t sees only the Doors. But, the doors and also windows gives in the end “false” and in the output of booleanmask it gives the same as Element.get.category result. In the imput it gives Only Empty List pos. 0-57 that is also strange. Attaching the file…
exIintdoorsIwindowsfilter.dyn (21.1 KB)
You missed the flatten node and the filter was applied to the wrong portion, I reworked those and it’s working for me now. That said you’ve got a newer version of Dynamo than I do but it’s working in 0.9.2 for me. If reworking below fails try feeding the door category into the == node instead of the string “Doors”.
That works excellent in 1.2.1 version, thank you very much !!! Highly appreciate your help…
I wanted to use that filter that you helped me to make, but element.category node is getting error.
Was it from package or it is a standard node? Ive used Rhythm package What.the.node to find it, but it shows different package that doesnt help.
It shows Orchid but after installing all remains the same node is red://
Yes I have, but gives same error maybe will try to find the node inside the package and put it from there.
Here’s the dyf file instead…hope it helps.