I read a comment on other forums “If you are good at how to use tools doesn't mean you are a good programmer.”,“Choose a project and good team rather than which programming language you have to learn”,sometimes idea is also important.But if you don't know how to accomplish that with tools,the idea means nothing.So better be good at use tools and use them smartly.Thus you can make something into practice.This can avoid an famous saying in China "Layman manage expert." I learn both how to use dynamo and what it can do through your series.Thank you.Due to my limited time,I don't try every one following your step,but if have the need in the future and I will go back and search this series.
It's certainly true that being an expert in tools doesn't mean you necessarily are an expert in programming for sure. Tools are still essential to operating, but it's important to plan ahead before developing them for companies or deciding how a company should prioritize.
Nice tutorial using a very simple method; the more complex the model and comparison method gets, the more difficult it is to get an overview. It would also be possible to use other methods to make comparisons, like getting the location of each element, comparing, and comparing the volume and surface areas. There are situations where the model will change in ways which will not trigger differences in centroids; namely symmetrical changes to elements widths.
Yes this is only a good method when it is likely to suit the changes being searched for. A centroid and bounding box size is generally safe for geometry (as even if it grows in size, the BB will also change so it will be detected), but if data must be checked as well then it adds a lot more to compare.
Wonder what way you could check to see if the centroid of a wall has moved only parallel to the wall meaning it grew of shrunk so that it can be used to comment it as matching.
Hi there Gav. Awesome video as always!!! Recently I had an idea of a routine in Dynamo and I implemented that it takes all doors and windows in a project a use the wall they're in to set beam elements on top of the doors and windows and on the base of the windows (I'm not quite sure how you call theses elements, since I'm from Brazil, Lintels maybe?) and the user only has to set the type of Beam and the amount they want the beam element to exceed the doors and windows dimensions. However when I implemented this routine I did not had the knowledge about BuiltIn_Parameters that we can obtain by Python and other programming Languages in the Revit API !!!! Because of that, I used the node "GetParameterValueByName" and my parameters are in Portugues, and so "Width = Largura" and "Height = Altura" and so on... This mean that someone with a family that has a parameter that is not names exactly as my string in the "GetParameterValueByName" node will not be able to use this routine. So I had the idea of using Python and getting the BuiltInParameter for the Doors and Windows Width and make the routine much more acessible. Would you want to try to do this and post it out? I can sendo you the dynamo file, it could be a good example for BuiltInParameters...
For lintels I typically use a bit more of a data driven workflow, depending on if actual elements need to be placed. Typically I check the host wall type of the door/window and if it contains a brick material then I would populate a custom parameter to inform it that it has a lintel, and use Dynamo to calculate the required length (nearest width + an excess overhang). Language is typically problematic in Dynamo unfortunately, but you're correct that for builtin parameters you could probably work around this using Python. I'm quite busy these days, but I encourage you to share it over on the Dynamo forums with others and see if people have suggestions as well.
@@AussieBIMGuru This is exactly what I did for lintels as Well, only issue is with the parameters. But maybe BuiltInParsmeters can make the routine much more powerful
@@alvernepaiva3287 yes I guess it depends on the expected reach for such a script. With Dynamo I find making small adjustments isn't usually too much of a problem, it's moreso applications which need to take such factors into account.
Not with the same UI unfortunately. The best I can think is to place markers in the actual models you share with consultants and add comments to their parameters so they can be scheduled/reviewed in the linked state by other parties receiving your models. Dynamo could probably be used to develop a more robust workflow, but it would be very bespoke/complex.
Hello there! thank you for the video. It is an fast solution. Elements ID are not always reliable for comparison, are they? In which cases I can trust elements ID hasn't changed in one of the models? I am making something similar, the difference is that I am getting elements from a linked file and copy them to my current file. Later, both files will be modified and I should monitor those elements previously copied from link by comparing them to the updated linked model. I guess the way to go would be using Mark or other parameter to identify them.
An element Id should be reliable as long as it is the same element. Once it is deleted from the model or cut/pasted it is a new element with a new Id. If it's changed between models then that element was probably replaced I think. Mark or another parameter could be done, but is more challenging as you might have duplicate outcomes via copying.
@@AussieBIMGuru Thank you very much :) it may work with element id then. And yes it is safer because we avoid duplicated elements. Thanks again! Great video
A wall's profile can be edited only during wall creation as far as I know, not after. So you could create a copy of the wall and rehost or create new hosted instances to the new one I guess. I have a tutorial on this topic here, but don't cover hosted instances: ruclips.net/video/2SfanDMXe60/видео.html
Hello Gavin, I am trying your routine, but i have a problem : When trying to get the list of ID's in both models, the same ID might have a different order in the list (the cause : a deleted door from the old model, so if this door was the 3rd in the old list, in the new list, the 3rd ID is different...). In this case, when using list.contains and list.filterbyboolmask i am getting wrong results, i am getting TRUE for the first 2 doors ID in the list and FALSE for the rest, eventhough 90% of the doors are still the same...any idea how to resolve this issue?
This routine shouldn't depend on the id's being in the same order. The intent of the initial list.contains is to identify elements missing from the data set before matching up the data by finding the indices they occur at. Make sure you've applied the list levels properly as this might have an impact.
Hello Gavin, I must be doing something wrong cause even though I've moved 2 doors, deleted 1 and added 1 it still shows 10 doors as Moved. It is Revit 2023, not sure if it makes any difference though.
I think this could work well if the script added the filter into the model so you could use it with architects models without having to setup filters everytime.
I read a comment on other forums “If you are good at how to use tools doesn't mean you are a good programmer.”,“Choose a project and good team rather than which programming language you have to learn”,sometimes idea is also important.But if you don't know how to accomplish that with tools,the idea means nothing.So better be good at use tools and use them smartly.Thus you can make something into practice.This can avoid an famous saying in China "Layman manage expert."
I learn both how to use dynamo and what it can do through your series.Thank you.Due to my limited time,I don't try every one following your step,but if have the need in the future and I will go back and search this series.
It's certainly true that being an expert in tools doesn't mean you necessarily are an expert in programming for sure. Tools are still essential to operating, but it's important to plan ahead before developing them for companies or deciding how a company should prioritize.
Thanks Gavin,
I learned a lot from your videos - I can say it simply - you are my Revit inspiration :)
I'm so glad to hear that :)
Agree :). Gavin is the reason i got into dynamo! :)
This graph is simple but already have everything we need. Thanks Gavin!🎉
You're welcome!
Nice tutorial using a very simple method; the more complex the model and comparison method gets, the more difficult it is to get an overview.
It would also be possible to use other methods to make comparisons, like getting the location of each element, comparing, and comparing the volume and surface areas. There are situations where the model will change in ways which will not trigger differences in centroids; namely symmetrical changes to elements widths.
Yes this is only a good method when it is likely to suit the changes being searched for. A centroid and bounding box size is generally safe for geometry (as even if it grows in size, the BB will also change so it will be detected), but if data must be checked as well then it adds a lot more to compare.
Wonder what way you could check to see if the centroid of a wall has moved only parallel to the wall meaning it grew of shrunk so that it can be used to comment it as matching.
In that case you could compare the length parameter of the wall in addition to the centroid.
Hi there Gav. Awesome video as always!!!
Recently I had an idea of a routine in Dynamo and I implemented that it takes all doors and windows in a project a use the wall they're in to set beam elements on top of the doors and windows and on the base of the windows (I'm not quite sure how you call theses elements, since I'm from Brazil, Lintels maybe?) and the user only has to set the type of Beam and the amount they want the beam element to exceed the doors and windows dimensions.
However when I implemented this routine I did not had the knowledge about BuiltIn_Parameters that we can obtain by Python and other programming Languages in the Revit API !!!!
Because of that, I used the node "GetParameterValueByName" and my parameters are in Portugues, and so "Width = Largura" and "Height = Altura" and so on... This mean that someone with a family that has a parameter that is not names exactly as my string in the "GetParameterValueByName" node will not be able to use this routine. So I had the idea of using Python and getting the BuiltInParameter for the Doors and Windows Width and make the routine much more acessible.
Would you want to try to do this and post it out? I can sendo you the dynamo file, it could be a good example for BuiltInParameters...
For lintels I typically use a bit more of a data driven workflow, depending on if actual elements need to be placed. Typically I check the host wall type of the door/window and if it contains a brick material then I would populate a custom parameter to inform it that it has a lintel, and use Dynamo to calculate the required length (nearest width + an excess overhang).
Language is typically problematic in Dynamo unfortunately, but you're correct that for builtin parameters you could probably work around this using Python. I'm quite busy these days, but I encourage you to share it over on the Dynamo forums with others and see if people have suggestions as well.
@@AussieBIMGuru This is exactly what I did for lintels as Well, only issue is with the parameters. But maybe BuiltInParsmeters can make the routine much more powerful
@@alvernepaiva3287 yes I guess it depends on the expected reach for such a script. With Dynamo I find making small adjustments isn't usually too much of a problem, it's moreso applications which need to take such factors into account.
@@AussieBIMGuru You're right about that...
Gonna try to implement this Idea. God bless you my friend
Got an issue with Revit 2019 not having the issues add-in, is it possible to use dynamo to create something similar?
Not with the same UI unfortunately. The best I can think is to place markers in the actual models you share with consultants and add comments to their parameters so they can be scheduled/reviewed in the linked state by other parties receiving your models. Dynamo could probably be used to develop a more robust workflow, but it would be very bespoke/complex.
Hello there! thank you for the video. It is an fast solution. Elements ID are not always reliable for comparison, are they? In which cases I can trust elements ID hasn't changed in one of the models? I am making something similar, the difference is that I am getting elements from a linked file and copy them to my current file. Later, both files will be modified and I should monitor those elements previously copied from link by comparing them to the updated linked model. I guess the way to go would be using Mark or other parameter to identify them.
An element Id should be reliable as long as it is the same element. Once it is deleted from the model or cut/pasted it is a new element with a new Id. If it's changed between models then that element was probably replaced I think. Mark or another parameter could be done, but is more challenging as you might have duplicate outcomes via copying.
@@AussieBIMGuru Thank you very much :) it may work with element id then. And yes it is safer because we avoid duplicated elements. Thanks again! Great video
Genius!💥
Cheers mate!
Is it possible to create a wall with hosted elements that also follows topography?
A wall's profile can be edited only during wall creation as far as I know, not after. So you could create a copy of the wall and rehost or create new hosted instances to the new one I guess.
I have a tutorial on this topic here, but don't cover hosted instances: ruclips.net/video/2SfanDMXe60/видео.html
Hello Gavin, I am trying your routine, but i have a problem :
When trying to get the list of ID's in both models, the same ID might have a different order in the list (the cause : a deleted door from the old model, so if this door was the 3rd in the old list, in the new list, the 3rd ID is different...). In this case, when using list.contains and list.filterbyboolmask i am getting wrong results, i am getting TRUE for the first 2 doors ID in the list and FALSE for the rest, eventhough 90% of the doors are still the same...any idea how to resolve this issue?
This routine shouldn't depend on the id's being in the same order. The intent of the initial list.contains is to identify elements missing from the data set before matching up the data by finding the indices they occur at. Make sure you've applied the list levels properly as this might have an impact.
Hello Gavin, I must be doing something wrong cause even though I've moved 2 doors, deleted 1 and added 1 it still shows 10 doors as Moved. It is Revit 2023, not sure if it makes any difference though.
One of the indices shows -1 value, the rest shows the same value up until the place with -1 and then from this point onwards values are lower by 1.
Thanks as always :)
You're welcome!
I think this could work well if the script added the filter into the model so you could use it with architects models without having to setup filters everytime.
The archilab package has nodes which can construct filters, so it could be done.
this is so difficult i don't know maybe because i just start learning , hope i will be good
Begin with dynamo primer and some of my beginner focused tutorials maybe. This is quite a complex workflow for beginning.