Description
Key Learnings
- Understand what Dynamo can do for you with Fabrication Parts in Revit
- Learn how to use different packages within Dynamo to access information currently unavailable
- Learn how to create a Dynamo script to write a specific parameter to a specific list of fabrication parts
- Explore some additional Dynamo examples that work with fabrication parts, and discover how useful it can be and how it can increase productivity
Speaker
- KAKevin AllenKevin Allen is currently employed at Comfort Systems USA (CSUSA)—a premier mechanical systems installation and service provider with annual revenue of $1.6 billion—as Director of Building Information Modeling (BIM) and Productivity. CSUSA is a national organization with over 7,000 employees and 45 operating companies (some being service only). Currently 26 of these locations utilize virtual design and construction (VDC), with 10 sheet metal fabrication shops, numerous pipe and plumbing shops, and 205 employees utilizing the Fabrication software products on a single database. Kevin is responsible for implementing, training, and advising on best practices for these companies, developing standards within the organization, and providing technology recommendations for the future, along with numerous other tasks.
KEVIN ALLEN: OK. Here we go. Class number two for the day. And we'll do three in a little while. So how many of you were in our first class this morning? About half. OK.
So we'll go through a little introduction here. And then, we'll actually dive right in. We're actually going to get into Dynamo create a few scripts here on the fly, and show you some of the things that we're doing with it here at Comfort. We alluded to that a little bit this morning. But now, we're going to do a little bit deeper dive into what it's doing for us currently today.
So I'm Kevin Allen, director of BIM and productivity. William Tucker's going to assist me here. He's in the gray jacket over there. And then, we have Josh here as well. So the three of us work here at Comfort as a team trading off responsibilities, if you will, helping train in the neighborhood of around 150, 160 users of the software in some way, shape, or form, whether that's CAD MEP Tracker, CAM Duct, FAB Parts and Revit, estimating all of the above.
So we work with 26 companies nationwide. And this year, we'll do about $2 billion a year in total revenue. So we're pretty busy, let's say the least. All right.
So let's start first with I'm not a Dynamo expert, but I've figured out what to do by going online, doing some reading-- Dynamobim.org-- and been able to make some things work. I know if I can do it, you can do it. So let's go through some things, let's show you what we're doing, maybe it'll give you some ideas about what you could be doing with it. And then, we go from there.
So everybody here, just be aware there's basically three packages that work for fabrication parts currently today. That's it. I would like all of you to get on some forum and ask for more people to develop nodes for us for Dynamo. Because the more nodes we have, the more things we could do with it. But we're really limited with what we can do with Dynamo and fabrication parts. It is what it is. This is where we're at today.
So Dynamo nodes are either written in C sharp or Python. And it takes the Dynamo node in order for us to hook up the wires, in order to make things function. Those nodes are tying into the API.
So we had a question this morning-- if you're in this morning's class-- one of the questions was, can we do things in Dynamo that you can't do with the API? The answer is no. It has to function in the API. You have to be able to do something by sitting down and writing code. First, somebody has to hook up the node into the API in order for Dynamo to work. It's open source.
Anybody can write nodes for Dynamo. But it gives people like me who, I don't even know any programming language-- I know maybe a little bit of list, but that was always backup. I forgot that. It gives us the ability to make Revit do things that normally we would have to hire a developer to do. We can sit down and do it ourselves.
So it's pretty robust in that situation. But when we only know the three packages, that limits what we can do. And we're going to talk about some of that. We'll go through that.
So one of the things that we got a node to do-- and my class is not as fun as the one next door it sounds like. (LAUGHS) What am I doing wrong? (LAUGHS) Maybe we ought to cheer and see if we can get louder than them. (LAUGHS) Just for the heck of it. (LAUGHS) OK. All right.
Part CID. For those of you who are in the fabrication database, you know what CID is, right? Our customer ID. That's our way of telling CAD MEP S Cam we can use that as a lookup. So if you're in the piping side, you're using 2041. And you're going to use 2041 to build a fabrication report and filter that report to get a report of linear footage of pipe for a job.
Well, in Revit-- what's that? No, I thought you had a question. In Revit, if you don't use this node and write that parameter to a-- write that data to a parameter, I can't run a schedule in Revit it and get linear footage of pipe at a Revit. Very easy. Trust me, you can do it.
But if you look at this, the way you build schedules, you have to tell it not this, not this, not this, not this. Well, at some point, you run out of "nots," and you can't even get the schedule to populate the way you want. If we run Dynamo, and we add this CID to a parameter that we've created, now I can build a schedule where some parameter equals 2041 because that's pipe, and I've got my schedule created. It's very simple at that point. I only need to filter one field, one parameter.
Same thing for service type. If you've been in fabrication and you've written reports, you use service type all the time for all kinds of things. Well, again without having the node and punching that data into a parameter, it's very hard to create a schedule, hard to do things with fabrication parts. You can do it, but it's not the easiest.
I actually have one. We're trying to get the easy button. I want to make it easy for myself. Build a schedule and it works every time. Don't get me wrong. If we don't run Dynamo first, our schedule doesn't populate properly, right?
So we've got a schedule that's dependent on a parameter CID-- or in this case, service type-- that won't work. That's OK. Just go to Dynamo Player and hit Run. OK, now we fixed it, and now our schedule works.
So some other pieces. Get fabrication configuration information. So in this case, I've loaded the default imperial build from Autodesk. And it gives it its GUID.
So how many of you understand what the GUID is in your CAD MEP database? Everybody know where that's at? Yes? Copy it out. I'm telling you. Go to your database, copy out your GUID, and store it in a safe location.
William had to remind me about this morning. I remembered this time. That is unique to you and your database.
If you're loading configurations, you want that to be yours and your configuration inside of Revit. We've had situations where we tried to load a configuration, it might already been loaded by the engineer. You're going to have to take that back out, rip out that information. Hopefully didn't draw anything in. And if they did, not very much so that you can take that out so you can load your database. That's what you want in there to start drawing with fabrication parts.
We've had our database. Mysteriously, that number gets changed somehow. Well, if you've already loaded a configuration into Revit with your previous GUID, and then you try to reload config, it's not going to work. Throws up an error on you. In that case, you want to make sure that you take that secretly stored GUID, put it back into your database, and then reload configure that work. So that's a node that's going to give you that information. And it gives you a lot of other stuff you see here, profiles and all kinds of good things.
Fabrication part dimensions. This is a new one. So somebody from quality put this package together, bio RPG, if you're on the Dynamo BIM or extra CAD. He put this package together.
This is a pretty good one, actually. So it gives the dimension type, the value, and the name. So what are we talking about? If I double click on an elbow, it's going to give me the dimension list. Top with bottom, size, width, depth. It's going to give me all of those dimension values for that particular elbow. And print it all out for me.
I can now take that data, punch it into a parameter, and I can build a schedule with all of this information. I can also use it to set a dimension value. So I'm going to show you a couple of notes here in a minute where we're setting dimension values.
So how many of you are a little bit frustrated with when you double click on an item in FAB parts and Revit, or you click on the item and you go click edit part, and you get the little spinning wheel, and you just sit there for a while, and you sit there for a while, and then finally the dialog box opens. Anybody know what I'm talking about? Yeah?
If I'm changing a dimension on an elbow, like I need to extend its throat, and I want to make it a specific dimension, I'm not going to edit the fitting. I'm just going to run Dynamo. It just changes the part value for me and I'm done. So I'm going to avoid that frustration of watching a little spinning wheel. So it's supposed be fixing that, but I haven't quite seen it yet.
So is same as-- So this comes from CAD MEP. Here's the list of ignore fields. So if you're in your renumber tool in CAD MEP, you have the ignore and you can go tick the boxes of all the things you want to ignore. This node does that for us. Now, if you want to put a script together to renumber fabrication parts inside a Revit, you can do that. I'm going to show you a sample of that. I didn't finish it, but I'm going to show you a sample of how we can utilize this node to start renumbering.
Don't get me wrong. There's other companies out there have renumber tools, we've already got our own renumber in Revit that we've built ourselves. So I personally, we personally at Comfort don't need this node, but there's probably a lot of you out there. If you're switching to fabrication parts, this is going to come in handy for you to renumber pipe, renumber duct. All that good stuff.
So different nodes showing what can be done. And I'm going to open this and actually run this, but I just put a lot of things together here all in one file. So in this case, here's the one. Right now, we're generating a list of everything false. But on that list, I want to change index 15 to true.
So if I go back one, what is index 15? Service. So in this case, I'm setting my ignore index 15 to true. I want to ignore service. I'm going to renumber ductwork-- and I've got a file with some straights and it will go right through this. I'm going to renumber ductwork, and I'm going to ignore service.
So if I have four pieces or five pieces of straight, two of them are on one service and three on the other, it's going to ignore service and give them all the same value. It's going to ignore that it's on a different system. That's what that does. I'll go through this, fabrication part elements. And then, here's the one with dimensions. I'll actually open that up.
Here's another one. Get all the services that are loaded, and get the groups and the buttons-- I haven't really found a good use for this yet, but the nodes here, I just wanted to show it to you in case you have a use for it. I personally haven't found a use for it, but maybe somebody in here can give me an idea about, hey yeah, that's what I could do that with. All right.
And then, I'm going to create these from scratch. So I'm going to open up the other one first. But then, we'll go through and actually create a couple of these from scratch. Blank, build it, run it, make sure it's all going to work. I'm going to make sure my parameter's in there because here's my parameter. I may or may not have that parameter, we might need to modify it, change my parameter.
William is going to help as well. So William is going to run a couple of things, I'm going to do a couple of things. We're going to switch screens back and forth here. And while he's running something, I'll be getting ready, and vise versa. So we're going to start with that.
But before we do that, though, does anybody have any questions about where we're at today, what we're doing with this? No? Pretty quiet group this afternoon. There was quite a few questions this morning. Yes, sir?
AUDIENCE: I was just going to make a statement on these package nodes.
KEVIN ALLEN: Yep.
AUDIENCE: Just to the people that aren't really actively using Dynamo yet, when you dive into it, you'll learn all the headaches you have to go through to make sure you get the right version of this and that. So that's something you definitely have to keep up with the package nodes.
KEVIN ALLEN: Yes. So what he's referring to is whenever you're in Dynamo, first off, you have to go search for a package and go download a particular package. Then, once you get that package, then the author of that package may have issued updates along the way. We may need to go update our packages as well in order for this node to function. So it really changes from version of Revit to version of Revit, and for version of Dynamo. I think I'm running 2.01, I think is the version of Dynamo that I'm running currently today. Yes, sir?
AUDIENCE: Is everything you're doing in Dynamo Pro or Dynamo [INAUDIBLE]?
KEVIN ALLEN: Dynamo Pro?
AUDIENCE: Either Dynamo Studio--
KEVIN ALLEN: Oh, OK. Sorry. Yeah. So Dynamo Studio runs outside of Revit. So what I'm running is Dynamo, which runs internally to Revit. So good question. Yeah, everything I'm running is Dynamo that runs internal to Revit.
AUDIENCE: There is one more question for the parameter. So if I have more than one parameter, shall I create a [INAUDIBLE]? I've already done in the call log.
KEVIN ALLEN: That's correct. That is correct. So the question was if I have several parameters that I want to write information into-- in this case, service type-- I'm going to write this to a parameter of service type. I would copy this node and this node, bring them down, and pull the same element.
But then, I would change the parameter. It's not going to be service type. It might be CID. So I'm going to write that.
So I can use all of the elements and write two values at the same time. I could write five, I could write 10. I mean, the list can go on and on. I'm going to try to keep it a little simple today. But yes, you can copy these things down and keep replicating this over and over. Good question. Yes. All right. Yep.
AUDIENCE: So my question is if you have nodes that can accept more than one parameter [INAUDIBLE]. Because I have 10. Then, I have to duplicate 10 times.
KEVIN ALLEN: Yes. That's the only way I know how to do it. Somebody in here might know of a better way. But if I'm trying to fill out 10 parameters, I need to copy that set parameter 10 times. Does anybody know of another way to do that? I think that's the only way to do that if it's 10 different values. Because I have to tell it that it's a different value for each one. So the only way is to copy.
AUDIENCE: You might be able to do some kind of string that--
KEVIN ALLEN: Yeah. You're getting a little further outside of what Dynamo can do just out of the box, if you will. There might be some way to take a code block and write some Python code to make something happen. Trust me, I don't write Python code. I'm going to show you how to do it with out of the box Dynamo nodes. Again, trying to keep it as simple as you can.
If you're not using it, my hope is that after this class, you will see enough ideas, you'll have enough information that you're going to go back and say, I'm going to start using Dynamo, and it's going to make my job easier. That's my goal. If you're not already doing that, that's what I want to accomplish today.
So let's talk about a couple of other things before we actually dive in. If you're in my first class, you saw this list. Bear with me, I'm going to talk about it again.
Some of the scripts that we create that we use here today, locate end connections on ductwork and pipework. If you're in FAB parts in Revit and you go hover over a piece of duct and a piece of pipe, you can't tell which is end one end two. If you're coming out of CAD MEP, you can hover over the piece of pipe or the piece of duct, and it'll tell you, con one, con two. We don't get that in Revit. So this Dynamo script helps us do that. So now I know which connector's which.
Match duct top or bottom elevation. Don't get me wrong, I can click on the piece of duct and go type in the dimension. We've got a script that just if you run it with Dynamo Player, you pick the one you want, and you pick the other one you want to match, and it moves it. Done. So why do I want to type when I can just click a button? That's the point of that one.
Plumb Bob. Those of you who were in my first class, you can't answer. But anybody else that wasn't in my first class, what do you think that one does?
Aligning vertical. So it doesn't actually align it, it tells me when it's not vertical. And here's what happens. If you're doing design to FAB conversion-- so you're checking an engineer model, and you're converting its FAB parts. When the engineer draws with Revit families, this riser can be sitting over here at an angle like this. When I convert FAB parts, it converts it to this angle like this. Well, we don't draw a pipe like that. We draw vertical.
Can I go into an elevation view and look and try to find it? Sure I can. But guess what? I can't always see it if it's just a little bit off. Dynamo doesn't care. It's going to tell me. It's going to flag it.
So we just insert a family on it. It's a big red and yellow family, about a foot tall, two foot wide, just a family that we put on there that tells us it's not vertical. Go fix it. We don't know which end is right, top or bottom. Figure out which end is going to match and go fix it.
P-trap checker. So we're checking the dimension between the drain and the P-trap. And if it's exceeds code, it's going to give us the same flag. Hey, go fix it. You've got to do something different. Some places you can't fix it. But at least you've got a warning to say, hey, there's a problem with this.
Revision updates on sheets. Again, avoiding the click revision on sheet update. Tick the box, go to the next one, go to the next one, run the Dynamo script, and add revisions to sheets.
Set FAB part elevation the same. Again, similar to this one. But for piping, really set elevation's the same. Set Revit materials. So inside of 2018 three, I believe, and 2019, you can apply materials to FAB parts and Revit. And if you load the Revit project into Navisworks, the colors come across. I don't have to run a parent's profiler.
It's another option for you if you don't like running a parent's profiler every time you reload because you drew some new doctor do pipe and now it's white. You run a parent's profiler, well, when you do this, you don't have to worry about that. So it's another option for you.
Stub-up elevation. All of the stub-ups that are on level one, they're all different elevations. I can window them all and set their elevation to six inches above slab and it does it, fixes them all. It's what that one does.
And then, auto tagging. We built the family with visibility in it with a bubble that gets bigger and bigger and bigger based on the number of characters. And I changed the type and changed the visibility, and I run a Dynamo script so that now I have a tag that's always as close to the characters as possible. I don't have this big long tag and a short little item number. That's what that one does. So it adjusts the tags for me based on the character string count in that tag. So it reads that value. That's what that does.
So hopefully ideas. Go back and start thinking about what else you can do with it. And then, come show me how to do something next year that's what I want. OK?
So let me get into building this right here. Well, I think I got one up first though. Let's go to Revit. So manage and Dynamo. So if you have multiple versions installed, it's going to prompt you, which one do you want to run? In this case, I'm going to run 2.01.
I probably just need to go uninstall the other one because once I made the switch, I've been using 2.0 ever since. 1.3 was part of 18. So I'm going to open that. Come on. Maybe? OK.
So let's open a bunch of stuff when we'll start with that. So that's the one I was talking about earlier about setting the values and giving me a list. So in this case right now, I am not feeding the ignore field to tell it that I want to change the value from false to true. So by default, in that node, everything is false.
So it's going to number each piece and not ignore service. So it's going to give the values separately. So just so you see what's happening here-- let me minimize this-- 1, 2, 3, 4, 5 pieces of duct. I've got a transition and an elbow.
So a very simple project. This is how I start with Dynamo, something very simple where I can watch what's happening and see, yes it's working the way that I want. If I'm trying this on a job with lots of things in it, I have no idea of knowing.
So when I run this-- let me get back over here. I'm going to click Run. OK. So right here, let's look at this node. Let me pin that so we can have a look at this. So here would be either a transition or an elbow. I don't know which one, doesn't really matter. Here's another transition or an elbow because they're the single part.
Now in this list, I have two parts, which would be two pieces of straight. And down here, I have three pieces, which is three pieces of straight. So this is telling me-- so I had five pieces of straight in that model. So because they came in a separate list, it recognized service as a difference, and it put it in a different list for me. I'll run it again, but I'm going to connect the node up and tell it to ignore service.
And then, we're going to watch this list change. So I'll come right here. Because I'm telling it with 15, I want to set that to true. So if I look in this list, if I go down to 15, you'll see the value is set to true. But I didn't feed it in yet.
So now, I'm going to feed it in. So in this case, just connect the wire, and we're going to run it again. And we're going to watch the parts move. Now, they all came in to the same list, which means it ignored-- I think I have some supply and return, or supply and exhaust, or something in here. But now, it ignored the service and put all those in the same list.
Now, we would need to generate a list. I'm not going to finish the node, but now we need to generate a list, generate a value, do I want the string to be supply, return, exhaust? How do I want to renumber it? Start the sequence and use Dynamo to now renumber.
Very simple, but the basics of getting Dynamo to do what you want it to do. So without this is same as node, we couldn't even do this. This just came out earlier this year. Anybody using this node, by the way? Anybody got it all wired up and functional? No? Nobody?
So I think it came out February, March maybe, of this year. The guy put that together. So pretty powerful. I can renumber hangers. I mean, I renumber whatever I want now based on that node. So it's up to you on how you take that now and run with it.
So let's take it back out, run it again, and you'll see them change. So again, I'm just telling it true or false at that point. That's all I'm doing with that node is to get that value. And now, it's separating out those fabrication parts. I could give it a name and we could actually see it, but those are the values.
Inside of here, let's look at a couple of other things. So as you see what I'm doing here on these nodes, if you click this little pin, the fly out for the text will stay there. And when you unpin it, you could come over here and hover over it, and it'll fly out. But as soon as you take your mouse off, of it'll go away. So you just pin it if you need to see those values.
So here's another one. Let's get this one where we can read this a little better. So element parameters. So in this one, I can see alias. How many of you used alias and CAD MEP to annotate something? Anybody in here done that? Yes? Right now, in Revit, you can't get to alias. But with this, I know what that index is, I can now write that out to a parameter, now I can use alias to annotate something.
I just want to go through this list because this is information that I can get to from Dynamo. So here's a cut type, machine cut. So the same thing.
So we can start scrolling down this list. Let's go down. Some of this not that big a deal, primary width, depth, overall size. Some of this we're seeing in the properties pallet, but some of it we're not.
So we can dig through this and find out is there something in here that I'm looking for? Maybe part material, do I want to build a schedule in Revit it based on part material? So I can take that and write that to a parameter. I want all my galvanized ductwork together, and all my stainless together, so on and so on.
So that's just a element parameter node inside of Dynamo. I'll just scroll down through here. I'm just picking out some other things. Water gauge. I want to build a schedule in Revit based on water gauge. Top and bottom, element ID. All right. So that's the first piece. So zero list and one list.
So once you get into Dynamo a little bit, you start understanding that OK, this is my first part as zero, then my next part one, my next part is two. So it's a zero index based system, which means that when you start counting parts, you never start at one, you start at zero. Zero is actually one in Dynamo. One is actually two. No. Did I say that wrong? Yeah. One is two. Yeah, I was right. I had to think about it a minute. So a zero based index.
So again, just some more information that is handy. Let's go with William, what do you have ready over there?
WILLIAM TUCKER: The dimensions.
KEVIN ALLEN: OK. William is going to go through a dimension inline. So we'll flip over to William. How many of you create a bunch of dimensions, and then you start grabbing the text, and starting to move it in manually because I need a little bit more room and I want all my text to be all in line with my dimensions.
Well, here's a script. Select a dimension. It's going to find the curve, it's going to find some values, and then it's going to move the dimension-- the text in line. Bang, done.
I don't want to sit here and grab text and move, grab text and move. Run a timer script. What else do you have on there William? You're going to do another one, I think.
So what we find with Dynamo is if you try to run multiple Dynamo scripts, multiple Dynamo sessions, it doesn't like it very well. And if you open one file and run, and then you try to open another file run, sometimes it doesn't work so well. I found the best way to start running Dynamo is just opening and closing it. If I'm going to run a different script without player-- now, we're in Dynamo here right-- without player, sometimes it works, sometimes it won't. It just gets hung up. It just gets lost and it doesn't know what to do. So if that happens to you, just close Dynamo, reopen Dynamo. So that's what William is doing here now.
WILLIAM TUCKER: I'm actually running this out of Dynamo Player.
KEVIN ALLEN: Oh, he's going to run this out of Dynamo Player. OK. So in this case, we've got two grills. Again, trying to keep it simple here. William's going to run what? Air terminal tagging.
All right. So he's going to hit the little button. Now, everybody know what the little button to the side right there is versus play? Anybody know what the difference is? No?
OK. So if he just hits play right now, it's going to try to run. But in this case, in this particular Dynamo script, there's an input. We need information from the user. So which one do you want me to annotate for you?
WILLIAM TUCKER: Well, in this one there's not. But it's usually the safest thing to make sure there is nothing to model.
KEVIN ALLEN: Yeah, no inputs. Yeah. So in this case, yeah OK. So we're going to show the difference. Bang. Just annotated my grills. Can we do it another way? Sure you can. There's lots of ways to do annotation in Revit. But if I'm in that view-- and I that's what this is set up to do is it annotate what's in the current view-- it's going to put all the tags on. Again, simple but effective.
Here's another one. service type equipment. There we go. Bang. So I just labeled my access panel. So volume control dampers, put all the text on there. Now go move it around, and we're done. So I potentially could be tagging along and miss that access panel because I didn't see it on the side of the dock. Well, if I got a big piece of text hanging out there, I know, hey, move the text, there's something there. So again, just looking at some of the automation that can occur using Dynamo.
So which one do we have? Oh, set dimension values. That was in your other project, William. Yeah.
WILLIAM TUCKER: Oh, forgot that one.
KEVIN ALLEN: OK. So we're going to run Dynamo Player again.
WILLIAM TUCKER: Well, I think I'd talk about Dynamo again.
KEVIN ALLEN: OK.
WILLIAM TUCKER: For this session.
KEVIN ALLEN: Oh, got you.
WILLIAM TUCKER: Yeah, forgot that.
KEVIN ALLEN: So here we are. We're switching back and forth. We've got two different files going. So he's re-initializing, if you will, Dynamo to recognize this session of Revit. So set dimension values, square elbow. Down at the very bottom, William. So hit the little button right there.
So in this case, of course, Dynamo has to fire up the first time. But now it's going to say, select which element you want to change. So we want this one. And now, what do you want your values to be? You want one to be nine, one to be 12, whatever. William's going to just type into values here. And we'll see the elbow change. Done.
Question is, is that faster than sitting there waiting on the little wheel run? It just depends on your project. In this case, William could probably double click on that elbow and it would open up the edit dialog box right away. Small little file.
But if I'm in a bigger project, I'm going to sit there for a little while. Take your mouse and go around in circles. Does it speed it up? Probably not. All right. Here's another one. Oh, open the other view, William. Open this section view.
WILLIAM TUCKER: Section view?
KEVIN ALLEN: Oh. Yeah. Double click this. Yeah. Go to view right there. So right now-- oh, set it to central. So we were testing this. Offset depth, but set them both to central instead of a value.
No. Value. Go left. Right there. Set it central. There you go. All right.
So here we have a transition. When you put it in a transition in five parts in Revit, it automatically comes in central every time. You have to double click it now and go change the value to get it to either be flat top flat bottom, unless you had another piece of duct you're connecting it to, and then you can just grab the grip and stretch it to it and it'll do whatever offset you had. But by default, it's centered.
So here he is, he's going to select it, and run. Just set a flat top. So it does the math internally to figure out what the depth is, and sets a flat top.
Again, practical, to me, in a lot of situations. We do it a lot. We drop that transition in and we go change it. What else do we have in here?
WILLIAM TUCKER: That was it.
KEVIN ALLEN: I think that was it for that.
WILLIAM TUCKER: Yeah, I think.
KEVIN ALLEN: Did I have-- oh, I was going to open-- so let me browse. I should have been browsing, but I was doing something different. Let me go browse. And let me-- what do we got, about 20 minutes? Revit support. Dynamo.
All right. I'm just going to open-- I'm not going to run this, but one of those examples of where we have to copy a lot of things around over and over and over and over to do things in Dynamo. And in this case, this is set the FAB parts material for ductwork. So this is where I was telling you we're using the materials to drive the colors inside of Navisworks.
So in this case, we're going to process over here, but we're gathering the data up here. So this is actually getting all elements of the ductwork, get the parameter service name. So I was just showing you the node a while ago to element dot parameter. So it gives you a list of 70 or 80 parameters. Well, now I'm using that to get something specific.
And then, I'm grabbing the materials from my project. I'm not going to run this because it's not going to work in this file, because I don't have the materials in here. I just wanted to open it up and show you. Now, I'm grabbing the materials, getting all of those categories, and then taking that string and punching it into all of the different systems. So in this case, we'll just pick one of these.
So really fair, two inch water gauge. So grab that service, search for that string. If it matches, then set the display color to that value right there, and it assigns all my colors for me. So I do that multiple times for every service over and over and over and over and over. How many services you have?
So this goes back to your fabrication database. Do you have standards? Am I naming my systems the same? They're always the same. Am I using profiles? How am I doing that? That's not service. Sorry, here's my service name. If I create a new service name, my Dynamo script's going to fail because that service name didn't exist. I've got to go copy that whole group and add another one, right?
So there's probably some other people that know a much better way to do this. But I personally haven't figured it out yet. So this Dynamo script, we just run that with Dynamo Player. And it punches all the values in, sets all the material. So you've got options, whichever way you want to make that work. So I just wanted to show that quickly. So let me close this one. And let's start a new project.
We've got about 15 minutes left. So inside of Dynamo-- we were talking about the packages while ago-- we can see right here that there's the packages that I have loaded, Dyno fabrication 2017, 2018, and fabrication. Up in packages. I could do a search for a package. It's not going to work for me because I'm not hooked up online. But this would go here, I could type a search in, and go find the package that I wanted.
But now, I need to select a model element. So I'm just going to right click on the screen-- and if I could type-- so I have two options here. I'm going to do select model element, not plural. I could make this plural if I wanted to, but I'm going to do just one part right now. Select model element.
So I did a search on that, I click on it, it adds it to my screen. Why did it turn yellow? Anybody know why it turned yellow? Exactly. Because I'm set to automatic.
One of the first things you should do-- I'm breaking my own rule-- set it to manual. Because I don't want it to process anything until I'm ready for it to process. I want to put a bunch of nodes in here and do a bunch of work first. Then, I want to process. So it turned yellow because it's thinking I already selected something, which I didn't.
So we'll set it to manual. And then, what are we going to grab next? We're going to grab service type. So I'll type in part service type. And then, what I need to look at-- and I'll verify here in just a second, but then we want element dot set. See if it's going to come up. Set parameter by name.
So let me save this just to make sure because again, I like to-- Yeah, that's fine. I'll just call that AU for now. I always make sure that I'm covered.
So now, inside of Revit, I'm going to go see under project parameters, I don't have the parameter that I want to write to. Doesn't exist in my project right now. So it's just a blank project out of the box. We're going to go into this in a lot more detail here in just a little bit in our next class.
But I'm going to go ahead, and I'm going to do service type, leave that there. And we'll call it text, and I want it to be for, in this case, ductwork. So I've got a parameter called service type.
So now in Dynamo, I need to feed the parameter name. What's it going to be? I'm going to do quotes, service type, because I just created that parameter. So double clicking on the screen will give me a code block. And anything that I put inside of quotes, that's basically a text string or a field that's looking for that value.
So I just double click on the screen again, I don't really need that other node there. Let's take that one back out. But that's going to be my parameter. What's going to be my value? It's going to be service type. Well, first off, I need to select something.
So let's go out, and let's select this elbow. Now, let's hit run, just a test. What did I get? Rectangular duct. That's what that is, a piece of rectangular ductwork. So that's working so far, so good. That's exactly what I wanted to see there.
What element am I going to set the value to? Well, it happens to be the same element that I just selected. And then, what do I want its value to be? I want it to be that service type.
So let's go look. I may have to close down Dynamo because I created a parameter after the fact. But let's go look and see, does this now have a parameter called service type?
Now, where did I put it? In common? There it is. It's under text, service type. It's blank. This is a joys of-- now, what does it say? Rectangular duct.
It's not rocket science, really. It's easy, but that's for one piece. Now, we have to do it for multiple pieces. We have to expand on this. But for you, if you haven't done anything with it, that's an accomplishment. I got something done. OK, I'm starting to figure this out.
So we could go through, go create another parameter called CID, go pull CID, and write it to that just the same. It's the same process over and over. It does get more complicated with more things.
The hardest part for me, not being a code writer, is working with lists, and understanding how lists work inside of Dynamo, and how to pull the information that I need from that list, and how to sort that list. That's been my biggest struggle personally, is getting the data. I might see the data in my list, but I can't filter it, I can't get to what I actually want to do. And I'm on Dynamobim.org. I'm asking hey, can you help me, I'm trying a different node, I'm looking at somebody else's graph, what did they use? Oh, list filter by bool mask, or list dot filter, or flatten, or whatever it may be. There's all these additional nodes out there.
We're close. It's going to take you a little bit of time to understand how some of that works. If you've written code, it probably makes a lot of sense to you. Chris, I'm looking at you because I know for you, it just clicked, probably. Not for me. Because I know Chris, Chris has written code before. So he sees this as like, oh yeah, I got this. He probably goes the other way, he probably writes it in the API. But for me, not being able to write code, this is my tool.
So here at Comfort, we do have a developer that we have contracted that we do things with. But I use Dynamo to prove the concept, to prove what I'm trying to accomplish. Can I get it done? Is it available? Can I actually do what I think I want to do?
And then, we pass that over to the developer, and he just looks at the code or the script and says, oh well, OK, I see what you're doing here. And he goes and hammers away on the keyboard. And I connected a little wires together to get where I needed to go.
So anybody got any questions on that? That make sense? I mean, again it's simple. But hopefully that gets you-- Oh, yeah?
AUDIENCE: How many [INAUDIBLE] do you find you're operating [INAUDIBLE]? Is there [INAUDIBLE].
KEVIN ALLEN: There is. So actually, there's one website. If I can think about it, I'll actually put it on the material. I didn't get all the material put for the class handouts and stuff. I'll try to put the link on there. There's actually one guy who put together sorting lists, and filtering lists, and he put every node and everything all together all on one page. It's like, wow, this is handy.
So it doesn't always work. What I find is a lot of my Dynamo is trial and error. I'll hook something up, run, click. Look at that list. No, I still don't have what I want. No. Go try it again. OK, find another node. OK, now I'm getting closer.
And quite honest, I may end up with four nodes to get to where I need to go, somebody else would look at that and say, well, if you to use this other node, you could have done it all in one. I'm like, well, OK fine. I don't know that, but I got there. It works.
So yes, dig in, try it, make it work. What I see the advantage that you would have if you've used fabrication parts in the past, is that you understand the fabrication database. You know what you're looking for, you just need Dynamo to help you get it. You already know what you need.
If I go to my fabrication report, I'm filtering that report by service type. Some reason, somehow, I need service type in FAB parts of Revit. How do I get it? Here's the way.
And again, CID, list goes on. I mean, you start looking at those parameters, any of that stuff, start putting it into a parameter field. Start organizing that parameter field. Next class at 4:30, we're actually going to cover setting up the parameter field, making them visible, non-editable-- what else? And then, I think we'll expand on this Dynamo script, and make it work for multiple elements.
AUDIENCE: When is that?
KEVIN ALLEN: That is at 4:30 this afternoon. FAB parts-- where's my data, I think, is the name of the class. Where's my data using fabrication parts and Revit, where's my data. So that's at 4:30. Do you know what class it's in?
AUDIENCE: 3303.
KEVIN ALLEN: 3303. Look there, somebody's already looked it up. Thank you. I don't know. I'll just show up there. Anything else? Any other questions? Yes, sir.
AUDIENCE: So you guys only do mechanical plumbing or do you do any electrical plumbing?
KEVIN ALLEN: We do. Yes. So we're just starting electrical, but our thoughts are we're probably going to go down the evolve route and use evolve electrical from applied software. Because it has a lot of content that we don't have in fabrication database.
AUDIENCE: All electrical.
KEVIN ALLEN: Yes. It's a add-on on top of Revit, that's correct. Yes.
So if you go to the Expo Hall, go find applied software and go look at it. That's probably the route we're going, just because it's already there and done, and we're not going to sit around and build content for electrical. This works for us, FAB parts, because we already had our database. We had sheet metal piping and plumbing already built out, labor and material pricing, everything already done. So we just load that right into Revit and go.
On the electrical side, we didn't have any of that. And we're going to start supporting some electricals within Comfort now. So we don't have time to sit around and go build boxes, and switch gear, and elbows, and BIMs, and on, and on, and on. We don't have time to do that. What else? Yes, sir? Sorry.
WILLIAM TUCKER: I was just going to say, back to this here, where you use the select model element or elements tab, I use that a lot for when I'm trying to build a script or test a script. Just say, hey I just want to test it on these two or three elements or something. They get the full perspective of the automation. You're typically going to want to start with the find all elements of this, and the model--
KEVIN ALLEN: That's correct.
WILLIAM TUCKER: [INAUDIBLE] of this--
KEVIN ALLEN: That's correct.
WILLIAM TUCKER: --like your duct. If you're going to do all your elbows and put some text field in there, it's going to be the same. You're going to say, get Revits and find all elbows. And then, apply that parameter to that.
KEVIN ALLEN: That's correct. So William, since you opened this script up-- so this is the other script setting material. So you see these things can get pretty massive. Zoom in to the far left green piece up there, William.
WILLIAM TUCKER: Far left?
KEVIN ALLEN: Far left green. So what he's talking about here is I'm going to find anything MEP fabrication pipeworks or a category, and I'm going to get all elements of that category. That's exactly what he's talking about. I'm not going to do a Windows selection in this case. I don't need to.
In this particular script, it's setting materials for all pipework. I don't want to select it. I don't want to do anything. I just want to run. OK? So that's exactly what he's referring to.
More than likely when I was building this-- the very first-- I was doing it for one element, just like we're talking about. Then, starting expanding it, making it work for lots of things. So it's a progression. You have to get something successful and then build on that. It's just a lot of repetitive. That's all it is. Yes, sir?
AUDIENCE: Those color coded blocks again, there. Do they function as part of the logic or are they just--
KEVIN ALLEN: They do not. They are for human interface. They are for us to be able to differentiate all the different groups. And when we start copying them around-- so you can window a bunch of nodes, and right click, and say create group, and assign that group. So it's a good policy if you're building things.
As you build a certain piece and it functions, put it in a group and make yourself a little note. This gets all fabrication parts and filters by service type so that that little group, that's what that does. Then, move on to the next little piece and assign it a group again so that when you come back here a year later, or six months later, you can remember what you thought.
Code writers, when they're writing code, a lot of guys writing code-- C Sharp, Python, whatever-- they'll put notes in their code just the same. But they've got characters that differentiate a line of code versus a line of information. So people writing code will do the same thing. And that's what that's for here in Dynamo. Yes.
We haven't gone this far, but there's some companies who have color codes designated on grabbing parts, processing parts, adding data. So each one of those is a specific color. So that when they look at overall scripts, everything makes sense to them. They can see it based on color. That's what this does. All right. Anything else?
AUDIENCE: Can you save groups to different files like--
KEVIN ALLEN: You cannot. That's one thing that I've found I haven't been able to do yet. Have you done that?
WILLIAM TUCKER: Well, you can't save it necessarily. But a lot of times, when I've-- again, six months later, you're like, damn, how did I do this--
KEVIN ALLEN: How did I--
WILLIAM TUCKER: --you'll open a script that you've written before and you can just do a control C copy--
KEVIN ALLEN: Copy.
WILLIAM TUCKER: --open the new one and paste--
KEVIN ALLEN: --and paste. Yeah. So it's going to take those nodes from one to the other. Yeah. You have to redefine the group. But at least you had that processing. You get to take that and use it again. Beg, borrow, and steal, right? I've already done it once, I don't want to do it again. Yes, sir?
AUDIENCE: So one of the things [INAUDIBLE] is [INAUDIBLE] the task over C Sharp [INAUDIBLE].
KEVIN ALLEN: Oh. So I'll tell you all day long, the API is faster, hands down. If I'm going to run a process in Dynamo, and I create the same process with an API through code, it'll run 5 10, maybe 15 times faster with it written in code. Not everybody has access to somebody to write code. So Dynamo is the alternative to that.
In essence, you're connecting wires to nodes, you're writing code. I'm not a developer. But behind the scenes, it processes the individual elements separately, then accessing it directly through the API. It's just the way Dynamo functions.
Is it an issue? No, it still works. It's still way faster than me sitting down and doing it by hand in most cases. But we take it one step further. We prove it, and then we add it to the API, we add it to a button on our ribbon. That's what we do. Yes. What else? Yes, sir?
AUDIENCE: So in Dynamo, whenever you have a service type called out, so you have [INAUDIBLE] service type. But if you do that same thing in API, then you're [INAUDIBLE].
KEVIN ALLEN: No, because now he's collecting all elements. I don't care whether it's pipework, ductwork, taps, whatever. Take all of my MEP fabrication parts, ductwork, pipework, electrical, all of that, and write its service type. I don't care what it is. Write everything. Yes.
So once he does that-- and we just have a button on our ribbon, it's for parameters. We just hit the button. And it writes a whole list of parameters for us for every part. You just hit the button. Hit the button. It just writes data. That's all it does. That's all we use it for. But then, all of our schedules populate at that point. OK? All right. There we go.
[APPLAUSE]
Tags
Product | |
Industries | |
Topics |