AU Class
AU Class
class - AU

Using Dynamo for MEP Analytics

Share this class

Description

Dynamo is great for inputting information, linking parameters together, and performing calculations. However, Dynamo can also be a great tool for tracking the information and components in intelligent models. For example, with large projects, there can be hundreds of spaces with thousands of components. Revit software can track this information in schedules, but only to a certain extent. With Dynamo, you can track the information and ensure that it’s correct. You can also write the data to Microsoft Excel or use custom packages to visualize the data in various ways. You can use Dynamo to extract information from architectural models, or check for model conditions when beginning a design. Then, you can track information in the MEP model as the design progresses. You can simply visualize this data, or you can compare it to other information for quality assurance. With Dynamo, all the information in a model is available to you.

Key Learnings

  • Learn how to use Dynamo to check for information and conditions in Revit models
  • Learn how to extract data and write it to Excel to compare information
  • Learn how to extract information from a Revit model and visualize the data
  • Learn how to create graphs and charts in Dynamo to visualize and better understand the data

Speaker

  • Avatar for Jason Boehning
    Jason Boehning
    Jason is passionate about helping people and organizations in the AECO industry. As a trusted consultant, he has helped organizations implement digital technologies to improve processes and deliver exceptional results. He has made a career of helping building professionals use digital tools to increase productivity for sustainable design and construction. Jason speaks at events and conferences all around the world. He is a repeat, top-rated speaker at both BILT North America and Autodesk University. Jason is a member of the Autodesk Expert Elite program and is an Autodesk Certified Professional for Revit MEP Mechanical, Revit MEP Electrical, Revit Architecture, and Revit Structure. He also served as an Autodesk Revit Mentor All-Star.
Video Player is loading.
Current Time 0:00
Duration 1:22:35
Loaded: 0.20%
Stream Type LIVE
Remaining Time 1:22:35
 
1x
  • Chapters
  • descriptions off, selected
  • en (Main), selected
Transcript

JASON BOEHNING: All right, you guys ready to get going? Everybody hear me all right? All right, good afternoon. Thank you guys for being here.

Welcome to Using Dynamo for MEP Analytics. So man, I can't believe it's already Thursday afternoon. This week is flying. Is anybody, is this your first day at U?

AUDIENCE: First day U.

JASON BOEHNING: First day U? OK, we get a few. Awesome. I hope you guys are having a good week and enjoying it. So hopefully we can have a little fun this afternoon and wrap this thing up and go hang out tonight.

But for those of you that I haven't had a chance to meet, my name is Jason Boehning. I'm now a BIM consultant for Read Thomas. And so that's a fairly new development in my career.

And let me see if we can get this thing going here. So here's the obligatory about me. But I really just want to put my contact info up there. And so follow me on Twitter, connect with me on LinkedIn, and let's keep this conversation going. And so I think that there's a lot of value in this conference. But then there's a lot of value in the conversations afterwards on social media and all the stuff that we keep going on, and so.

Anyways, in terms of introductions, just continuing that. So I have three lab assistants here. And so we have John Pierson. Carl Storms, and Marcello Sgambelluri there in the back. And so there are lab assistants here. If you get stuck along the way, raise your hand, they'll come by and help you out.

But they're also good friends of mine. And I'll share a quick story. So we met around 2012, 2013, and just coming to events like this. And so we were trying to learn Dynamo, trying to figure this thing out. Really didn't have any idea what we were doing. And we just start bouncing stuff off of each other. And just digging into it.

And so I say that because there's value in the information that you learn at these conferences, but there's also tremendous value in the connections that you make. And it's a connection, and then it turns into a friendship, and then the next thing you know, you're just, hey, Marcello, how do you do this. Hey, John, can you help me with this?

And then, so anyways, if you're here and you're like, man, I hadn't really met a lot of people but I've attended a lot of classes, take some time and meet some people and get to know someone. And connect with us on Twitter, and we'll just continue this conversation. So that's what this community is all about.

I love being in the AEC industry at this time. And because, as you guys know, we have some work to do to push this industry forward and to make it better. And so it's awesome to be a part of that.

So as far as today, what we're doing is we're going to use Dynamo to see what we can pull out of Revit. That's big picture what we're trying to do. And so as you guys know, Revit is a large database of information. And sometimes it's hard to get that information out.

And not only get it out, but put it in some type of form that we can understand and make sense of. So that's where we're going today. As far as a general overview, we're going to talk a little bit about analytics. And then I have three specific exercises for us.

We're going to be extracting space-type information. And then we're going to be tracking the loadable family types and instances that are placed in the model. And then we'll wrap up by looking at how we can report the number of duct types used.

And so one thing that I like to say when teaching a Dynamo class is don't focus on the specific examples. So you may be thinking, oh, I have no need for this. But focus on the methods that we use in our graphs and what we do in Dynamo to arrive at our outcome, because those methods that we use can be used for extracting and reporting all kinds of information.

And so I say that because don't get caught up on the specific example. Just focus on those methods that we use.

But with that said, if you're like, wow, this is not what I was expecting, feel free to go to another class. So I know that your time's valuable. And so if this is totally not what you're expecting, you can go find another class. Not going to hurt my feelings.

So let's dig into it. So what are analytics? Do you have to be a genius? Do you have to be a data scientist to be able to understand it and dig into it? No, no.

Sorry, quick side note. So I think Carl and John have both-- we've all used this GIF in our presentation in some form or fashion. But I think they stole it from me, though. They stole that.

So analytics is simply the systematic computational analysis of data or statistics. So to boil it down, it's keeping track of information. And so for those of you that work in Revit on a regular basis, you know that it's important to keep track of the information that we're putting in those models.

As we need to make our models more and more detailed, and they're getting bigger and bigger and compact of that data rich, information, we need to keep track of what we're putting in there. It's extremely important. So that's the direction we're heading.

So like I said, Rabbit Revit is a database of information. But sometimes it can just be a cluster of stuff. And so what we want to do is see what we can pull out and put in some nice charts and graphs to get in a human readable format, if you will. And so that's what we're going to be doing today. So we're going to dig into Dynamo and take a look at.

But so real quick, let me pause. I forgot to ask-- I'm going to ask some questions for you guys, and just by a show of hands-- how many of you would say I use Dynamo every day or even every week at work. A few of you. OK.

So let's go to the other end of the spectrum. How many of you are like, I have no idea what Dynamo is. Or I've opened it a few times, but I really don't have too much information. That's OK. OK, cool.

And then who says, I'm in the middle. I've dabbled with it, I've created a few scripts. OK, good. So we've got a nice mix in this class. And so I think that's good.

We'll cover some basics along the way for those of you that may not be too familiar. But we'll get up to speed and take a look at how we can use it for analytics.

But I want to give you some real-life examples of analytics, just to help us keep putting this in perspective. So I'm sure all of you have some type of mobile phone. We all have a cell phone, a cell phone plan.

And so you can log into your carrier, their website, and keep track of the data that you use. Because if you're limited by data, you've got to keep track of that.

Or you can log in and maybe access some type of chart, like this, where you can see which are your users are using the most data. Or who's sending the most text messages. That's an example of analytics that we use on a week-to-week, month-to-month basis.

What about our electricity bills? This is from my electricity provider from last year, tracking my electricity consumption to the average temperature in Houston, Texas.

So I can look at that chart and quickly see if there's a month that's out of whack, if my AC is broken or something and it's using more electricity. I can look at that quickly and tell if something's going on. But at this point, I know what to expect. I know what to look for.

Last one here. Anybody go to the ATM and you get to do something like this? Or maybe you're in the casino last night and hit a jackpot or something. We're in Vegas.

Not me. That's not that's not what I look. So I've got to keep track of my budget. I've got to keep track of where my money is going.

And so, once again, just another example of everyday analytics at a very simple form. And so that's where we're going today is some analytics from Revit just on a simple form that can make big changes in information. that we can use to make big decisions and keep track of what's going on.

Let's dig into it. So this is a lab obviously. So let's dig in to Revit and to Dynamo. And so you should have Revit open.

And so open up the MEP_Model.rvt. And so there's the Data Sets folder on your desktop. And the class ID is BES 320225. BES 320225.

So if you can navigate to that. And then you'll see, it also has the class name, Using Dynamo for MEP Analytics. And then open up MEP_Model.rvt.

AUDIENCE: Sorry. What was the number again?

JASON BOEHNING: It is BES 320225. So I think you've go to scroll down to the middle there. But this is the most difficult part, finding the corrective exercise files.

Let me read it one more time. So there's a Data Sets folder on the desktop, BES 320225. If you need help, raise your hand. A lab assistant can come by and help you.

So I'm going to jump over to Revit. So this is what the model looks like. So just a quick note on my data sets, I keep them very small, compact, so that we can run them. And it's not a lot of processing time. So they'll be short and simple.

