AU Class
AU Class
class - AU

Getting Started with Customizing Dynamo for the Non-Programmers Using C#

Partager ce cours
Rechercher des mots-clés dans les vidéos, les diapositives des présentations et les supports de cours :

Description

Are you using Dynamo? Need more from what is available with out-of-the-box nodes? Have you ever wanted to make a custom node in Dynamo but didn’t have any programming skills to get started? If so, this class is for you! This lecture will explain how to use and create your own custom nodes using Zero Touch and C# programming language. This lecture will also give attendees very gradual doses of Dynamo and C# programming so they leave with the skills to apply Dynamo at the workplace on practical projects. No C# programming experience is required; this class is meant for the nonprogrammer. Revit software experience is required.

Principaux enseignements

  • Learn how to create custom nodes using C# and Zero Touch
  • Learn to use custom nodes to enhance your production on daily tasks
  • Learn to have fun with Dynamo
  • Learn how to use custom nodes from the package manager

Intervenant

  • Avatar de Marcello Sgambelluri
    Marcello Sgambelluri
    Marcello has worked on many BIM projects over the last 25 years as a project manager, design engineer, and BIM Director. Some of the BIM projects Marcello has worked on includes the Sphere in Las Vegas, The Walt Disney Concert Hall in Los Angeles - CA, the Ray and Maria Stata Technology Center at MIT, Tom Bradley International Terminal Expansion at LAX. Marcello is internationally recognized at one of the top BIM leaders and contributors to the education and implementation of BIM technology in the building industry. Marcello continually speaks at Autodesk University and the Revit Technology Conference (BILT) where he has received the 1st place speaker award for a record 18 times between 2012 thru 2021 between both conferences. In addition, Marcello provides training and consulting the the AEC industry. Marcello received his Bachelors and Master’s degrees in Civil Engineering and he is also a licensed Civil and Structural Engineer.
Video Player is loading.
Current Time 0:00
Duration 1:28:37
Loaded: 0.19%
Stream Type LIVE
Remaining Time 1:28:37
 
1x
  • Chapters
  • descriptions off, selected
  • en (Main), selected
Transcript

MARCELLO SGAMBELLURI: Hello everyone. Welcome. How is everyone doing?

AUDIENCE: Excellent!

AUDIENCE: All right.

MARCELLO SGAMBELLURI: Is everyone excited about the class?

ALL: Yeah.

MARCELLO SGAMBELLURI: Yeah, all right! Woo! Good AU?

ALL: Yes.

MARCELLO SGAMBELLURI: Awesome, awesome. Thanks for joining us. I know yesterday we had a good time, so I appreciate you coming to our morning session.

I am Marcello Sgambelluri. I'll be your presenter for today's lab on getting started with customizing Dynamo for the non-programmers using C#. Boy, that's quite a mouthful, isn't it? But I tried to make the title as descriptive as possible. I am going to be joined by my very helpful and very skilled lab assistants, Carl in the back, as well as John, as well as Sebastian. And Patrick, you can lend a hand as well if you like.

So this way it's going to work. As we're rolling along, if you have a question for me, you can ask me any question you want. You raise your hand and look towards me. If you have a technical issue, something's not working, you turn back, raise your hand and look at them. Got it? Yeah? OK, awesome, awesome.

Oh my gosh, I'm so excited. This is the first time I've ever taught a text coding class. Woo! We're going to see how it goes.

So, how many people here are Dynamo users? Oh, wow, awesome. And how many people here are C# coders?

[AUDIENCE LAUGHS]

That's OK. Do you see this description-- whoops! You see that? That says for non-programmers. So I will not assume you are C# coders. I won't even assume you're a Dynamo user. You just have to be a Revit user. Anyone here a Revit user? Yeah!

So what we're going to do, we're going to have an awesome time today. I'm going to introduce you to something called "zero touch." Zero touch is a way to use C# to create Dynamo custom nodes. How does that sound?

So we're going to be making Dynamo custom nodes today. Forget about the "out of the box" stuff. Forget about all those packages out there. We're making our own stuff today.

So we are going to start with the fundamentals, but we'll slowly take off. In front of you-- may I borrow this-- in front of you, you have a cheat sheet with eight examples. We are going to try to get through all eight of these today. And if you have any questions-- like I said, if you have any question, shout them out. Has anyone seen me speak before?

AUDIENCE: Woo!

MARCELLO SGAMBELLURI: OK. So I get really excited and lively up here, so I'm going to run around. So just bear with me. So a little bit about me really quick, I'm Marcello. I've been teaching since 2012. I'm a licensed civil and structural engineer. I've been using Dynamo since 2014.

And I also run a blog site called Simply Complex. Check it out. That's kind of what I do. I try to break things down that are complex into simple things.

YouTube channel, got a podcast, check it out. I started recently at Comic Strip, so check it out. So we're going to get going.

So this is how it works. Ready? So these are what I call my Dynamo cheat sheets. I'm actually going to be publishing a book hopefully next year. And this is just really basically the way it works.

We got a section up here that says this is a title zone. It's what we're going to be doing. This is the code zone. This is the code you type in.

And then basically this is the geometry node. This is basically what nodes pop out of that, and just what happened, and pretty obvious stuff. But I'll coach you through it so you won't have to really be looking at that handout.

If you'd like to take this home today, feel free. Please leave it, if you don't want to because I don't want to see it in the garbage outside. Everyone ready to go?

AUDIENCE: Yeah.

MARCELLO SGAMBELLURI: Yeah, OK? So I am going to tell you one more thing about myself. Tomorrow-- no, excuse me, in one week, I will be celebrating my 20th anniversary at my company. I've been there 20 years. Thank you, thank you, thank you.

[APPLAUSE]

So the first thing-- when I tell that someone, the first thing they ask me is how old are you? So I was like, you know what, why don't we make a Dynamo node that calculates Marcellos' age? That way we get it out there. Is that a good way to start?

We'll do that, and then we'll hit that Revit API. Sounds good? All right, let's do it. You got all that.

There's just a few things I need to explain because we can't really have time to go into it. We're going to be using Visual Studio today to get into the code. There's a lot of presets that you have to do. You can Google it. It's also in the handout in description.

But basically, you just create a project, you create a DLL that you're going to be saving to, a DLL that you're going to be saving to. You're going to name it, and then you add references, and you add using statements. That's all spelled out.

We're not going to go over that because I want to hit the code-- I want to get into the meat of the code. So if you have any questions about that later, ask me later. It's all spelled out there.

Our pre-examples in the handouts-- so the way it works is like this. So basically, the handout has these eight that I talked about. It has additional ones, eight more. And these are just basically how to step into it and get started.

So everyone cool with that? You can read that. Let's do that code.

C#-- oh, and by the way, I always traditionally bind my handouts and get to pass them around. So these covers are-- there's different covers on these. There's about 150 pages of the draft of the book I'm going to be making.

So go ahead and pass it around, check it out. Have fun with it. Here you go. In my last class, those were stolen. So if I don't get them back-- if I don't get them back, then that means I've made something worth stealing.

[AUDIENCE LAUGHS]

So let's do it. Let's do it. John, how did we do on the intro? How many minutes?

JOHN: Eight minutes.

MARCELLO SGAMBELLURI: Oh, eight minutes! I tried to save it under seven. Here we go. So I'm using my computer, so the data sets are in a slightly different place. But these awesome lab assistants will help you.

So if you look at the data set, you have to navigate to the desktop and then to today's class, which is called "Getting Started." Can you get there? And then under there, you're going to see a series of these folders.

So 00, 01, 02, 03, 04, are all ones that get you-- get all the whole thing setup. So we won't go through that. We're going to jump right into number five called "Get Age."

You're going to get the hang of this. C# needs to compile. You need to close it, you need to open Revit, you need to open Dynamo. You need to load the DLL, and you need to run it.

So there's five steps we have to do through each exercise. So you'll get used to it. So they're all kind of-- they're all-- it's all going to be systematic.

So you go into number five, Get Age, and there's a final, and there's a start. We're going to start with the start. And that'll be the 0-- that'll be the Visual Studio script that we're going to be creating. At any time if you get lost, or you want to, you can always open up the final and use that because it's a completed one.

So go ahead and click on Start. Now, you've got to double check the folder you're in because you can mess yourself up pretty bad, so Get Age and then Start. Now, you're going to see this folder-- this file here called .sln. That's a Visual Studio solution file. Go ahead and double-click on it, and it should ask you what do you want to open it with. Open it with Visual Studio.

Visual Studio Community is free if you'd like to get it. It's completely free. If you want to know more about Visual Studio, Google it.

[CROWD CHUCKLES]

So here's the environment that we're going to code in. Just basically look on the far right. There is a file called a .cs. This is going to be our-- it's basically a class file. I'll explain what that means.

So just real quick with the architecture, these are using statements. These just basically help the programmer so you don't have to type everything out. Like RivetService.transaction dot dah dah dah, it's like short script. That's all that is. You don't need to care or know about that.

One other thing is up here, there's references which I already preloaded. In here, we have some very important ones, Dynamo. The handout tells you exactly where to get these.

And you have the data set, and they're already in there. So if you want to start doing this, you can just copy this over and grab the references. So you don't have to necessarily know where all these come from. i get that common question.

And then also in here is the Revit API, which is awesome. And then one other here called friends example. I created a database of all my friends. And they know all my ages-- my age. So we're going to tap that reference. You got it?

That is where the file is to figure out where my age is. You understand I get that question, too. Like where did you-- I just load it in a reference. I made it, and loaded it.

How to make references is way beyond this class. This is an intro class. Clear with that? Awesome.

First thing is in C#, you have to have a namespace. A namespace is like a book. Where did my book go? Somebody already steal it?

So a namespace is like the name of your book. Getting Started, that's the namespace. Basically the way it works.

Then under there, you have a class. A class is basically the name of the chapter. And then under that you have a method. And the methods are like the sentences that do things.

So I already created a namespace for you and add a class name. We're not going to be doing that. We're going to start with creating methods, the actual meat of what happens. I didn't want to foul anyone up with having to type all this stuff out.

Cool with that? That means we can just hit the ground running. We're going to create methods. Methods are also called subroutines. Those are the sentences in the book, and that's what the meaning is.

