AU Class
AU Class
class - AU

Dynamo from BIM Automation to Generative Design - Part 1 of 4

共享此课程
在视频、演示文稿幻灯片和讲义中搜索关键字:

说明

Increase your Dynamo knowledge in this full day workshop which focuses on practical end to end workflows. In the first session of the workshop, you will learn how to author and run several BIM Automation workflows. In the next 3 sessions, you will extend your growing knowledge into generative design workflows where you can learn how to do data-driven design exploration using Dynamo for Revit and Project Refinery. This workshop requires intermediate experience using Dynamo and Revit. We will not be covering entry level Dynamo. If you are a beginner or have never used Dynamo before consider attending the Dynamo Beginner session held during the main AU conference or invest in beginner training ahead of time. Participants will be paired at provided computers (1 computer for 2 participants). Includes the Tuesday AU General Session. Don’t forget to add the AU Full Conference Pass and sign up for the Wednesday evening DynaLightning talks and party.

主要学习内容

  • Learn how to author and run a BIM automation script in Dynamo for Revit
  • Learn how to author and run a generative workflow with Project Refinery
  • Learn how to push and pull custom data to and from a Revit project into a generative workflow
  • Learn how to frame a design problem in terms of goals and constraints

讲师

  • Jacqueline Rohrmann
    Jacqueline Rohrmann (also known as That BIM Girl) is a civil engineering student from TU München. She is passionate about BIM and everything innovative - from robots to Ai. A year ago she started her YouTube-Channel on which she shares tipps and tricks for Revit as well as reports on latest trends of the construction industry. Her latest project is a series called "Coding for AEC", which is directed towards architects and engineers interested in programming. She recently finished her Master's Thesis on "Design Optimization in Early Project Stages - A Generative Design Approach to Project Development".
  • Lilli Smith 的头像
    Lilli Smith
    Lilli Smith, AIA is an architect with a passion for re-envisioning the way that buildings are designed. After working for several years as an architect, she joined Revit Technology as a fledgling start up and helped grow it to where it is today in almost every architect’s tool box. She has gone on to work on many Autodesk tools including Vasari, FormIt, Dynamo, Project Fractal and Project Refinery which recently graduated to a suite of tools for generative design studies in Revit.
  • Sylvester Knudsen 的头像
    Sylvester Knudsen
    Sylvester holds a Bachelor of Architectural Technology and Construction Management and a Masters of Building Informatics from Aalborg University. As a former VDC-specialist at one of Denmark's biggest general contractors, he has gained knowledge and experience in the delivery of BIM/VDC related tasks throughout multiple project phases. Passionate about BIM, using data for better decision making and computational workflows, Sylvester is now working as a Computational Specialist at metaspace.
Video Player is loading.
Current Time 0:00
Duration 1:41:24
Loaded: 0.16%
Stream Type LIVE
Remaining Time 1:41:24
 
1x
  • Chapters
  • descriptions off, selected
  • en (Main), selected
Transcript

LILLI SMITH: All right. Good morning, everyone. Welcome to Dynamo Workshop, BIM Automation to Generative Design. We are really excited to have you all here today. Thanks for coming all the way to Vegas.

My name is Lilli Smith. I'm a senior product manager at Autodesk. I work in Boston. I have a background as an architect. And I get to work with this really passionate team of people who are really interested in improving technology in the AEC industry. So it's a lot of fun.

We thought we would start out today with a bunch of legalese. So please read this all and take it to heart. This also boils down into haiku form which is, you know, we don't make promises. We are going to show you-- seriously, we are going to show you some beta software today. And it's just important to remember that it's in beta and to not make purchasing decisions because things do change.

All right. So I am thrilled to be joined by this rock star cast of instructors that we have today. They're coming to you all from Europe. We have Sylvester Knudsen, who is from London. And Sylvester is a computational specialist at Metaspace. And before that, he worked as a-- in Denmark for MT Hojgaard as a virtual design construction specialist. So Sylvester. Sylvester is passionate about trying to make the AC industry better through automation and optimization.

Jacqueline Rohrmann comes to us from Frankfurt, Germany. She just finished her master's degree in civil engineering with a heavy focus in computation, and also had a smattering of architecture classes thrown in as well. She is, in December, she's moving to Stockholm, and she's going to work for Rumble. And she's excited about that. So you also might recognize her because she has a YouTube channel with over 10,000 subscribers. You can find her at That BIM Girl where she has tech insights, demos, and also has a lot of fun.

So Alvaro Ortega Pickmans is joining us from Barcelona, Spain. He holds a master's degree in building engineering from the Polytechnic University of Madrid. He is also with Sylvestre a computational designer at Metaspace. And he also spent several years working at Fosters & Partners. So he's known for having an open and curious mind and for pushing himself at every chance. So thank you for joining us, Alvaro. Oops.

OK. So the schedule for today. So I'm going to give a brief introduction. And then Sylvester is going to kick off the first block. So we've broken the day into four different blocks. And the first block is going to be about automating BIM workflows. So Sylvester is going to lead us through three examples there. Teach us some stuff.

We're going to take a brief break. And then we're going to start to get into generative design. And Jacqueline is going to give us some pretty basic starter exercises and move towards more complexity. After lunch, Sylvester and Jacqueline are going to give another block where we'll look at a specific office layout work flow and go through how to make that, how to add metrics to it, and how to use it with Project Refinery. And then the last session of the day, we have a really cool workflow that Alvaro is going to teach. It's a lighting layout workflow. And then we'll have beers.

There are two other Dynamo workshops going on concurrently. The second one is on Dynamo for BIM management and deployment. So it's all about what's going on behind the scenes of Dynamo, how to make scripts in successful ways to give them to other people. How you can teach Dynamo effectively. And then the journey of a project involves different steps along a project that ideas of how you could use Dynamo. These sessions will all be recorded and posted afterwards.

So if you're interested in any of these topics, you can check those out later. The third workshop is targeted more towards software developers. So it's going to look at things like Python, C# for beginners, how to make zero touch nodes in Dynamo, and how to make extensions for Dynamo.

So in this class we have 79 registrants representing 78 different companies. And I think architects are the largest segment. But there's also a bunch of building engineers, civil engineers, and construction professionals. So we're excited to welcome you all. We hope you'll find this useful. And then just in the other workshops, the total number, 231 total people representing 200 companies.

So why are we all here? So we all know that by 2050, there's probably going to be or there is going to be projected 10 billion people on the Earth. We're going to have to do a lot of work to build 13,000 buildings a day and wrap the earth 30 times every year with rail and roads. So I'm going to assert that there is a problem. We need to do more work at a higher quality with less resources.

This has been a traditional way of delivering buildings-- drawing it on paper and giving it to other people to build the building. We've evolved into digitizing these methods, making it easier to change, to deliver drawings to other people. Autodesk has been in this business for more than 30 years.

But what we really want to do now is to capture the intelligence in these professionals heads and combine it with the algorithmic opportunity in the computer so that we can create better designs and have the computer help us.

Autodesk has been experimenting with some of these technologies. We, a couple of years ago, actually bought in architecture firm that works inside of Autodesk research. And they did a project on our Toronto office which was moving to a new space, and they were really interested in using generative workflows to design that space.

So they began by surveying the existing employees and trying to come up with some metrics about what would make a good office. How could they measure the success of a good office? So they develop these ways of asking people, how much distraction can you take in your day? Who do you want to sit by? How much daylighting? Is daylighting good for your work, or is it distracting?

And then they also, you may ask, well, how do you measure low visual distraction? So they actually came up with some equations to measure this. So they defined it by the number of people that you could see from a certain point in the office divided by the total number of work spaces. And they use these methods on their existing space and tested them out so that they could then use them to design the new space.

Similar for adjacency preference. All boiling down into the scoring equation. Circulation. So then when they had these metrics in place, they could develop a kind of parametric parti-- an idea of how this building could flex and change, and ways to measure it. So here you see the kind of big blue bars are conference rooms, and in the other space, there's kind of open office. And so they could test out all of these different designs automatically and have each one be measured.

Once they had that working, they could go even a step further and they could declare their goals upfront. So if they knew that they wanted to have maximum daylight and best plan for adjacency, they could declare that ahead of time, and then use the computer to help them to narrow down the options that the computer was making to get to the best options.

The Living also worked with a construction company in the Netherlands called Van Wijnen. And they were interested in using some similar methods to do a neighborhood design. So in this case, they were looking at very different goals around backyard size, views, solar gain, cost, and profit, but using some of the same techniques of making this flexible model and being able to measure it.

But how can we do this? So these tools have been kind of closed. They haven't been very accessible to a lot of people to be able to do this. So Autodesk is really interested in trying to make these ideas more available to more people. So one way to start doing that-- so we need a way to kind of program and declare goals. So one way to do that is with Dynamo visual scripting.