But once you open up Revit and you get this model open, let's open up Dynamo. So if you go to the Manage ribbon, you can click Dynamo. And we'll get that open up.

And then in Dynamo, click Open. And we're going to start with the file called SpaceTypes_begin. SpaceTypes_begin. And that's just a blank file here.

Another note-- if you have the AU app, you can access the handout. And so I have step-by-step instructions on there and the notes that we're using. Obviously, we're going to follow along right here. But if you need to pull that up, you're more than welcome to do that too. That will help.

Anybody not have it open? We got a couple folks over here. I'm going to go ahead and dig into this. And we'll get you guys up to speed here.

So what we're going to do here, you guys keep Dynamo open. I'm going to switch over to Revit real quick. So right here on the Manage ribbon, flag span MEP settings and go to Building Space Type settings.

You can see, I have all the building type information and then all the space type information right here. And so I'm a huge proponent of using spaces. And so because if we can get our space information correct, and we can get all that populated, then we can use Dynamo to start to automate some MEP design. And I've taught some classes here before about that. You can look it up at AU online.

So to get our space information populated, we can start with space types and make sure all that's correct. But how many of you have ever gone in this dialog, and then you sit here like this and you're just going to each one and you're checking, looking at each line. Anybody? Anybody done that before?

Yeah, right? It can be a painful task. So what we're going to do is we're just going to take all that and put it into Excel. That way, we can just view it all right there. And because we all use Excel all the time.

Especially as MEP folks, we're constantly in Excel. So let's utilize that. So that's what we're going to do. We're going to take this information and write it to Excel.

So the first thing we need to do is we need to select all the space types. So let's start by doing that.

So here in Dynamo, over here on the left, there's what's called the Node Library. That's where we can access all of our nodes, for those of you that may not be as familiar. So let's expand Revit. And then expand Selection.

And there's a few ways we can select elements. We can select by family type. We can select by category. But we're going to do what's called selecting by element types. So element types is a way to select system families, but then a lot of background information that we're not normally used to working with in Revit, or interfacing with maybe.

So let's place this element types node. And then all elements of type. And so when you click a listing, it'll place it here in the canvas, from the Node Library to the canvas. And then if you just type H, it'll scroll down here to H. And we want HVAC load space type.

So as you can see here, there's the building types, and then here's the space types. And so we're going to select Space Types. And then we'll connect those up.

And down here in the left, you can see that we're running automatically. That's the default. And so when I hover over this all elements of type node, I can see that there are 125 items. And when I click this pin, it will lock this little fly out here.

And we can see all of the space types in the model. It's pretty clear. That all makes sense? You understand 454126? No, we don't know what that is.

So what we want to do is we want to use a couple of nodes here to start to break this down into some readable information that we're used to. And so we need the element.name and element.parameters nodes so we can start to dig into this.

So back in the Node Library, let's expand. So under Revit, we're going to expand Elements. And just in case I went too fast, you can click one of those subcategories to expand it or collapse it.

So under Elements, we're going to expand Element. And then if we scroll down, you'll see a name and parameters node. So let's click each of those. And we'll place the element.name and element.parameters node. And then we'll simply click the output and the input. And we'll get those connected up.

Now when I hover over, you can see all the stuff we just saw in Revit-- active storage, atrium, audience on, and so forth. And then when I hover over the element.parameters node, you can start to see some of that information.

But let me point something out to you. So when you work in Dynamo, you're typically going to be working with parameter names or parameter values. And then sometimes you'll see something like this, where you'll see the name and the value couple together in one item.

So that's good you can see that. But if we actually want to do something with it, we need to decouple that information. So that's what we're doing next.

Do you guys see that? You can see how you got parameter name and value in the same item there. Does that make sense? I'm assuming by being quiet you've got it.

So now we're going to start to dig into the parameters a little bit. And so back here in the Node Library, let's collapse Element. And then let's come down and expand Parameter.

And we're going to place three nodes here. So scroll toward the bottom there. And we're going to do name, value. And let me get these organized as we're placing them here. So name, value, and then storage type. I'll try to zoom in here so you can see.

So now we're going to connect this element.parameters to each of these nodes. And we're going to get a warning. That's OK.

So basically what we're doing here with the name and value is we're decoupling that information. So now you can see here, I have air changes per hour, area per person. So I basically extracted the parameter name. And then here is where I have my values. Now there's a warning there because, as you can see in this list, there's some null values.

And so it's looking for an actual object here. And so you can see that there's that warning. And so we can start to make a little sense of this with the storage type node here. And you can see that I have some that are double, some are element ID, some are string.

And when I expand the name, we can start to make a little bit more sense of this. You can see that things like air changes per hour and area per person are of the double storage type. Whereas things like category and design option are of the element ID type.

And some of this is a little bit beyond the scope of this class. We're not going to go too much into detail on that. But for the sake of this class, what we're going to do is we're going to filter out those double values. And so the ones that we can actually put some type of value in, like air changes per hour or something.

So what we're going to do next is filter out just that information. So I'm going to unpin those. And what we're going to do here is, first off, we need to-- so a good way to filter stuff is by a Boolean mask. And we'll get to that in just in a second.

But to be able to do that, you have to have some type of Boolean values to work with. And so what we're going to do is we're going to ask it if it contains that double parameter, if that storage type contains that double type.

So now what we're going to do is place the list.contains node. So if you right-click, this another way to place a node. You can right-click and there's a search bar. And so if you just type contains, that's that first node that pops up. And you can click it and we'll place it here in the canvas.

And then the next thing we're going to do is place a code block by double-clicking the canvas. And we're going to enter in double. But we need to do that inside double quotes.

So type quotation mark, "Double," with a capital D. And then we can click outside. And now we have a string value of double. And then we'll connect it up to list.contains.

And when I hover over this, you can see it says true. So now we need to dig in a little bit more. Let's see if we can walk through this. And so right now, let me back up and expand this storage type node here.

So you can see that there are 2,375 items in this overall list. That's a lot of stuff. And I'm saying, does that list contain double. Well, of course, it does. There's 2,000 options there.

But I'm not concerned about if the entire list contains it. I need to know if each individual parameter is of the double type. So now we need to start adjusting what's called the lacing, and even look at list at level.

So I'm going to try to walk you through my thought process because sometimes in Dynamo-- let me back up. Do you ever go to a class and they're just like, well, just try this and try this. And you're like, wait, but give me like a step-by-step way to how to get there.

So that's what I going to try to do. There's a lot of things that are a little bit of a trial and error. But let me try to walk you through the thought process here of trying to check every single item in that list.

So the first thing is I usually change the lacing. So I'm going to change the lacing to cross product. First, everybody understand what lacing is? Everybody have a good idea? Raise your hand.

Who doesn't know what lacing is? A few people. Who's just not raising your hand? You're just like, eh.

How are we doing on time? Can we do a little interaction here? Let's talk about lacing. Can I get five people over here. Just come on up.

How about one, two, three, four, five. You all come over here. And then one, two, three, you all come right here. Let's do a little interaction here. We'll look at what lacing is.

Stand up in a line right here, face each other. Everybody can see, right? So the lacing options are auto, which we don't really know what Dynamo is going to do. So auto, you just got to trust Dynamo.

Or there's shortest, longest, and cross product. So those are really what we need to focus on. So shortest, here's what it's going to do. So it's going to take-- we have two lists here. Just let me set this up just in case you don't understand.

We have one list with five items. We have another list with three items. So if I have something where I'm looking at two lists and I use the shortest lacing, what's going to happen is this gentleman is going to give this gentleman a high five. Go ahead, go ahead.

[HANDS SLAPPING]

You gentlemen are going to give each other a high five.

[HANDS SLAPPING]

And you guys are going to give each other a high five. And you guys are going to be left out.

[LAUGHING]

That's what shortest is. If we go with longest, let's do it again. High five, high five.

[HANDS SLAPPING]

High five.

[HANDS SLAPPING]

High five. And then you're going to give them a high five as well.

[HANDS SLAPPING]

Now it's going to be fun. Cross product, he's going to high five all of them. You got to run, you got to run. We've got to speed this up.

And then you're going to high five all of them. And then you're going to high five all of them. You all got it? That's lacing. Give them a round of applause.

[APPLAUSE]

So in this case, we're thinking, OK, we need to use cross-product lacing because that should get us everything we need. So let's try that.

So if we changed it to cross product, now we have a bunch of true values. But look here, there is 125 items. But over here, there's 2,375.

So I'm still like, hang on, this isn't right. And so let me walk you through the thought process again. Let's see if we can dig into this.

So if I say, let's look at lists again. Let's say each row here is a list. I'm looking to see, does each row contain, let's just say, a male, a man.