So let's get going. Lab assistants, do you see this on everyone's screen? Do I get a yes?

So I made this really easy. I just put code here. If you put two forward slashes in C#, it becomes a comment.

So we're just-- whenever you see place code here, that's where we're going to be typing our code. And if you need help, it's always down here. It zeroed out-- I mean, commented out. So we're going to start typing here. Everyone with me?

Now, this is the way it works. Let me back up and show you something here. So on our first example-- so I'm getting-- I'm getting really excited about this, holy smokes! I don't move too fast.

So this is going to be the end product. This is my-- did it show my age? Oh no, good.

So this is the code we're going to write, pretty simple. And then this is what pops out, a Dynamo node that's going to calculate my age. We were going to do-- we were going to do this one where we have an input port. This is one we're going to do.

So this is the end game. You always want to know what you want to do in the end. We want to make a node that calculates-- shows Marcello's age and maybe has a fudge factor on it depending on who I'm talking to.

Does that sound like an appropriate input port for an age node, maybe? It defaults at zero. Come on, give me a break.

So, let's do it. Woo! This is Visual Studio. So this is the only time we're going to actually type out the class in the-- I mean, the method in its entirety.

The way it works is, remember, we got the book name of our book, we got the name of our chapter. Now for zero touch, you have to actually add this private. It just hides part of the node. You don't really need to know-- necessarily know that.

Let's create a method. So what you've got to do is you've got to make it public. What public does-- go ahead and start typing with me. What public does is it says that it needs to be accessed by basically Dynamo. It's got to be static so that-- it has to do with the instance of it.

You don't need to know that too much. Just say public static, and go with it. But every method you're going to write, woo, 99% of every method you're going to write's going to say public static. And this is an intro.

Next, you have to ask what is coming out of the output port?

AUDIENCE: Age.

MARCELLO SGAMBELLURI: An age, an age, my age. So, C# is very type-based. It is a stickler for type.

By the way, if you're not a Dynamo user-- I did see some hands that didn't go up-- the power of Dynamo is it always sends information out. There is always an output port on the right side of that node-- anyone can challenge about that, I said always-- because that's a point.

So we send something out. What are we sending out? We're sending on an age.

Now what's the type-- what's the type of that? Is it going to be a-- what we call a doub-- oh, who said integer? Very good.

Yeah when he says, hey, what's your age? You say, I'm 24.785 years old. I don't do that.

I mean, maybe they do that with the toddlers. Oh, they're 12 months old. They're 24-- 30-- where does it start, 48 months old. I don't know. But anyway, you get the idea. So you think, what am I going to send out? And int makes more sense.

So you have to start-- when you start a method, a method, you have to say public static, and the first thing you do is declare its type, which is going to be the output port. So that would be an "int" or an integer, which has no decimal places. So go ahead and type I-N-T, I-N-T.

Now space, the next thing you do is you have to actually name the method. The name of the method is also the name of the node. [GASP] How cool is that? You get to name your own node. Cool? You like it?

So I called this Marcello Age Node. So, I mean, you can go ahead and do that. Methods typically start with a capital. And if you have more than on word, go ahead and make it uppercase because that's called camel script.

It just helps you find the-- don't put spaces in coding. You're going to get yourself in a world of hurt. So do that. So that's basically it.

Now, a method, when you see these two parentheses-- has anyone ever seen those before, like at the end of something? You're like, what does that mean? That just means a method is running a program. A function is running.

If there's nothing in it, that means it requires no input. So if we ran this thing, and we left that blank, can anyone tell me what you think would happen with the Dynamo node?

AUDIENCE: There's no inputs.

MARCELLO SGAMBELLURI: It would have no input port. But I want to put a fudge factor on my age, so I want an input port. So that-- what goes in there is input for my method, which is also in zero touch, and in Dynamo, and input port. Yeah! So we get to name the input port.

So you have to, again, declare a type. What do we want to have in? Our fudge factor should also be what? What do you think?

AUDIENCE: Integer.

MARCELLO SGAMBELLURI: Yeah, an integer. So go ahead and type "int," and then say-- I like the word fudge factor, I don't why. But, I mean, you can name it anything you want. Now one more thing, do you ever see how these things laying out? Super awesome. I love this parallel.

One more thing, if you didn't do anything else, that input port says I don't know what I'm equal to initially, so I'm going to be blank. But if you put an equals to and a certain value, can anyone guess what that would do with the input port in Dynamo?

AUDIENCE: Default.

MARCELLO SGAMBELLURI: It would be the default value, yes. So I probably don't want to default at minus 10, like I'm a nice guy. I want to default at zero. So you put equals 0.

So any time you look at a node in Dynamo, that's what is happening. It actually has a default value. So like create a point at 0 comma 0 comma 0, and you putt it down, and it has node at 0,0,0, that means the defaults are at 0,0,0.

So someone went in there and put equal 0. You understand, so do 0, equals 0. Believe it or not, we are almost done, almost done.

Now, any method needs to be-- so this is basically the name of the method. But you need to tell it to do something. Everyone with me? In order to do that, you have to enclose in it curly brackets. So put your curly brackets, or braces-- I don't know, whatever you want to call it. OK? Yeah?

Believe it or not, we are learning the fundamentals for everything we're going to do today in this example. We are only going to be regurgitating this, but with the Revit API. That's why I decided to use something a bit more simpler.

Now, just like the Revit API, just like a building, you want to know something about it. So you see me, and you're like, I wonder how old that guy is, but I can't just go ask him. Hey, how old are you?

Let me ask my friend. Hey, do you know that person over there? You're his friend, right? Do you know his age?

Or no, better yet, introduce me to him. Hey, can you become my friend? Now once you're my friend, and I get to know you a little bit, you start to release more information to me.

So that's what you've got to do with the Revit API. You see a building, and you see a wall, and you want to know its length, you're like, hey building, I want to get to know you. Hey, can you show me your wall? Oh wall, can you show me your length? Oh, the length.

So that's the way it is. So you've got to ease your way into it. Hey Jen, you can't just go, bang, Marcello age. You can't do that. So first, talk to my friends.

So, let's go ahead and type "friends." And if you type friends, then it accesses that reference. That's basically like calling up a building element or a building object.

Now, there's something we're going to do to expose something under that. The most powerful thing in C# coding, it's called a period. It's a beautiful thing. You type that period, and it's going to show you some goodness. So go ahead and type a period and see what you get.

So, you go like this-- [GASP] oh my gosh, we got Marcello in here, we got a few others. You know what, I'm going to pick Marcello, Enter. This is how you do it when you find the length of a wall, you grab the building, and you're like, period [GASP] look at all this good stuff! I found a wall! [GASP] I found its length! Got it? See what I'm saying?

So push a period again. What did you find? [GASP] More stuff about Marcello. I found his age, his height, if he knows Dynamo, yes or no, his location.

So we want to do age. That's it. That now establishes-- that's actually pulling that data from that database. If you do that, you have to actually end it with a semicolon.

Next is-- next is something more important. So you created your method, you have your node, it knows what it's named. You found Marcello's friends, you found Marcello, you found his age.

Well, C# says, that's awesome. That's perfect. I'm going to keep this to myself. I'm not going to let anyone know about this. You're like, like the hell you aren't.

So there's something you got do. You've got to get it out. You've got to get it out of that method. You've got to send it out. You've got to return it. That's right.

So you can type-- you can basically-- for the sacred-- for the sake of time, we could make this another object and be like, Marcello's Age Object, and we can return that object. But just for simplicity, we're just going to go ahead and return that whole thing. So if you just type "return" in front of it, it'll actually-- so go ahead and find return, return, right there. And it returns that portion. You see what I'm getting at?

That knows to send it out to that output port. Does that seem difficult to you? Does that seem difficult to anybody? No, but you're like, yeah, let's see it in action.

So you're almost there. We need to compile this created DLL, load that into Dynamo. You ready? Yes? Now, let's do that, and then I'll explain other ways you can do it.

So you just come to the top here, and there's a lot of ways people do this. You can compile this and step through the code. I'll let you Google Visual Studio on how to do all that. But this is an intro course, so I'm going to show you just one way to do it.

You come over here, and you say "build" and you say "build solution." Keep an eye on the bottom left. It should say "build started," and then it should say "build succeeded." If you see build succeeded, you'd be like, yes! And you're ready to go.

A DLL has been written to a default location. It's weird. You can change the location if you want. But for me, I left it default because when you start coding, 90% of the time, you're going to have it in that spot.

So we need to open Revit. So we need to close this, we need to open Revit, we need to open Dynamo. So let's do that. So let's close this, find Revit 2019, and then just open a blank project because we're only going to get to Dynamo.

What we just did could be used in Dynamo Studio because it doesn't touch the Revit database. But anyway, so do that, and then-- whoops, whoops, whoops. Hang on a second, hang on a second.

Hold on a minute. Hold on, hold on, hold on, hold on. We forgot one thing. Hold on, open that back up. Hang on, hang on, hang on.

We forgot one thing. We made a fudge factor, but we didn't do anything with it, did we? I just realized that.

So our age is going to always be the same no matter what we put on the input port. So we're debugging it right now. So you've got to open it up again. I might have done this accidentally on purpose.

AUDIENCE: We'll never know.

MARCELLO SGAMBELLURI: We'll never know. So you've got to say minus-- what you think you've got a minus? Where did you got a minus? Why do you think you've got a minus? Anyone?

ALL: Fudge factor.

MARCELLO SGAMBELLURI: Fudge factor! And intelligent typing will help you. Now recompile, build. Please close Revit if it was open, please! Because if you can't compile this if Revit's open. I know, it's just the way it is.

I would actually recommend to say rebuild solution because if you actually kicked on that Revit database, it's going to wipe-- OK, redo that. Everyone go here to build, rebuild solution. It'll just clean all the dirtiness out of there-- rebuild solution.

Now let's go to Revit. Is everyone with me? How are we doing on time? We spent 30 minutes on this? That's OK.

Open a new blank project. Everyone add the fudge factor? Just add it at the end of age, age minus fudge factor. Rebuild solution. So I'm only opening up Revit so that I can get to Dynamo.

Now, we're going to be using Dynamo 1.3.3 for now. I kind of prefer it for now. 1.2 is coming out at the end of the year, so I encourage you to use that. But for now, we're just using 1.3.3.