So how many people here, I think we said-- how many people here have some Dynamo experience? Oh, wow. So a lot of you. Great. So you know that all Dynamo graphs kind of boil down to this very simple three parts, right? So in this case, we're reading some information in. An address, in this case. We're doing some compute in the middle. In this case, turning it into uppercase. And then we're writing it back out. In this case, turning it to uppercase and writing it back out to Revit.

So Dynamo is saving people a lot of tedium and time, and it's really gained a lot of popularity by being a tool in Revit and saving people a lot of time. So Sylvester is going to start out the Dynamo kickstart block of workflow automation examples by teaching some-- this is the first example he's going to go over, which is a room occupancy calculation. And here we're showing it. This is the-- let's see if this thing works. No.

The dialogue in the right is the Dynamo player. We're going to show you actually how to write this in Dynamo. But if you want to give it to somebody else who maybe doesn't want to see Dynamo and just wants to kind of play it as a macro, they can use Dynamo player to do this.

The second example that Sylvester is going to show you is about using information in a Revit model to do things like visualize it in terms of colors. And then the third example he's going to look at how you can interact with Excel as a checking mechanism or way of transferring data back and forth to use in your work.

So that's our kickstart block. Our first block. Our first 90 minutes. And after that, we're going to start to get into generative design workflows. Because we think that this knowledge that you're gaining in terms of being able to setup logic and use visual scripting can also be used in generative design workflows.

And our goals are really that we want to be able to learn from more designs than is physically possible to generate or evaluate by hand. So traditionally, in your work, you might come up with three different options. You might come up with 10 different options. But what if you could come up with hundreds or thousands of options?

So we have created Project Refinery. So how many people are familiar with Project Refinery or have tried it out? OK. So some. A good number of people, great. So we created Project Refinery, actually, for the Van Wijnen project that was doing the neighborhood designs. They came on stage at AU main stage on AU 2017 and told their story.

But they wanted us to provide them with some software that they could use for the next neighborhood design. So Project Refinery was actually born out of that. But once we had it for this one CUSTOMER we could make it into a public beta for a bunch of different customers, which is really our goal is to make it available to more and more people. So we put it out as a public beta last year at AU at AU 2018.

This is where you can go to download it yourself if you haven't already. And so we've spent the past year doing a lot of teaching and experimenting. This was a hackathon in London where people were looking-- some architects from Arup, 3D Repo, and Hopkins were looking at what shape of building addition can we make on a rooftop? And this was in London where real estate is super expensive. So what shape can we make up there? How much can we add, how much mass can we add so that you can't see very much of it from the ground?

We also had a summer residency program in Toronto where people came for two weeks. This was a project by Parsons in Dubai. And they were interested in looking at this massing study in this urban environment, and looking at trying to optimize each plot for minimizing sun exposure because it's in Dubai, and maximizing the view quarters.

This is one of my favorites. It's a liquor store optimization. And they're actually looking at the size of the shop, the depth and the width. Where the storage door could be located. Where the cash register should be located. All these different things that they were moving around and testing in their automated design exploration. And they say they were able to make better decisions because they were backed by data. They could do this faster, and look at a greater variety of options.

So in the second block, in Jacqueline's introduction, she's going to take us through-- this is kind of our hello, Project Refinery exercise. If you've tried out Refinery, you may be familiar with it. But it is just a really simple look at a basic massing study and how you can look at the maximum volume and minimum surface area.

And then she'll teach us how to get maybe a little bit more sophisticated in a slightly more sophisticated parametric parti of this massing study in an urban environment where we're going to look at some of the-- some similar goals of minimizing facade area and maximizing floor area, but also things like solar exposure and window-to-wall ratio.

The third session in our generative design exploration is going to be looking at this office layout. Jacqueline and Sylvester are going to teach this together. And they're going to look at how you can layout desks in an open office area, maximize the number of desks, how the work spaces are utilized, and the area per person.

And then the final session of the day is going to be a look at laying out lighting in an office space, and looking at how you can minimize the number of light fixtures but still get a really good quality of light over the space. Alvaro's going to teach us this one.

OK. So where are we headed with the Refinery? So right now, Refinery is really targeted towards the design technologists. And this class is targeted towards teaching you all how to make these scripts that you can run in Refinery. Maybe give to other people in your office to run. But it's really targeted towards people who are writing the scripts and running them themselves.

But we think that there is also a good chance that there are probably people in your office who are not interested in Dynamo and might want to use some of these techniques but are not, maybe not comfortable creating their own scripts. Want to reuse some things that have already been done.

So similar to Dynamo Player, we think there is a good opportunity to have a generative player where you can use these scripts directly from Revit and run them in the context of your Revit model. And then we also think that there could be some good opportunities for extending this functionality to some of our other Autodesk products, Civil 3D and Formit, and probably more, too.

So as well as extending kind of to this project designer persona, we also think that there is a good opportunity to extend to the project manager persona. So someone who is not even working in Revit or doesn't have these tools on their machine, doesn't really know how to use them, but still wants to use the benefits of looking at the results of these automated studies. So we think that it could be super interesting to be able to publish the results of the study in a way that your stakeholders can review the results. And then looking at ways to continue with cloud storage and compute.

So in our work to make some of these ideas more accessible to people, we are also developing the Refinery Primer, which is a good way to learn to read more and get started with this. We've been working on this the past several months and getting a lot of rounds of feedback. And we feel like we're finally ready to kind of talk about it, advertise it. And this is an open source project. You can leave your comments or your contributions to it if you are so inclined.

We are also-- OK, this is playing. So this is showing some of our latest version of Refinery that we're working on that works directly from Revit. And we're working on making the UI more friendly to people who would be using it in a Revit context.

We are going to be testing this at the ideas exchange here at AU. If you would like to do some user testing, we'd love to get your feedback on the latest version. We're going to be using a slightly-- our previous version today because we wanted to give you a stable experience and one that we could prepare our class for. But come see us an Idea Exchange and you can check out this new, new version.

All right. So this is our time-- we're also having some idea exchange sessions on Dynamo, and also some AI and machine learning experiments that we have going on in our group as well. On Wednesday night, we are having a party at Senor Frogs. So the Dynamo team really knows how to party. We are going to combine seven-minute talks and a party. So it's experimental. We'll see if it's fun.

But it's going to, they're going to be-- if you've ever been to a Pe-cha Ku-cha or Pecha Kucha, they're timed slide. So 20 slides, 20 seconds each. And it can be a lot of fun. We have seven presenters. If you are pre-registered, you can come in right at 8:00. If you're not pre-registered, still come. We're going to have a line for entry at 8:30 depending on space.

A couple classes of note. Dieter Vermeulen is one of our great refinery users. And he's a technical sales specialist in Europe. And he is going to teach a class that's being repeated on both Tuesday and Wednesday. I think he's also having a live stream of it.

And if you can't check it out here, if you're busy at this time or these times, you can check it out afterwards. But I think this is going to be a really good Class he gave me a preview of it, and it has a lot of really interesting examples in it. And he's going to post all the data sets as well.

Kean Wamsley is going to talk on Thursday at 10:30 about the Toronto office design. So they have-- Kean has put out on his blog the Dynamo script that shows how the Toronto office really works behind the scene. Oh, it's kind of complicated, but it's super interesting as well to learn from. And we're thrilled that there are 13 classes on Refinery this year here. So you can search. If you just search keyword refinery, you can find a lot of classes this year.

So that's it. I'm to hand it over to Sylvester for block 1.

SYLVESTER KNUDSEN: All right. Hey, guys. Can you hear me all right? Good, good. So first block of the day. Just a brief repeat of what Lilli just said. She just did the introduction, and we're now going through the first block, which is the Dynamo Kick Start block. Feels weird standing up here.

And what we're going to look at is just BIM workflow. So how can we automate things in Revit with Dynamo? How can we use Dynamo as a middle man to communicate between different applications? So for this exam, we're going to do Revit and Excel, and how can we merge those two things. And after that, we're going to have a small break, and then a very important thing. After that, 6 and 1/2 hours to free beers. So hope you're excited about that, because I am.

So is the screen jumping a lot for you guys, or it's just me? It's kind of annoying. So just quickly, the learning objectives of this class. So a lot of you guys had experience with Dynamo already, I could see. So hopefully it won't be too basic for you. But this is mostly just to get into the Dynamo mood and just get everyone on the same page on how we use Dynamo and how we create logic in Dynamo. So after the issue, you'll have a better understanding of that. And you'll be able to take maybe not the exact workflows that we did, but the concepts of the workflows, and take them back home and create some cool stuff with that yourself.

So just, Lilli already did it briefly-- we just want to know a bit more how many have experience with Dynamo or more like your experience level. So none of you are completely new to Dynamo, right?

AUDIENCE: I am.

SYLVESTER KNUDSEN: Awesome. So happy about that. Also I'm going to-- perfect. I already like you guys. What about intermediate level? Who uses Dynamo on a regular basis but not consider yourself expert yet? Good. And the rest of you are experts. [INAUDIBLE] Yeah, not you. I know you. Cool, cool.