And so what I'm doing. I'm saying does it contain double. And so what it's doing right now is it's actually taking the entire row and saying, is there a male on this row. Yes. Is there a male in this row? Yes, yes.

That's why I only have 125 because it's only checking up one level. So I need to dig down one level to where I can check each individual item in the list. Does that make sense?

So now you guys completely understand lacing and lists at level. You all got it. So what we're going to do is we're going to change the list at level. So we can do that by clicking this little arrow here and clicking Use Levels.

So now we're at L2, which is basically the default, because nothing changed. And so what we're going to do is we're going to change that to L1. And now you can see that these numbers start to match. 2,375, 2,375.

But the problem here is that there are 18 items in this list. And then I go to another nested list, 18 items, 18 items. Whereas here, this is just all one list.

So my next thought is, let me maintain the list structure here. So I select this option, Keep List Structure. Now I'm where I need to be. 18 items in a nested list, 18 items in a nested list. Now I have something I can work with. Everybody there? Awesome.

For those of you that are still a little new, hopefully that makes a little more sense. Do you have a question?

AUDIENCE: [INAUDIBLE] code block?

JASON BOEHNING: The code block? Let's see.

AUDIENCE: It's underneath your [INAUDIBLE].

JASON BOEHNING: OK, I'm sorry. I was like, wait, which-- OK, sorry. OK, cool.

So we broke down lacing. We broke down list at level. Looked at keep list structure. Now we got to where we want to be.

One more thing I'll mention. You may be thinking, oh, we could actually do it like this. So sometimes you may take a little bit different approach and you may be able to arrive at the same thing. And that's OK. If you can get to the same end output, you're in good shape.

Now let's pick up the pace here and we'll start to roll through this. So now we've got list.contains. Now we have Boolean values that we can use to filter these out.

So back to that filter by Boolean mask, so right-click and type filter by. And we'll select Filter by Bool Mask. And we need two of these.

So when this node is highlighted in blue, I can simply do a Control-C and Control-V, and I can place two of these. And what I'm going to do is I'm going to take this list.contains node with all those Boolean values, and that's going to be my mask. That's going to control what comes in and out.

In other words, what's true and what's false. If it's true, it's going into the in output. If it's false. It's going into the out output.

And so what I want to filter is all my parameter names and all those parameter values. So I'm going to connect those to those lists inputs. And now I should have what I need here, which is just those parameters that are of the double storage type.

So now we really have the data that we need. Now we just need to format it in a way that we can shoot it to Excel. And so what we're going to do now is we're just basically going to do some list manipulation just to get it in an output that gets us to Excel.

So we'll go through it. And then I'll explain some of it to help you make a little more sense of it.

So right now we just have a bunch of lists here. And so the first thing we want to do is we want to pare down this list. And the reason is because I have several nested lists that just contain the parameter names.

But I don't need to export all of these to Excel. All I need is basically one of those nested lists.

So we're going to use the get item at index node. So right-click and type get item. And we're going to place get item at index. And then I'll double-click. And we'll place it on the code block. And let's type 0.

And then you can place a semicolon. Or if you click out, it'll place it for you. And then remember, we want those true values. And then we want at item 0. And you can really do any of them.

But now I have just the parameter names. And then down here, I have all the parameter values. Now you could probably do something and come up with a long way to just write multiple iterations to Excel. But we're going to combine everything together and send it to Excel all at once.

So we're going to use a bunch of the add item to front nodes. So if you right-click and type add item, you can see there's two nodes here-- add item to end and add item to front.

So we'll click Add Item to Front. And then we'll do a Control-C. And then we'll paste two more of those onto the canvas here.

And then if you can try to arrange them like maybe a triangle, if you will, facing to the right. Because basically what we want to do is we want to add all those parameter names to all of our parameter values.

But the first thing we want to do is we want to add the text space types to all those space types because it makes more sense, put a title in Excel. So let's double-click here above that get item at index node and type "space typed" inside double quotation marks here.

And so this is going to be the item that we're adding. Let me drag this up here. That's going to be my item. And then let me zoom out. Let me handle this carefully here to make sure that we can all see it.

So back over here to the element.name node back at the beginning, you can see active storage, active storage hospital. That's what we need to connect this all the way over here to that list input. So I apologize, I know it's probably small up here on the screen. I'm going to hold it up here for a minute so you can see.

So basically all we're doing is adding that in front just so that we can make more sense of it when we get to Excel. That's all we're doing there.

Next, let's go ahead and connect these up. And then I'll explain what we did here. So let's take our parameter names here and add that to the item input of this one, the list.add item to front node here at the bottom.

And then I want my in values, which is all those parameter values here, and add that to the list input. And then we're going to need to modify the list at level here. Let me keep this open so you can see.

So we're going to enable use levels. And then the first one needs to be at L2. And the second one needs to be at L3. Everybody doing good so far? Everybody tracking with me?

Now we're going to connect these in, all those space types. I'm going to add them to all the parameter names and parameter values. And I also need to use levels.

And the first one's going to be at L1. And the second one's going to be at L2. So let me zoom in here and you can see a little bit.

So as you're doing that, let me explain what we're doing. So when I export information to Excel, each nested list is going to populate to a row in Excel.

So what I want here is I want all my space types and then all the parameters, I want that written to Excel. And so that's why we're working to input it.

And it's really hard to explain. I'll try to zoom in here in a minute. And then this is something you're going to need to dig into at home a little bit afterwards. And it'll make a little bit more sense. But I'll do my best to explain it here.

So here I have space types, and then all those parameter names. That's what's going to go in that top row in Excel. And then here in the second nested list, I have active storage, which is the first space type. And then I have all the values for it. And that's going to go on the second row.

And in the same way. So I have the space type and then all of its parameter. Space type, all the parameters.

And so that's why we had to do some of this manipulation here with our list at level to get it into this format. Because at first, you'd end up with something like all the space types, and then all the parameter values, something like that.

And so when you start to input this in, you've got to know what format you want to get it in. And then you can start to just manipulate these until it gets into the format you want.

The next thing we're going to do is we're going to export this information to Excel. So let's scroll back up here. And we'll collapse Revit. And then expand Import/Export, Data. And then Export Excel.

So we have all the data. Now we just need to get some of this information on which file we want to export. So if you right-click and type file path, we'll place this file path node. And when you click Browse, hopefully it'll open up the Data Sets folder for you. And you can select space types, which is just a blank Excel file that I provided in the exercise files.

So select that and click Open. And then let's place another code block. And we're going to put two lines in this code block.

So what we need to do is type in a quotation mark. And then type sheet 1 with no space. And then add a semicolon, and press Enter. And then type 0, and put another semicolon.

Now real quick. Before we connect these up, I want to point out something. Right now we're still running an automatic mode. So I always like to change this to manual. When I change that to manual, I now have a Run button. And I can choose when it's going to run.

And the reason I like to do that when exporting to Excel is because, sometimes you may connect something up and then it starts exporting and you're like, wait, I wasn't fully ready yet. And you may enter into some infinite loop. And you're going to have to shut it all down.

So let's connect the file path node to file path. And then sheet name is our sheet 1 here. And the start row, start column, we're going to use the 0. And then data is all of our data right here.

Now we can double-check it, make sure we have everything we need. The overwrite input here, we can put a Boolean node here and choose whether or not we want to overwrite data. Right now, it's a blank file. We're not going to worry about it.

So once you have all this connected up, click Run. And Excel should pop up at the bottom. And when we open that up, you should see all of the space types, all those parameter names, and all those parameter values.

Everybody get it? Raise your hand if you got it. Awesome. Is that something you guys could use? No? Anybody?

All right.

AUDIENCE: Inspiring.

JASON BOEHNING: Inspiring. Awesome. So now, let me see if I can just backtrack a little bit. And we're adjusting the list at level so that we could get all of our space types in front of each value.

And that's because, once again, each of these was a nested list in Dynamo. And so now you can see how it output into Excel. Cool.

So you guys now know how to export data to Excel, which is something we do all the time, us MEP folks. So we have a lot of data that we're working with. We want to see it all.

And so another thing that you could do is modify this, and then write it back to Revit. But that's another class. I've covered that before a little bit. And so we're not going to go into that today.

Let's go ahead and close down. So there's a little X here next to space type begin. You can just close that down and click No. We don't want to save it.

So just a quick FYI while you're doing that. I do have the final versions in there for you. And so you're going to get all this. And so there's a final version in there for you.

And so I should have mention that. If you do get stuck along the way, you can just open those up and take a look. So all right, our next exercise-- let me get this up. So same Revit model. We're going to be using the same Revit model the whole time. It's simple, it processes quick.

And then the Dynamo file is PlacedFamilies_begin.