We'll have a beer tonight, and I can explain why we're using 1.3.3. But we use 1.3.3. So 1.3.3, here we go. Oh, here we go. So start a new Dynamo.

Now, have you ever seen this Add button on the bottom? This Add button adds your zero touch DLL that you created. So pull that down and say, Import Library. You actually created a library, even though you didn't know it. A DLL Ls a library.

When you built a solution, it put a DLL in a default location. We're going to go grab it. So go ahead and say Import Library.

AUDIENCE: Marcello, you're computer's considerably faster.

MARCELLO SGAMBELLURI: Oh, it is? You want me to slow down? Does anyone have Dynamo open?

AUDIENCE: Yes.

AUDIENCE: Finally.

AUDIENCE: We're there.

MARCELLO SGAMBELLURI: OK. Add, Import Library. Is that slow enough?

Now just be careful here. Go back to the data set, go back to your 05 Get Age, go to Start-- go to Start, go to My Zero Touch Library, go to Bin, go to Debug, go to Date Modified, and it'll be sitting there for you. This is my Zero Touch Library DLL. This is the name of your project.

Why Default, Bin, Debug, blah blah blah? That's a default location. I thought it would be easiest for now. You can have a specific spot you want it. But this is where we'll be getting them every time.

AUDIENCE: [INAUDIBLE].

MARCELLO SGAMBELLURI: Yes? OK. So click that, and then say Open or OK. Now, in your library, you should have-- this should have popped in. My Zero Touch Library, that's the name of the DLL. Did everyone get that?

My Folder, that's the name of the namespace. Remember, the namespace is the name of our book. Everyone with me?

Get Simple Info, that's the name of our class. You remember that class is the name of the chapter? Marcello Age Node was the name of the--

AUDIENCE: Method.

MARCELLO SGAMBELLURI: --method. Do you see that? I mean, it even just follows the structure of what you just saw. Isn't that super cool? That is Zero Touch. Zero Touch, as long as you have a namespace, a class, and a method, it's going to-- it's going to put a-- it's going to create a node. Yeah? So go ahead and put that down.

Here it is, Yeah! I'm going to rollover here. Everyone ready? Ah, there's my age. Surprise out there, yeah! Surprised? Maybe not. So it's out there.

Super cool? Come on, how cool is that?

AUDIENCE: Whoo-woo!

MARCELLO SGAMBELLURI: Come on, yeah!

[APPLAUSE]

So let's test this input port. So, I don't know, go and double-click on here, I don't know, 10. Because we said minus, right? So there we go. Maybe we want to put a minus, I don't know. It depends on who you're talking to. I don't know. Cool, yes?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Yes, OK. I'm going to do this now. Everybody now is officially Zero Touch programmers. Give yourselves a hand. Come on, now!

[APPLAUSE]

Yeah, I got something special for all of you. Don't worry, we've got seven more to go, but I thought I'd do it now. I've got special ribbons. Whoo, this was very difficult to do. It says, Dynamo Zero Touch Programmer for everybody. Yeah!

And these are the only ones made. So it's kind of like-- you ever watch Fight Club, you wear that ribbon, and you just go, I know.

[AUDIENCE LAUGHS]

So do you mind? So I just thought I'd do that to get everyone warmed up. It took about 30-- maybe just about 20 minutes. But everything else is going to follow this logic. So let's take the next example, but instead of finding Marcello is age, why don't we find the category of an element in Revit. What do you say?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Yeah, OK? Let's find the category. Let's find the category. So go ahead and close-- I want everyone to always just get used to closing everything so we don't muck everything up. Close everything-- everything. So next-- is everyone having fun?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Yeah! All right, it's going to get way better. It's going to get way better.

So this is the next one, Get Revit Category from Wrapped-- what does that mean? So this is ultimately what we're going to create. Do you see it?

What comes out of the output port is a category. What comes into the input port is a Revit element. Do you understand?

So we need to set up our output as a Category type. And our input port, we have to set up as a Revit Element type. Yes? And then we need to access the category out of the database so we can get the category.

Just like getting Marcello's age, you've got to first get to know the building, you've got to then get to know the element, and then you've got to get-- you have to ask. You know what I mean. You got it, good. So that would be exercise number six. So, let's do it.

So I want everyone to always start from scratch from here, number six Get Category Start, yes? This is how we're going to do it every time-- boom, boom, boom, boom, boom. Start Zero Touch Library. I named the solution the same on everyone. Click over here.

So now we should be a little bit more familiar with what's going on here. I took it upon myself to write some of this out because now you're all Dynamo Visual-- Dynamo Zero Touch programmers, yes? So I won't do it-- we won't have to do it all.

So you see what I did is I made a namespace, a class, which is a chapter of the book, and then I started the method for us. Public static, type [INAUDIBLE], and then you have to do a type. Remember we did int for age? You're like what's coming out of that output port? It's a category. So it's Revit, Elements, Category.

Revit elements, when you see this, it means it's wrapped. We'll get into that in a minute. What is this? Shout it out. Yell it out.

AUDIENCE: Name.

MARCELLO SGAMBELLURI: The name of what?

AUDIENCE: Node.

MARCELLO SGAMBELLURI: The method slash name of the--

AUDIENCE: Node.

MARCELLO SGAMBELLURI: Node, yeah. What's in here.

AUDIENCE: User input.

MARCELLO SGAMBELLURI: Input. So this is the name of the input port in Revit Element. Is that clear enough for you, in Revit Element? I don't know, you could choose whatever you want, but in Revit Element, I like to use that.

Revit Elements dot Element, this is another-- this is the type. You see it in light blue? That's the type coming in. Would you want to put that is int? Why not?

AUDIENCE: Because it's not [INAUDIBLE].

MARCELLO SGAMBELLURI: Right. C#'s very type-based. It's like telling-- it's like telling-- if we did the last example, it's like saying, what's five plus blue? I don't know what five plus blue is. Those types need to match up. So you understand?

So it says, add code here. Let's do it. So instead of typing friends, we're not going to do that. Instead of typing friends, we're not going to do that, we want to access the Revit database. So, I already loaded in the DLL of the reference.

So, do you see what's coming in is the In Revit element. So that's what we need to access. So we type here In Revit Element.

Why do we type In Revit Element? Anyone? I'm going to walk you through this a little slow. Why do we type in In Revit Element? That's what's coming in.

Isn't that what we want to access? Do we need to access the entire Revit database? No, because in this situation, we're allowing the user to put in an element. So once that element comes in, we grab it, we make friends with it, and then what's that magical thing that we press?

AUDIENCE: Periods.

MARCELLO SGAMBELLURI: Periods, so do it. Watch this goodness that pops. [GASP] I could get bounding box, curves, faces, ID, name, all the parameters? Sonnets, oh my gosh! I'm having myself a party. Yeah?

So for this case, we just want Get Category. Yes? Get Category. We want to close it. That's it. That's all.

Now, one more thing I have to mention, I actually had this prop, but I couldn't bring it. I had this big present. So it means wrapped. This is how it works.

I had a prop, but now I've got to do interpretive dance. This is how it works. So the way Dynamo works with Revit is any Revit element that is shown in Dynamo, which would be like the Revit element that-- you know you say select model element, That is actually placed in a wrapper of Dynamo. So, you have a wrapper, a Dynamo wrapper, around your Revit project basically. So whenever you want to send it to Dynamo, or you ever want to read things with Dynamo, it has this wrapper on it.

Now, there's certain things on the wrapper that you can see. One of them is the Get category. So we have not unwrapped this. The developers were kind enough to put a wrapper around the building.

And why do we have a wrapper? We'll have a beer later, and I can explain why there's wrappers on Dynamo elements. But, there's a big wrapper.

On the wrapper, someone's Sharpied on Get Category. And someone else Sharpied on other things, like bounding box. So there's a few things you can get on the wrapper. So we have not unwrapped this. It is still wrapped.

So the way you-- the way you look at things on the wrapper is you just take the raw element that comes in from Dynamo, which is wrapped, you press Period, and you see all the things that are on the wrapper. You see, we're only seeing things on the wrapper. What does that mean? Later, we're going to take off the wrapper, and we're going to see thousands of more things.

So for now, the category happens to be on the wrapper, so that's why it's called wrapped. Got it? So then all we need to do is what? Anyone? Just like we got my age, what do we need to do?

AUDIENCE: Return it.

MARCELLO SGAMBELLURI: Return it. So we could make another element, an object, but let's just type Return here. Hit-- please have Revit closed, please, and hit Build Solution. It's should say Build Started and should say "succeeded."

Now, do you have to-- every time you code and compile your C# code, do you always have to have Revit closed? Yes. Do you always, when you want to check it, do you have to open Revit and open Dynamo? Yes. That's probably the disadvantage of C# versus Python.

Python, you can code on the spot and hit Run. Anyone Python users? But I'm not here to compare the two, I'm just saying. So if you don't like it, deal with it.

[AUDIENCE LAUGHS]

So cool? So you're going to start to get the hang of this. Close that where you actually look. Now this one, go back to your data set.

Now that we're doing the Revit API, go to-- I have pre-baked Revit files for you. So this one says Get Revit Category Wrapped Start. Just double-click on that. I'm trying to make it as easy as possible for you because coding in a lab, it's not always that easy. So I want to make it super easy.

So, did you see what I clicked on? I went to the folder, Get Category folder, I clicked on the Revit file that said Start. And we have a wall in here already. Lab assistants, could you make sure you should see a wall on everyone's screen?

AUDIENCE: Revit's still launching.

MARCELLO SGAMBELLURI: That's OK. That's OK if it's still launching. I'm going to move a little bit ahead. I know these are the frame computers. They're a little slow. I apologize in advance. But don't-- we've been having issues with the frame computers just on the speed. And so don't be giving me a bad mark because of that.

[CLASS LAUGHS]

That's out of my control. So here we go. I'm just going to-- I'm just going to move ahead and go Dynamo because this is all going to be systematic as we move through the next 50 minutes of class.

So open up Revit. In that folder, open Dynamo, say New, go to Add, Import Library, and then go back to the data set, go to number six Get Category, and go where it-- put it in its default location, Start, Zero Touch, BIN, Debug. I always like to hit this Date Modified. It bubbles to the top.

