Thank Gavin! Very helpful as always. Every time I have a problem to solve it seems you already covered it with a tutorial in your channel! You are the best!
You're welcome mate! More workflows to come in future, but I've tried to cover the most common ones people come across in daily practice. Happy new year to yourself and AC.
Great video! I only had one question. im trying to use at method similar to yours to find the location of dampeners in a ventilation model and check if the the electrical components are in the same place, or i will move them to the right location. I also need to check if there are any new dampeners or if some have been deleted. the way i do this is to copy the BATID from the ventilation model and copy it to a parameter i have made. I used the list.conains node with cross product to check if the BATID from the vent.model is in the electrical model an reverse. When problem is when there is a new dampener in the vent.model i get a -1 it the list.contains. my question is how do i do the "catch all" filtering you where talking about?
Thanks! The catch all I refer to here is mostly in relation to elements slightly outside the room, such as wall recessed elements. These can be difficult to collect using a workflow like this given they aren't in the space itself. Usually in these cases I would build an excel file with distances for each problematic fixture type, then project their origin point slightly forward so it falls in the room it points towards. In your case I like your workflow, using a matching Id is the right approach. If new fixtures are failing to find a match I would filter these out separately before updating the ones with a match. You could then generate a report in excel with the Id's of any unmatched elements from the ones that got filtered out, so they can be manually reviewed.
Great video it is a great workflow. I am a lighting designer so all of my fixtures fall just above a room. I tried to use a geometry translate to drop the z cord inside of the room but was still pulling only "false". I was wondering if you had any ideas that may fix that issue of pulling only "false" results from the clash detection.
Hi @Aussie BIM Guru, thanks for this awesome video! I try this script but dynamo associate the wrong rooms for mu electrical equipment, any idea? Thanks!
Probably look at the results in detail - it could be a list management issue. Double check where the matches are being found in the lists, this might hint as to why its happening.
The best way to manage these out (essentially an item with no intersecting room) would be to first check 'any true' @L2, then filter out the results, geometry and rooms using a boolean mask each so that the only results remaining will have at least one intersecting result (aka a true). -1 indices essentially mean no match was found.
Try this method I posted here today but instrad of the isnull node use a != node for checking against -1. Filter the indices by that boolean list and only the non -1 results will be in the in output of the boolean mask node. forum.dynamobim.com/t/filter-two-lists-of-values-not-equal-to-null/69328
Thanks this excellent video, Gavin, I will ask a question how can I be able to find smart, interactive or practice way to place my different furtinures to different rooms as script ?
You would need to write algorithms to detect the room boundaries and area and work your way inward from the edge or outward from points within the room as a surface probably. It really depends on the type of furniture you're placing or the room type. For example a meeting room you would probably find room centre and the short side of the room, then place the table/chair as a family (nested chairs/table) at the centre, rotated for the short end of the table to face ths shorter side.
Do you think this could be adapted to suit the following? I have rooms in my host model and the furniture elements are in the linked model and I need to schedule the furniture by room location.
Yes but you would always need to add the data to be scheduled in the model containing the native element - Dynamo cannot push data into linked elements (nor can Revit or its API). You can schedule linked object data if you include them in the filtering settings tab of the schedule.
Hi Gavin, I am facing issue in catching outlets which are recessed on wall. Those elements are lying on the verge of room boundaries and missing the "does-intersect" node. Interestingly, if I create a space and run FamilyInstance.Space node, it is detecting those elements and working fine. Any idea how to catch those recessed elements.
This is likely due to the location versus the room calculation point. For these types of elements you would need to move the location forward by a nominal amount to ensure it is in the spaces geometry.
Hey Gavin! The linked models falls correct on 3D view, but the coordinates pulled from geometry.BoundingBox differ from model to model.. I am thinking that i need to use something with "Traslate" or "transform". Any ideas?
@@AussieBIMGuru Thank you Gavin! Another question 😇 How do you get rid the elements that have index -1 (the elements that are not in a room apparently)
@aalexg13 an equals node and a filter by boolean mask checking for -1 equality is the easiest, although there are more tricky options such as getting the room numbers then adding the item 'N/A' or an empty string to the end of the list, then indexing using code block syntax (list[index]). In a code block -1 will return the last item in a list unlike the itematindex node.
Hi Gavin, Thank you for the channel-it was really helpful and has made a positive impact on my career! I have a question regarding a problem I'm facing. When I retrieve rooms from the linked model in Dynamo and try to convert them to geometry, I notice that the location of the elements in the linked model is shifted from their actual position in Revit. Do you have any idea what might be causing this issue?
BIM dragon, that's a new one haha - I like it! Hrm this is quite tricky, you could always get the room boundaries instead and patch them to surfaces. You could then take all pipes between that level and the next, take their bounding box and its cuboid, then its centroid - this would represent the absolute centre of the pipe segment. You could then pull this point down to the level and see which room surface it clashes with or is closest to. Pretty tricky, but probably the most efficient method I can think of that ignores room height.
Generally for these you could get the room boundary and scale it up slightly from centre or offset it as a curve then extrude as solid and use that instead.
Hello, thank you for your video ! I've tried to do this with a MEP model and an architect's model linked containing the rooms, but it doesn't work. I would like to locate the networks and equipment in each room. But I have the impression that my room volumes are not in the same place as my networks, even though the models are compiled correctly. I also keep getting an error with "element.geometry". How can I resolve this? Thanks a lot!
Try to get the geometry in Dynamo to see if it is actually intersecting. You may need to apply a coordinate system change using the link transform if they are not using the same internal coordinate positions.
@@AussieBIMGuru Indeed, I think it's an internal problem. The geometry created by dynamo for the rooms is far from the geometry of the objects, so there's no intersection. It finds the same part name value for all objects. How can I allow them to have the same internal origin?
Dear Gavin, script is great, I need it for some model in revit 2019, I tried but I got error in BoundingBox.Properties, centroid is null, dynamo is 1.3.4 ... node is newer. Is there some other solution ? BR
I'd usually say these belong to the lowest room. Their origin as a family would likely be at their base so should be able to be assigned the number in the same way as this workflow if you take the origin of the family, or the bottom centrepoint of their bounding box (uvw = .5,.5,0)
@@AussieBIMGuru I actually removed the centroid node, and just intersected the families' bounding boxes with the rooms and that did the trick! Thanks!!
Great video, thank you. I'm trying to download this script from your sight, but I can't find/decide which one it is! Could you point me in the right direction? Thank you.
Hey Gavin, Thank you for the tutorial. This is exactly what I want. But when I replicate the same at my end I got an error while getting element parameter value by name (at 8.30 minutes of the tutorial). It says " Warning: LinkElement.GetParameterValueByName operation failed. Method not found: 'Autodesk.Revit.DB.UnitType Autodesk.Revit.DB.Definition.get_UnitType()'. ". Could you please guide on how to overcome this. Thank you.
Epic work again Gavin. I'm trying to work this graph on copy/monitored mech. elements. The things is when a monitored element moves without our notice (when sync the link), the graph does not match the locations between elements so I cannot get the parameter from the linked model. Do you know how we can solve this problem? How we can update the location of copied element without manually align them.
Thanks! I'm not 100% sure on how to get a copied element to identify its monitored counterpart but that would be the key. If this was possible, you could simply use 'element.getlocation' on the monitored linked element and apply an 'element.setlocation' to the copied element. From what I can see, copy/monitor is not exposed in the API unfortunately, so the only way I could think to do this would be to manually add the monitored element's ID for comparison. Not a great workflow though I know...! If the copy/monitor list was exportable as a report with ID's this would help, although I don't seem to recall this being available.
@@AussieBIMGuru"From what I can see, copy/monitor is not exposed in the API unfortunately". Yes, I hope this will be added in the future. It can really help especially when you are working with too many discipline links. Thank you man.
This is awesome, I am getting an error on the "Element.Geometry" node which says "Warning: One or more geometries have failed to convert due to this error: Unable to make wire from edge body : WIRE_SELF_INTERSECTS2 -- Wire has self-intersection." It also puts the wrong data into the furniture and I'm thinking it's because of the error. Any ideas? I've searched the world wide webs and can't find anything. Thank you!
Unfortunately this is common for complex or messy room boundaries, particularly if they have gaps between walls that have to be crossed by the boundary ever so slightly. I haven't found a good workaround to these generally. Sometimes you can work around this by asking for their finish boundary and then extruding that. You could also filter out these rooms, and then isolate all elements without a room found after for manual review. Hopefully it would generally only be 1 or 2.
Hello, thanks for the great contribution. The LinkElement.OfCategory Node appears a warning that says: Method not found INT64 Do you know how it can be solved?
Sounds like an issue related to the 64 bit integer change and elemend Ids which comes in later builds. Ensure you use the latest package version, and if it still doesn't work maybe contact the package author.
Thank Gavin! Very helpful as always. Every time I have a problem to solve it seems you already covered it with a tutorial in your channel! You are the best!
You're welcome mate! More workflows to come in future, but I've tried to cover the most common ones people come across in daily practice. Happy new year to yourself and AC.
Thank you! you just saved my day
That's what I like to hear!
Very handy workflow.
So much hard work.👍
Thanks Immi!
Thankyou so much Sir🎉❤
Most welcome 😊
Great video! I only had one question. im trying to use at method similar to yours to find the location of dampeners in a ventilation model and check if the the electrical components are in the same place, or i will move them to the right location. I also need to check if there are any new dampeners or if some have been deleted. the way i do this is to copy the BATID from the ventilation model and copy it to a parameter i have made. I used the list.conains node with cross product to check if the BATID from the vent.model is in the electrical model an reverse. When problem is when there is a new dampener in the vent.model i get a -1 it the list.contains. my question is how do i do the "catch all" filtering you where talking about?
Thanks!
The catch all I refer to here is mostly in relation to elements slightly outside the room, such as wall recessed elements. These can be difficult to collect using a workflow like this given they aren't in the space itself.
Usually in these cases I would build an excel file with distances for each problematic fixture type, then project their origin point slightly forward so it falls in the room it points towards.
In your case I like your workflow, using a matching Id is the right approach. If new fixtures are failing to find a match I would filter these out separately before updating the ones with a match. You could then generate a report in excel with the Id's of any unmatched elements from the ones that got filtered out, so they can be manually reviewed.
Great video it is a great workflow. I am a lighting designer so all of my fixtures fall just above a room. I tried to use a geometry translate to drop the z cord inside of the room but was still pulling only "false". I was wondering if you had any ideas that may fix that issue of pulling only "false" results from the clash detection.
Hrm that's odd, usually a point would work assuming it is inside the room geometry. Maybe try creating a line instead and see if that works?
Perfect It solved my problem.
Glad it helped!
thank you so much!
You're welcome!
Hi @Aussie BIM Guru, thanks for this awesome video! I try this script but dynamo associate the wrong rooms for mu electrical equipment, any idea? Thanks!
Probably look at the results in detail - it could be a list management issue. Double check where the matches are being found in the lists, this might hint as to why its happening.
Hi Gavin, Awesome vid. what would, considering the described workflow, be the best function/node to clear -1 results in the list.map node?
The best way to manage these out (essentially an item with no intersecting room) would be to first check 'any true' @L2, then filter out the results, geometry and rooms using a boolean mask each so that the only results remaining will have at least one intersecting result (aka a true). -1 indices essentially mean no match was found.
@@AussieBIMGuru is it possible to post a screen for this? I really struggle to filter out those -1...
Try this method I posted here today but instrad of the isnull node use a != node for checking against -1. Filter the indices by that boolean list and only the non -1 results will be in the in output of the boolean mask node.
forum.dynamobim.com/t/filter-two-lists-of-values-not-equal-to-null/69328
@@AussieBIMGuru that link is useful and save my day, it uses two boolean filter but share the same mask, thank you!
Hello, i would like to know why not use simply the Space commande in the analyse tab? It does the work pretty well
If you use spaces, sure. Most architects use rooms and/or areas.
Thanks this excellent video, Gavin, I will ask a question how can I be able to find smart, interactive or practice way to place my different furtinures to different rooms as script ?
*furnitures
You would need to write algorithms to detect the room boundaries and area and work your way inward from the edge or outward from points within the room as a surface probably.
It really depends on the type of furniture you're placing or the room type. For example a meeting room you would probably find room centre and the short side of the room, then place the table/chair as a family (nested chairs/table) at the centre, rotated for the short end of the table to face ths shorter side.
Do you think this could be adapted to suit the following? I have rooms in my host model and the furniture elements are in the linked model and I need to schedule the furniture by room location.
Yes but you would always need to add the data to be scheduled in the model containing the native element - Dynamo cannot push data into linked elements (nor can Revit or its API). You can schedule linked object data if you include them in the filtering settings tab of the schedule.
Hi Gavin, I am facing issue in catching outlets which are recessed on wall. Those elements are lying on the verge of room boundaries and missing the "does-intersect" node. Interestingly, if I create a space and run FamilyInstance.Space node, it is detecting those elements and working fine. Any idea how to catch those recessed elements.
This is likely due to the location versus the room calculation point. For these types of elements you would need to move the location forward by a nominal amount to ensure it is in the spaces geometry.
Hey Gavin! The linked models falls correct on 3D view, but the coordinates pulled from geometry.BoundingBox differ from model to model.. I am thinking that i need to use something with "Traslate" or "transform". Any ideas?
Yep this video shows how to apply link transforms:
ruclips.net/video/6Di0kUX8mP8/видео.html
@@AussieBIMGuru Thank you Gavin! Another question 😇 How do you get rid the elements that have index -1 (the elements that are not in a room apparently)
@aalexg13 an equals node and a filter by boolean mask checking for -1 equality is the easiest, although there are more tricky options such as getting the room numbers then adding the item 'N/A' or an empty string to the end of the list, then indexing using code block syntax (list[index]). In a code block -1 will return the last item in a list unlike the itematindex node.
Hi Gavin,
Thank you for the channel-it was really helpful and has made a positive impact on my career!
I have a question regarding a problem I'm facing. When I retrieve rooms from the linked model in Dynamo and try to convert them to geometry, I notice that the location of the elements in the linked model is shifted from their actual position in Revit. Do you have any idea what might be causing this issue?
Glad the channel helped! Yes this will be due to the link transforms, use this trick to account for it:
ruclips.net/video/6Di0kUX8mP8/видео.html
Hi BIM dragon ;), i have a question for u, if i want estract pipe inside ceilings and the pipes runs outside ceilings how can i do?
BIM dragon, that's a new one haha - I like it!
Hrm this is quite tricky, you could always get the room boundaries instead and patch them to surfaces. You could then take all pipes between that level and the next, take their bounding box and its cuboid, then its centroid - this would represent the absolute centre of the pipe segment. You could then pull this point down to the level and see which room surface it clashes with or is closest to. Pretty tricky, but probably the most efficient method I can think of that ignores room height.
Thanks again! Would you recommend any aproach to deal with elements a little bit outside the rooms? Like on walls or below the floor?
Generally for these you could get the room boundary and scale it up slightly from centre or offset it as a curve then extrude as solid and use that instead.
@@AussieBIMGuru I'll do that. Thank you very much! 👏👏👏
I got too many rooms in my project e.g. 800... the element.geometry crashes all the time :( do u have any idea on handling this?
Try reducing the rooms and elements you are collecting to a level at a time maybe.
Hello, thank you for your video !
I've tried to do this with a MEP model and an architect's model linked containing the rooms, but it doesn't work. I would like to locate the networks and equipment in each room. But I have the impression that my room volumes are not in the same place as my networks, even though the models are compiled correctly. I also keep getting an error with "element.geometry". How can I resolve this?
Thanks a lot!
Try to get the geometry in Dynamo to see if it is actually intersecting. You may need to apply a coordinate system change using the link transform if they are not using the same internal coordinate positions.
@@AussieBIMGuru Indeed, I think it's an internal problem. The geometry created by dynamo for the rooms is far from the geometry of the objects, so there's no intersection. It finds the same part name value for all objects. How can I allow them to have the same internal origin?
Dear Gavin, script is great, I need it for some model in revit 2019, I tried but I got error in BoundingBox.Properties, centroid is null, dynamo is 1.3.4 ... node is newer. Is there some other solution ? BR
Dynamo 1.3.4 is ancient now! They don't support it anymore as far as I know...
Clockwork 2.x.0 only works in Dynamo builds for 2.X and above I think.
@@AussieBIMGuru Yes ... 😞, thank you for replay.
Gavin, any suggestions for families that span multiple floors, like elevators or escalators?
I'd usually say these belong to the lowest room. Their origin as a family would likely be at their base so should be able to be assigned the number in the same way as this workflow if you take the origin of the family, or the bottom centrepoint of their bounding box (uvw = .5,.5,0)
@@AussieBIMGuru I actually removed the centroid node, and just intersected the families' bounding boxes with the rooms and that did the trick! Thanks!!
Great video, thank you. I'm trying to download this script from your sight, but I can't find/decide which one it is! Could you point me in the right direction? Thank you.
github.com/aussieBIMguru/Dynamo_Scripts/blob/master/ABG_200319_ElementsInRoom.dyn
Hey Gavin, Thank you for the tutorial. This is exactly what I want. But when I replicate the same at my end I got an error while getting element parameter value by name (at 8.30 minutes of the tutorial). It says " Warning: LinkElement.GetParameterValueByName operation failed. Method not found: 'Autodesk.Revit.DB.UnitType Autodesk.Revit.DB.Definition.get_UnitType()'. ". Could you please guide on how to overcome this. Thank you.
Hrm it sounds like a bug in Dynamo where they forgot to update a node in an old version maybe, might be best to check in with the forums on this one.
Epic work again Gavin. I'm trying to work this graph on copy/monitored mech. elements. The things is when a monitored element moves without our notice (when sync the link), the graph does not match the locations between elements so I cannot get the parameter from the linked model. Do you know how we can solve this problem? How we can update the location of copied element without manually align them.
Thanks!
I'm not 100% sure on how to get a copied element to identify its monitored counterpart but that would be the key. If this was possible, you could simply use 'element.getlocation' on the monitored linked element and apply an 'element.setlocation' to the copied element.
From what I can see, copy/monitor is not exposed in the API unfortunately, so the only way I could think to do this would be to manually add the monitored element's ID for comparison. Not a great workflow though I know...!
If the copy/monitor list was exportable as a report with ID's this would help, although I don't seem to recall this being available.
@@AussieBIMGuru"From what I can see, copy/monitor is not exposed in the API unfortunately". Yes, I hope this will be added in the future. It can really help especially when you are working with too many discipline links. Thank you man.
This is awesome, I am getting an error on the "Element.Geometry" node which says "Warning: One or more geometries have failed to convert due to this error: Unable to make wire from edge body : WIRE_SELF_INTERSECTS2 -- Wire has self-intersection." It also puts the wrong data into the furniture and I'm thinking it's because of the error. Any ideas? I've searched the world wide webs and can't find anything. Thank you!
Or is there an easy way to find the self interesting room?
Unfortunately this is common for complex or messy room boundaries, particularly if they have gaps between walls that have to be crossed by the boundary ever so slightly. I haven't found a good workaround to these generally. Sometimes you can work around this by asking for their finish boundary and then extruding that.
You could also filter out these rooms, and then isolate all elements without a room found after for manual review. Hopefully it would generally only be 1 or 2.
Hi, my element geometry have some empty list inside.
What are the elements? You can filter them out with a boolean mask/isempty check.
Hello, if i move the element to another room, it will automatically change that information?
No, the script must be run again.
Followed you steps, but got a "null" in the node List.Map. What might be wrong?
It could be a variety of reasons. Maybe the link is transformed (moved)? If so check out my later videos where i show how to allow for this.
My centroids are all null.. Any ideas why???
Hrm not sure, try doing Element bounding box > Cuboid > Centroid instead.
Not finding a Cuboid to Centroid. I'll keep digging@@AussieBIMGuru
thanks cheif
No worries!
Hello, thanks for the great contribution. The LinkElement.OfCategory Node appears a warning that says: Method not found INT64
Do you know how it can be solved?
Sounds like an issue related to the 64 bit integer change and elemend Ids which comes in later builds. Ensure you use the latest package version, and if it still doesn't work maybe contact the package author.