So before we're going into this, I'm just going to go through-- and I'm going to have to sit up here, which is like, I'm kind of hidden away. But you don't need to look at me, so that's fine, I think. Did everyone get the frame working? Like, your machine is working. Are you inside of something that shouldn't look like this? If you're in this, you're doing something wrong.

Do we have a frame in here? Oh, something's happening. Yours should maybe like look a bit more like this. Does it look like this or did you already open the desktop? Good. So if you're on this, just go to the desktop. And you should see something that looks like a regular machine. This is taking a bit long. Good. We're back.

So yeah, you should be looking at something that looks like this. And if you go over here on all of your icons, there's this zero data sets. So if you open that-- let me just close this-- you will see a lot of different data sets. And it can be a bit hard to find because the numbering is super weird. But if you go to the DW 33 something, something, Dynamo for BIM Automation to Generative Design, you'll have the entire data set that we're going to use today.

So in this folder, you have the AU 2019 workshop content. And we have all of the different blocks. So from block 1 to block 4. And what we're going to do now is start the Dynamo Kickstart, obviously. And so if you open this, you'll see we have three different folders, and we're going to use these folders today.

So we have the Revit files which is just containing the Revit files that we actually going to use. And we have the BIM files, which is again split up to something else. So we're going to do some challenges. So we're going to build something from scratch. And some of the times, you're just going to look at me doing it. And if you want to do it yourself as well.

And we also have some really cool challenges where you guys are going to do it. And one of them has prizes. Like, look at this. So one of you are going to win this. So free beers and free bags. This is going to be good.

And so in the challenges, you'll see we have all of the things we're going to go through. The challenges are mainly scripts where-- some of it are put together, but most of the script is not put together. So you can see all of the nodes that you actually have to use. So you can use that one as a template if you want to. If you want to just start from complete scratch, do that. However you like it the best.

And the completed folder has all of the scripts, completely done. So if you fall behind or something didn't make sense, you can always go back and check these scripts. There's also images of all of the scripts completed. So you can also have a look there. And during the challenges, if you get stuck, obviously look. But if not, maybe don't because it's going to be too easy then.

Yeah. I think that's it about the folder structure. Is there any questions about that, or does that make sense? Cool. Also, there's like, what, 1,000 lab assistants in here today. So if anything goes wrong, just throw up your hands. I don't know where any of them is right now, but I think they're in here. So just put up your hands. And if you have questions, put up your hands. We'll take it from them.

Cool. So first thing we're going to look at is interacting with Revit. So let's go ahead and start up Revit. So if you are on your frame-- almost did that again. So don't do what I'm doing right now. There we go.

So go ahead and open up Revit. And inside of your Revit files, let's open up the-- let's see. Let's open up the-- forgot what file it was. Just give me a second. The advance sample project. Let's open up that one. And sometimes it is a bit slow of opening up things. But when we get into it, it picks it up again.

Cool. So let's just go to the entry level view. You should see something like this. And let's start up Dynamo. Which is a bit slow. Is everyone with me at this point? You're just trying to start up Dynamo? Cool. So you can now either just open a new one and follow along with what I'm doing. Or you open the challenge and have a look at it or open the completed one.

But we're going to go through it step by step up here for this example. So I'm going to go ahead and open a new workspace in Dynamo. And obviously, you are familiar with what's going on here. The library and all of those things. So won't go too much into detail about that.

But a really good way to start creating your graphs is kind of thinking from the end first. So what's actually the objective that we want to do? And in this case, in this example here, what we want to do is obviously and calculate room occupancy based on the area.

So does anybody have an idea what the last thing we want to do? So let me just open this. So what we want to do exactly is we want to have these rooms. And you know the rooms has a occupancy parameter. So what we want to do is we want to make sure that we know how many people can we have in this room?

So what would be the end goal of our script? Does anybody have an idea of that?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: I can't really hear.

AUDIENCE: [INAUDIBLE] parameter in the room.

SYLVESTER KNUDSEN: Yes. Exactly. Awesome. So first thing we want to do is write something to the occupancy parameters. So let's go ahead and make some groups just because we want to split up our graph so we don't know like what steps we need to take.

So a good way to create empty groups is you can go up to-- I can't remember. Just Control-W, and you can create new, small nodes. And let's do two of them and group those together. So this is going to be our output. And we'll call that set parameter in model. And let's call that pink or something like that so we know that's the output. That's the goal we want to do.

So again, starting from the last part of the script. so we might want to find the node that we actually want to end up with. And does anyone know what that node might be when we're trying to set something in the model?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: What? Yes. So again, we want to set parameters. And we want to set an element parameters. So the way Dynamo names their nodes is it's like the dot annotation. So if we put in elements-- element, dot, set parameters, as was just said. And just make sure they're spelled correctly. Parameter.

So we have a custom node here which also does something similar, but today we're just going to use the building node which has the set parameter by name node. So let's put that in. Let's just put it in our group right away. So this makes it a bit easier for us, because now we actually know what we need to do for the rest of the script.

So we know we need to find some elements. We need to find a parameter name, and we need to find a value. So we can start by making some group. So first of all, we need to find some elements. So let's make a new group. And let's not put anything in it. Just create the group. And let's call that get element. And in this case we know we want rooms, right? So let's just put that in as well. Rooms. Cool.

The next thing we want to do is we want to find a value. So we need to calculate the occupancy value in some way. So let's create another group as well-- we could just copy this one-- and create or call this occupancy calculation. Calculation. Is everyone with me at this point? Yeah, cool.

So let's try and also filter some rooms just to make this and the example a bit more interesting. So we only want to actually set the value in rooms that are called, let's say, instruction. So we need to only find the rooms-- the instruction rooms. So that means we have to add another step to our little script. So let's create another group. And let's call this one filter rooms. By room name.

Cool. So now we basically have our script. Like, the blueprint for our script. So let's put this in here. Let's try and arrange it a bit better. We know that get elements is probably the first thing we need to do. Then we need to filter some rooms. And then we have to create the occupancy calculation. So now we can start from the beginning.

And to select rooms in Revit, let's go ahead and find a category node. Categories. And let's pick the rooms. And for starters, we want to just find all of the rooms, and then we'll filter them after that. So when we have the categories, we can go ahead and say all elements of category.

And we can connect these two. And we can now see that we have a list of 91 rooms. So these are all of the rooms that are in our model right now. So let's add a watch node just so we can see what's going on. Let's add all of this to this group just so we have an organized. It's nice to organize it as you go just so don't get too messy.

So we can clean up this. And maybe get rid of these nodes because we don't need them anymore. Are we all on this step?

AUDIENCE: No.

SYLVESTER KNUDSEN: No. Oh. What's wrong?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Rooms. Oh, yeah, sorry. Can you actually see what I'm doing up there?

[SIDE CONVERSATION]

OK. If you're having trouble, just raise your hand and someone-- oh, shit. Everyone. Who else had their hand up? You did, awesome.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: So if you-- the first node you want is the category node, right? So if use search for category. Oops. That one.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yeah. So you can see this one is like a selection node for Revit. So if you just click that one, it should put it on the canvas. Yep. And then you can, in this drop down menu, you can select rooms.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yes.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Exactly. And then this is just getting us a category, right? So we can't really do anything with this. But what we want is get all of the elements from that category. So the way we would do that is to search all elements of category. Yeah. So it's actually right there.

AUDIENCE: And then just double-click it?

SYLVESTER KNUDSEN: You can just click it, actually. Yeah. And then it'll just-- yeah. And then you can see this takes in the category, right? That's it's input. And we have a category here, so let's try and select it and put those two together. If you press-- yeah, just press there one time. Yeah. And you don't need to-- yeah, you don't need to have it pressed all the time. You can just click there. Yep. Exactly.

And then you can see, if you hover over it, you can see the output of this over the gray area. And then just go slightly down to the white one and pin it. Yeah. So you can see now we have a list of room elements, right? So these are actually the actual Revit elements you have there.

AUDIENCE: OK.

SYLVESTER KNUDSEN: Yeah. Awesome. That's the first step. Sure. OK, guys. Should we move on? Or is someone still having trouble? Oh, OK. Yeah. So is everyone-- everyone needs to start Dynamo from Revit. So there is also a Dynamo sandbox on the desktop here.

So we don't want to use that right now because you won't be able to do anything with Revit if you're in that. So just make sure that you have Revit open and-- sorry, that you have Dynamo open in Revit. And you can check that by looking up here in the left corner. You'll see a Revit icon if you have it open in the right place.

OK. Ready to move on then. Yeah? Well, we have to. So next thing we want to do is we want to filter all of the rooms. Let's just put this down here. So next thing we want to do is filter out the rooms because we only wanted the rooms called instruction. And there's a couple of different ways that we could do that. Anybody have a suggestion?