AUDIENCE: Couple questions on how--

JASON BOEHNING: Sorry.

AUDIENCE: How we can extract [INAUDIBLE] making the area [INAUDIBLE] how we can put structures behind the string.

JASON BOEHNING: I'm sorry, can you repeat that one more time?

AUDIENCE: Saying if you a [INAUDIBLE], so on top of the string. So how should we put [INAUDIBLE]

JASON BOEHNING: So I think his question was, if you have a string, how do you tack on like the units on it. There are a few different ways we could do it.

I could show you afterwards. We'll chat about it. So I'll just dig into it.

PlaceFamilies_begin. So I'm going to click that category in the Node Library to collapse it. Now, so what we're doing here is we're going to look at tracking the families that are placed in our model. And we're going to look at a couple of things here.

We're going to look at the number of family types that are being used per category. And then we're going to look at the number of instances per type. And I'll set this up a little bit.

So anybody working in a large team, and all of a sudden, let's say air terminals, for example, or lighting fixtures. And you have these set types that you want to use. And then all of a sudden, all this random stuff starts to show up.

And you're like, where did that come from. Who went and grabbed that family and threw it in the model? Anybody? Nobody's ever had that before, So what we're going to do is create a script that will create a nice little bar chart for us.

And we can just see quick numbers. And so once again, you start to see a spike somewhere. And then that clues you in to, OK, hey, I need to investigate here. So that's where we're going with this one.

So got my handout here. So I can keep track of everything. So once again, we're going to use element types.

So expand Revit. Expand Element. I'm sorry. Expand Revit, expand Selection. And click Element Types. And then All Elements of Type. Now when we expand Element Types, we're looking for family instance. And I'll show you a couple of things here.

So family instance and family symbol are two things that you see here. So I'm going to select Family Instance and connect that up. And so these are all the instances that are actually placed in the model. And you don't have to do this.

Whereas family symbol are all the family types that are loaded in the project. So family instance are instances placed. Family symbols are just family types loaded in the project. Does that make sense?

So just a quick background. This is actually the second year in a row that I've done this class. And I've modified all the examples. And so last year we took a look at an example using family symbol. And so if you're curious about that, just look up the class from last year.

So right now, we, have family instance. So we can see the ones that are actually placed in the model. And now what we want to do is we want to get the category, and we want to start to group it based on the category.

And so we're going to use a node called element.getcategory. So collapse Selection, and then expand Elements. And once again, scroll down to Elements.

And then if you scroll down toward the bottom, there's this get category node. So let's place that over here. And we'll connect this up. And then you can see that we have all these categories here.

But now we need a category.name node. So let's do that. And then I'll explain it real quick. So we'll collapse Element, we'll expand Category, and then we'll select Name.

Sorry, moving a little fast here. So if you look at the outputs, you're like, well, that's the exact same thing. Why do we need that extra node.

And so if you look here, the output here is a category, whereas the output here is a string. And so it's very important with the data type that you're working with. And so right now we want to use a string because we want to group and sort this information. And so therefore we need a string.

And so there are things like category.name, familytype.name, element.name. That's just going to give you a nice little string with that information.

Next, we're going to use a couple of things here. We're going to use the group by key and then the sort by key node. So if you right-click and type group by, there's a group by key. And then let's go ahead and place the sort by key.

Now the key is going to be simply the category name here. That's going to be our keys. And then we need to go back to all elements of type because we want to get those actual elements. That's what we want to work with here.

Let me zoom in here just to make sure you guys can see. So all elements of type, that's all those family instances that are placed. And we're plugging that into the group by key. And we're grouping it by category.

So basically you have all these elements. And we want to group them by category. So we can start to put it in buckets to make sense. And then we're going to sort it after that.

And so we can actually just do a one to one here. All those groups, it's going to be our list here. And then we'll use those same keys. And then we'll start to sort it based on category.

So basically what we're doing here is we're sorting about air terminal, duct fittings, lighting fixtures. So alphabetical order here to get it to match what we see in the project browser.

Now the next thing we're going to do here is we want to start to group it then by family type. So let me move this over here. So I'll tell you what, because this is a familytype.name.

So back in the Node Library, let's expand Family Type. And then once again, here's that familytype.name. And our sorted list is going to go in here into family type.

And then I need to place another group by key node up here. So basically what we're doing is we grouped it and sorted by category. Now we're going to group by family type. Try not to cross any wires here.

And it turns yellow because there's a warning here. So basically what we need to do is we need to use the list at level to get it into the correct format that we want. So here I have 251 items.

So basically we're just not lining up. And Dynamo really doesn't know what to do. So what we're going to do is we're going to use the list at level. And we're going to set them both at level 2 so that everything will match up and it can group it accordingly.

So basically what it's doing is it's just assigning it a one-to-one key. And so for example, everybody here at AU, you registered for a class, you basically get a key to come in here. And so that's how everybody is grouped. Everybody's grouped in different classrooms based on a key, if you will.

The same thing we're doing here. We're assigning each element a key. At first, we did it with a category. And said, hey, 24 by 24, you're an air terminal. And two by four, you're a light fixture. And we're sorting it and grouping it by category. And then we're doing it here by family type.

Now remember, we're doing two things here. We're going to look at the number of family types per category. And then we're going to look at the number of instances per type. So we're going to do two things here. And so right now, we're going to go toward the bottom, if you will.

And so underneath that, let's right-click and type count. And then a few nodes down, you'll see count. And make sure that it's list.count.

And we're going to take that group's output and put it in here to the list input. And then once again, you can see that we just have one value there. But we're actually looking for more here. We're looking for a value for each category.

So we need to use levels again. And this one is at L3. So basically we need that top level of list there, which is our categories. And we need to get the number of types that are being used.

And so these are the ones that are actually being used in the model. It's not just the ones that are loaded, but the ones that are actually being used.

And so the next thing we're going to do is we're going to use the list.chop node. Type chop, and we'll place that node. And then put a code block. And we'll just put a number 1 there.

And what we're doing here is what I had to learn by trial and error, is that where we're going is we're going to use a node in the Node Model Charts package. And it's going to get us a nice little chart.

And I just had to learn this by trial and error. But that node, it needs the numbers to be nested in a list. So that's why we had to use list.chop here to go from basically a single list here to all of our numbers in a nested list.

And so sometimes when you're dealing with custom packages, there is some of that, because however the user developed it, they're looking for a certain thing. And so that's how I arrived at that.

So now let's come back here and let's get all of those categories. And so to do that, let's place a watch node just to help us here. So if I type watch there and I come back, so the sort by key right before family type, I'm going to take the sorted keys and put it over here in the watch node just to help bridge the gap here.

Let me zoom out just so you can see here. So we have group by key, sort by key, to watch node. Everybody got that? Cool. All right, we'll keep moving on then.

So real quick just to show you where we're going. If you scroll all the way down in the Node Library, expand Node Model Charts. And I'm jumping ahead just to show you where we're going. So under Add-Ons here, you can see these are all the packages that I have loaded. Yours may look slightly different.

Expand Node Model Charts, and then select Bar Chart. And I'm going to move this over. So as you can see, this bar chart, I need labels, values, and I need colors. And it needs to be a one-to-one relationship for everything.

Meaning, if I'm looking at four categories, I need four colors. If I have 10 categories, I need 10 colors. And so what we're going to do here is make basically a parametric equation to help us, that we can reuse the same graph on multiple models, regardless of how many categories they have.

So right-click and type count. And we'll find that list.count node again. And we can go ahead and connect these up here.

And for this one, I just need the one value. And then let's double-click and place a code block. And this is just to make it short and sweet for this exercise. And I'll show you what we're doing.

But type 1..255..#X. So basically what I'm doing is I'm creating a formula. And then I'm putting in my count, which is based on the categories.

And then right-click and type color. And the first one that pops up should be by RGB. And then for this example, let's connect it to the B, which is blue. So basically what I'm doing is I'm just trying to create a quick parametric way, if you will, to create a bunch of colors.

Now for labels, here's my values. Here are the numbers. So list.chop, that's going into values. And then back over here in the watch node, those are going to be our labels. Those are our categories. And then by RGB is obviously our colors.

Let me zoom in here and you can see. So basically what I did here, list.count, the formula, by RGB, that's just to create several different colors quickly. So if you have more time at home, this is something fun to play with, create a bunch of different colors.

Let me show you what you can do here. So connect that up to R, we get some nice pink there. They're green. Or like I said, this is just a quick way to create a bunch of colors.

Obviously, if you want to take a more serious look at this, you want your colors to make a little more sense. Anyways, here is our bar chart from Node Model Charts, which is a pretty cool little package. And so I'll point out a couple of things here.