And I always, I always, I always check to make sure that that DLL has been updated. I always check to make sure that DLL's been updated. So it should be about around the same time.

Holy smokes, did I have a monologue for three minutes? Gee, that's crazy. I see you did it-- I see you did it at 11:09. It's 11:12, jeez. That's the name of our DLL.

Also if you build a package-- by the way, so you see how we're loading a DLL every time? You don't have to do that. But this is an intro course. So I'm just showing you how to load it in every time. Because when you start coding, you'll probably do little things.

Eventually you'll get to be building your own package, and you can bundle it up in a package, and you won't have to do this every time. Do you understand that? Just for now we're-- we're intro.

So My Zero Touch Library is the name of the DLL. It even says DLL on the far right. Then you come over here and, you remember, My Library Folder is the name of the namespace. Get Revit Elements, I changed the class name, because it makes sense. Get Revit Elements, that is the--

AUDIENCE: Class.

MARCELLO SGAMBELLURI: --class, or the chapter of our book, Get Category here. Now go ahead and use the selection node so you can select the wall. Because this is not-- oh, this is a good point. Hang on, I got this.

And I am going to give you-- I'm going to give you a-- I'm going to give you a copy of my book if you can answer this question. You've got to raise your hand, though. Don't yell it out. I wasn't going to do this. I don't like to give the handouts.

But why is that not running automatically? Hands. You, sir, over there.

AUDIENCE: It's because we didn't set the default.

MARCELLO SGAMBELLURI: Didn't set the default, yes, very good. So by the way, we'll get this. Don't worry, you'll eventually get-- these copies are all available to download online. Just print it out in color in your office and just say it's for work.

[AUDIENCE LAUGHS]

So thank you, thank you. So you understand? So nothing's happening. We didn't put anything as a default, so we need to load something in.

So just go ahead and do Select Model Element, Select Model Element, Single, and then select the wall. Whoops. Select the wall and then what should the answer be?

AUDIENCE: Categories.

AUDIENCE: Walls.

MARCELLO SGAMBELLURI: Walls. Oh yes! Oh, I'll tell you what, every time-- I get-- I get misty every time I do this. So we just accessed the Revit database. How cool is that?

AUDIENCE: Woo-whoo!

MARCELLO SGAMBELLURI: Ya! Now remember, that's on the wrapper. Why don't we unwrap this thing and see what other goodies are inside of there? What do you say?

AUDIENCE: Yeah.

MARCELLO SGAMBELLURI: Yeah, OK. It's really fundamentally easy. And we-- how is the pace now? Good? You're getting a feel for how we're-- we're just--

AUDIENCE: It's slow.

MARCELLO SGAMBELLURI: How's the piece?

AUDIENCE: Good.

MARCELLO SGAMBELLURI: Better? OK. We got 45 minutes? Awesome. Close everything. How about we unwrap-- how about we unwrap, but this time, you know what's inside-- whoops-- you know what's inside that wrapper?

AUDIENCE: [INAUDIBLE].

MARCELLO SGAMBELLURI: You know what's inside that wrapper? Inside?

AUDIENCE: Everything in your project.

MARCELLO SGAMBELLURI: Everything else. How about the element ID? What do you say? Eh, I want length. OK, fine. You go get that at home. But we're going to do ID. Once fundamentally you get it, then you're ready to go. Yes?

AUDIENCE: So how do we know what is on wrappers?

MARCELLO SGAMBELLURI: We'll get there. How do we know what's wrapped and unwrapped? That's-- good question. So let's do it. So just so you know, this is what it's going to look like.

So just systematically, we're going to be going back to the data set, wherever it is. We'll go to the next one. Get ID, number seven, Start, Zero Touch Library. You don't need to see my screen. I think you'll get the feel for it. And then you've got to click on this class over here.

By the way, does it seem difficult to anybody yet?

AUDIENCE: No.

MARCELLO SGAMBELLURI: Do you need a degree in computer science to do what we just did so far? Maybe? Maybe? Well, this is an intro course, remember. Let's unwrap that thing.

So on the outside, remember, it's Sharpie. There's Get Category, there's bounding box. There's a few things, but that's all kind of boring. Let's unwrap it. The Dynamo wrapper around our Revit element, let's unwrap it. How does that work?

So, the way it works is it works just slightly differently for the setup. So I created a public method for you already, Public Static. Now, what we're sending out is the element ID from an unwrapped element.

So when a Revit element is unwrapped, it has this Autodesk.Revit.db and then element ID. That's how it is. It's basically-- you just have to know that. So Autodesk.Revit.db means it's unwrapped. When it says Revit Elements, it means it's wrapped.

I know the nomenclature is horrible. I don't know who sits on that nomenclature committee on the Zero Touch team and Dynamo, but they've got to get their stuff together. But anyway, that's what it is. I personally would've called this wrapped and unwrapped, but that's just me. So Autodesk.Revit.db means it's unwrapped. Revit Elements means it's wrapped.

So we are sending out an unwrapped element ID, but we're bringing in a wrapped element. Got it? Because we're bringing interrupted element, we're unwrapping it, we're pulling out the ID, and we're sending the ID out as unwrapped. Got it?

So it's easy to do that. I'm sorry, I'll refrain from saying easy to do that. I get-- I apologize, but I get excited.

So, we need to access that element coming in. So again, In Revit Element, you remember that? In Revit Element, In Revit Element, that's like Marcello's friends. What's the very powerful thing that we push again?

AUDIENCE: Period.

MARCELLO SGAMBELLURI: Period. Now, it's going to expose all that yummy goodness like last time. So, you could say category again on the wrapper. Or to unwrap it, you find something called Internal Element. Does that kind of makes sense, internal element? Yeah? I would've called it unwrapped element, but that's just me.

Now, push that period again and watch the magic before your eyes. Oh, you were all going to be so enlightened. When I push this for the first time on an unwrapped element, I was like, [GASP], holy smokes! I can get the category. I get the phase. I can get the full document. I can get the type ID!

Holy smokes, I can get the group ID! I can get my level ID. I get my name, I get all the parameters. Holy smokes, oh my gosh, look at all this amazing stuff in here. I can get and set parameters, oh my goodness! You see what I'm getting at? Yeah? So in this case, we're just doing ID.

AUDIENCE: Quick question.

MARCELLO SGAMBELLURI: Yeah go in and yell it out while I'm doing--

AUDIENCE: These Revit elements, the first time they first appeared, they sent an ID right next to it before [INAUDIBLE]. Was that referring to the same ID that we're looking for?

MARCELLO SGAMBELLURI: What's your question?

AUDIENCE: So right after type in my element, the first [INAUDIBLE] is an ID. [INAUDIBLE] without having to [INAUDIBLE].

MARCELLO SGAMBELLURI: Oh, OK. The question was he typed Revit Element dot, and he got ID. The ID is also on the wrapper, but it was recently added. So if you can find it on the wrapper, use it. But this example, we're unwrapping and get the ID. Is Everyone OK with that?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: But good question. Now what do we need to do? Are we all good and happy?

AUDIENCE: Return the [INAUDIBLE].

MARCELLO SGAMBELLURI: Return it. So we can make another object, or we just type return in front of this. One more time, Ready, Build, Build Solution, get that Revit closed. I'm just going to walk through it because everyone should be familiar now with how we do it.

Go to Get ID, go to Open Up, Get ID, Start Revit File. Open Dynamo, add the DLL from your Start. I tried to make-- everyone cool with that? And we kind of just [SCOOTING SOUND]? Cool.

AUDIENCE: Can we get [INAUDIBLE] Library at the top of the [INAUDIBLE]?

MARCELLO SGAMBELLURI: Question was, if you have it under My Library, will I'll be compiling under the same folder? No. These are-- for all practical purposes, each exercise we're doing are separate, standalone things. Let's pretend-- when we do the Get Element ID, pretend we never did anything else. That's how I did this.

But in the end, you're ultimately going to be compiling this together and making multiple nodes under one. That's in the handout and how to do that. And I have a simplex package that actually has all the examples we're going through. And it's all compiled in there as well.

So this looks familiar? Yes? Cool, Dynamo. Don't wait-- by the way, don't wait for me. Just rock and roll through this. So awesome to unwrap that element.

So Get ID, Start My Zero Touch, Bin, Debug, dah, dah, dah. Check that date. Hey, that monologue was down to two minutes, John. Get ID, yeah, so Selection, Select Model Element, select the wall, select that, Element ID. Now, if you want to get wild and crazy, select this, go to Manage, say ID of Selection, and then that should match 121. Everyone there? How cool is that! Come on, everyone. That's super cool. You like unwrapping those things?

[APPLAUSE]

Yeah? Oh my gosh! You want to know something about something? Just feed that element in. I don't want to know about walls. What do I know about?

You know what'd be really awesome, if I could get the length of all my structural beams, then feed in the structural beams, unwrap it, press Period, and get length. Boom, return that out. And this works for multiple lists. I could select 5,000 walls, and it would push a list out. That's another thing good about C# is the list gets managed for you.

So yeah, fine, fine, fine. Half the time when you use Dynamo, you're pulling data. But the other time, you're changing the Revit database. Would you like to change the Revit database? How about we set a parameter. What you say?

AUDIENCE: Yay!

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Yeah! OK, let's do it. So there's just one thing we have to do. So far-- sorry, I used to have my prop, but now I got to do like this. So far, we've only been reading data from the Revit database. We physically have not changed it.

Now, there's another thing that you have to do with Zero Touch and accessing the API in Revit. Because that's what we're doing, we're accessing the Revit API. And we're doing it through Dynamo nodes. We're not doing it through an add-in.

So as you go along, and you want to start to code stuff, and make your own, you decide how crazy it's going to get, whether you make an add-in, or whether you make a simple Dynamo node to do it. I'll leave that up to you. But anyway, so far we haven't changed it.

Now, what you have to do if you change the Revit database, which is what you would do for setting a parameter, you have to wrap it in a transaction. So you just start a transaction, you change it, you end the transaction. Why do you do that? Because Dynamo has-- Revit has to know when it got changed. Otherwise, it's going to go all wacky.

Did you ever see that Undo button? So when you wrap your changes in a transaction, you can undo them. And that's why. If you didn't do that, you couldn't undo it, and everything else would go wacky and haywire.