AUDIENCE: Filter by [INAUDIBLE]?

SYLVESTER KNUDSEN: Yeah, for sure. That's one of the steps, yeah. So how would you make that the mask?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yeah.

AUDIENCE: Do a little text node [INAUDIBLE].

SYLVESTER KNUDSEN: Yeah, OK. So let's do-- you said filter. Filter by Boolean mask. So let's just put that on the cameras right now. And we want an equal equal, because we want to check if something is equal to instruction. And just another note. If you don't like going up here searching, if you're too lazy as me, you can just right click on the cameras. And you get this little thing up here. And you can actually search the same way here.

So we want the equal equal node as well to make sure that something is equal to instruction. So actually, let's just put instruction in here as well. So if you do a code block by double clicking on the canvas, you can make a string in that so you can put some text in it. Sorry. Yeah. Tell me if I'm not zooming in well enough.

So the value that we want to check for is instruction. Instruction. And let's just make sure that was right. Yes, it looks right. So if you do a code block like this in quotations, you will have a string, which is just a word, or more words. In this case, it's just a word. So we want that to-- we want to check something if it's equal to instruction.

So what do we actually want to check? What should be the other input in this one? Does anybody have an idea of that?

AUDIENCE: Parameter name.

SYLVESTER KNUDSEN: Parameter name. Or-- yeah. So-- sorry?

AUDIENCE: Room name.

SYLVESTER KNUDSEN: Room name, yeah. So how do we get the room name?

AUDIENCE: Get parameter value [INAUDIBLE].

SYLVESTER KNUDSEN: Both of them, right? Yeah. So we can do it in two ways. I think this one is new. So you said room name. Room name is a node. I think it's fairly new. I don't think it's been here all the time. I can't really remember. But this is just a easy way to get a room name, right?

So if we look at this, though, we see, OK. It takes in Revit elements of the category room. And luckily, we just did that. We have a bunch of rooms here. So we can just try this to see if that works. Yep. We get a bunch of room names.

The other way we could do this is by and by getting a parameter of value. So if we do element. Add Get Parameter. Value By Name. Right? So this is kind of like the opposite of our ending node which is setting a parameter. So this one is getting a parameter.

So we could get the same result by just doing the elements in here. And then we have a parameter name. So the parameter name would be whatever the parameter is called inside of Revit, right? And when we're using this get parameter value by name or set parameter value by name, it's very important that we're specific and they have exactly the same name as the parameters. We need to spell it the right way and all of these things.

So one thing you can do to make this easier is you can get a list of all of the parameters that an element has. So if we search for elements.parameters, we can get this little note here, element.parameters. And this takes an element and outputs a list of parameters.

So what we see here is-- this is actually all of the parameters that are available on this object. So we can check this in here if we don't want to go back and forth in Revit. For example, now, when we don't have two screens, it's super annoying having to go back and forth. So we can just do like this and we can check.

So someone said that we needed that the room name, right? So let's see if we can find-- there's something called name. So probably that's the right parameter. So we can go up back up here and make another string. And just say name.

And if we plot that into the parameter name, we'll see that we get, actually, the exact same output as the room name. So the room name is super easy because there's a dedicated node to get that parameter in Revit, right? But there's not a dedicated node to each parameter for each object. So most of the time, you'll have to use this one to get the value.

But for now, let's leave this here just so we know we can do it, and let's clean this up a bit because it's getting messy. So let's add all of these to the group. And we do that by selecting the node, all of the nodes, and the group that we want to add to. And then we can right click one of the nodes and just say Add To Group. If we clean it up, if you right click on the group and clean up the node layout, it looks not very much better, actually, because we need to do some more things.

And so we have all of the names, right? So these are the ones that we want to check. So we can make a check. We can say we only want the elements that are equal to instruction. So if we take these values down to the equal equal node, you'll see we get a list of Boolean values.

And we can now use these values to actually filter out the rooms. Because we can't set or do anything with these values. We can only use them to filter some other things that we can use to something. So if we have this filter Boolean, list filter by Boolean mask, and we hover over the mask, it says that this is a list of unions representing the mask. So obviously, that's our Boolean list. Let's put that up there.

And what do you think we need to put into the list? So this is the list we want to filter.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: My what?

AUDIENCE: Rooms.

SYLVESTER KNUDSEN: My rooms, yes. So if we go back here, we have our rooms right here. So we can put these into our mask or our filter. And what you'll see, we get a dictionary, actually. So we have a in key and we have an out key. And the in is all of the true values. So you see we have 18 rooms here, meaning we have 18 rooms called instruction.

The out key is all of the false values. So these are all of the elements that are false here. The ones that are not called instruction. So this is-- filtering things like this is something that, when you use Dynamo forever, you do this all the time because you need to filter out in a list. Does this make sense, and is people with us at this stage? Any questions about this? Cool. No? Good.

So a quick thing that you can also do instead of using lists. Dynamo, in 2.0, we started getting more nodes for creating dictionaries, which is another way of managing your data, which is, in a lot of cases, better.

[SIDE CONVERSATION]

Is there--

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yes, sorry. Dictionaries. Back to dictionaries. So how many of you have worked with dictionaries in Dynamo? Some of you. Good. Not a lot. That's good. So does anyone know what a dictionary is when we're speaking, like, Dynamo and stuff like that? Yeah? No? Some of you. So a dictionary is basically just what it sounds like. It's like something where we can look up something and we'll get a value out of that.

So for example, in this-- can you guys see this OK, or is it-- let me do it like this. So in this example, we have a bunch of names over here, and we're just doing some splitting just to get a list of their first and last names, stuff like that. But what we actually have now is the dictionary where the key is a name, a first name. And the value is the last name. So a dictionary works with keys and values.

And the key is the identifier of the value, right? So if you want to search something, you can search by that value instead of using indexes. So in Dynamo, we have a bunch of cool nodes that can help us manage these things in a good way. So let's try and jump back and just look at how this would look if we did it with a dictionary.

So let's use our room. Let's use our room name node. And go here. And let's group all of our rooms. So if you go Group By Key, this little node here takes a bunch of things in the list and then groups it by their keys.

So what we want is we want to take our rooms in the list. And we want to group them by their room names. So if you put the room name into the keys, what you'll see is we have a-- we have two different outputs here. Actually, let's do watch nodes. That's easier.

So you can see the unique keys is just all of-- the unique case are all of the room names. So we have 26 different room names. And you can see over here that this is a list of lists. So each of the rooms have been split into sublists and saying-- so this list here is all of the rooms called West, this one is all the rooms called Lobby, and so on and so on. So we have all of our rooms grouped nicely now.

So now we can make a dictionary out of this. So if we search for dictionary. [INAUDIBLE] by keys. So you see-- I can't zoom in on this, sorry-- but there's a node called Dictionary By Keys-- By Keys Values. So that one looks like this.

So this is the way we create a dictionary. And you can see it takes in a list of keys, which is a list of strings. The keys always have to be strings. So it has to be some kind of text. So we wouldn't be able to put in a number as the key.

The values, on the other hand, could basically be anything. So it could be a Revit element. It could be a list. It could be another dictionary if we want to really go deep into it. But what our values are going to be now is all of our grouped rooms.

So we can put this into the values. And what do you think the keys will be in this situation? Anyone has a guess on what the keys would be? Sorry? Can't hear you.

AUDIENCE: Room name.

SYLVESTER KNUDSEN: Room name, yes. Room name. So we have, actually-- oh, you said unique keys. Sorry. Yeah, exactly. The unique keys, we have them right here. So we can put this into a key. So we now have a dictionary.

So you can see this looks a bit different from a list, because now we actually can see that this is the advisor list. The toilet list. Men list. Instead of just having zero lists, doesn't really tells us anything. So this is a really nice way to structure your data and makes it a lot easier to work with your data. Because now, all we need to do-- we don't need any filters or anything like that.

What we can do is we can say, we go up here. And you can actually search the-- or just go into the dictionary Category And we can see we have a node called Value At Key. And this node takes in a dictionary which is what we have here. And then it takes in a key.

And we know we have our key down here, which is the instruction. We want to find all of the rooms called Instruction. So we can just take that as the key, put that up in the key here. And what we get now is a list of all of the room called instruction.

So for this example, it probably-- it's about the same amount of nodes. It's about the same amount of things you have to do. But as soon as you start working with like larger data things and you have to use this, more dictionaries is definitely the way to go. So it's a good thing to familiarize yourself with dictionaries.

And let's just quickly group this just so it doesn't look so messy. That didn't look better at all. OK. Yes. Is everyone with us at this point?

[INTERPOSING VOICES]

SYLVESTER KNUDSEN: OK. So raise your hand if you want assistance.

[SIDE CONVERSATION]

OK, yeah. Yes, sorry. What do you want to see? Like this? Question? No? Sorry? Yes. Or on your own machine. Is that what you mean? I think there's going to be a link.