So you can hover over and you can see all the information there. So you can see air terminals for duct fittings too. And so what this is is the number of types that are being used in each category.

So if you were to see air terminals 4, you're like, that makes sense-- supply, return, exhaust, whatever. I can work with that. If that was like air terminals 25, you're like, wait a minute, do we have 25 type. Really? Is that what we're doing now? Does that makes sense? Cool.

So this little button right here, you can drag it. And it will expand this chart. So that's pretty cool.

You can also right-click and select Export Chart as Image. So that's pretty cool too. So then you can have an image of it and just shoot it to somebody. And then they have an image of this graph of the data in your model.

Let's keep going. We've still got one more thing in this example here. And that's to get to all of our instances, number of instances of each family type that are placed. Excuse me.

So what we're going to do is we're going to come back up here. We're basically going to be working off of this list.groupbykey right after the family type. So we're still going off of that data. And we're just putting it in ways to make a little more sense to us.

So up here, let's type count again. So we need list.count. We're doing a lot of counting. And this is where it gets a little tricky in my handout. I have colored arrows in there to help keep track of this. But the group's output here, we're putting into the list.count. Hopefully those arrows help you in the handout because I was even confusing myself there trying to break it all down.

Now let's place another node, the flatten node. And we're going to put in the unique keys into that list input. So basically we're just flattening all the information. That's all we're doing. We're trying to get labels here is essentially what we're doing for our chart.

Now if you want, basically we need to duplicate what we have here. So if you can use a crossing window to select these nodes. We'll see if we can do this. It may get a little dangerous here.

And I'm going to zoom out and do Control-V. And I'm going to drag this up here. So now really what I need to do is I just need to use this list.count node here. And then my flatten node is going to this list.count.

And then let me double check and just make sure we have everything. Oops, I missed one step here. So above list.flatten and this list.count, we need to use levels. And that needs to be at L2. Everybody there?

I'll give you a couple of minutes here. I'll zoom in just so you can see. We're just basically replicating to get to the information that we need to put in the Node Model Charts. Everybody good?

So we're going to place another bar chart node. And then once again, here's all of our values. And they're nested.

And then over here in the list.flatten node, we can expand this and just make sure that that's our labels. And then our colors, obviously, goes to colors.

And once again, we can play around with what colors we want to use. You can have some fun with that. But now, let me expand this a little bit.

Now obviously we're looking at-- oops, I'm sorry-- obviously, we have this small model. And I'm just showing you so that our graphs don't get too big. But you can start to break this down by just the mechanical categories, or even more specific than that, or just electrical or just plumbing.

And so right now we're doing everything. So this may look a little bit complicated. But hopefully the point is that you can see the direction here. So that you can look at a bar chart and you can see that here's a spike here, maybe that's something I need to look at. And then you're like, oh, well, that's just my two-by-four light fixtures. So obviously there's a lot of those.

But if you have several different types, or you see a type that pops up that shouldn't be there, then that's a red flag. That's something you can start to investigate. And so that's really the whole idea with this, is that we can extract information out, put it in a format where we can quickly see where we need to go investigate.

That's what analytics is. It helps us to keep track of that information. So does that makes sense? Is that something you guys can use? See a lot of head nods. Awesome. We've having fun too? Or is the lunch starting to set in and you're just like, oh, it's time for a nap.

Well, we have 30 minutes left. Well, let's crank through another exercise here. So once again, we can close this and not make any changes.

So now we're looking at DuctTypes_begin. I'll give you a minute to get that open. Catch up here. DuctTypes_begin.

I have some information, or some nodes are already populated for you. So what we're doing here is similar to what we were doing in the last exercise. But we're getting a little bit more granular, if you will.

So whereas before we were looking at all the family types that were being used in the model. Now we're going to dig in to one specific type, or one specific category, if you will. And we're going to look at duct types.

So once again, we're getting a little detailed. And I'm just going to show you some other charts. And then another package that we can look at. So that's the point of this exercise. That's where we're going.

So I have step 1 and part of step 2 done for you here in the handout. And, oh, remind me to show Monocle-- don't let me forget-- in this exercise.

So what we're doing here is just explaining where we are. So we selected all of our ducts, or we selected all of the ducts by element types. And so I'm going to change this back to automatic. And you can see where we're at here.

So these are all the ducts that are placed in the model. And then we're going to use the nice get parameter value by name node to get the type. And then we're going to do what we did before where we're going to use that element.name node to get us a string value.

So let me go back and just collapse this so that we're all on the same page here. And we'll expand Revit, Elements, and then Element. And we'll scroll down close to the bottom and select Name. And we'll get the name here. This is the type name for each duct.

And then we're going to group and sort. Again, this is something that I do quite a bit. So we're going to group by key. And we'll go ahead and place the sort by key.

What did I do? Oh, there we go. Sorry. I think I got cross-eyed for a minute there.

So our key is going to be the type name here. And then if I zoom back over here. Let me pull this in a little bit. And so I'll take all my ducts here and put it into the list input.

So I basically want to assign a type name to every single duct. And that's how I want to group it. And I'm also going to sort it as well. And so a lot of times if you group it, you might as well just sort it, keep it all there nice and in order.

So let's step 2 in the handout. So let me go ahead and just pause here for a minute. And I want to show a package called Monocle, which actually the creator is right here in the room, Mr. John Pierson.

And this is a nice little package. It's called Monocle. Sorry. And so there's just a couple tools that are really nice. And so there is a line of fire 3000. And I actually have an updated version that they didn't get on the labs here. But those tools are actually right here across the top.

So what I can do is I can select this here. And I can say, OK, do I want to align maybe by the bottom of the node or the top of the node. And I'll just quickly align those for you. So that's pretty cool.

Another thing is the package usage doge. So we'll select that. And so one thing-- oh, wait, I'm sorry, that's not what I wanted to do. Not yet. He-he.

Custom colored grouping. That's what I meant to select. So in the handout, you'll notice that everything is grouped. And it's got a little label on it.

And so you can do that by-- so I can select nodes here. And I can right-click and select Create Group. And then it would give you a default color and default text and all that.

Well, here you can create some custom grouping. And so you can create some type of standard around your Dynamo graphs. Here's the default that John created for us, like background, input, control.

And so like here, I'll select these. And I can just say, these are background nodes. And then so it quickly does that. Gets us a nice textile there.

And so, I don't even use the default Dynamo tools. I just use this now. That's what I created this handout with to hopefully keep it nice and concise for you. So I encourage you to get that.

A minute, there's also, like I said, the package usage doge. And so if you have a custom node in there, you're like, I don't know where this came from, you can use that. It'll tell you what package that came from. And then you can annotate it as well.

So super useful. I use those quite a bit, to be honest. It's not just because John's here in the room.

Let's continue on here. So now we're at step 3 in the handout. And so we basically have all the information we need right now. Now it's just a matter of getting it in a form to get into our Node Model Charts.

So we're going to use the count node again, list.count. And so here in our sort by key node, we're going to take our sorted list and put it in the list input. And then we need to, once again, you can see that I just have a single value.

And so that should tell you immediately, well, we don't just have one type that we're dealing with. So we need to use levels. So we're at L2. Now I have a count for each type. So hopefully, like I said, I put a lot of repetition in here just to help you see those things you should look for.

We're going to use another list.count node. And we'll put it down here. And this one is going to come from our sorted keys.

And this is a number. So this is basically taking us to the number of colors. And so you could just put a bunch of color palette nodes or something like that.

But trying to keep it parametric for you so that if you were to open this up and run it on any random project, and maybe you have like 5,000 types or something and you create this massive chart, but anyways, that's what I'm doing here is trying to keep things a little parametric.

So let's place another code block. And we'll do 1..255..#X. And we'll put our count there, which gives us those number of types. And then we'll place another color.byRGB node. And whatever colors you want to use. Just connect them up. It'll create all types of random colors.

Once again, you can be more detailed in how you create your colors once you start to dig into this more. Now scroll all the way to the bottom. And we'll dig into-- why can't I see-- Node Model Charts.

Oh, I collapsed it. Node Model Charts, Charts. Gosh, sorry. I'm all over the place. Not bar chart.

This time we're going to do a pie chart. Carl was talking about donuts and pies in his class yesterday. So it's after lunch. We need some pie. There we go. That's for you, Carl.

So our labels here-- so let me back up. So this list.count, this is our values. Our labels here is coming from the sorted keys. And then color by RGB, that's our colors, obviously. And so that'll get us a nice bar chart here, showing us the number of ducts of each type that are placed in the model.

So once again, this is important because if you're a mechanical engineer or you're a mechanical contractor, you need to make sure you're using the correct types. And your designers, your detailers, are using those correct types. Because if you've got a fab shop that's set up to do mitered elbows and they're using radius elbows, that's a problem.