So just think, am I changing the Revit database, yes or no? If you are, wrap it in a transaction. That's all we're going to do.

We're to go through the same thing, except this time we're going to start and end it within a transaction. So let's do it. Where are we at on time? Oh, perfect, we've got 34 minutes.

So now that you've got the system down, just start doing it. So go close-- close everything, head back out. Mine's in a little bit different positioning.

We're skipping to nine because Get Parameter, I skipped that because Get Parameter's like getting an ID. That's boring stuff. We want to change it. So move to nine, Set Parameter. Start, if it'll let me. Is everyone having a good time?

AUDIENCE: Yeah.

AUDIENCE: Woo!

MARCELLO SGAMBELLURI: Yeah? All right, awesome.

AUDIENCE: Do a class photo afterwards?

MARCELLO SGAMBELLURI: I'm sorry.

AUDIENCE: Do a class photo after?

MARCELLO SGAMBELLURI: Oh, yeah OK, very good, class photo after. So by the way, this is very systematic. Close Revit, close everything, open the DLL, let Marcello do his monologue, code, build solution, open Revit, open Dynamo, let Marcello do his monologue, see the result, let Marcello say, isn't that cool, cheer, move on to the next one. So here we go, boom, boom, boom, boom, boom, next one.

So now we know we're sending it in a wrapped element. In Revit Element you're going to hear me say. We're always sending the In Revit Element. Set Instance Parameter is the name of the method.

You get that little thing because methods like to be uppercase, but we'll just leave it. It doesn't get to mad. RevitElement.element, we'll talk about why we're sending out a wrapped element in a minute.

So this says start transaction because changing the Revit database. Get current document standard stuff. So this is how you start a transaction. You don't even need to know what the hell this means, just copy and paste that at the beginning of everything every single time you want to start a transaction.

You want to know what that is, Google it. Or we'll have a beer later. I'll explain everything. Basically, it has to grab the document. That's what it's got to do. And it's got to say change that document. That's basically what's happening.

So we're going to code underneath this because that's where the transaction starts. Did you have a question?

AUDIENCE: Yeah. So the Set Instance Parameter method that you got there--

MARCELLO SGAMBELLURI: Uh-huh?

AUDIENCE: --where is that defined? Is that in References or is that just like an internal name?

MARCELLO SGAMBELLURI: This name?

AUDIENCE: Yeah.

MARCELLO SGAMBELLURI: This name, we can name this anything you want. So the question was, where did we get this? I placed this name. You can name this anything you want. This is the name of the method, so I can name this Marcello's Super Awesome Cool Method.

And then it knows what to do because we put all the guts down here to tell it what to do. So in this case, we're going to tell it, hey, get that element, unwrap it, set it to a value.

[ALARM SOUNDS]

Hey, what's that alarm for? Am I going over or something? One more thing, if we want to set a parameter, we're going to set the base of a wall. That's what we're going to do, the height of the base of the wall. That's what we're going to do. I would show you that image, but I'm just doing it like this.

So, we actually need another input port, don't we? We need the element, and we need the value we want to change it to. I mean, you can hard code it, I suppose. You know what I mean by hard coding? You could just say make it always zero, but why would you do that? It's not very Dynamo-y, is it? No?

So, what's the type of that value coming in? You'd probably want to call it a double. That stands for double precision. It just means it's not an int. It could be like 5.8 whatever, whatever, whatever. And I have to mention, when you code with the Revit API, it's all default feet. Live with it.

[CROWD CHUCKLES]

So we're in the transaction. So what's the transaction? I don't know, copy/paste it. Ready? So just like we did, got the Revit element coming in, let's type In Revit Element. In Revit Element, that's one coming in. Now, we have to unwrap it. How do we unwrap a wrapped Revit element?

AUDIENCE: Internal.

MARCELLO SGAMBELLURI: Internal element. Now, we press Period, and we look through all this super awesomeness. And then there's one thing here called Get Parameter. You see that?

Now, if you hover over that, it's actually going to be running a separate method within a method. So [INAUDIBLE], we're going to explain it. All you other coders, just bear with me. That's how I'm calling it. It's a method within a method.

So you actually need some input. It's not just pulling an ID because it's like, well, what am I going to use for my value? You have to tell it. So if you hover over this, it's going to say, I need a built-in parameter name because I need to know of all those 5,000 parameters in your document which one am I going to change. Does that make sense?

This is called-- so we're going to use the built-in parameter method. There's other ways to change methods. You can geek out at your next Revit API party about which ones to use. I like to use built-in parameter. So you basically put it in parentheses, and you say, "Built-in Parameter."

Now, you press dot. This is every single built-in parameter in the project. There's quite a bit. So we're just going to cut to the chase. It's actually called Wall_Offset, Wall underscore Offset-- Wall Based Offset, I think, yeah, Wall Based Offset.

Now, how do you know that's what it's called? There's a Revit API docs place on the internet that you can find all these and what they are. So I just happened to look that up for you. It's called Wall Based Offset.

One more thing, you have to press a period after that because it doesn't know what to do with that. So remember that beautiful period? You press Period again, and then you say, what do you want to do with my parameter?

Everyone follow what happened? I got to do it again. Ready? We got the wall, yes? We unwrapped it. We said, Get Parameter. We said, which one?

Now that we got the parameter, it's like, well, what do you want to do with it now that I got it? Do you want to just read the value, or do you want to change It You're like, I want to change it. So if you want to change it, you want to set it, so you set it. So you say, dot a set-- a set.

And then in there it says, what are you going to set it to? Now, I could put 0 in there. Could I put 0 in there? I could, but now I'm hard coding it. Instead, what do you think I'm going to put? Oh, you can't see it. It's up there on the bottom right.

AUDIENCE: In value.

MARCELLO SGAMBELLURI: In value, very good. Type that. Woo, now, we're going. Awesome, I love it!

I was-- you're an awesome group. I wish I could evaluate the audience. You're all getting fives.

[CROWD CHUCKLES]

I'm sorry? It's out of five now. Oh, I'll give you 10s, yes. Now we did that, right?

One more thing, and I already did it here, and I'll explain it just super quick, but go ahead and compile this while I explain it. We don't need to return that value because when you change the Revit database, you're changing that element, aren't you? You're changing that element.

So you don't send out the value that you changed. What do you think you send out? The changed element.

But it conveniently came in wrapped. We unwrapped it, set its value, then we just need to return what just came in. That's it right there. In Revit Element, return it because I just changed it. Yes? You got it, sort of?

I've seen people do it other ways. I think this is the easiest way. Yeah talk-- I'm listening to you as you ask the question.

AUDIENCE: Instead of a built-in parameter I wonder if you should say [INTERPOSING VOICES] a shared parameter with a company?

MARCELLO SGAMBELLURI: I'm-- oh, sorry. Go ahead. I'll rephrase the question. Instead of using built to parameter, could I use a shared parameter? This is one way to change a parameter. There are probably at least 20 or 30 ways. So as you get more and more, you can look at the API docs, and you can figure out other ways to do it. But all of it's possible to change a parameter and access parameters here and there. Does that help answer your question?

AUDIENCE: Yeah.

MARCELLO SGAMBELLURI: That's a good question. So go ahead and build your solution. Don't wait for me.

We got 24 minutes? Oh, I don't know if I'm on time. After this, we got three more. Eight minutes each? OK. We're good.

How's our pace? Better now that we got a systematic thing going? There's our handy true. There's our tried and true.

[INDISTINCT SPEECH]

OK, New, Add, Import Library, Set Parameter, number nine, Start, Library, Bin, Debug, boom, check the time? Ah, see, my monologues are down to two minutes. Boom, boom, oh, look at that!

So now we've got-- so now we've got to do two things. We've got to do our selection of the actual model element. And by the way, this is just one way to get an element in. You understand. I mean, as you get more and more, you could actually cycle through the entire document and find this particular ID.

But since we're talking about Revit, I like to-- I like to let the user do as much work as possible. You understand what I'm saying? I let-- because that's the point, isn't it? Yeah? Oh, OK.

So go ahead and feed in the Revit element, In Revit Element. Now what value do you want to make it? Oh, I don't know.

Oh, by the way, first of all, before you make this all-- before you make this all pretty, go and select this wall because it's on disconnected, but set it to a level. That might actually be a little better.

AUDIENCE: The bottom ones?

MARCELLO SGAMBELLURI: A top one. Maybe that'll-- set it to a level and pull it up because we're going to change this base offset value. Everyone follow me? That's what we're doing.

We're changing this base offset value by the-- it was called-- who wrote this API? Do you see how that says base offset for the user? And then what was the built-in parameter name, wall underscore-- wall offset base? I don't know. You hear what I'm saying? Why-- whatever.

So, I don't know, zero? It's already at zero? I don't know, minus 10. Am I going to break it? Oh, did you see that? No, no, no, let's get-- let's get cool. No forget, that board. Let's pull a slider in here-- slider. Integer slider, maybe, maybe. Ready? Oh, how cool is that? Is that cool stuff?

AUDIENCE: Yeah.

MARCELLO SGAMBELLURI: Yeah, all right.

[APPLAUSE]

So you've just changed the Revit database. You see, just wrap it in a transaction. Are you ready to take it up to the next notch? Yeah? How about-- how about let's change the Revit database again, but this time, let's build a Revit element. What do you say?

AUDIENCE: Yeah.

MARCELLO SGAMBELLURI: So we just don't want to have-- so remember, so far we've been accessing stuff that's been existing. So we've always been sending in that In Revit Element. Let's build one.

The simplest one to build, in my opinion, is a level because it only requires one input, an elevation. So that's why we're going to do it. But as you get more and more advanced, you'll be building walls, and structural beams, and massing families. I mean, you know what I mean. This is an intro course.

Do you see what I'm doing? I'm giving you all the basics, how to get Marcello's age, how to pull a value of a wrapped element, how to pull a value off an unwrapped element, how to change the Revit database by setting a value.

So you're like, Marcello, can I set-- can I set the offset length of my column? Yeah, of course. Just use that same philosophy that we just learned. You see what I'm saying? I can't have-- there are millions of possibilities, so I'm just-- everyone cool with that?