AUDIENCE: [INAUDIBLE]

AUDIENCE: Can you talk a little more about [INAUDIBLE]?

SYLVESTER KNUDSEN: OK, I think we need to move on just so we have time for everything. And so if you're falling way behind, maybe look at the image or the graphs that are already done. And you can see what happened. So let's move on to the next step.

We now have our rooms. So we know which rooms we want to calculate the occupancy value from. So let's start the next occupancy calculation group. So we want to calculate the occupancy based on the area. And we're going to use a very scientific formula that says divide the area by 5. And we have the people we can put in the room. I don't know if that's right, but that's what we're going to do.

Doesn't really matter what the formula is, right? We just want to put something in now. And obviously, you guys have your ways of doing. You know way more about that than I do. So when you get back, you can put in your own little formula on how you want to do this. We're just going to go through how to actually create these. So doesn't really matter if the formula isn't really correct.

So the first thing we want to do, we want to get the area of the room because we need that to calculate the occupancy. And let's just say that the formula is we're going to divide-- let me just do this and I'll explain. We're going to divide the area by 5.

So in Dynamo, again, we can use a code plug for strings, and we can use it for numbers and formulas and whatever. And so the first thing we're doing is we're taking a code plug and just putting in the number 5. We want to divide that by the area. So there's a divide node in Dynamo. So let's put that out as well and, then put 5 into y.

The next thing we want to do is we need the area value now. So anyone have a suggestion to how we would get the area of the rooms?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yeah. Exactly the same thing. So maybe we'll actually just go back to this one. Get parameter value by name. And let's just copy that one. We don't want to search because we're lazy. So Control-C, Control-B. We now have our node. And we can unplug the inputs that are already in it just by clicking the input and then clicking out on the canvas. And we now have a node we can use.

So again, elements. Where do we want to take the elements from that we need to find the area? So if we look at this, we have our filtered rooms. We can also use the dictionary. Let's just go with the filtered rooms. So which elements do we want to find the area of?

AUDIENCE: In, right?

SYLVESTER KNUDSEN: In, yes. Because in is the rooms that are called instruction. So let's put that down there. And does anyone have an idea of what the parameter name is?

AUDIENCE: Area.

SYLVESTER KNUDSEN: Yes. If we didn't know, we could go back to this guy we have down here. We could check it if we didn't know how to spell it, which I obviously a lot of the time don't know. So I'll always check it. So area, I think I managed to spell area. But just make sure that you're spelling it right and you have capital letters the right places and all of that, because if you don't it will throw an area-- an error.

AUDIENCE: What's the shortcut for [INAUDIBLE]?

SYLVESTER KNUDSEN: Just double click on the canvas. So just, yeah, double click, and it will pop up. OK. So let's pluck that into the parameter name and let's see what we get. So we get a bunch of numbers. So these are the areas off all of the rooms. Now again, our great calculation method here, we want to divide our area by 5.

So let's just take all of the areas and put them into this divide node. And you'll see that we now get another value. And this is the value of how many people we are allowed to fit into this room. But obviously, we can't put in 9.7 people in a room.

So we want to round this number down. And there's a few different ways we can do that. But in Dynamo, there's a lot of math nodes. So let's try and find the math nodes. If you go to the library, you can see there's a map category.

And in this, we have a bunch of functions which do all kinds of mathematical things which are kind of scary, but not-- what we want to do is we want to floor this. So if we find a node that's called map.floor. There it is. map.floor. We can put that out to our canvas.

You can just search for this if you don't want to go through this, which is pretty hard. And if we put our numbers into this, we'll get a new output.

AUDIENCE: You want to round up.

SYLVESTER KNUDSEN: You want to round up. OK. Why?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: What?

AUDIENCE: [INAUDIBLE] always round up.

SYLVESTER KNUDSEN: OK. Let's round up then.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Exactly. Yes. Awesome. So instead of flooring it, we want to seal it. And that just gives us the rounded up number. Did everyone get that? We are rounding up instead of rounding down. Good.

Cool. So this is basically our occupancy calculation we just did there. So let's put that into our occupancy calculation group. And I'll just leave this here for 2 minutes. And raise your hand if there's any questions, or just shout them at me. No? All good? Good.

OK, good. So just because of the time, I think we need to just move on. So if you're not fully here, just look at the images and we'll set. So the last thing we want to do now is the output of this graph. So we want to set a parameter by its name.

And the node basically tells us everything that we need to do. So we need to input some elements. Again, where do we get our elements from? Anybody have an idea? The keys? Yeah. Yeah, we get them from the dictionary, right? So if we wanted to use dictionaries, we have already our dictionary value at key. So that would be one place to get it.

What's the other place we could get it? We just used it before.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yes. The infarum that filtered by Boolean mass. So it's exactly the same result as the dictionary. But let's for now take it from the in, because that's the room we want to set. And the parameter name that we want to set is obviously occupancy. So let's put that into parameter name.

And what would be the value that we want to set?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Map.ceiling, yes. Ooph, that's not good. Oh. So anybody know what this error means?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Sorry?

AUDIENCE: String.

SYLVESTER KNUDSEN: String. Yeah. So we're using a string, right? And the parameter doesn't allow strings as their value. It wants strings, sorry. Yes. It wants strings. It doesn't allow numbers. So anybody knows how to convert a integer to a string?

AUDIENCE: String from object.

SYLVESTER KNUDSEN: String from object, yes. So what we can do is we could go to search, and we can say string. And there's-- one of the first one is actually just string from object. And we see that converts an object to a string representation. So let's try and use that one and see what happens.

Put in the number that we have. And we could see we get something that looks exactly the same, right? The way we can check it is there's a node called object.type. Let's try and put that in over here and see what it says.

So over here it says system int 64, which is just weird. But it just means it's an integer. If we put it into the string from object, we can see that this is actually a system.string. So even though these two lists look exactly the same, the data type is different, which is what we want. So let's put that into value. And Revit does some magic, and it's done.

So I'm going a bit fast now just because of the time. But what we can do now is go back into Revit and pick one of your instruction rooms. So if you're on the 01 entry level, you can go to room 115. That's an instruction room. And look at the provinces of that room. And you'll see the occupancy now has a value.

So if we, for example, check the conference, it won't have any because we didn't put that in there. Cool. Questions Yes.

AUDIENCE: Could you nudge the [INAUDIBLE]?

SYLVESTER KNUDSEN: If I move this wall, for example. Is that what you're saying?

AUDIENCE: [INAUDIBLE] the instruction.

SYLVESTER KNUDSEN: Oh, The instruction. Yes, sure.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yes. So If we just move this up here, the room is getting bigger, right? Not sure if this was enough, but let's try and pick the room again. And we see it's 20-- I can't remember the value before, but--

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: 26, good. So it did update. The reason why it's updating is because we have Dynamo in automatic right now. So you might not have that. You might have it in manual, which means you have to press Run every time. But if you have it on an automatic, it will always calculate that value.

Cool. So if you didn't get to the end of this, afterwards, you go check the completed version. You'll probably know what's going on. But we probably need to move on.

So the next thing we're going to do is a quick challenge. And this challenge is for you guys to find all of the rooms on level 2 of the model. So find all rooms on level 2 of the model. And find the rooms that are higher than 216, and then change their name to uppercase. OK? So we can start this together.

So is everyone still doing the occupancy example, or did you finish that one? OK. So maybe let's just stop the occupancy now. And if there's questions, let's take them afterwards just so-- we probably need to keep it up. And we're going to do some of the same things in this next challenge. And we'll just roam around. And you'll do it on your own pace.

So just to set the scene for this challenge. Again, what we want to do is we want to collect all rooms on level 2 of the model. We want to find all rooms with a number higher than 216. And we want to change their names to uppercase.

So let's just start the way we did before. We want to start from the end, right? So let's make some groups. So what's the first thing that we want to do? Or the last thing? The end goal of this script would be to change rooms to upper.

And there is a, again, a node for setting a room name. So you can search for room, the name. Sorry. Set name. Not just room name. Set name. So you can see there's the set name in room. You can use that. And we'll just leave this one here in this guy.

And the next thing we want to do is we want to get all of the values. And so let me do another group. Get all rooms with number higher than 216. So we're just working through the steps here what we need to do.

And you could either do this with a list or you could do it with a dictionary, depending on how you want to do it. But we want to filter all of the rooms here. So we do that either by a dictionary or by a list. The first thing we want to do is get all rooms.

So we can kind of just copy/paste some of the things that we already did if you remember those things. We need to get all of the rooms. So figure out how to get all of the rooms. After that, figure out how to get all of their-- or filter them based on what level they are on, Actually or sorry, not level. What number if they're higher than this number.

So figure out how to make that filter. And then at the end, let's set the room name to that new uppercase name. OK. So try and figure out how to do this. And we'll just come around. So if there's questions, just to put up your hand.