And some of that can jump out to you when you're looking at the model. But if you're dealing with a huge model, let's just say something like a four-story building, sometimes digging through that takes time. But if you can open up a graph, click Run, and, boom, there it is, and you see something that pops up that you don't want to, then once again you have a place to investigate. So that's the theme of what we're doing here.

So that is the pie chart in Node Model Charts. And once again, I just want to reiterate this. So what we did here, that actually gets us the data that we want. What we did here, that's just to get it in the format to put in to Node Model Charts.

So that's the pie chart from Node Model Charts. Now what I want to do is show another package called Mandrel. And so basically you're going to be using a lot of the same nodes here. We're just going to delete this stuff for Node Model Charts and then use Mandrel.

So in the handout here, step 1 is simply removing a few of the nodes. And so let's do that together. So we still need list.count here. So let's move that.

And then these right here, we'll just use a window. And we'll delete them. And so I have sort by key and I have list.count. Still at level 2. And now let's dig into Mandrel.

So I save that for the end because Mandrel is a heavy package. And it really taxes the resources. And so I would think we're doing good on time because I'm basically going to bog down the computers by using Mandrel here. That's why we saved it for the end.

So in the Node Library here, expand Archi-Lab, Mandrel. And then, let's see here, let's just start-- how do we want to do this? First off, let's expand Charts. And I'll just show you.

So Mandrel is really cool package. As you can see here, there's all kinds of things-- area chart, bar chart, donut chart. So a lot of the same stuff that Node Model Charts will do. But there's also some cool packages like grouped bar chart and a line chart and a normalized stacked bar chart. So it gets a little bit more detailed with some of these charts you can create.

And so last year, I went into some of these in a little bit more detail. This year, we're focusing a little bit more on Node Model Charts. But I still wanted to throw out some Mandrel here.

So what we're going to do here is a horizontal bar chart. So expand, once again, Archi-Lab, Mandrel, Charts, Horizontal Bar Chart. And there's chart data, data from CSV, and style. And so the data can either come from inside of Dynamo, or you can import a CSV file and use that as well.

But We're not going to do that. We already have our data. So select Chart, Data, and Style. And so that's basically the nodes that we're going to use here.

And then we need to arrange it like so. Let me show you here. So the CHART, Let's take it all the way to the right. The data node, top left. And style, bottom left. And so as you can see here, the input of the horizontal bar chart.chart is data and style. We got data and style. So everything lines up.

And so any chart that you're creating or any graph that you're creating Mandrel is going to look something like this with these chart data and style nodes. Just look at the inputs and just line them up accordingly. That's my best recommendation for you.

Now that we'll back up in the handout now. And we need to fill out some information here with this horizontal bar chart node. So we have values. We have some values right here. We have some names right here. And now we need a domain.

And so under Mandrel, there's Expand Charts. And then scroll down to Miscellaneous Nodes. And then select Domain. So once again, Archi-Lab, Mandrel, Charts, Miscellaneous Nodes. Sorry.

And then let's place a code block and just type zero. We're not going to have any less than zero. When we're setting a domain for our chart-- that's not that kind of graph. So zero is a good starting point.

In the handout, I have an integer slider there that you can use. But we can just simply type another line. And let's just type 50. Just for sake. We're speeding this up a little bit.

But if you didn't know exactly what it needed to be, you could use an integer slider. And that would help you keep that parametric. So now we have a domain here, a domain for our chart basically telling, what's our range.

So in my simple little model that'll process quick, we don't have more than 50 ducts. Or no type has more than 50 ducts. If we had a large project, could be thousands.

So list.count, these are our values. And then sorted keys is going to go to our names. Those are our duct types. And then our domain here goes to domain.

Now one of the difference I want to point out is that Mandrel will use some default colors for you, which is nice. So you don't have to create some code block with a formula to create colors. Or I don't know, maybe you like creating the colors. So maybe that's a negative. But anyways, it will do default colors for you.

And then we also need to put in an x-axis label down here. So you can double-click and we'll type "number of ducts." And we'll put that all in inside of quotation marks there. And that's going to be the x-axis label.

Now we'll connect data to data, style to style. And we just need a couple more nodes here. We need to create a report. And then we need a report window here.

So back over here in the Node Library, scroll down here. Let me help you see it. So Archi-Lab, Mandrel, Report. And then as you can see, you can create an HTML, PDF, or window. And so here we're going to do create report, and then report window.

So basically what that does is it gives you a window right here inside of Dynamo. Whereas these other ones obviously-- a PDF, that'll export a PDF or export in HTML. And so, if you wanted to create some type of web version or something like that, you could definitely do that.

Next, we're just going to connect these up. Oh gosh, I messed up here. So it's good. We're just going to process a minute. But anybody know what I did there?

AUDIENCE: Automatic.

JASON BOEHNING: Yeah, automatic. So as soon as I connected, it started cranking. I usually like to tell it when I wanted to crank. So I mean, it should all work out. But it's just now I have to wait before I can connect another node.

Here we go. So I'll just keep running automatic. Whatever. So when I connect it up, now it's going to crank again. Now I'll click Launch Window. And we have a window here inside of Dynamo.

And as you can see, our domain, zero to 50, number of ducts. And so, but different package, different type of chart. And we have, once again, just another type of way to visualize it. So maybe you like looking at a pie chart, maybe you like looking at a horizontal bar chart.

But another thing that's cool, and Carl was showing this a little bit in his class, is that you can actually select some of these items and it will adjust for you. And so I don't know if it's doing it. But anyways, like I said, sometimes Mandrel will bog down your machine.

And sometimes the charts, you can click it and it'll rearrange and different things can organized for you. So Mandrel is definitely a cool package that I would encourage you to check out.

So it's not all. I have a little bonus for you. We keep going. Although I may have bogged down your computers. But we still have 15 minutes. So I'll walk you through a couple more things here.

But what do you guys think so far? Is this something that you guys could use? Something that'd be helpful to you? Awesome.

I mean, this is some of the stuff that I've been doing, that I'm using. And so I just think it's cool to come here and share. And once again, a way that you guys can dig into your models and start to make a little more sense of what's there.

So we're going to shut this down. And so I actually have two more exercises in the handout. We don't have time to go through both of them. But I tell you what, we can open up the final versions and take a look at what's there.

And so exercise 4 is something that I'm still playing around with a little bit. And so that is the lighting example. So we have lighting began. Let's go ahead and open up the lighting final. Click Open. So I'll collapse all this.

So what we're doing here is I'm basically selecting all the spaces. We're getting the average estimated illumination. And then we're creating a heat series plot.

And so it has this default size. But we really need to expand this out here to make a little bit more sense of it. But once again, so it's a heat series plot.

So you can visually look at this and start to tell where you have more lighting density. And so once again, this isn't something that I use on a regular basis. But I'm still playing around with it. But really I just wanted to see how I could use this heat series plot node. And I thought it was pretty cool. But I thought you know illumination would be a good thing to look at.

And so, I don't know, you guys take this, run with it. Maybe you can come back with something in a couple months and say, hey, I'm doing this with it, check this out. So anyway, something that you can check out there.

So once again, the darker the color, the more average illumination that you have in a space. Or even maybe more telling-- you look at something that's zero, there's no lighting there, something that you're missing. So something that I thought was cool. Let's close that down.

The next one that I have is to be able to tell if a dimension has been overwritten. So when I go to my level 1 mechanical plan, I just threw in some dimensions here. It's bogus. You don't necessarily measure to the edge of ductwork the edge of ductwork. But anyways, I have dimensions there.

And anybody get a model and you're like, wait, these dimensions don't quite line up. Maybe somebody messed around with it. I'm not going to show you how to override dimensions because you shouldn't do that. But there is a way.

Where did it go? Dimension, Override, Final. Let's open this up. And so this is getting a little bit more advanced in that we used a Python script node.

And so I'm not a Python expert, by any means. But I took John's class last year, Hack It Til You Crack It. And just I went back home and, OK, let's see what I can do. And so sometimes you can play around with something.

And so I saw this example online. I started playing with it and trying to see what I could do with it. Anyways, let's take a look. So I'm going to run this.

And so I have this Python script here which is basically looking for overwritten dimensions. And then I'm going to count it. And I just show the number here. So I can see that there's two. So that tells me that, yes, two dimensions have been overwritten.

And then so I also added this where I overrode the color. So we can come into here, and now you can see in the view that these two dimensions have been overwritten. So now that's something that I can go look into and be like, OK, why'd you override those dimensions.

Maybe you get an architectural model and they overrode the dimensions. That's something you need to know. Especially as we get more down the line into construction, we need to know that. So anyways, once again, something that you guys can use and take a look at there.