So the next progression would be let's build an element. So if we're building an element, you always have to ask yourself, am I accessing the Revit database? Help me.

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Am I changing the Revit database?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: OK. So I need to access Revit, and I need to wrap it in a transaction because I'm changing it. Now, let's do that. So move to the next one. Close everything again. We got 19 minutes.

Oh, I almost messed that up bad. If you're Revit it is open, and you try to compile, it goes really haywire. I can't explain what happens, please just close it, OK? It just goes really wacky. So don't even get that close.

So Create Level, Start, [INAUDIBLE]. So this one is actually a bit simpler than having to change a value. So remember-- so [INAUDIBLE] Open, Marcello's monologue. Here we are, ready?

So we got Public Static, Revit Element Element. We're sending out a wrapped element. That's what that means.

Do you remember what we said? Revit.Element.element? And how can you remember? I have a cheat sheet for all this stuff if you can't remember. That means it's wrapped. So we're sending out a wrapped element just like we did last time.

You always have to send out a wrapped element. If you send out an unwrapped element to Dynamo, it's just going to say, Autodesk.db.element.element. That's what is going to say in Dynamo. It's nonsense. So you have to wrap it and then send it out.

So we are eventually going to wrap this. That's our output port because we're building and element. An input port is just the double in an input elevation because we need to know where to build the level. So it only requires one input. So anyone know what this is? What does this do?

AUDIENCE: [INAUDIBLE].

MARCELLO SGAMBELLURI: It what?

AUDIENCE: It opens the transaction.

MARCELLO SGAMBELLURI: Yeah, opens or starts it. That's where we'll be coding. So creating an element is a little different, and there's so many ways to do it.

So I encourage you to access the Revit API docs. Just type Google Revit API docs. It'll explain all the methods, and what they do, and how to create. I chose this one because, like I said, it just requires one input. It's pretty simple.

Some get pretty complicated. Like MEP piping, woo, holy smokes it gets complicated. But anyway, let's do it.

So what we need to do is we need to access the unwrapped elements inside of the Revit database-- no, inside of the Revit API. We start unwrapped because we're not sending anything in. So we start unwrapped.

So we basically have to type this all out-- Autodesk.Revit.db.level.create. Does this make sense, Autodesk.Revit.level.create? Does that make sense so far? OK, cool, I like it.

Now if you put in this parentheses, and you hover over it, it basically says, I need the document that I'm going write to. And I need an input elevation.

So this is where that transaction became important. You actually got the active documents. So when you open Revit, and then you open Dynamo, Dynamo attaches to that active document. But the API doesn't know which ones active, so that doc is the active document.

I don't know who-- probably-- I don't know who wrote this, but everyone uses it. Most everyone uses it. I would have probably called that active document, but that's just me. So that doc is the active document.

So type in doc. You understand what that is again? It's the active document. Then your other input parameter to create that is--

AUDIENCE: In Value.

MARCELLO SGAMBELLURI: Not In Value. It's called In Elevation this time. I didn't mean to throw you off. I probably should have called it In Value-- In Elevation, Awesomeness. There we go.

Now we actually need to make this an object because when we return it-- when we-- so we created an element from scratch-- everyone with me-- a beautiful level. But if we sent that level as it is unwrapped to Dynamo, Dynamo would say what the hell is this? So we need to wrap it in the Dynamo wrapper. So we have to wrap it and then return the wrapped.

So since we're returning a different object, this is the time I like to make a new object. So we're going to make a new object. So go to the beginning of what you just did. We can't just type return there because it's going to go all wacky, so we've got to make-- you've got to make a variable. So to make a variable, you always have to declare its type.

So what is it? It's an unwrapped level. So you say Autodesk again. It's type .Revit Do you have to type this out every time? Not always. The using statements help you. But I do. I type this out every time. But not everybody does.

Because some people will just tighten level, you see what I'm saying? You know how we just typed int? I could have typed windows.systems.int-- or math.int, I believe. But I didn't, I just typed int. So some people just type level.

But when I code with the Revit API, don't just do that. I want to see-- I want to keep it clear if it's wrapped or unwrapped because especially when you use the Dynamo geometry, there's three different points. There's a Revit point, a Dynamo point. You understand what I'm saying.

So I type it out all the way. I mean, that's what I do. So that's the type. We declare a type.

Now, let's give it a name. Let's call it New Level Equals. You with me? New Level Equals, that's the variable name. You with me?

We've got 12 minutes. You see that? New Level, that equals that. Then we're going to take this new level, and we're going to wrap it, then we're going to send it. You with me?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Wrap it, let's wrap it. How do we wrap it? We wrap it out of the transaction.

So in the transaction, which is this, just copy and paste that in the transaction. Don't do it now, but that's what you would do. And then you wrap it.

So you say New Level dot-- now type 2DS type, and then you type false in here. That's what you. You're like, what the hell did I just do? 2 DS Type stands to Design Script type. This actually wraps it. Do you remember how we typed internal element?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Internal element unwraps it. I would have called internal element unwrap, but that's just me. And I would have called 2 DS Type--

AUDIENCE: Wrap.

MARCELLO SGAMBELLURI: --wrap, but that's just me. So you have to say false because false means that it has never been created and it has never existed in the Revit user-- Revit database. It's a Revit API thing, just live with it.

So that's going to be false 99% of the time-- 99% of the time, false. Now just return that. Does everyone understand why we wrapped it?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: Cool. Now just plug and chug, plug and chug because we got to get to our next example. Remember? Build, close everything, Revit. Yeah.

So for here, you're going to say, New-- wait-- do I have-- no, see I'm messing up. I'm getting a little excited. There is a start here. I've got to follow my formula.

There should be an elevation with one level in it. Load it in and put a value other than zero if you get that done. You got 10 solid minutes. OK, we can do this. We can do this, ready? So, here we go, Manage, Dynamo-- lab assistants, how are we doing? Good? New, Add, Import Library.

And like I said, if you don't have the code, just go back. There is a final one for you. Create Level, Start, Bin, Debug, check that date. I can't get my monologues any shorter than two minutes, John. I can't.

Hear we go. So put in a value, something, I don't know, 10, plus 10, and then you'll see it go boom! Oh, isn't that awesome? No way, let's do even better than that. Let's make a-- let's make a range-- boom! Oh!

[INDISTINCT CHATTER]

Oh, I love it! How cool is that? Remember the "how cool is that" in your [INAUDIBLE]? Remember the--

[APPLAUSE]

You don't have to cheer. So you have now built an element. Well, I want to build a structural beam. Fine. Go find what input ports-- input parameters you need and have at it.

John and assistance-- where is Carl Storm? Oh, there you are. Hey buddy, can you make sure you see this on everyone's screen? I'm going to start moving ahead.

Now, what I'm going to do is so far we've done wrapped, unwrapped. You know why, right?

AUDIENCE: [INAUDIBLE]

MARCELLO SGAMBELLURI: To pull things off the wrapper, pull things off things that are within the wrapper-- that are in the wrapper. We unwrapped, we changed the Revit database by changing the parameter. We created an element from scratch. We had to wrap it and send it out.

There's a whole other world that I don't see a lot of classes cover, which is the Zero Touch Library, which is separate from the Revit database, allows you to build Dynamo geometry as well. So if you ever start those Dynamo classes and then the instructor's like, hey, let's build a Dynamo point, and you're like, woo-whoo! That's what we're going to do next.

But I'm just saying that you don't have to access the Revit database all the time. If you want to do Dynamo, you can actually build a Dynamo point. Everyone with me?

So let's build a Dynamo point, and then let's, I don't know, build a cow. So here we go. We got seven minutes. Ready?

AUDIENCE: We got this.

MARCELLO SGAMBELLURI: We got it. Let's do it. And we're headed into lunch, so if we run over just a minute or two, then we're good?

AUDIENCE: No.

MARCELLO SGAMBELLURI: OK, ready?

[DEEP BREATHS]

Close Revit.

[DEEP BREATHS]

Number 12, Create Point. There is a Create Grid in there, but it has two inputs, so I said Create Point. Creating Dynamo geometry is actually pretty easy. Has anyone use Design Script? If you want to create-- oh, OK, never mind then. I won't use that as a reference. Never mind.

We are on Marcello's monologue. Here we go. Name a book, name a chapter, name of the sentence. So we want to build a point. So we want to send a point in the output port. So that type is called a point.

Now, I just don't type point there just like I typed int. I don't type point there because there's an Autodesk point, there's a reference point, and there's a Dynamo point. You get my point? I type this all out.

Because what happens if you type point, it says ooh, do you mean Autodesk, or do you mean Dynamo geometry? I mean, do you mean like Revit geometry? I'm like, well why are you-- I'll just tell you, Autodesk.DesignScript.geometry.

By nature, they're all wrapped. All Dynamo geometry is wrapped. It cannot be unwrapped because it's in Dynamo. It has the Dynamo wrapper. So you don't have to worry about wrapping and unwrapping.

DS ZT point-- I don't know. That's why I called it that. That's the name of the method. That's also the name of the--

AUDIENCE: Node.

MARCELLO SGAMBELLURI: --node, awesome. Now, I have input ports here, double, because I want to do a default. Well, you have to put input ports. I want to do xyz as an import, yes? I want to also make defaults not zero because I want to be cool and awesome. I'm making defaults equal to what?

AUDIENCE: One.

MARCELLO SGAMBELLURI: One, right? Why? Because I'm wild and crazy. That's why. That's why. So double type, In X, There's an In Y, there's an In Z equal 1, equal 1, equal 1, got it?

So all we do is just type down here the creation method. So go here and type in Autodesk.DesignScript.geometry.point dot-- it's not create, it's by coordinates. And then if you put these little guys on there and hover over it, it says, OK, I need an xyz value.

So in here we put in int x comma In Y comma In Z. Can anyone tell me why put In X, In Y, In Z.

AUDIENCE: Because that's the coordinates.

MARCELLO SGAMBELLURI: That's what's coming in, right? Yeah. Usually the hardcore programmer's in the back. I don't know why the hardcore programmers are standing in the back. Usually these will match up one to one. Doesn't that make sense? Yeah?

AUDIENCE: Yes.

MARCELLO SGAMBELLURI: OK. Return it. Quickly, return it quickly. Return, Run, Debug, Build. Now, this one we're going to open Revit, and we're going to open Dynamo. But in this case, you could technically open up Dynamo Studio, but don't-- don't. But you could open Dynamo Studio. Does anyone-- can anyone tell me why you could open-- whoops. Can anyone tell me why you can open Dynamo Studio to do this?