OK. So let's wrap up the challenge and let's see what people did. Did anyone manage to figure out how to do it? Oh, awesome. Cool. So how did everyone do it? Did you use a dictionary, or did you use a list to filter, or how did you guys do it?

AUDIENCE: List filter.

SYLVESTER KNUDSEN: List filter. Yeah. Awesome. OK. So one way to do this could be to get all of the rooms, how many did something similar to this to get all the rooms? Yeah. Cool. Then we can make a dictionary out of the room number and the rooms. How many did this bit? Or did everyone use lists? One down there did it. Awesome. Cool.

Then we need to make a filter of some sort, because we only wanted the numbers that were higher than 216. So the way I did this was with the room number. I made the string into a actual number because I wanted to check if it was hired than something, and I can't do that with a string.

So I turned it into a number and checked if this number, this room number, is higher than 216. This is giving me out a list of Boolean values that I can use to filter. I saw a couple of you guys do it the same way, right? Did anyone do it in a different way? No. Cool.

And the last thing, I just-- to get the right rooms, I use the dictionary. So I have my keys here. Remember, we did the dictionary with the keys as room numbers, and the actual room is the value. So the way I did it here was to put in a list of keys because I know these are all of the numbers that are above 216. So that's that the actual rooms that I want.

So to put that into the key here, I'll get a list of rooms. So did anyone get another number of rooms than 46 rooms? You did? What did you get?

AUDIENCE: I got 33.

SYLVESTER KNUDSEN: 33.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yeah, I know. Yeah, true. Good. Awesome. I think I said you had to collect them on level 2 in the PowerPoint. Yeah. That's great. And then setting the room name. We have a string to upper method in Dynamo which just takes in a string and then turn that into all uppercase. So we use that to change the room name, and we set the name of the room.

Great. So we are running a bit behind schedule, or actually, a lot. So what we're going to do is we're going to skip to the Excel part and we're going to look at some of the Excel examples. And if you want to go back and look at the other things, you have all of the data sets. It's going to be able to download all of the data sets. Yeah. It's going to be available on the website, I guess. So go back and have a look at it when we're done.

So let's close this down, and let's go into our data set. And again, let's skip these color overwrites and just have a look at them if you want to. Come ask questions if you have any questions about that. And instead, let's try and do the export room data to Excel. Actually, let's not open this from here. Let's open a new one.

So open up a new Dynamo. Open up a new Dynamo. So what we want to do in this one is we want to work with our data outside of Revit. So we want to export all of our-- let's stick to the rooms. So we want to export our room data to Excel.

And we can look at it in there, and we can maybe change some things in there. Because even though we have schedules and stuff like that inside of Revit, Excel is just many times-- it's just easier to work with these kind of things to do some modifications. And we're all used to Excel.

So what we want to do is let's try and do this the same way as we did before, and let's start by the end. So the end is we want to write something to a cell. So let's see if Dynamo has some Excel nodes. And luckily, they did. So we have import Excel and export Excel. And we want to write something to Excel. So we want to export data to Excel.

And this one takes in a bunch of inputs, as we can see. And these kind of inputs actually defines how we're going to do this graph. But let's just create this one as a group, which is our write to Excel. Cool.

So next thing we want to do is we want to get a bunch of parameter values, which is all of the data associated with the room. So let's make a-- let's make another group. Again, if you want to use these nodes as I'm doing, just Control-W, and you'll get them out. And you can create a group. And this group is going to be Get Parameter Values. Cool.

And next thing, let's copy this group. And let's say get all of the rooms. The thing we'd done in all of the scripts. So get all rooms. And here's the thing. In theory, it's really cool to be able to start from the end and just work backwards. But often, you can't do that because you will know things when you start building it. So we'll probably add more things, but this is a good start.

So to get all the rooms, we know what we have to do, right? We have to get the category. Categories. Get the rooms. And all elements of room. Not of room, of category. Cool. So there we go. We now have all of the rooms. So let's put that into a group.

So you'll see we have the 91 rooms again, right? So next thing we want to do is we want to get the parameter value. But because we want to export these things out to Excel, it's nice to have them sorted in a way so we know we export it in the same way every time. Because right now, these are just random rooms. We have no idea how this is sorted.

So if we have to work with it in Excel and get it back, it's nice to know in which order the rooms are so we can have them sorted and stuff like that. So before we actually do this, let's sort all of these rooms. And the way we can do this is by sort by-- you see we have Sort By Key and Sort By Function. And we're going to use Sort By Function this time. So let's put this out here.

What Sort By Function requires is a list of values, which is going to be a list of rooms because we want to sort these rooms. The function takes in a function. And we don't really know what a function is. But one way to look at this is-- let me do this. So you can see, when we have a node like this that hasn't-- hasn't been connected to any inputs, you'll actually see that this is a function.

So all nodes are actually a function that takes in an input. And then it calculates something based on those input that you put into the node. So we can actually use this as a function. But this doesn't really make sense right now, because this one isn't-- I still need some more information.

So if we put in a parameter name-- because we want to sort all of the rooms by their number. So we want to get the rooms' number. So let's put a number here. And into [INAUDIBLE]. So you'll see this is still a function because it needs all of the parameters to work as a node. So this is a function that we're inputting into here. And we'll see we just get a list of new rooms, or not new rooms. List of the rooms again.

And if you look at-- maybe let's-- you can see the IDs of the rooms, right? You can see this one has a 177,000 whatever. So we'll see that the order has actually changed of these rooms. It's switched some things. So if we do room-- nope. room.number. We'll get this. We can look at the room numbers here.

And we can look at it in the new list. So just copy this node. And let's look at it here. So you can we've now sorted the rooms based on the number. So now we know that's the order of what we're going to export to Excel. So let's just get rid of these, and let's put this into a little group like this.

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Sorry?

AUDIENCE: Sort the dictionary [INAUDIBLE].

SYLVESTER KNUDSEN: If you can sort a dictionary. So dictionaries are actually always unsorted. Like, they're just random. You can't really determine the order of a dictionary, because you don't really need to, because you have the keys. Yeah.

So next step, get the parameter values. We know how to do that, right? We say get parameter value by name. And our elements is our sorted elements. So let's put that up here. And now we don't only want one parameter. So we actually want to get a bunch of parameters. Instead of copying this a bunch of times and putting in a parameter, what we can do is we can create a list of parameters.

And we could do that very easily in a code plug. So if you double click on the canvas, you can create a list by just doing-- I'm assuming a bit-- by doing two square brackets, and a-- oops. And finish it with a semicolon. So this is actually a list now, but it's empty because we didn't put anything in it.

So let's put in all of the information that we want to export. So let's start by level. We want to get the level out to Excel. We want to get the number. And again, be careful you're not misspelling anything. Number. We want to get the-- we want to get the name. We want to get the department. And we want to get the area.

So what we can see now is that this is not an empty list anymore. It's actually a list of five elements now, which is just five strings. And we can use these strings in the parameter name. And this node will automatically figure out that it has to get all of those parameters.

But as you can see, we only have one. We only got one room now, even though we've put in a bunch of rooms. Does anyone know the reason why this is happening? Why we're only getting the parameters from one room?

AUDIENCE: [INAUDIBLE]

SYLVESTER KNUDSEN: Yeah. So Dynamo has this thing called lacing. And not going to go too much into what lacing is. The best way to figure out how lacing works is just trying all the different options and seeing-- and when you have the right result, that's great. Don't need to know what happened.

But in lacing, the way you figure-- you know where you get lacing up on a node is by right clicking the node. And you'll see you get this option called Lacing. And it has auto, shortest, longest, and cross-product. You can go and read a bit about it in the primer, I think, or something like that. It makes sense when you look at it. But often, you'll just try it, and sometimes it works. Sometimes it doesn't.

So for example, if we do cross-product, this will just calculate this function on all of the elements, basically. And you can see now have a list of lists of a bunch of different parameters. So we have 91 lists, which is the same amount of rooms that we have. So we now got everything. We've got all of the parameters, all that we need.

So let's put that into a group again. But when we're like stuff outside of Revit and we maybe want to change it outside of Revit, one thing that's really important to have with us is the element ID, because if we don't have the ID, we won't be able to find it. Or we maybe do because of the things that we put out. But it's way easier to find the element again if we have the ID.

So and let's try and get the element ID of all of our rooms. The way we can do that is just by elements.ID. So you can see there's actually a node to get that element ID. So that's pretty easy. Let's take the rooms. Put it into the element ID. And you'll see we get just some weird numbers. But this is just the ID that Revit uses to reference an object.

So we want this one to be-- we want to export this guy as well. Excuse me one second. So we want to actually combine two lists now. Because we have a list up here, and we want to add to this list here. So we can do a list.AddItemToFront. Is people with me so far? Yes? Good.