So at this point, we just have maybe a few minutes left, just showing some other things that are here. So also when you exercise files folder, I'll show you, I have this file called Node Model Charts. Just named it right after the package. But it's basically, this is what I was using when I was figuring out how to use these nodes.

And I believe I got a lot of this from the website of the creator of this package. But just so that I could see basically the format of the data that those nodes needed. Because if I could do it at a simple form, simple numbers and letters, then that helped me in my mind to say, OK, now when I have spaces or air terminals or whatever it may be, now I know what form I need to get it in.

And so we just went through a lot. We went through a lot of stuff. And you guys have been taking classes all week. So you may be thinking, here in a few hours you be thinking, wait a minute, I have no idea how to do that. Well, here's something that you can use as a resource, as a foundation as you start to dig back into this. So you can see the format that the data needs to be in before it goes in here.

And so here's the bar chart, the pie chart, and then another heat series plot. And so just some stuff I was playing around with. So that's something that I want to give you guys so you guys can play around with.

And hopefully, like I said, in a few months or next year, you guys can come back up to me and say, hey, come check this out, check out what I'm doing. Or maybe you guys will be up here speaking. And so that's the goal.

So with that, we went through the bonus exercises. So let's wrap up. I want to just share a few things here.

So I think the conclusion that we can draw is Dynamo, it is great for analytics. It's also great for linking parameters together and calculations. But it's also great for analytics. There's some really cool things we can do. There's so much information that we can extract. And there's some really awesome packages as well.

And so I want to end by sharing a quick story. And so for those of you that have attended my class, you may have heard this before. I hadn't shared it in a year or two. But I'm from Texas. I like barbecue. We have good barbecue in Texas.

And so I've been to I think over 75 barbecue joints in the state of Texas. I live in Houston, my parents live in Amarillo. 600 miles apart.

So we crossed through Dallas or Austin or even San Antonio. And so we have a lot of time to hit up barbecue joints. So here's what I want to share with you.

I've been to several places and eaten a lot of great barbecue. They all do it very differently. They use different types of wood. They use different cuts of meat. Some smoke it for eight hours, some for 12 hours. Some use sauce, some don't. So they all do it a little bit differently.

So we have several people sitting in this room. We looked at lacing and list at level. We looked at Node Model Charts and Mandrel and all this stuff.

And so all you gotta do is find your way of using Dynamo. Find your way of making good barbecue. And then you can start to find ways to become more efficient to get better models, to be able to dig in there, find problems sooner, earlier on in the design, earlier on during pre-construction so we can start to avoid some of these issues.

And so that's the goal. We don't just roll out new tools to have new technology. If that's the case, it's pointless. We actually have to implement it and use it in a way that will work for us to make us better.

And so sometimes I never want somebody to leave a conference and just thinking that it's all fluff. So I hope you guys are leaving with something that you're like, hey, I can actually use this. I can go back next week and start using something.

So with that, I'll go ahead and wrap up. Please fill out the class surveys. It's on the app. Click that little button up there. Click My Surveys. You'll have a list of them.

And that's all I got for you guys. So thank you guys for coming. I hope you have a great rest of your day.

[APPLAUSE]

______
icon-svg-close-thick

Cookie preferences

Your privacy is important to us and so is an optimal experience. To help us customize information and build applications, we collect data about your use of this site.

May we collect and use your data?

Learn more about the Third Party Services we use and our Privacy Statement.

Strictly necessary – required for our site to work and to provide services to you

These cookies allow us to record your preferences or login information, respond to your requests or fulfill items in your shopping cart.

Improve your experience – allows us to show you what is relevant to you

These cookies enable us to provide enhanced functionality and personalization. They may be set by us or by third party providers whose services we use to deliver information and experiences tailored to you. If you do not allow these cookies, some or all of these services may not be available for you.

Customize your advertising – permits us to offer targeted advertising to you

These cookies collect data about you based on your activities and interests in order to show you relevant ads and to track effectiveness. By collecting this data, the ads you see will be more tailored to your interests. If you do not allow these cookies, you will experience less targeted advertising.

icon-svg-close-thick

THIRD PARTY SERVICES

Learn more about the Third-Party Services we use in each category, and how we use the data we collect from you online.

icon-svg-hide-thick

icon-svg-show-thick

Strictly necessary – required for our site to work and to provide services to you

Qualtrics
We use Qualtrics to let you give us feedback via surveys or online forms. You may be randomly selected to participate in a survey, or you can actively decide to give us feedback. We collect data to better understand what actions you took before filling out a survey. This helps us troubleshoot issues you may have experienced. Qualtrics Privacy Policy
Akamai mPulse
We use Akamai mPulse to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Akamai mPulse Privacy Policy
Digital River
We use Digital River to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Digital River Privacy Policy
Dynatrace
We use Dynatrace to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Dynatrace Privacy Policy
Khoros
We use Khoros to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Khoros Privacy Policy
Launch Darkly
We use Launch Darkly to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Launch Darkly Privacy Policy
New Relic
We use New Relic to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. New Relic Privacy Policy
Salesforce Live Agent
We use Salesforce Live Agent to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Salesforce Live Agent Privacy Policy
Wistia
We use Wistia to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Wistia Privacy Policy
Tealium
We use Tealium to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Tealium Privacy Policy
Upsellit
We use Upsellit to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Upsellit Privacy Policy
CJ Affiliates
We use CJ Affiliates to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. CJ Affiliates Privacy Policy
Commission Factory
We use Commission Factory to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Commission Factory Privacy Policy
Google Analytics (Strictly Necessary)
We use Google Analytics (Strictly Necessary) to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Google Analytics (Strictly Necessary) Privacy Policy
Typepad Stats
We use Typepad Stats to collect data about your behaviour on our sites. This may include pages you’ve visited. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our platform to provide the most relevant content. This allows us to enhance your overall user experience. Typepad Stats Privacy Policy
Geo Targetly
We use Geo Targetly to direct website visitors to the most appropriate web page and/or serve tailored content based on their location. Geo Targetly uses the IP address of a website visitor to determine the approximate location of the visitor’s device. This helps ensure that the visitor views content in their (most likely) local language.Geo Targetly Privacy Policy
SpeedCurve
We use SpeedCurve to monitor and measure the performance of your website experience by measuring web page load times as well as the responsiveness of subsequent elements such as images, scripts, and text.SpeedCurve Privacy Policy
Qualified
Qualified is the Autodesk Live Chat agent platform. This platform provides services to allow our customers to communicate in real-time with Autodesk support. We may collect unique ID for specific browser sessions during a chat. Qualified Privacy Policy

icon-svg-hide-thick

icon-svg-show-thick

Improve your experience – allows us to show you what is relevant to you

Google Optimize
We use Google Optimize to test new features on our sites and customize your experience of these features. To do this, we collect behavioral data while you’re on our sites. This data may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, your Autodesk ID, and others. You may experience a different version of our sites based on feature testing, or view personalized content based on your visitor attributes. Google Optimize Privacy Policy
ClickTale
We use ClickTale to better understand where you may encounter difficulties with our sites. We use session recording to help us see how you interact with our sites, including any elements on our pages. Your Personally Identifiable Information is masked and is not collected. ClickTale Privacy Policy
OneSignal
We use OneSignal to deploy digital advertising on sites supported by OneSignal. Ads are based on both OneSignal data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that OneSignal has collected from you. We use the data that we provide to OneSignal to better customize your digital advertising experience and present you with more relevant ads. OneSignal Privacy Policy
Optimizely
We use Optimizely to test new features on our sites and customize your experience of these features. To do this, we collect behavioral data while you’re on our sites. This data may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, your Autodesk ID, and others. You may experience a different version of our sites based on feature testing, or view personalized content based on your visitor attributes. Optimizely Privacy Policy
Amplitude
We use Amplitude to test new features on our sites and customize your experience of these features. To do this, we collect behavioral data while you’re on our sites. This data may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, your Autodesk ID, and others. You may experience a different version of our sites based on feature testing, or view personalized content based on your visitor attributes. Amplitude Privacy Policy
Snowplow
We use Snowplow to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Snowplow Privacy Policy
UserVoice
We use UserVoice to collect data about your behaviour on our sites. This may include pages you’ve visited. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our platform to provide the most relevant content. This allows us to enhance your overall user experience. UserVoice Privacy Policy
Clearbit
Clearbit allows real-time data enrichment to provide a personalized and relevant experience to our customers. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID.Clearbit Privacy Policy
YouTube
YouTube is a video sharing platform which allows users to view and share embedded videos on our websites. YouTube provides viewership metrics on video performance. YouTube Privacy Policy

icon-svg-hide-thick

icon-svg-show-thick

Customize your advertising – permits us to offer targeted advertising to you