AUDIENCE: [INAUDIBLE] the database.

AUDIENCE: We're not accessing the Revit database.

MARCELLO SGAMBELLURI: You're not accessing the Revit database, yeah. So this one I don't have a file, a Revit file started. I guess that seems silly. So just open Revit, open a blank Revit project, open Dynamo, load the node, and away you go. Three minutes, let's go five minutes. New, Manage, Dynamo, here we go. My apologies if I'm faster. Don't start packing up yet. Ready? By the way, here's our selfie. Ready? Ready everyone, cheer yay!

ALL: Yay!

[CROWD LAUGHING]

MARCELLO SGAMBELLURI: That's awesome. If you leave, you're missing the best part. So here we go, Start-- just kidding. Have fun. So check that date, boom, boom!

AUDIENCE: There it is.

MARCELLO SGAMBELLURI: There it is. You see it? It's at 1,1, 1. I mean, I'll add values here, but whatever. You good? We got two minutes. Is that cool or what?

AUDIENCE: Yeah!

[APPLAUSE]

MARCELLO SGAMBELLURI: So now that you're like Marcello, let's build some complicated. OK, fine, fine, fine. Go the next folder, this one, number 13. Final because we're not going to build it today.

Now, did you see how he built a point? If you can build a point, you can build a line. You can build a line, you can build a surface. If you build a surface, you can build--

AUDIENCE: Wall.

AUDIENCE: Cow.

MARCELLO SGAMBELLURI: --a wall or a cow.

[AUDIENCE LAUGHS]

So just run your-- just scroll through this. There's nothing complicated about this. It's just everything we did except instead of a point, it's a NURBS curve, or it's a point like there, or it's a circle, or whatever.

So we debug, we compile that. Just open up Revit again. Don't compile it if you want to see it, or I'll show you here.

What I did was I have a package called Simplex. In there, I have every example we went through, 05, 6, 7, 8 9, 10. So they're altogether for you. And at the very end is this one. So if you need all these examples in one place, you can always get the package that I have called Simplex. It's also on the data set.

But you can make super awesome things. You can create entire buildings with the Revit API. You could also do other amazing things like create points using geometry.

Don't forget to unwrap if you want to see all the super yummy goodness. Remember that we wrapped when we had to send elements out. Remember all those fundamentals.

And then, here we go. Here's the Simplex package. Under here is Simply Complex. We've got Simple and Complex. We've got Create Revit Elements. Everything you did in the lab is right here. You've got a little bonus. You can talk with Word. Under here is Dynamo Geometry.

Under here is something called the Dynamo Cow. In there, you can moo all this awesome stuff, and you get yourself a cow.

And not only that, but there is an input port here. It says Rotate Head. So if you'd like to, you can add that in there. You can rotate the head. And you could do super amazing stuff. What do you say?

[AUDIENCE LAUGHS]

You have been-- wait.

[APPLAUSE]

[MUSIC PLAYING]

______
icon-svg-close-thick

Préférences en matière de cookies

Votre confidentialité est primordiale pour Autodesk et nous mettons tout en oeuvre pour vous garantir la meilleure expérience possible. Pour nous aider à personnaliser les informations que vous recevrez et à créer des applications, nous collectons des données sur votre utilisation de ce site.

Nous autorisez-vous à collecter et à utiliser vos données ?

En savoir plus sur les services tiers que nous utilisons et sur notre Déclaration de confidentialité.

Cookies indispensables au fonctionnement de notre site et à la fourniture de nos services

Ces cookies nous permettent d'enregistrer vos préférences ou vos informations de connexion, de répondre à vos demandes ou de traiter les achats de votre panier.

Cookies visant à améliorer votre expérience grâce à l'affichage de contenu pertinent

Ces cookies nous permettent d'améliorer les fonctionnalités et la personnalisation. Ils sont configurés par Autodesk ou par des fournisseurs tiers auxquels nous faisons appel afin de vous proposer une expérience et des informations adaptées à vos besoins.Si vous n'autorisez pas l'utilisation de ces cookies, certains ou l'ensemble des services risquent d'être indisponibles.

Personnalisation des publicités à des fins de ciblage

Ces cookies collectent des données vous concernant, en fonction de vos activités et de vos centres d'intérêt, afin d'afficher des publicités pertinentes et d'en évaluer l'utilité. Grâce aux données collectées, ces publicités seront davantage ciblées. Si vous n'autorisez pas les cookies, elles seront moins pertinentes.

icon-svg-close-thick

SERVICES TIERS

Découvrez les services tiers que nous utilisons pour chaque catégorie et la façon dont nous exploitons les données que nous collectons sur vous en ligne.

icon-svg-hide-thick

icon-svg-show-thick

Cookies indispensables au fonctionnement de notre site et à la fourniture de nos services

Qualtrics
Nous faisons appel à Qualtrics pour que vous puissiez nous faire part de vos commentaires par le biais d'enquêtes et de formulaires en ligne. Vous êtes susceptible d'être sélectionné au hasard pour participer à une enquête. Vous pouvez aussi nous faire directement part de vos commentaires. Nous collectons des données afin de connaître les actions que vous avez effectuées avant de participer à une enquête. Cela nous aide à résoudre les éventuels problèmes. Politique de confidentialité de Qualtrics
Akamai mPulse
Nous faisons appel à Akamai mPulse pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Akamai mPulse
Digital River
Nous faisons appel à Digital River pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Digital River
Dynatrace
Nous faisons appel à Dynatrace pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Dynatrace
Khoros
Nous faisons appel à Khoros pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Khoros
Launch Darkly
Nous faisons appel à Launch Darkly pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Launch Darkly
New Relic
Nous faisons appel à New Relic pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de New Relic
Salesforce Live Agent
Nous faisons appel à Salesforce Live Agent pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Salesforce Live Agent
Wistia
Nous faisons appel à Wistia pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Wistia
Tealium
Nous faisons appel à Tealium pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Tealium
Upsellit
Nous faisons appel à Upsellit pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Upsellit
CJ Affiliates
Nous faisons appel à CJ Affiliates pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de CJ Affiliates
Commission Factory
Nous faisons appel à Commission Factory pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Commission Factory
Google Analytics (Strictly Necessary)
Nous faisons appel à Google Analytics (Strictly Necessary) pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Google Analytics (Strictly Necessary)
Typepad Stats
Nous faisons appel à Typepad Stats pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Typepad Stats
Geo Targetly
Geo Targetly nous permet de rediriger les visiteurs de notre site vers la page appropriée et/ou de leur proposer un contenu adapté à leur emplacement géographique. Geo Targetly se sert de l’adresse IP des visiteurs du site pour déterminer approximativement la localisation de leur appareil. Cela permet de s'assurer que les visiteurs ont accès à un contenu dans ce que nous évaluons être la bonne langue.Politique de confidentialité de Geo Targetly
SpeedCurve
Nous utilisons SpeedCurve pour contrôler et mesurer les performances de notre site Web à l’aide de mesures du temps de chargement de nos pages Web et de la réactivité des éléments successifs tels que les images, les scripts et le texte.Politique de confidentialité de 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

Cookies visant à améliorer votre expérience grâce à l'affichage de contenu pertinent

Google Optimize
Nous faisons appel à Google Optimize afin de tester les nouvelles fonctionnalités de nos sites et de personnaliser votre expérience. Pour ce faire, nous collectons des données comportementales lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil, d'ID Autodesk, etc. La version de nos sites peut varier en fonction des tests de fonctionnalités. Le contenu, quant à lui, peut être personnalisé en fonction de vos attributs de visiteur. Politique de confidentialité de Google Optimize
ClickTale
Nous faisons appel à ClickTale pour mieux identifier les difficultés que vous pouvez rencontrer sur nos sites. L'enregistrement des sessions nous permet de savoir comment vous interagissez envers nos sites, notamment envers les éléments de nos pages. Vos informations personnellement identifiables sont masquées et ne sont pas collectées. Politique de confidentialité de ClickTale
OneSignal
Nous faisons appel à OneSignal pour afficher des publicités numériques sur les sites pris en charge par OneSignal. Les publicités sont basées à la fois sur les données de OneSignal et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que OneSignal a collectées sur vous. Les données que nous fournissons à OneSignal nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de OneSignal
Optimizely
Nous faisons appel à Optimizely afin de tester les nouvelles fonctionnalités de nos sites et de personnaliser votre expérience. Pour ce faire, nous collectons des données comportementales lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil, d'ID Autodesk, etc. La version de nos sites peut varier en fonction des tests de fonctionnalités. Le contenu, quant à lui, peut être personnalisé en fonction de vos attributs de visiteur. Politique de confidentialité de Optimizely
Amplitude
Nous faisons appel à Amplitude afin de tester les nouvelles fonctionnalités de nos sites et de personnaliser votre expérience. Pour ce faire, nous collectons des données comportementales lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil, d'ID Autodesk, etc. La version de nos sites peut varier en fonction des tests de fonctionnalités. Le contenu, quant à lui, peut être personnalisé en fonction de vos attributs de visiteur. Politique de confidentialité de Amplitude
Snowplow
Nous faisons appel à Snowplow pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Snowplow
UserVoice
Nous faisons appel à UserVoice pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de UserVoice
Clearbit
Clearbit autorise les données d’enrichissement en temps réel afin de fournir une expérience personnalisée et pertinente à ses clients. Les données que nous collectons peuvent inclure les pages que vous avez consultées, les versions d’évaluation que vous avez lancées, les vidéos que vous avez visionnées, les achats que vous avez réalisés, ainsi que votre adresse IP ou l’ID de votre appareil.Politique de confidentialité de Clearbit
YouTube
YouTube est une plate-forme de partage de vidéos qui permet aux utilisateurs de visionner et de partager des vidéos qui sont intégrées à nos sites Web. YouTube fournit des indicateurs sur les performances des vidéos. Politique de confidentialité de YouTube

icon-svg-hide-thick

icon-svg-show-thick

Personnalisation des publicités à des fins de ciblage