And cool. So this one-- actually, let's, first of all-- because we want some headlines to our Excel. So first what we want to do is we want to add some headlines to this guy here. And the way we can do that is by this list.AddItemToFront. And we have our, basically, we have our headlines here. We want columns that has a header. So let's add this one into our item and this one to our list.

And you see we now have another list in our lists. We have a bunch of list now. But we now have these headlines, which is the first thing you want to see in our Excel spreadsheet. So the same thing we can do for element IDs, we also want a way to see that this column is the element ID inside of Excel. So let's add a string just called-- not Excel-- called element ID. There.

And let's do the same thing here. So let's just copy this one. We just need an AddItemToFront again. And the item is going to be our headline. So let's take this one down there and the list down there. So now we have this thing.

So now we need to combine these two lists. And the way we can do that is by list.combine. Combine. Sorry. That's not what we want. We want another list, add item to front. We just want to call this list combined because this list combined as a node is very confusing.

So we want to add these elements. We want to add them to this list. So this is our item and this is our list. But if we just do it like this, you can see we'll just add this whole list here. And it doesn't really fit the structure, because we want to add this one to the first list up here. And then we want to add this one to the next list up here.

And instead of using lacing, Dynamo also has something called levels, which is, again, a bit confusing. And I need to check up on it. But what you can do is if you add, if you press this arrow here, you can say Use Levels. And it will just tell the node which level it should take the elements from.

And it's a bit confusing. But what you can see here is that it has-- the node has levels. So we can see this list is at level 3. These lists are at level 2. And all of the elements are at level 1. So you can always open your list and see what level the things are on.

So we can add some levels here. And again, a good way to learn how to do this is just by trying and seeing if it works. And sometimes it makes sense, and sometimes it doesn't really. But you can see this is still not what we want, right? Because we want to take all of the-- like, we want to add elements to each of these list here.

So if we go like this, again, this seems a bit magical. But we need to hurry a bit. So what we see we have now is a list of all of the headlines, and then all of our values just come. So you need to think of this as like rows. This is a row which has all of the headlines. This is another row that has all of the values. And stuff like that.

So let's quickly export this to Excel before the break. So the first thing Excel node needs is the file paths. So we can search for a file path up here. File path. And if you press Browse on this, you'll get a another window. And you can go to the workshop content, the Dynamo kickstart, other files. And there should be a room data export Excel file.

Did you guys find that one? Yeah? So this is our file path that we want to write to. So we put that into the file path. Next thing is the sheet name. And we maybe we don't know that. So let's just check our Excel file.

So we might have an Excel file with multiple sheets. But in this case, we only have one. So sheet 1 is the sheet name. So let's put in sheet 1. Sheet 1 in the sheet name. And the start row and start column just tells Excel where it should start putting in the data that we want. And we just want it to start from the top. So that's going to be 0.

Because when you work with Dynamo and these kind of things, always think of 0 as the first element. Almost never starts at 1. It's always starting at 0. So we want to start row 0 and start column 0. And the data we want to exploit is our-- the data that we have down here.

And a good thing before we do all of this is just to close your Excel spreadsheet that you want to write to just to not confuse it. So let's put it in manual as well just so we don't explode anything. Let's put our data up in here.

Now you can see the node turned another color. So it's not-- like, it's ready to be run now. So let's run that. And you can see it's doing some weird things in Excel. Oh. There. You might have to close that dialog box.

And so you can see we now have basically just the schedule. But we just took all of these things outside of Dynamo. We can now work with the inside of Excel. And so we have all of the data that we need. We have the element ideas. So it's really easy for us to go back and forth between Revit and Excel. Yeah. Do we need to do break now? Five minutes. OK. Is there any questions about this? Yeah.

AUDIENCE: Can you go back to [INAUDIBLE]?

SYLVESTER KNUDSEN: Yep. So to where I added it to which one?

AUDIENCE: Yeah. Keep going left.

SYLVESTER KNUDSEN: OK.

LILLI SMITH: Everybody, we're going to take a break now. We have a 30-minute break. I think there's snacks and coffee outside. You're welcome to stay in here and keep working. And we'll be around if you have questions. But we'll be back here at 11:00 o'clock and get started with some of our generative workflows.

Downloads

______
icon-svg-close-thick

Cookie 首选项

您的隐私对我们非常重要,为您提供出色的体验是我们的责任。为了帮助自定义信息和构建应用程序,我们会收集有关您如何使用此站点的数据。

我们是否可以收集并使用您的数据?

详细了解我们使用的第三方服务以及我们的隐私声明

绝对必要 – 我们的网站正常运行并为您提供服务所必需的

通过这些 Cookie,我们可以记录您的偏好或登录信息,响应您的请求或完成购物车中物品或服务的订购。

改善您的体验 – 使我们能够为您展示与您相关的内容

通过这些 Cookie,我们可以提供增强的功能和个性化服务。可能由我们或第三方提供商进行设置,我们会利用其服务为您提供定制的信息和体验。如果您不允许使用这些 Cookie,可能会无法使用某些或全部服务。

定制您的广告 – 允许我们为您提供针对性的广告

这些 Cookie 会根据您的活动和兴趣收集有关您的数据,以便向您显示相关广告并跟踪其效果。通过收集这些数据,我们可以更有针对性地向您显示与您的兴趣相关的广告。如果您不允许使用这些 Cookie,您看到的广告将缺乏针对性。

icon-svg-close-thick

第三方服务

详细了解每个类别中我们所用的第三方服务,以及我们如何使用所收集的与您的网络活动相关的数据。

icon-svg-hide-thick

icon-svg-show-thick

绝对必要 – 我们的网站正常运行并为您提供服务所必需的

Qualtrics
我们通过 Qualtrics 借助调查或联机表单获得您的反馈。您可能会被随机选定参与某项调查,或者您可以主动向我们提供反馈。填写调查之前,我们将收集数据以更好地了解您所执行的操作。这有助于我们解决您可能遇到的问题。. Qualtrics 隐私政策
Akamai mPulse
我们通过 Akamai mPulse 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Akamai mPulse 隐私政策
Digital River
我们通过 Digital River 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Digital River 隐私政策
Dynatrace
我们通过 Dynatrace 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Dynatrace 隐私政策
Khoros
我们通过 Khoros 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Khoros 隐私政策
Launch Darkly
我们通过 Launch Darkly 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Launch Darkly 隐私政策
New Relic
我们通过 New Relic 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. New Relic 隐私政策
Salesforce Live Agent
我们通过 Salesforce Live Agent 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Salesforce Live Agent 隐私政策
Wistia
我们通过 Wistia 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Wistia 隐私政策
Tealium
我们通过 Tealium 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Tealium 隐私政策
Upsellit
我们通过 Upsellit 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Upsellit 隐私政策
CJ Affiliates
我们通过 CJ Affiliates 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. CJ Affiliates 隐私政策
Commission Factory
我们通过 Commission Factory 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Commission Factory 隐私政策
Google Analytics (Strictly Necessary)
我们通过 Google Analytics (Strictly Necessary) 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Google Analytics (Strictly Necessary) 隐私政策
Typepad Stats
我们通过 Typepad Stats 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Typepad Stats 隐私政策
Geo Targetly
我们使用 Geo Targetly 将网站访问者引导至最合适的网页并/或根据他们的位置提供量身定制的内容。 Geo Targetly 使用网站访问者的 IP 地址确定访问者设备的大致位置。 这有助于确保访问者以其(最有可能的)本地语言浏览内容。Geo Targetly 隐私政策
SpeedCurve
我们使用 SpeedCurve 来监控和衡量您的网站体验的性能,具体因素为网页加载时间以及后续元素(如图像、脚本和文本)的响应能力。SpeedCurve 隐私政策
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

改善您的体验 – 使我们能够为您展示与您相关的内容

Google Optimize
我们通过 Google Optimize 测试站点上的新功能并自定义您对这些功能的体验。为此,我们将收集与您在站点中的活动相关的数据。此数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID 等。根据功能测试,您可能会体验不同版本的站点;或者,根据访问者属性,您可能会查看个性化内容。. Google Optimize 隐私政策
ClickTale
我们通过 ClickTale 更好地了解您可能会在站点的哪些方面遇到困难。我们通过会话记录来帮助了解您与站点的交互方式,包括页面上的各种元素。将隐藏可能会识别个人身份的信息,而不会收集此信息。. ClickTale 隐私政策
OneSignal
我们通过 OneSignal 在 OneSignal 提供支持的站点上投放数字广告。根据 OneSignal 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 OneSignal 收集的与您相关的数据相整合。我们利用发送给 OneSignal 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. OneSignal 隐私政策
Optimizely
我们通过 Optimizely 测试站点上的新功能并自定义您对这些功能的体验。为此,我们将收集与您在站点中的活动相关的数据。此数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID 等。根据功能测试,您可能会体验不同版本的站点;或者,根据访问者属性,您可能会查看个性化内容。. Optimizely 隐私政策
Amplitude
我们通过 Amplitude 测试站点上的新功能并自定义您对这些功能的体验。为此,我们将收集与您在站点中的活动相关的数据。此数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID 等。根据功能测试,您可能会体验不同版本的站点;或者,根据访问者属性,您可能会查看个性化内容。. Amplitude 隐私政策
Snowplow
我们通过 Snowplow 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Snowplow 隐私政策
UserVoice
我们通过 UserVoice 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. UserVoice 隐私政策
Clearbit
Clearbit 允许实时数据扩充,为客户提供个性化且相关的体验。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。Clearbit 隐私政策
YouTube
YouTube 是一个视频共享平台,允许用户在我们的网站上查看和共享嵌入视频。YouTube 提供关于视频性能的观看指标。 YouTube 隐私政策

