Specialty equipment does not automatically number in the Mark field. To add mark values sequentially, use Dynamo. Create a simple sequential list in dynamo and concatenate a common prefix to each value. Make a selection in the Revit model of all specialty equipment and filter out just the signage. Use dynamo to feed the list of sequential numbers into the selection of Revit families
- View Offline
- [Voiceover] In this video we're gonna input all the sign number for all of our signage families. Now I have 30 items on my schedule right here that I'll need sign numbers. It's just the equipment does not automatically increment the mark value, doors would, rooms would, but the specialty equipment category does not, so we would either have to do it manually here going item by item through the schedule, or come up with some other way to automate the process. And Dynamo is the perfect tool to do just that. Now, we did look at a Dynamo example in a previous video and I do encourage you to review that for some of the basic concepts and also be sure to check out Dynamo Essential Training here in the library, it's an excellent course that'll get you up to speed on a lot of key Dynamo skills.
Now I'm gonna go ahead and launch Dynamo and I've provided a starter file for us called Sign Numbers_Start, and when you open this it's going to open up in manual execution mode and what I've got here is several nodes already in here, just to save us a little time and some messages. So, let me walk you through a few of these things and then we'll click Run. These first few nodes is just looking at the list of Revit categories and focusing on the specialty equipment category, then it's taking that and feeding it into this selection node, which selects all elements of that category.
If I run this, it will populate that watch node and you'll see that that finds 93 items. So clearly, that's not just the 30 pieces of signage we're looking for, it's all of the specialty equipment. Now if I hold my wheel in, and I pan over here, I've left some other notes here to say what we need to do next. So, what we need to do is take that list of 93 specialty equipment items and filter out just the ones that we care about. Well, the ones that we care about are all of the ones whose assembly description equals signs.
So I've already added two string nodes right there and typed that in, and the important thing about string nodes is that you type it in case sensitive, so with the correct upper and lower case there. So we need a family instance type node, we need a Get Parameter Value by Name, and then we can bring those together. So let's go to Revit, under Elements, and Element, Get Parameter Value by Name. Let's bring that node in. So this looks for an element or elements and a parameter name. Well the parameter name is this, Assembly description right here, and if I just simply feed in my list elements from the watch node here, I will get a list when I run it, but unfortunately the list will not be populated with anything useful.
That's because the assembly description is not an instance property, it's actually a type property, which is why I've got this node here that says we also need the instance type node. So let's unhook this one, and you can actually type these values into the search field right here, so if I type family instance, then the first thing that comes up is type, and that's the node that I'm looking for. So with this node I can feed in the list and then feed it in here, and let's change this to automatically run at this point because I think it'll be a little bit more convenient.
So now we've got all the assembly descriptions, we need to do is figure out a way to filter the list into just those that contain signs. So, I'm gonna click this little x here to cancel the search and scroll down and look for Operators. The Operators branch has several mathematical operators and this one right here that looks like double equals is the equal to node, and what you're really asking is x equal to y, and x and y can be anything, they don't have to be numbers, they can be text, they can be anything at all.
So, I'm gonna take this list of parameter values here and feed that into x, and then feed the signs string here into y, and when I look at the list that's generated, many of the items will say false, and then some down here at the bottom say true. So now we've got the question answered for all 93 items. Now what we need to do is find a way to take that apart into two separate lists. We don't want one list with all the values, we just want, we want to separate it out into two.
And there's a list Filter by Boolean Mask node that will do that. If you just start typing in bool here, it will give you all of the nodes in the library that contain the letters bool, and bool just means yes or no, or on or off, and here's Filter by Boolean Mask, so let's put that one in, and what you do is you grab your original list of elements. So I'm gonna go back over here and find my original list of elements right here, and I'm gonna feed that into the list parameters, so it's taking the entire list.
Then, over here, the question that I asked, is this equal to that, I'm gonna feed that into the Mask port. And so now what that will do is it will generate two lists, list zero will contain the information that answers true, and list one, the answers false. And what I've done is I've created a couple of watch nodes over here, just so that we can look at that a little bit more conveniently. So, these are the items we don't care about, and these are the ones we do. So, coming out of the in list, we've got now all of the signage elements, and if we scroll through the list, you can see that it's 30 elements.
Now keep in mind that Dynamo is a zero-based counting system so the first item is zero, the last item is 29 for a total of 30. Now, I can verify that right here with this List.Count. I went ahead and just placed that node in. I figured that was pretty obvious what it was doing and it's telling us that we've got 30. Now why do I want the count of 30? Because if I come over here in the library under Core, and then under List, I wanna create a sequence of numbers and we can do that here with this sequence node, and I'll bring that in.
If we look at the ports, the default list it starts at zero, it has 10 members, and it steps by one. So we get a list from zero to nine. What I wanna do is take the count here, and change that to the amount. So now I've got a list that contains 30 items starting at zero and ending at 29. Maybe you don't want to start at zero. I'm gonna be using this list to generate the actual type marks, so ultimately I want the first type mark to be as-001, and the next one as-002, and so on down to 00, or 030, so I've got a number node right here and I'm gonna change the start number from zero to one and now if we look at the list it gets generated, it still starts at item zero, okay, but item zero is now one, and the final item, item 29, is 30.
So we've got our list of 30 sequential numbers but I want it to be as 001, so what I need to do next is take this list of numbers, convert it to text, and then once it's text, I can pad the length of each of the values to three characters long. So to convert it to text, I'll go to the String branch of the library, so I'll go to Strings and I'll choose this String from Object node right here that will convert this list of numbers into a list of strings.
Now they look exactly the same, it's just that now Dynamo thinks of them as text instead of numbers. Then I need a pad left, so from the left side it will pad the length of this and it will be padded to however many characters I ask for so here's my list of strings, my new width is gonna be three characters wide, right there, and I want to pad it with the number zero. Now what's interesting here is I've got a string node and if I type in the number zero, it will immediately convert that number zero to a string of zero so now I can just pad that in here, and then when we look at it, I've got 001 all the way down to 030.
So I'm making some good progress, but remember I want to add the letters as in front of that so right here I've got another string node as-, and that's my prefix, and now I need to put those two together. Now I showed you one of the operators a moment ago, and I just want to reiterate that operators are not limited to numbers. So interestingly enough you can take an addition operator here, plus sign, and use it for concatenation. so I just take string a, and add it to string b, or x and y in this case, so I'll take as, that's what I want first, and feed that into x and then all my list of strings feed that into y and now there's my complete list values.
So now I've got all of those values, and the last step is to just feed those into the type marks, my Revit families. Now in the previous video where we looked at Dynamo, we did the Element Set Parameter by Name so we've already talked about this node before. All I need to do is I'm feeding the mark value this time, so that's my parameter name, this are the list of values and now I just need to go back to my original filtered list, which is over here, the in-list, remember? That's the 30 items that matched the criteria I was looking for, and I'll grab that output right there and watch over here in the background in Revit in the schedule, as I plug this into the element port right here.
Just like that, it will go in input all of those values directly into all of those Revit families. Now, it probably took me longer to explain it than it would've taken me to type in 30 values manually in the schedule. What if it was 3,000 values? So, if you're working on a very large package, taking the time to set up a graph like this can really be a huge time saver. Not only that, it's going to be very consistent because Dynamo won't accidentally repeat a number or won't accidentally miss a number, so you know that it's gonna be very consistent and you know that it's gonna get done quickly and efficiently.
So, it's a very scalable process and it's one of the things that Dynamo excels at.
- Creating model text
- Lighting 3D signs
- Making 3D signs scalable
- Modeling text along a curve
- Using Dynamo to process signage text
- Using decals
- Creating logos, smooth text, and outlines
- Configuring signage families
- Creating a signage package