Adobe Analytics
We use Adobe Analytics to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, and your Autodesk ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Adobe Analytics Privacy Policy
Google Analytics (Web Analytics)
We use Google Analytics (Web Analytics) to collect data about your behavior on our sites. This may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. We use this data to measure our site performance and evaluate the ease of your online experience, so we can enhance our features. We also use advanced analytics methods to optimize your experience with email, customer support, and sales. Google Analytics (Web Analytics) Privacy Policy
AdWords
We use AdWords to deploy digital advertising on sites supported by AdWords. Ads are based on both AdWords data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that AdWords has collected from you. We use the data that we provide to AdWords to better customize your digital advertising experience and present you with more relevant ads. AdWords Privacy Policy
Marketo
We use Marketo to send you more timely and relevant email content. To do this, we collect data about your online behavior and your interaction with the emails we send. Data collected may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, email open rates, links clicked, and others. We may combine this data with data collected from other sources to offer you improved sales or customer service experiences, as well as more relevant content based on advanced analytics processing. Marketo Privacy Policy
Doubleclick
We use Doubleclick to deploy digital advertising on sites supported by Doubleclick. Ads are based on both Doubleclick data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Doubleclick has collected from you. We use the data that we provide to Doubleclick to better customize your digital advertising experience and present you with more relevant ads. Doubleclick Privacy Policy
HubSpot
We use HubSpot to send you more timely and relevant email content. To do this, we collect data about your online behavior and your interaction with the emails we send. Data collected may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, email open rates, links clicked, and others. HubSpot Privacy Policy
Twitter
We use Twitter to deploy digital advertising on sites supported by Twitter. Ads are based on both Twitter data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Twitter has collected from you. We use the data that we provide to Twitter to better customize your digital advertising experience and present you with more relevant ads. Twitter Privacy Policy
Facebook
We use Facebook to deploy digital advertising on sites supported by Facebook. Ads are based on both Facebook data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Facebook has collected from you. We use the data that we provide to Facebook to better customize your digital advertising experience and present you with more relevant ads. Facebook Privacy Policy
LinkedIn
We use LinkedIn to deploy digital advertising on sites supported by LinkedIn. Ads are based on both LinkedIn data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that LinkedIn has collected from you. We use the data that we provide to LinkedIn to better customize your digital advertising experience and present you with more relevant ads. LinkedIn Privacy Policy
Yahoo! Japan
We use Yahoo! Japan to deploy digital advertising on sites supported by Yahoo! Japan. Ads are based on both Yahoo! Japan data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Yahoo! Japan has collected from you. We use the data that we provide to Yahoo! Japan to better customize your digital advertising experience and present you with more relevant ads. Yahoo! Japan Privacy Policy
Naver
We use Naver to deploy digital advertising on sites supported by Naver. Ads are based on both Naver data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Naver has collected from you. We use the data that we provide to Naver to better customize your digital advertising experience and present you with more relevant ads. Naver Privacy Policy
Quantcast
We use Quantcast to deploy digital advertising on sites supported by Quantcast. Ads are based on both Quantcast data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Quantcast has collected from you. We use the data that we provide to Quantcast to better customize your digital advertising experience and present you with more relevant ads. Quantcast Privacy Policy
Call Tracking
We use Call Tracking to provide customized phone numbers for our campaigns. This gives you faster access to our agents and helps us more accurately evaluate our performance. We may collect data about your behavior on our sites based on the phone number provided. Call Tracking Privacy Policy
Wunderkind
We use Wunderkind to deploy digital advertising on sites supported by Wunderkind. Ads are based on both Wunderkind data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Wunderkind has collected from you. We use the data that we provide to Wunderkind to better customize your digital advertising experience and present you with more relevant ads. Wunderkind Privacy Policy
ADC Media
We use ADC Media to deploy digital advertising on sites supported by ADC Media. Ads are based on both ADC Media data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that ADC Media has collected from you. We use the data that we provide to ADC Media to better customize your digital advertising experience and present you with more relevant ads. ADC Media Privacy Policy
AgrantSEM
We use AgrantSEM to deploy digital advertising on sites supported by AgrantSEM. Ads are based on both AgrantSEM data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that AgrantSEM has collected from you. We use the data that we provide to AgrantSEM to better customize your digital advertising experience and present you with more relevant ads. AgrantSEM Privacy Policy
Bidtellect
We use Bidtellect to deploy digital advertising on sites supported by Bidtellect. Ads are based on both Bidtellect data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Bidtellect has collected from you. We use the data that we provide to Bidtellect to better customize your digital advertising experience and present you with more relevant ads. Bidtellect Privacy Policy
Bing
We use Bing to deploy digital advertising on sites supported by Bing. Ads are based on both Bing data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Bing has collected from you. We use the data that we provide to Bing to better customize your digital advertising experience and present you with more relevant ads. Bing Privacy Policy
G2Crowd
We use G2Crowd to deploy digital advertising on sites supported by G2Crowd. Ads are based on both G2Crowd data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that G2Crowd has collected from you. We use the data that we provide to G2Crowd to better customize your digital advertising experience and present you with more relevant ads. G2Crowd Privacy Policy
NMPI Display
We use NMPI Display to deploy digital advertising on sites supported by NMPI Display. Ads are based on both NMPI Display data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that NMPI Display has collected from you. We use the data that we provide to NMPI Display to better customize your digital advertising experience and present you with more relevant ads. NMPI Display Privacy Policy
VK
We use VK to deploy digital advertising on sites supported by VK. Ads are based on both VK data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that VK has collected from you. We use the data that we provide to VK to better customize your digital advertising experience and present you with more relevant ads. VK Privacy Policy
Adobe Target
We use Adobe Target to test new features on our sites and customize your experience of these features. To do this, we collect behavioral data while you’re on our sites. This data may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, your IP address or device ID, your Autodesk ID, and others. You may experience a different version of our sites based on feature testing, or view personalized content based on your visitor attributes. Adobe Target Privacy Policy
Google Analytics (Advertising)
We use Google Analytics (Advertising) to deploy digital advertising on sites supported by Google Analytics (Advertising). Ads are based on both Google Analytics (Advertising) data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Google Analytics (Advertising) has collected from you. We use the data that we provide to Google Analytics (Advertising) to better customize your digital advertising experience and present you with more relevant ads. Google Analytics (Advertising) Privacy Policy
Trendkite
We use Trendkite to deploy digital advertising on sites supported by Trendkite. Ads are based on both Trendkite data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Trendkite has collected from you. We use the data that we provide to Trendkite to better customize your digital advertising experience and present you with more relevant ads. Trendkite Privacy Policy
Hotjar
We use Hotjar to deploy digital advertising on sites supported by Hotjar. Ads are based on both Hotjar data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Hotjar has collected from you. We use the data that we provide to Hotjar to better customize your digital advertising experience and present you with more relevant ads. Hotjar Privacy Policy
6 Sense
We use 6 Sense to deploy digital advertising on sites supported by 6 Sense. Ads are based on both 6 Sense data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that 6 Sense has collected from you. We use the data that we provide to 6 Sense to better customize your digital advertising experience and present you with more relevant ads. 6 Sense Privacy Policy
Terminus
We use Terminus to deploy digital advertising on sites supported by Terminus. Ads are based on both Terminus data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that Terminus has collected from you. We use the data that we provide to Terminus to better customize your digital advertising experience and present you with more relevant ads. Terminus Privacy Policy
StackAdapt
We use StackAdapt to deploy digital advertising on sites supported by StackAdapt. Ads are based on both StackAdapt data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that StackAdapt has collected from you. We use the data that we provide to StackAdapt to better customize your digital advertising experience and present you with more relevant ads. StackAdapt Privacy Policy
The Trade Desk
We use The Trade Desk to deploy digital advertising on sites supported by The Trade Desk. Ads are based on both The Trade Desk data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that The Trade Desk has collected from you. We use the data that we provide to The Trade Desk to better customize your digital advertising experience and present you with more relevant ads. The Trade Desk Privacy Policy
RollWorks
We use RollWorks to deploy digital advertising on sites supported by RollWorks. Ads are based on both RollWorks data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that RollWorks has collected from you. We use the data that we provide to RollWorks to better customize your digital advertising experience and present you with more relevant ads. RollWorks Privacy Policy

Are you sure you want a less customized experience?

We can access your data only if you select "yes" for the categories on the previous screen. This lets us tailor our marketing so that it's more relevant for you. You can change your settings at any time by visiting our privacy statement

Your experience. Your choice.

We care about your privacy. The data we collect helps us understand how you use our products, what information you might be interested in, and what we can improve to make your engagement with Autodesk more rewarding.

May we collect and use your data to tailor your experience?

Explore the benefits of a customized experience by managing your privacy settings for this site or visit our Privacy Statement to learn more about your options.