icon-svg-hide-thick

icon-svg-show-thick

定制您的广告 – 允许我们为您提供针对性的广告

Adobe Analytics
我们通过 Adobe Analytics 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Adobe Analytics 隐私政策
Google Analytics (Web Analytics)
我们通过 Google Analytics (Web Analytics) 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Google Analytics (Web Analytics) 隐私政策
AdWords
我们通过 AdWords 在 AdWords 提供支持的站点上投放数字广告。根据 AdWords 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 AdWords 收集的与您相关的数据相整合。我们利用发送给 AdWords 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. AdWords 隐私政策
Marketo
我们通过 Marketo 更及时地向您发送相关电子邮件内容。为此,我们收集与以下各项相关的数据:您的网络活动,您对我们所发送电子邮件的响应。收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、电子邮件打开率、单击的链接等。我们可能会将此数据与从其他信息源收集的数据相整合,以根据高级分析处理方法向您提供改进的销售体验或客户服务体验以及更相关的内容。. Marketo 隐私政策
Doubleclick
我们通过 Doubleclick 在 Doubleclick 提供支持的站点上投放数字广告。根据 Doubleclick 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Doubleclick 收集的与您相关的数据相整合。我们利用发送给 Doubleclick 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Doubleclick 隐私政策
HubSpot
我们通过 HubSpot 更及时地向您发送相关电子邮件内容。为此,我们收集与以下各项相关的数据:您的网络活动,您对我们所发送电子邮件的响应。收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、电子邮件打开率、单击的链接等。. HubSpot 隐私政策
Twitter
我们通过 Twitter 在 Twitter 提供支持的站点上投放数字广告。根据 Twitter 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Twitter 收集的与您相关的数据相整合。我们利用发送给 Twitter 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Twitter 隐私政策
Facebook
我们通过 Facebook 在 Facebook 提供支持的站点上投放数字广告。根据 Facebook 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Facebook 收集的与您相关的数据相整合。我们利用发送给 Facebook 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Facebook 隐私政策
LinkedIn
我们通过 LinkedIn 在 LinkedIn 提供支持的站点上投放数字广告。根据 LinkedIn 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 LinkedIn 收集的与您相关的数据相整合。我们利用发送给 LinkedIn 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. LinkedIn 隐私政策
Yahoo! Japan
我们通过 Yahoo! Japan 在 Yahoo! Japan 提供支持的站点上投放数字广告。根据 Yahoo! Japan 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Yahoo! Japan 收集的与您相关的数据相整合。我们利用发送给 Yahoo! Japan 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Yahoo! Japan 隐私政策
Naver
我们通过 Naver 在 Naver 提供支持的站点上投放数字广告。根据 Naver 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Naver 收集的与您相关的数据相整合。我们利用发送给 Naver 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Naver 隐私政策
Quantcast
我们通过 Quantcast 在 Quantcast 提供支持的站点上投放数字广告。根据 Quantcast 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Quantcast 收集的与您相关的数据相整合。我们利用发送给 Quantcast 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Quantcast 隐私政策
Call Tracking
我们通过 Call Tracking 为推广活动提供专属的电话号码。从而,使您可以更快地联系我们的支持人员并帮助我们更精确地评估我们的表现。我们可能会通过提供的电话号码收集与您在站点中的活动相关的数据。. Call Tracking 隐私政策
Wunderkind
我们通过 Wunderkind 在 Wunderkind 提供支持的站点上投放数字广告。根据 Wunderkind 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Wunderkind 收集的与您相关的数据相整合。我们利用发送给 Wunderkind 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Wunderkind 隐私政策
ADC Media
我们通过 ADC Media 在 ADC Media 提供支持的站点上投放数字广告。根据 ADC Media 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 ADC Media 收集的与您相关的数据相整合。我们利用发送给 ADC Media 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. ADC Media 隐私政策
AgrantSEM
我们通过 AgrantSEM 在 AgrantSEM 提供支持的站点上投放数字广告。根据 AgrantSEM 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 AgrantSEM 收集的与您相关的数据相整合。我们利用发送给 AgrantSEM 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. AgrantSEM 隐私政策
Bidtellect
我们通过 Bidtellect 在 Bidtellect 提供支持的站点上投放数字广告。根据 Bidtellect 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Bidtellect 收集的与您相关的数据相整合。我们利用发送给 Bidtellect 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Bidtellect 隐私政策
Bing
我们通过 Bing 在 Bing 提供支持的站点上投放数字广告。根据 Bing 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Bing 收集的与您相关的数据相整合。我们利用发送给 Bing 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Bing 隐私政策
G2Crowd
我们通过 G2Crowd 在 G2Crowd 提供支持的站点上投放数字广告。根据 G2Crowd 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 G2Crowd 收集的与您相关的数据相整合。我们利用发送给 G2Crowd 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. G2Crowd 隐私政策
NMPI Display
我们通过 NMPI Display 在 NMPI Display 提供支持的站点上投放数字广告。根据 NMPI Display 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 NMPI Display 收集的与您相关的数据相整合。我们利用发送给 NMPI Display 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. NMPI Display 隐私政策
VK
我们通过 VK 在 VK 提供支持的站点上投放数字广告。根据 VK 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 VK 收集的与您相关的数据相整合。我们利用发送给 VK 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. VK 隐私政策
Adobe Target
我们通过 Adobe Target 测试站点上的新功能并自定义您对这些功能的体验。为此,我们将收集与您在站点中的活动相关的数据。此数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID 等。根据功能测试,您可能会体验不同版本的站点;或者,根据访问者属性,您可能会查看个性化内容。. Adobe Target 隐私政策
Google Analytics (Advertising)
我们通过 Google Analytics (Advertising) 在 Google Analytics (Advertising) 提供支持的站点上投放数字广告。根据 Google Analytics (Advertising) 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Google Analytics (Advertising) 收集的与您相关的数据相整合。我们利用发送给 Google Analytics (Advertising) 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Google Analytics (Advertising) 隐私政策
Trendkite
我们通过 Trendkite 在 Trendkite 提供支持的站点上投放数字广告。根据 Trendkite 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Trendkite 收集的与您相关的数据相整合。我们利用发送给 Trendkite 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Trendkite 隐私政策
Hotjar
我们通过 Hotjar 在 Hotjar 提供支持的站点上投放数字广告。根据 Hotjar 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Hotjar 收集的与您相关的数据相整合。我们利用发送给 Hotjar 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Hotjar 隐私政策
6 Sense
我们通过 6 Sense 在 6 Sense 提供支持的站点上投放数字广告。根据 6 Sense 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 6 Sense 收集的与您相关的数据相整合。我们利用发送给 6 Sense 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. 6 Sense 隐私政策
Terminus
我们通过 Terminus 在 Terminus 提供支持的站点上投放数字广告。根据 Terminus 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Terminus 收集的与您相关的数据相整合。我们利用发送给 Terminus 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Terminus 隐私政策
StackAdapt
我们通过 StackAdapt 在 StackAdapt 提供支持的站点上投放数字广告。根据 StackAdapt 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 StackAdapt 收集的与您相关的数据相整合。我们利用发送给 StackAdapt 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. StackAdapt 隐私政策
The Trade Desk
我们通过 The Trade Desk 在 The Trade Desk 提供支持的站点上投放数字广告。根据 The Trade Desk 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 The Trade Desk 收集的与您相关的数据相整合。我们利用发送给 The Trade Desk 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. The Trade Desk 隐私政策
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

是否确定要简化联机体验?

我们希望您能够从我们这里获得良好体验。对于上一屏幕中的类别,如果选择“是”,我们将收集并使用您的数据以自定义您的体验并为您构建更好的应用程序。您可以访问我们的“隐私声明”,根据需要更改您的设置。

个性化您的体验,选择由您来做。

我们重视隐私权。我们收集的数据可以帮助我们了解您对我们产品的使用情况、您可能感兴趣的信息以及我们可以在哪些方面做出改善以使您与 Autodesk 的沟通更为顺畅。

我们是否可以收集并使用您的数据,从而为您打造个性化的体验?

通过管理您在此站点的隐私设置来了解个性化体验的好处,或访问我们的隐私声明详细了解您的可用选项。