Adobe Analytics
Nous faisons appel à Adobe Analytics pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil et d'ID Autodesk. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Adobe Analytics
Google Analytics (Web Analytics)
Nous faisons appel à Google Analytics (Web Analytics) pour collecter des données comportementales sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces données nous permettent de mesurer les performances de nos sites et d'évaluer la qualité de votre expérience en ligne afin d'améliorer les fonctionnalités que nous proposons. Grâce à des méthodes d'analytique avancées, nous optimisons également votre expérience dans les domaines suivants : communication par e-mail, assistance client et ventes. Politique de confidentialité de Google Analytics (Web Analytics)
AdWords
Nous faisons appel à AdWords pour afficher des publicités numériques sur les sites pris en charge par AdWords. Les publicités sont basées à la fois sur les données de AdWords et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que AdWords a collectées sur vous. Les données que nous fournissons à AdWords nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de AdWords
Marketo
Nous faisons appel à Marketo pour vous envoyer des e-mails dont le contenu est ciblé. Pour ce faire, nous collectons des données concernant votre comportement en ligne et votre interaction envers les e-mails que nous envoyons. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil, de taux d'ouverture des e-mails, de clics sur des liens, etc. Nous sommes susceptibles d'utiliser ces données en combinaison envers celles obtenues auprès d'autres sources pour vous offrir des expériences améliorées en matière de ventes ou de service clientèle, ainsi que du contenu pertinent basé sur un traitement analytique avancé. Politique de confidentialité de Marketo
Doubleclick
Nous faisons appel à Doubleclick pour afficher des publicités numériques sur les sites pris en charge par Doubleclick. Les publicités sont basées à la fois sur les données de Doubleclick et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Doubleclick a collectées sur vous. Les données que nous fournissons à Doubleclick nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Doubleclick
HubSpot
Nous faisons appel à HubSpot pour vous envoyer des e-mails dont le contenu est ciblé. Pour ce faire, nous collectons des données concernant votre comportement en ligne et votre interaction envers les e-mails que nous envoyons. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil, de taux d'ouverture des e-mails, de clics sur des liens, etc. Politique de confidentialité de HubSpot
Twitter
Nous faisons appel à Twitter pour afficher des publicités numériques sur les sites pris en charge par Twitter. Les publicités sont basées à la fois sur les données de Twitter et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Twitter a collectées sur vous. Les données que nous fournissons à Twitter nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Twitter
Facebook
Nous faisons appel à Facebook pour afficher des publicités numériques sur les sites pris en charge par Facebook. Les publicités sont basées à la fois sur les données de Facebook et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Facebook a collectées sur vous. Les données que nous fournissons à Facebook nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Facebook
LinkedIn
Nous faisons appel à LinkedIn pour afficher des publicités numériques sur les sites pris en charge par LinkedIn. Les publicités sont basées à la fois sur les données de LinkedIn et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que LinkedIn a collectées sur vous. Les données que nous fournissons à LinkedIn nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de LinkedIn
Yahoo! Japan
Nous faisons appel à Yahoo! Japan pour afficher des publicités numériques sur les sites pris en charge par Yahoo! Japan. Les publicités sont basées à la fois sur les données de Yahoo! Japan et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Yahoo! Japan a collectées sur vous. Les données que nous fournissons à Yahoo! Japan nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Yahoo! Japan
Naver
Nous faisons appel à Naver pour afficher des publicités numériques sur les sites pris en charge par Naver. Les publicités sont basées à la fois sur les données de Naver et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Naver a collectées sur vous. Les données que nous fournissons à Naver nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Naver
Quantcast
Nous faisons appel à Quantcast pour afficher des publicités numériques sur les sites pris en charge par Quantcast. Les publicités sont basées à la fois sur les données de Quantcast et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Quantcast a collectées sur vous. Les données que nous fournissons à Quantcast nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Quantcast
Call Tracking
Nous faisons appel à Call Tracking pour fournir des numéros de téléphone personnalisés dans le cadre de nos campagnes. Vous pouvez ainsi contacter nos agents plus rapidement et nous pouvons évaluer nos performances plus précisément. Nous sommes susceptibles de collecter des données sur votre utilisation de nos sites en fonction du numéro de téléphone fourni. Politique de confidentialité de Call Tracking
Wunderkind
Nous faisons appel à Wunderkind pour afficher des publicités numériques sur les sites pris en charge par Wunderkind. Les publicités sont basées à la fois sur les données de Wunderkind et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Wunderkind a collectées sur vous. Les données que nous fournissons à Wunderkind nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Wunderkind
ADC Media
Nous faisons appel à ADC Media pour afficher des publicités numériques sur les sites pris en charge par ADC Media. Les publicités sont basées à la fois sur les données de ADC Media et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que ADC Media a collectées sur vous. Les données que nous fournissons à ADC Media nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de ADC Media
AgrantSEM
Nous faisons appel à AgrantSEM pour afficher des publicités numériques sur les sites pris en charge par AgrantSEM. Les publicités sont basées à la fois sur les données de AgrantSEM et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que AgrantSEM a collectées sur vous. Les données que nous fournissons à AgrantSEM nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de AgrantSEM
Bidtellect
Nous faisons appel à Bidtellect pour afficher des publicités numériques sur les sites pris en charge par Bidtellect. Les publicités sont basées à la fois sur les données de Bidtellect et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Bidtellect a collectées sur vous. Les données que nous fournissons à Bidtellect nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Bidtellect
Bing
Nous faisons appel à Bing pour afficher des publicités numériques sur les sites pris en charge par Bing. Les publicités sont basées à la fois sur les données de Bing et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Bing a collectées sur vous. Les données que nous fournissons à Bing nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Bing
G2Crowd
Nous faisons appel à G2Crowd pour afficher des publicités numériques sur les sites pris en charge par G2Crowd. Les publicités sont basées à la fois sur les données de G2Crowd et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que G2Crowd a collectées sur vous. Les données que nous fournissons à G2Crowd nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de G2Crowd
NMPI Display
Nous faisons appel à NMPI Display pour afficher des publicités numériques sur les sites pris en charge par NMPI Display. Les publicités sont basées à la fois sur les données de NMPI Display et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que NMPI Display a collectées sur vous. Les données que nous fournissons à NMPI Display nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de NMPI Display
VK
Nous faisons appel à VK pour afficher des publicités numériques sur les sites pris en charge par VK. Les publicités sont basées à la fois sur les données de VK et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que VK a collectées sur vous. Les données que nous fournissons à VK nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de VK
Adobe Target
Nous faisons appel à Adobe Target afin de tester les nouvelles fonctionnalités de nos sites et de personnaliser votre expérience. Pour ce faire, nous collectons des données comportementales lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP, d'ID d'appareil, d'ID Autodesk, etc. La version de nos sites peut varier en fonction des tests de fonctionnalités. Le contenu, quant à lui, peut être personnalisé en fonction de vos attributs de visiteur. Politique de confidentialité de Adobe Target
Google Analytics (Advertising)
Nous faisons appel à Google Analytics (Advertising) pour afficher des publicités numériques sur les sites pris en charge par Google Analytics (Advertising). Les publicités sont basées à la fois sur les données de Google Analytics (Advertising) et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Google Analytics (Advertising) a collectées sur vous. Les données que nous fournissons à Google Analytics (Advertising) nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Google Analytics (Advertising)
Trendkite
Nous faisons appel à Trendkite pour afficher des publicités numériques sur les sites pris en charge par Trendkite. Les publicités sont basées à la fois sur les données de Trendkite et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Trendkite a collectées sur vous. Les données que nous fournissons à Trendkite nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Trendkite
Hotjar
Nous faisons appel à Hotjar pour afficher des publicités numériques sur les sites pris en charge par Hotjar. Les publicités sont basées à la fois sur les données de Hotjar et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Hotjar a collectées sur vous. Les données que nous fournissons à Hotjar nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Hotjar
6 Sense
Nous faisons appel à 6 Sense pour afficher des publicités numériques sur les sites pris en charge par 6 Sense. Les publicités sont basées à la fois sur les données de 6 Sense et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que 6 Sense a collectées sur vous. Les données que nous fournissons à 6 Sense nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de 6 Sense
Terminus
Nous faisons appel à Terminus pour afficher des publicités numériques sur les sites pris en charge par Terminus. Les publicités sont basées à la fois sur les données de Terminus et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que Terminus a collectées sur vous. Les données que nous fournissons à Terminus nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de Terminus
StackAdapt
Nous faisons appel à StackAdapt pour afficher des publicités numériques sur les sites pris en charge par StackAdapt. Les publicités sont basées à la fois sur les données de StackAdapt et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que StackAdapt a collectées sur vous. Les données que nous fournissons à StackAdapt nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de StackAdapt
The Trade Desk
Nous faisons appel à The Trade Desk pour afficher des publicités numériques sur les sites pris en charge par The Trade Desk. Les publicités sont basées à la fois sur les données de The Trade Desk et sur les données comportementales que nous collectons lorsque vous naviguez sur nos sites. Il peut s'agir de pages visitées, de versions d'évaluation activées, de vidéos lues, d'achats, d'adresses IP ou d'ID d'appareil. Ces informations sont susceptibles d'être fusionnées envers des données que The Trade Desk a collectées sur vous. Les données que nous fournissons à The Trade Desk nous servent à personnaliser les publicités numériques afin de les rendre plus pertinentes. Politique de confidentialité de 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

Voulez-vous améliorer votre expérience en ligne?

Nous souhaitons vous offrir une expérience optimale. Si vous choisissez Oui pour les catégories présentées dans l'écran précédent, nous collecterons vos données et les utiliserons afin de personnaliser votre expérience et d'améliorer nos applications. Vous pouvez modifier vos paramètres à tout moment en accédant à notre Déclaration de confidentialité.

Votre expérience. Votre choix.

Nous respectons votre confidentialité. Les données que nous collectons nous aident à comprendre votre utilisation de nos produits, à identifier les informations susceptibles de vous intéresser, mais aussi à améliorer et à valoriser votre engagement envers Autodesk.

Nous autorisez-vous à collecter et à utiliser vos données afin de personnaliser votre expérience ?

Découvrez tous les avantages d'une expérience personnalisée. Vous pouvez gérer vos paramètres confidentialité pour ce site. Pour en savoir plus sur les options disponibles, consultez notre Déclaration de confidentialité.