AU Class
AU Class
class - AU

Dynamo and Curtain Panels: A Wild Brick Pattern Workflow in Revit

共享此课程

说明

In this class, we’ll explore a dynamic brick façade in Revit software. You’ll learn about several modeling techniques you can use to model protruding brick elements. Then, after exploring generic model nested families with arrays, you’ll learn about the advantages of using curtain walls with custom curtain panels. We’ll also explore the benefits and limitations of using curtain walls for complex façade elements. Then, you’ll learn how to use Dynamo to push your façade designs to the next level. You’ll learn how to map an image onto a brick wall to modify the extrusion depth of protruding bricks. You’ll also see how it is possible to randomize the brick patterns. Overall, the workflow presented will allow you to create innovative façade designs while saving countless hours of tedious work.

主要学习内容

  • Learn about the difference between nested families and curtain walls for complex façade elements.
  • Learn how to create a generic family made of arrays and nested components.
  • Learn how to design a dynamic brick façade using custom curtain panel families and the curtain walls tool.
  • Learn about using Dynamo to map images to the façade and randomize wall elements.

讲师

  • Nicolas Catellier 的头像
    Nicolas Catellier
    Nicolas Catellier is an architect, designer, BIM specialist, educator and founder of the website bimpure.com. Nicolas graduated with a master in architecture from Université de Montréal in 2011 and now lives in Quebec City, Canada. He is passionate about design, technology, teaching, music, running and his 2 daughters. After working as an architect and BIM manager for Atelier 21 architects for almost 10 years, he now works full time on his business, BIM Pure Productions. His focus is teaching Revit, BIM and the use of technology in the AEC industry with fun, efficiency and simplicity. Nicolas is the host of "Revit Pure Live", a weekly show on YouTube where BIM experts share their knowledge with users. Nicolas also spoke at multiple conferences and events, including BIM after dark, BILT and Autodesk University, where he won a "best-rated class award" in 2021.
Video Player is loading.
Current Time 0:00
Duration 1:01:05
Loaded: 0.27%
Stream Type LIVE
Remaining Time 1:01:05
 
1x
  • Chapters
  • descriptions off, selected
  • en (Main), selected
Transcript

NICOLAS CATELLIER: Hello, everybody. My name is Nicolas Catellier. I am an architect and BIM specialist. You can follow me on Twitter, @nicocatellier. Today's presentation is called Dynamo & Curtain Panels-- A Wild Brick Pattern Workflow in Revit.

Before going through with the presentation, I would like to briefly introduce myself. I'm an architect and BIM specialist. I used to work at Atelier 21 Architects, here in Quebec City, for almost 10 years, where I was a design architect, project manager, and the BIM manager of the office. Last year, I went fully on my own as a BIM consultant at BIM Pure Productions.

In the community, I'm mostly known for creating the learning website revitpure.com, which I started in 2016. I am the host of Revit Pure Live, which is a show on YouTube where I receive multiple BIM experts to share their expertise about Revit or other BIM software. I've been, previously, a speaker at both BILT and Autodesk University, and I'm based in Quebec City, Canada. So that's a little bit about myself.

Today's presentation is about lots of things I love, like bricks, housing, and Dynamo. And, usually, while I present, I have to create fake projects because most projects I work on are under NDAs, and I cannot share them publicly. But for this one, I was very lucky that the firms I work with, the architect firm, let me share the work. And so thank you to L'OEUF architects, which are based in Montreal, to let me show this project, which is called Place Griffintown. And you can see the other-- name of the other collaborators in this slide.

And yes, this is a project I've been working on for a few months. And when I was brought in, it was in the process of a redesign of the facade to create more exciting facade and integrate special brickwork. And pretty early on, the designer had the idea to implement extruded brick facades. You can see a few examples of that here.

So the idea was to create a brick patterns using extruded brick, a little bit like this. So in the process of this project, I had to create multiple families, using different techniques. And in this presentation, I'm going to showcase a few of these techniques.

The presentation is going to be split in three parts. The first one, I'm going to show you how to create an extruded brick pattern using generic families in Revit. And the second part, we're going to try an alternate technique to do it, using curtain panels and curtain walls. And finally, the presentation is going to conclude by using Dynamo to create a dynamic brick facade based on an image, like you can see on the image on the right.

This course comes with a full dataset which you can download at this URL, which is revitpure.com/au2022. Or you can pause the video and scan this QR code to get the dataset, which includes a Revit [INAUDIBLE] file, multiple families, a Dynamo script, and a sample image. OK.

So let's start with the generic family. Early on in the project, I was working with the lead designer of Griffintown, who is called Ben Wareing. And its original idea was to create a special brick pattern in between the windows, as you can see in this image.

So he asked me what would be the best way to do it. And, immediately, I knew, first, that I had to avoid the model in-place technique, which could be quick, but I knew if there were any change, whatsoever, it would cause a lot of problems. So my idea was to create a generic model family and place it on the wall.

After many tests, I came to the conclusion that I had to use nested families and actually use multiple level of nested families, as you can see in this image. We have, actually, three images. OK, go back.

Three images, the first level being the singular-- the single brick. The second level is creating a vertical array based on this individual brick. And the third level is creating a full wall-hosted generate model that integrates these two other levels of nested families.

So during the presentation, we're going to explore all three steps to create this family. And, but first, I thought I would show you the end result, what this family can do. So this is an example of this family being placed on a project, and you can see that we do change the width and the height. And the family automatically adjusts.

And the limitation or, at least, the way this family is done is that the origin is placed at the bottom left, which means that you will always get full brick at the bottom and on the left. And the brick on the right and at the top will be cut, depending on the length and the height. This family adds customizable brick dimensions. As you can see, you can play around with the brick depth, the brick height, the brick offset, and two sizes of bricks, and get completely different results, as you can see in both these images.

All right. So I'm going to show you how to create specifically this family. But I thought, first, I will show you some principles of working with arrays in Revit. So arrays are essential to understand how to create these families. And they can be a little bit complicated, but you need to understand the basic principles and you will be all right.

So first, let's start with what is an array? An array is an element that is repeated a number of times. So in this context, the number of elements is determined by the family's length. You can see in this GIF that when the length of the family is modified, the number of arrays automatically adjusted using a formula.

The number one tip I would give you to create arrays in Revit, in a Revit family, is to nest the main element that you are going to array. You don't have to do it-- I mean if you have a really simple family, you could use a simple extrusion. But at the moment, you want to modify the height, the length, the depth, or change the material of the element you want to array, if you use a nested family, it will be much easier for you.

The second tip I would give you if you create arrays inside of Revit families is the number of elements in the arrays should be smaller-- at least two. If you try to put 1 or 0, it will not work and you will break the family. There are possible workarounds with this. But if you look over here, you can see in the GIF that if we change the length, that the number of array would go to 1 or to 0. The family breaks. We get a warning. It doesn't work. So it's something to keep in mind when using arrays in Revit.

The basic array formula is equal to total length divided by elements length. So in this case, we know that the length of all our family is 1680, like in this case. And we know that a single element is 280. So to find the amount of elements in the family, we use the formula that equals length divided by the length of the single element, which is 280 millimeters.

The second tip is to use a run down formula to avoid exceeding the length. So something to keep in mind when using a formula to find the amount of array is that rounding the number will always go-- well, for example, if you have 5.8 will round to 6. And if you have 5.3, it will run down to 5. However, as you can see on the image on the right, it is possible with this technique that the element will be longer than the length itself. To avoid this issue, you can use the round down. If you run down in the formula, it means that if you have a value of 5.9, it will run down to 5, meaning that it will never exceed the length of the family.

Finally, the fifth step is to add a filler element with a variable length. Depending on the expected result, you can add an element on the end with a variable length. As you can see here, we call this value VL1, which stands for variable length number one. And we put this formula, which is length minus amount array multiplied by 280. And you can see here, for example, the variable length is set at 265 millimeters.

Tip number six, elements with dimension equal or below 0 breaks. So if you have a formula that finds a dimension and the dimension is 0, or even a negative value, the family will break. You will get a warning, just like this. Your family will not work.

So the possible workaround if you want to avoid a situation like this is to use an if statement. And what this if statement does, if any of you had done any programming, it's one of the most basic formula you can use. And the if statements work is that you give a condition, if the result if true and then the result if false.

For example, you have if the length of the variable length would be 0 instead make it 1 millimeter. Ls just the regular length you would find regardless. And this way, you will ensure that you see in this case, VL1 should be 0 because of the if formula that we use, it is actually set to 1 millimeter. And the family doesn't break.

Finally, if the family is equal to 1 millimeter, we probably don't want to see it, right. We use this so the family doesn't break, but it means we shouldn't want to see it. That's when you can add a visibility parameter for the specific element so you can make the variable element invisible. In this case, we're going to use another kind of formula, which is not. And, basically, the visibility will be turned on if this parameter is false. So not, this I mentioned not visible if variable length 1 is equal to 1 millimeter.

So you can see VL1 here is equal to 1. In this case, the visibility is turned off. On the right, you can see VL1 is set to 120. And in this case, it is visible because it is not equal to 1 millimeter.

And the final tip to use arrays in Revit formulas is to avoid or at least be careful with horizontal and vertical arrays in the same family. While it is technically possible to have grid on the horizontal and vertical on the same family, it has a lot of complexity. And when you have more complexity in the family, you get more fragility, which means that the family might break more easily. So I've run into a few issues playing with arrays just like this.

So the solution that I found to create the brick family is to nest one of the array in another family. In this example, I've created a single brick I've created another family that only contains a vertical array or type then nested in another family where I created the horizontal arrays. This way, there's less fragility into the main family and less possibility that family will break. And it's a little bit faster I found as well.

OK. So this is the level one family, back to our brick family. The single brick unit, again, simply create a simple extrusion that has a height, length, and depth parameters, and can also map the brick material as well. And make sure to place the origin at the bottom left. So when you select the reference plane, make sure the define origins box is checked. That will be very important later on when the size of the brick will be changed. It will change the size to the right direction or going to the top instead of being centered. This is pretty important. And make sure to use the generic model kind of families for the single brick element.

All right. Take a bit of water.

So level 2 is the vertical array. So this is the end result that we want to have. We have a brick every other row, including a brick that might be cut on the top. So this is what you will have to recreate. And so here we have a little video that showcases what we can do with this family. You can see that when we change the height, for example, the array automatically adjusts. And we can also change the brick height and the brick length as well. And the family keeps working, so the height is customizable.

So the first things you should do in this family is to go in elevation view and create two horizontal reference planes with the brick height and set this parameter. And then the plan view, set the brick offset and set the brick depth parameter. And then you insert the single brick, the nested brick, into this array family.

And you're align and lock. So here is a little video that showcased this process. We are currently in Elevation View. We create the dimensions through are reference plates. Select the dimensions. Create a new parameter called brick height. It's a type-based parameter.

Sign it to the second row as well. You can adjust the value. Then you can go to the plan view and create the brick value as well as the brick offset. So this should be in the brick length as well. This is brick length. You can adjust the value, skip a little bit.

So now we can create on top here, this will be the break offset. And the other value is going to be the brick depth. Just like this. We have all over values.

And now you can see what we've done here. You can drag and drop a family from the project browser into the plan view, just like this. And then when you need to do, this a crucial step, is to map the parameters. You edit the type of the instance you placed, click on the small rectangle. So you have the brick height. You have parameters from this family, so make sure to map the brick height, map the brick length as well, and the brick depth. And it's not done here, but you should also map the brick material as well.

And then you need to align and lock. So you will see this process, there's a lot of align and lock, align and lock to make sure the family properly works. So now back to the Elevation View. You can also align and lock this family. All right. So the first brick element is placed.

Now, what you can do is to create the array. The array is located in the Modify tab. And you need to select the amount of array you want. But when creating it in a Revit family, you always place it to number 2, and you move to second. And then you will be able to set the amount of rows parameters.

So let's jump into the video. You can see we select the brick here. Use the array tool, number is 2, move to second. And I like to place it slightly above the top reference plane and then I can use the Align tool, set the reference plane, and then click on the brick to lock it. So this really to ensure that the lock icon is correct and that I've used the correct reference.

And then when I select one of the brick, I can click on the align over there. And in label, click on Add Parameter. And I call it a amount of rows. So this is a parameter for the array.

So I'm almost ready to create a formula to get the amount of brick we need. But first, let's create the height parameter. What is special about this is that we use also value called height minus offset. And the height minus offset value is found by taking the height and removing the brick vertical offset. And what is the brick vertical offset? It is the first row, basically. Because later on, we're going to use this family to be placed on the second row. So this is to ensure that the brick arrays placed on the second row are not tall.

So it's OK if you don't understand every formulas or every parameter. Don't forget that you have access, well, first, to the handout, and also to the data set so you can explore the families by yourself. It's OK if you don't understand every part of the formulas. The main idea is you get all the major points.

All right. So this is what you should be able to do. And you can see the amount of rows formula as set by taking height minus offset and dividing by brick height multiplied by 2. Why brick height multiplied by 2? Well, remember that we have a brick every second row. So for each brick, we have to add another brick to find the correct amount. So you can see that we flex the family. And when creating families like this, always test them as you go along to make sure that it properly works.

And finally, we need to create the top brick. So you will need to create a new type for the single brick. And what is special about this brick is that the height is variable. All the other parameters are the same, but the height might change depending on the total height of this family. So you will need to map all the other materials as you did so far.

And, again, remember that when a family dimension is set to 0, the family will break and you will get a warning just like this. So again, as I've mentioned earlier, you need to use an if statement formula just like this that says if this brick would be the dimension would be smaller than 0 or equal to 0, make it 0.1 millimeter instead just to make sure it doesn't break. If that is the case.

If the brick height is 0.1, well, we don't want to see it, so we use a visibly parameter. And since the formula used, not the brick height equals 0.1 millimeter. So it means if this is the value of the brick height, the brick will not be visible.

So here are all the parameters and formulas you should have. So it might look complicated, especially this one, the top brick height. It's not that bad actually. So the top brick height is basically saying, well, if it would be smaller than 0.1, make it 0.1 instead. Else, use the calculated height that we have found.

All right. And, again, make sure to make some tests to see if it properly works. You might need to work out with some of the align and lock. And for example, I can see the top break visibility here is automatically turn on. As you can see, this is the top brick. And over here, you can see the top brick visibly is turned off because, obviously, we don't want to see this little brick segment. Again, test the family to make sure it properly works. Seems to be the case.

All right. This is the level three. Now, the final level where we take the vertical offset family and now we put it in this level three family. And we'll take the vertical offset and place it multiple times with different types. You can see all the amount of times we've created in this family over here. Let me explain what this means.

So I've created this elevation view with a little nomenclature. You can use any nomenclature you want. But in this case, L1 means the longest brick. Longest brick. L2 means that the brick header, which are actually going to be protruding. L3, in this case, it's the small brick segment that is located on the left and that is found with a formula. R1 one in this case stands for the first row. R2 stands for the second row. VL4 and VL5 stands for variable length on number four and number five.

So remember that the origin is at the bottom left, which means at the bottom and on the left will always get full bricks. But on the right side and on the top, the bricks might vary. That's why on this side, we have variable brick length. So for the brick vertical array that is place into this family, we have to create multiple types. And you can see with the name the nomenclature that we use L1 for being the longest brick, R1 being the first row, and L1 R2 being this one, L2 R1 being this one and so on and on.

So this is the final family is a wall-hosted generic family. And go to the Elevation View and make sure to create the height and width parameter, just like this. And make sure that they are instance-based parameters if you want to see the arrows in elevations or 2D views that you can play around with.

Then the second thing you need to do is to be able to cut the wall so you don't have conflicting geometry. In this case, we go to an Elevation View, create a void extrusion, make sure to lock it to the height and width, and then go to the Plan View and lock it to the brick depth as well. And then you can use the cut tool, select the wall, select the void extrusion. It will cut the wall automatically just like this.

Here's a little video that explains the concept. So here, we create a void form, a void extrusion. I like to create it in the middle to make sure that when aligning and lock, it is done using the right references. There are other ways to do it. But for demonstration, I thought I would do it this way.

All right. And now, we go to a Plan View and also align this void extrusion to the correct reference planes. This one goes all the way to the brick depth. And go to the Elevation View again. Select the cut tool, select the wall, and then select the void extrusion. If I go to the preview, you can see there's a hole that has been placed on the wall.

Then in the Elevation View of this family, you need to recreate using reference planes the brick pattern. Using the dimensions like this with L1, L2, and L3, and locking the dimensions. And L3 is a formula, which is L1 minus L2 divided by 2. So you can recreate this brick pattern at least if you want the origin to be at the bottom left.

And then, again, like we did for the second level, you need to map the parameters. The brick depth, height, and length, and so on if you want to be able to modify these dimensions once the family is loaded into the project. And in this case, we will have different brick lengths. There might be L1, L2, or L3.

So in this case, we're going to map the parameters. You can see we map the brick depth, we map the brick height. In this case, this is L1, R1. And so we select the L1 brick length and map the height as well, just like this. Once that is done, you can place the family into a Plan View. Make sure to lock and align it to the referenced planes in the Plan View like this.

And then go to the Elevation View. Make sure it is aligned at the bottom and on the left side. Lock and align, again. Align and lock, align and lock. And then you're ready for the array. So you select the vertical array family and you will array it horizontally. So I like to place it a little further away like this and then use the Align tool and lock it to this reference plane and click on the lock icon. Then you're ready to select one of the array. Yeah, make sure to align it as well.

Then you select the array and click on the line with the number, and you can add a new parameters that is going to be called-- in this case, we call it C1. Let me pause it. As you will see later on, each of the array might have different formulas. So in this case, this is called C1. You'll see we also have C2, C3, and C4. Yeah, was there something else here. OK, great. C1. OK.

And then what is the C1 formula? How do we find how many bricks we should have? So after many tests, I ended up with this formula, which is run down with plus L2 divided by plus L1 plus L2. So basically the dividing element is this, basically two bricks, the main brick and the headers. And this is the full width we're going to use, which is the regular width of the element plus L2.

You can see that each of the array we're going to be placing has a slightly different formulas. So I don't have time to explain in details each of these formulas. You can have a look at the family by yourself or make your own calculations if you want to find out more or the reason I came to that. But I think that this graphic can explain the basic idea out of it. And yeah, the C stands for column, and it's the amount of columns for each of the arrays.

Again, always test the families. Here we modified width, modified the height to make sure the family properly works. And the family does flex and it doesn't break and you don't get any warnings.

Now, it's time to place the protruding header, which in this case, it's called L2. So you can see the formula right here. It's C2 round down width divided by L1 plus L2. So slightly a different formula. And in this case, you can see that we do map the brick offset parameter. In this case, it is 19 millimeters. So we make sure to map it.

So in this case, we create a new type. We edit the type, we duplicate it. And this one is going to be L2, R1. So the second length, but still on the first row. And again, it's all the same process. We map all the parameters once again just as we did. There's a little difference there. The length, we'll pick L2 and the brick offset. We do map it. We didn't map it for L1. And in this case, we do map it because it does have an offset. It's [INAUDIBLE] the offset to the wall, which means the brick is protruding.

And then you were ready to place this family and create. Go to the Plan View, make sure it is also locked on all directions like this. And then you're ready to create the array. It's the same process. Push it a little further. And then use align and lock to put it in the correct position. And then assign the formula, the C2 formula. So in this case, the first row is almost complete. You can see the result we have so far. We have the L1 brick and the L2 brick.

Now, you're ready to create the second row. The second row, we start with the L3, which only appears once in this family, so it doesn't need to an array. It's just placed on the left. So quite straightforward. And then you're ready to place the two other bricks are going to array.

So here's the example where we again create a new type. This one is going to be called L2R2. And we're going to map the brick depth. A lot of mapping while creating this family, by the way. The length we pick L2. And notice this, this is important. We set the offset. And now, we need to set the brick vertical offset. So what does it mean? The brick vertical offset means that this is the second row. So just to make sure that the height calculated is-- we remove the equivalent of a brick row from it. So it doesn't go beyond in terms of height. So we map the brick height to this parameters. You can see the brick vertical offset is equal to 67, which is the same as the brick height.

All right. So the mapping is done. All the other steps are the same. Go to the Plan view, align and lock, skip this, skip this just a little bit. And then in Elevation, ready to place it at to the correct reference planes. Lock it. And now what do you do? You create the array, of course. And you can see the result over here before the array is created.

So pretty quickly, you should have something like this. Almost all of the bricks are complete. Know what the leftovers are VL4 and VL5. What are VL4 and VL5? Again, it means variable length because on the right side, the length of the brick might vary. And again, we don't want these dimensions to be equal to 0 or less than 0 because the family will break. And you will get a warning. So, again, we use formulas that says if this brick would be smaller than 0, make it 0.1 millimeter instead. And if it's not smaller or equal to 0, smaller or just, use the calculated value instead.

And if you look at this image, you might see that sometimes this brick is protruding. So sometimes it's a header that is cut, sometimes it's not. So we have to find a formula that says how the offset is calculated if there is one or not. So I found this format it works pretty well, offset one or offset two, and gives it a formula that I've used here. Again, you can play with the family if you want to find out more.

And so all right, we have all the parameters. So this is the final family. You can see we have the brick depth, brick height, the brick offset which the users can change manually. The height and width are, when it says default, it means it's instance-based. So each instance of this family, you can use the arrows and play around with it, which is the dimension. We have the four arrays formula using the run down, all slightly different. And we have the VL4 and VL5 that says, if it's too small, make it 0.1 millimeter instead to make sure the family doesn't break. And OF1, OF2 basically calculating if there's going to be an offset for the brick on the right side, variable link, brick or not.

Again, I don't expect you watching this to fully understand all of it. You'll need to play around a little bit with the families. That's OK. But my hope is that you understood some concepts of using if statements, using a rundown, and using not formulas in Revit families and understanding arrays.

So load and test the family. When I create a family like this, I'll always create a dummy project. I never inserted directly in the main project I'm working on. So I create this small project like this. I place it, I change the dimensions, the brick height, the height, the width. I try everything to see if it breaks. And almost all of the time, it does. There are always a couple of issues. So I try to fix them. And I will say most of the issues are align and lock. So you need to align and lock some more. That's OK, it's part of the game.

The current limitation of this one is if you make the family too small the length, it might break because remember it might be smaller than at least two arrays in some cases. So I'll put the minimum length formula, the width formula that you need to have for this family to be OK. There could be workarounds with this. In this case, it was not necessary in this project, so I haven't done it. But you could use workaround to make sure the family doesn't break. So again, here are a couple of options that we can create with this family. A couple of different sizes rows and columns.

I wanted to show-- this is an alternative that I did. I wondered, OK, so there are three levels. If you remember correctly, the single brick, the vertical array, and the main family. I thought, is it possible to skip the second step and go straight from a single element to the main family. So I tried this. So this is the a family that only has a single brick and there are arrays in two directions, horizontal and vertical array. I wanted to see what it looked like because my bias was to think it wouldn't be a good idea and it would break. And it wouldn't work at all.

But for some reason, I managed to make it work. But the family is a little more complicated and, again, a little more fragile. A little more likely to break I would say, but it works. Perhaps it's not that bad a solution after all. So it's also included in the [INAUDIBLE]. You can have a look. Yeah.

All right. So we're over with the first part of this presentation, which was about the generic model family that is placed on a wall for the brick pattern. And pretty quickly with the design, after I created the families that go in between the windows that is regular, the designer came to me and said, actually, it would be cool if we had a gradient brick density on the whole facade. Well, basically like this. This is the end result that I did after creating the script. But this was the idea of it the designer presented me with. And I immediately knew that I would have to use Dynamo somehow. And I also thought of using curtain walls because I've played with curtain walls in the past and it work great when combined with Dynamo.

And so I made some research to learn about how I could use curtain walls and curtain panels to create a brick panel like this. And I found this video tutorial by a Revit channel called a Revit Boost. So shout out to Revit Boost and I included the link to this tutorial. And it is a super simple technique.

You can see it's a single family, just like this. So much more simple than what we've created. And it's basically a fixed size panel. So a height of 134 by 320. And in the curtain wall properties, you just need to set a fixed distance layout for the vertical and horizontal grid. It seems to probably work.

We can see the result here. And what I liked about this when I first tried it, it's super fast when compared to family. But first, it's much shorter to create. It was super fast. So I was really impressed and I thought, wow, maybe the generic model family is actually garbage and I should have done this in the first place instead of doing all these arrays, right.

But then I found out there were a few issues with that. For example, on the edges and corners, you can see that the dimensions is a little buggy. So corners, the top, and intersection were a little bit problematic with this technique. And I realized that generic model family was not a bad idea after all.

But I think-- Yeah. Let me show you this video where this is the current panel family. You can see the Exterior Elevation View. And now let's create one of these families. I'm creating a curtain wall like this. So we don't see much there. Let's change the view styles to consistent colors. So you can see the pattern. So this was created in about 5 seconds. So it's super fast when compared to generic model family.

But you can see on the edge, the brick is kind of deformed and the panel is stretched, which we don't want. There are workarounds with this, but still a potential issue. But you can see, we can scale it on the top and on the width and it's super fast. So that's something I liked about it this technique.

So I thought some more about it. And something-- I didn't want to remove the brick material from the main brick that other users were using to create regular full plans for the construction. So I didn't want to mess with that. So that's when I came with the idea that the curtain wall should only come in the headers. Just like in this little GIF here, you can see that we have curtain walls with only headers, and we place it on top of the brick wall just like this. So it's a secondary element.

And what I liked about this, since it is independent, you could place it on a different work set and shut down the work set if you want to improve performance. Because there are a lot of bricks in this project, a lot of producing brick, about 30,000 or something like that, so it can potentially hurt the performance of the main model. So you can place it on a different work set or even on a linked file if you want to be sure that you don't have any performance problem whatsoever.

All right, let me take a bit of water.

OK. What is I saying? OK. This is the modified curtain panel family that I've created that only contains the headers. And something you might notice in this case, I'm using first L1, L2, and L3 formulas, the same as in the generic model of families I created earlier, and using the formula to find out L3. And I'm assigning and locking these dimensions.

And something you might notice as all the dimensions are locked on the right side. Which means that whatever width and the height of the panel is it will not affect this dimensions of the geometry. It will always stay the same, just like this. And the brick height are so constrained. And the result, well, you can see on top here, we have a width of 360 or width 460, and it doesn't effect the geometry whatsoever. The panels will always stay on the same side at the same size.

And you can see, however, a potential issue is that even when it should be a small panel, we still get a full turn panel, which means that we see the two bricks over here, which is potentially a problem. And I've realized that we need to use some formulas to make them hide automatically. So the systems I thought about is to add visibility parameters, first with the width. So you can see the end result at the bottom. So when you stretch the curtain wall, the brick individually appear.

So in the last slide, you can see that in this case, the two bricks appear. In this case, no bricks appear. When you move the width a little bit, one brick appears. And finally, two bricks appear. That's using this formula that basically says, do we have enough width for this panel to show the brick or not. And there are two bricks, B1 being the bottom left brick and B2 being the top right brick. So created two different formulas for them to show up or not using visibility parameters and using a not formula once again.

And something I've realized pretty quickly is that there's also a height parameter. There's a width and the height. And I also needed to add a similar formula for the height, which you can see here for both B1 and B2 two. And finally, I also wanted a manual switch so I could turn each brick individually on and off for openings and also to use with the Dynamo script that I will showcase later on. So there are three visibility parameters for each brick.

And a final one, which is called B1 visibility that integrates the three other visibility parameters. And I'm using N formula, a new formula here. So with the n formula, all these conditions have to be met for this box to be checked and for the brick to be visible. So it checks is the current panel high enough for this brick, for B1, to show up? And is there a sufficient width for this brick to show up? And is the B1 manual visibility box checked? If the answer is Yes to these three conditions, the brick will be visible. If not, it will be invisible. And then you can see the result here where the brick only show up to this length instead of having bricks that go beyond the extent of the curtain wall.

So we have a little video here that showcase this, you can see that the dimensions are locked to the right side and on the bottom. These are the parameters of this family. And you can see that the height and the width parameters and the positives to explain they are reporting parameters. What does this mean? It means that to not actually use to drive the width and height because the width and height in a curtain panel is determined automatically by the curtain wall. When you move the curtain height, curtain grids, or you just modify the height and width.

So in this case, reporting parameters means that it just takes this value. You can modify it. But you can use it in formulas. And that's what we want to do here.

So leave this again. Yes. So the height and width are reporting parameters just like this. And you can see all the formulas here, we're using the height and the width to find out if the elements are going to be visible or not.

And have a look at this. We move in this, we're moving the height reference planes to modify the height. And you can see here that the bricks turn gray, which means it will not be visible once loaded into the project because the height is too small for this brick to show up. And if you go back to the type properties and you scroll down over there, you can see that B2 height is unchecked, which means that the main B2 visibility is also unchecked, which means the break will be invisible because one of the conditions is unmet, the B2 too height condition.

All right. You can see the result in a 3D view where we move the extents of the curtain wall. Yeah.

Dealing with openings. So in this case, remember, we have the main walls, which might contain windows and doors, and we want the additional curtain wall elements to remove some of the panels that are in front of openings. So sadly, you have to do this automatically. Maybe it would be possible with Dynamo. I didn't have time to do a script that does that. So there's a bit of manual work there, but you have to manually select these panels.

And when it's full panels, so both bricks that are going to be invisible, I switched in to the anti-system panel just like this. And then if it's only one of the brick, you can see this image only the brick on the left, so the bottom left brick which is B1 should be invisible, you can select each current panel and uncheck the B1 visibility parameter just like this.

So ideally, they should be done after use the Dynamo script. I'm going to showcase in a few minutes.

All right. So here's the demonstration to clean up the openings. You select all the current panels just like this. And first, you need to unpin them. And then you can change the type. I'm using empty system panel just like this. But then you can see on the bottom, one of the bricks should be there. So we select these three panels and uncheck B2 manual visibility just like this. And select the top one and uncheck the visibility of B1 like this and we've cleaned up the opening.

So, all right. What we have done so far, we have created a curtain wall that only contains the protruding headers. And we've adjusted the family so it plays around with a height and width. And we've cleaned up the openings, sadly manually, but still working.

All right. So now we're ready for the final part of this presentation, which you used some Dynamo magic. Use Dynamo to create brick pattern based on an image gradient. And here, you can see the final result. We're taking an image. In this case, it's a simple gradient, which you can create using Photoshop, and you map it into the curtain wall that we've just created and the curtain panels. Just run the script, and automatically, the pattern will be created on this brick wall.

And the way the script works is every pixel that is white means that there's 100% chance that the brick will be visible, so which means that the brick will be protruding. And when the pixel is black, there's a brightness of 0. It means there's a 0% chance that the brick will be protruding. And everything gray is in between. So middle gray would be 50%, dark gray would be 20%, and light gray would be 80%, for example.

And the script idea is based on a concept developed by fellow BIM YouTuber, Niko G. I've added the link in the PowerPoint and in the handout so you can see the script in action. But it's a very similar concept. Although in this case, it modifies the diameter of curtain panels. A little different, but you can click there to see the original script. So shout out to Niko G.

Whenever I create a Dynamo script, I always try to write down the steps I want to take-- the steps that the script needs to take. In this case, the first step is to select a curtain wall. Select all the current panels inside of it, group by columns. The second step is select a JPEG image to be used as the reference. Third step is to map the brightness of the image to a grid matching the current panels. And in this case, white equal yes and black equal no, and everything in between is a gradient. And five, you take the brightness of the pixel and add it to a random number. If the result is higher than a threshold value, the brick is protruding.

So these are the Dynamo nodes I use to select the image. It's a node called File Path. And then File from Path and Image Read from File. And I like to add which image node up there. So this is what you need to get an image from your computer.

In parallel, you need to create a node, which is called Select Model Element to select the curtain wall. And then you can see that we extract the curtain panel and organize them in lists. In this case, there's a node called Current Panel by Element. So we just take all the curtain panels from the curtain wall.

In this case, we have a Python script node that is pretty simple. It just takes the amount of horizontal and vertical grid in this curtain wall. And in this case, we add one. Why do we add one? Because we want to find out the amount of rows and columns. If we get the number of grids, the number of dividing grids, we need to add one this number to get the amount of rows. Just a matter of geometry. And then we play with the list a little bit and you can see the result here.

So in this example, we have 19 rows that each contain nine columns. Because, remember, in Dynamo, the list starts at 0. So in this case, it means there are nine columns in this list. So 19 rows each contain nine columns of curtain panels and for a total number of 171 curtain panels. And remember, each curtain panel contains two bricks, which means there's twice this value for the total number of bricks in this curtain wall.

OK. So this is a cool part. We take the amount of rows and columns in the curtain wall. And we take this number and we remap the image, so the JPEG image, and modify the amount of pixels. So you know in Photoshop, you can play around with an image, right? And say I want an image to be like 200 pixels by 50 pixels, for example. So that's what we're doing in Dynamo. We're taking the image and we're saying, I want this amount of pixels on the x side and this amount of pixels for the height. And this number is equal to the amount of columns and rows in the curtain wall.

And then we play a bit around with the list or reverse it to make sure it properly works. And then we use a color brightness node, which basically takes the color and gives you a brightness value between 0 and 1, 1 being white and 0 being black, and gray being everything in between. We around this value to make sure there's only two digits. And you can see an example here with the color brightness. You can see we have multiple shades of gray, 0.18 for example being in this case, it would be dark gray. And 0.55 being kind of middle gray, I guess.

Then we remap the brightness values. So in this case, why do we remap them? You will see later on. But the basic values the brightness are between 0.1. But for the sake of our calculations, I want them to be instead between 1.1 and 11. So it will remap all the values. That will be helpful with the threshold value.

OK. So I want to talk a little bit about probability. When doing this for the first time, I was using random values inside of Dynamo. And it's not just random values. Actually, you have a probability, right, because let's say light gray is a high probability, dark gray has a low probability. So I had to break my mind a little bit to find out how to do this. So I've realized the way to do it was to create a threshold value. In this case, we have a threshold value that is 11. So it's the minimum value you need to meet to make sure that the brick is visible, is protruding.

So the pixel brightness value we have between 1.1 and 11, 1.1 being black, 11 being white, everything in between. Then we add a random number to this value. So the formula being pixel brightness plus random number. And this value must be above 11 for the brick to be protruding.

In this case, the random number generated should be between 1 and 10. So let's have a look in Dynamo what that means. These are the nodes being used for this probability. Very important. We use the list count node. What this does is this counts the amount of curtain panels or the amount of pixels, which is all the same. Because in this script, for each curtain panel in the project, each curtain panel not in project, in the curtain wall, selected, there will be first and equivalent pixel brightness value and also a random number generated. So we have to use the list count to count the amount of curtain panels to make sure that the amount of random numbers is the same that is created.

So the random list is used to create a random number between 0 and 1. We will remap this number so it is instead between 1 and 10. And then we round this number so it doesn't have an infinite amount of digits.

Finally, that's here where you can check the threshold value. With the plus node, we add the pixel brightness to the random number. And then we have a greater than nodes, and that's where we check if it is greater than the threshold value. So again, pixel brightness plus random number, is it greater than 11 or not? And if it is, it returns a true value. If it is not, it returns a false value. In this case can see, for example, we have 513 curtain panels. So 513 true or false values.

Again, to make sure you really understand this threshold value concept, let's say that we have pixel A from the image gathered from the image. And this has a brightness of 3.5. So remember, the range are from 1.1 to 11, which means it's a 3.5 would be dark gray. And then we generic the random number, and the random number is 6.

If you add these numbers together, the value, the return value is 9.5, which doesn't pass the threshold value of 11, which means the brick will not be protruding, so it will be invisible in the curtain panel family. So again, the equation being pixel brightness plus random number, is it greater than 11? So again, each brick has a pixel brightness and a random number.

Finally, you can assign the visibility to each brick. We use the element set parameter by name node, we use the B1 manual visibility parameter that we've created in the curtain panel family. And the value are all the true and false values that we've created using Dynamo nodes. And you can assign that to each and every curtain panels in the family selected within the Dynamo script.

OK, remember, there are two bricks for curtain panels, B1 and B2. B1 being bottom left, B2 being top right. Which means that we need to repeat these nodes or random probability nodes for the B2 two as well, just like this. So everything is repeated twice for each brick. So there's a different random number for each of the brick, which makes the pattern look better.

All right. The script is done. Isn't it cool? So you can map any image you want. You can see, in this case, we have a radial gradient. And of course, from far away, doesn't look like bricks, but it is bricks. You can create a pattern just like this.

All right. So here's a little video of the script in action. You can see the whole script. It's not that big, right. You would think this would be a crazy script with lots of custom nodes. No, it's pretty simple.

So first, you select an image. Just select an irregular gradient like this. Then you select the curtain wall. And that's it. That's all you have to do. And then you just click on Run.

You run the script. You can see a preview of the image. And, voila. The image is mapped into the curtain wall. Isn't that cool?

And, yeah, by the way, if you're using the data set, the Dynamo script is included and it is compatible with the Dynamo Player, especially the new one if you're using Revit 2023. So make sure to have a look at it. And you can use this script for many things, just the basic principles of using curtain walls and custom curtain panels for generative design like this.

And, yeah, this is the result of using this script to map an image gradient on a facade, a brick facade. And what I like about this, as many years ago, I used to do things like that where it was kind of semi-random placement of elements. But I used to do it manually. So manually placing each of the elements, removing them, and spending hours and hours doing that very mundane, boring work.

What I like about this Dynamo script is that actually it was done pretty quickly. We had to do the whole redesign of this facade of the Griffin Town Project and basically in couple of weeks and creating Dynamo script. Because of the idea of the Niko G script, the original idea, I knew that I could create this quite quickly. So it went pretty fast. I was pretty happy with how it went.

So shout out to the lead designer of this project, Ben Wareing. And shout out to the Enscape as well. I like using Enscape for renderings. As you can see, I did this renderings in a couple of minutes after creating the random patterns.

And something interesting you might notice as well is that these families where the cursor is pointing at, they're the original generic model family that I've created that I've shown earlier in the presentation. You can see they look a little bit different in renderings. And in retrospect, I could have get rid of all of them and only use curtain walls in this project. But I guess in this case, in this old rendering, I still use the old version.

Yeah so that's all for this workflow. I hope you enjoy it. I there's a lot of content and especially in the first part, maybe you got lost a little bit with some of the formulas. It's OK. Have a look at the handout. Have a look at the families themselves. Play around with them. And you will get formula with some of the concept of the arrays, the if statement formulas, the not formulas, the n formulas, and all of the formulas we use in this presentation. And also get familiar with the Dynamo scripts and to map any image you want. And don't forget to rate this presentation, it would mean a lot to me. And make sure to download the data set at revitpure.com/au2022.

And I also wanted to mention a couple of final things. If you like this presentation, you want to learn more about what I do, head over to revitpure.com. Especially here, here's the free content that I've published since 2016. These are Revit pure pamphlets. They are free quarterly PDF guides on specific Revit topics like coordinates, railing, phases, door schedules, and so on. They're released four times a year. You can download them for free at revitpure.com/pamphlets.

Revit Pure Live is a free show I run on YouTube, occasionally. There are some seasons. And one of my favorite episodes was with Jens, who's the manager at four big architects in Denmark. Amazing episodes, highly recommended if you want a look behind the curtain. And you can have a look at the other episodes as well. So go over at youtube.com/revitpure.

And finally, Revit Pure Courses, we've released three premium courses so far-- basics for beginners, design for architects and designers to create presentation documents, and manage for BIM managers and advanced user. You can get all of the courses at learn.revitpure.com.

Yeah, that's all for me. I really hope you enjoyed the presentation. I know it was a lot, but I think it contains many information to help you create interesting Revit families and to use Dynamo for generative design and facade design. So thank you very much, and see you again.

______
icon-svg-close-thick

Cookie 首选项

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

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

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

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

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

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

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

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

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

icon-svg-close-thick

第三方服务

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

icon-svg-hide-thick

icon-svg-show-thick

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

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

icon-svg-hide-thick

icon-svg-show-thick

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

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

icon-svg-hide-thick

icon-svg-show-thick

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

Adobe Analytics
我们通过 Adobe Analytics 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Adobe Analytics 隐私政策
Google Analytics (Web Analytics)
我们通过 Google Analytics (Web Analytics) 收集与您在我们站点中的活动相关的数据。这可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。我们使用此数据来衡量我们站点的性能并评估联机体验的难易程度,以便我们改进相关功能。此外,我们还将使用高级分析方法来优化电子邮件体验、客户支持体验和销售体验。. Google Analytics (Web Analytics) 隐私政策
AdWords
我们通过 AdWords 在 AdWords 提供支持的站点上投放数字广告。根据 AdWords 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 AdWords 收集的与您相关的数据相整合。我们利用发送给 AdWords 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. AdWords 隐私政策
Marketo
我们通过 Marketo 更及时地向您发送相关电子邮件内容。为此,我们收集与以下各项相关的数据:您的网络活动,您对我们所发送电子邮件的响应。收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、电子邮件打开率、单击的链接等。我们可能会将此数据与从其他信息源收集的数据相整合,以根据高级分析处理方法向您提供改进的销售体验或客户服务体验以及更相关的内容。. Marketo 隐私政策
Doubleclick
我们通过 Doubleclick 在 Doubleclick 提供支持的站点上投放数字广告。根据 Doubleclick 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Doubleclick 收集的与您相关的数据相整合。我们利用发送给 Doubleclick 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Doubleclick 隐私政策
HubSpot
我们通过 HubSpot 更及时地向您发送相关电子邮件内容。为此,我们收集与以下各项相关的数据:您的网络活动,您对我们所发送电子邮件的响应。收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、电子邮件打开率、单击的链接等。. HubSpot 隐私政策
Twitter
我们通过 Twitter 在 Twitter 提供支持的站点上投放数字广告。根据 Twitter 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Twitter 收集的与您相关的数据相整合。我们利用发送给 Twitter 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Twitter 隐私政策
Facebook
我们通过 Facebook 在 Facebook 提供支持的站点上投放数字广告。根据 Facebook 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Facebook 收集的与您相关的数据相整合。我们利用发送给 Facebook 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Facebook 隐私政策
LinkedIn
我们通过 LinkedIn 在 LinkedIn 提供支持的站点上投放数字广告。根据 LinkedIn 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 LinkedIn 收集的与您相关的数据相整合。我们利用发送给 LinkedIn 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. LinkedIn 隐私政策
Yahoo! Japan
我们通过 Yahoo! Japan 在 Yahoo! Japan 提供支持的站点上投放数字广告。根据 Yahoo! Japan 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Yahoo! Japan 收集的与您相关的数据相整合。我们利用发送给 Yahoo! Japan 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Yahoo! Japan 隐私政策
Naver
我们通过 Naver 在 Naver 提供支持的站点上投放数字广告。根据 Naver 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Naver 收集的与您相关的数据相整合。我们利用发送给 Naver 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Naver 隐私政策
Quantcast
我们通过 Quantcast 在 Quantcast 提供支持的站点上投放数字广告。根据 Quantcast 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Quantcast 收集的与您相关的数据相整合。我们利用发送给 Quantcast 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Quantcast 隐私政策
Call Tracking
我们通过 Call Tracking 为推广活动提供专属的电话号码。从而,使您可以更快地联系我们的支持人员并帮助我们更精确地评估我们的表现。我们可能会通过提供的电话号码收集与您在站点中的活动相关的数据。. Call Tracking 隐私政策
Wunderkind
我们通过 Wunderkind 在 Wunderkind 提供支持的站点上投放数字广告。根据 Wunderkind 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Wunderkind 收集的与您相关的数据相整合。我们利用发送给 Wunderkind 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Wunderkind 隐私政策
ADC Media
我们通过 ADC Media 在 ADC Media 提供支持的站点上投放数字广告。根据 ADC Media 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 ADC Media 收集的与您相关的数据相整合。我们利用发送给 ADC Media 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. ADC Media 隐私政策
AgrantSEM
我们通过 AgrantSEM 在 AgrantSEM 提供支持的站点上投放数字广告。根据 AgrantSEM 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 AgrantSEM 收集的与您相关的数据相整合。我们利用发送给 AgrantSEM 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. AgrantSEM 隐私政策
Bidtellect
我们通过 Bidtellect 在 Bidtellect 提供支持的站点上投放数字广告。根据 Bidtellect 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Bidtellect 收集的与您相关的数据相整合。我们利用发送给 Bidtellect 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Bidtellect 隐私政策
Bing
我们通过 Bing 在 Bing 提供支持的站点上投放数字广告。根据 Bing 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Bing 收集的与您相关的数据相整合。我们利用发送给 Bing 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Bing 隐私政策
G2Crowd
我们通过 G2Crowd 在 G2Crowd 提供支持的站点上投放数字广告。根据 G2Crowd 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 G2Crowd 收集的与您相关的数据相整合。我们利用发送给 G2Crowd 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. G2Crowd 隐私政策
NMPI Display
我们通过 NMPI Display 在 NMPI Display 提供支持的站点上投放数字广告。根据 NMPI Display 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 NMPI Display 收集的与您相关的数据相整合。我们利用发送给 NMPI Display 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. NMPI Display 隐私政策
VK
我们通过 VK 在 VK 提供支持的站点上投放数字广告。根据 VK 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 VK 收集的与您相关的数据相整合。我们利用发送给 VK 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. VK 隐私政策
Adobe Target
我们通过 Adobe Target 测试站点上的新功能并自定义您对这些功能的体验。为此,我们将收集与您在站点中的活动相关的数据。此数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID、您的 Autodesk ID 等。根据功能测试,您可能会体验不同版本的站点;或者,根据访问者属性,您可能会查看个性化内容。. Adobe Target 隐私政策
Google Analytics (Advertising)
我们通过 Google Analytics (Advertising) 在 Google Analytics (Advertising) 提供支持的站点上投放数字广告。根据 Google Analytics (Advertising) 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Google Analytics (Advertising) 收集的与您相关的数据相整合。我们利用发送给 Google Analytics (Advertising) 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Google Analytics (Advertising) 隐私政策
Trendkite
我们通过 Trendkite 在 Trendkite 提供支持的站点上投放数字广告。根据 Trendkite 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Trendkite 收集的与您相关的数据相整合。我们利用发送给 Trendkite 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Trendkite 隐私政策
Hotjar
我们通过 Hotjar 在 Hotjar 提供支持的站点上投放数字广告。根据 Hotjar 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Hotjar 收集的与您相关的数据相整合。我们利用发送给 Hotjar 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Hotjar 隐私政策
6 Sense
我们通过 6 Sense 在 6 Sense 提供支持的站点上投放数字广告。根据 6 Sense 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 6 Sense 收集的与您相关的数据相整合。我们利用发送给 6 Sense 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. 6 Sense 隐私政策
Terminus
我们通过 Terminus 在 Terminus 提供支持的站点上投放数字广告。根据 Terminus 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 Terminus 收集的与您相关的数据相整合。我们利用发送给 Terminus 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. Terminus 隐私政策
StackAdapt
我们通过 StackAdapt 在 StackAdapt 提供支持的站点上投放数字广告。根据 StackAdapt 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 StackAdapt 收集的与您相关的数据相整合。我们利用发送给 StackAdapt 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. StackAdapt 隐私政策
The Trade Desk
我们通过 The Trade Desk 在 The Trade Desk 提供支持的站点上投放数字广告。根据 The Trade Desk 数据以及我们收集的与您在站点中的活动相关的数据,有针对性地提供广告。我们收集的数据可能包含您访问的页面、您启动的试用版、您播放的视频、您购买的东西、您的 IP 地址或设备 ID。可能会将此信息与 The Trade Desk 收集的与您相关的数据相整合。我们利用发送给 The Trade Desk 的数据为您提供更具个性化的数字广告体验并向您展现相关性更强的广告。. The Trade Desk 隐私政策
RollWorks
We use RollWorks to deploy digital advertising on sites supported by RollWorks. Ads are based on both RollWorks data and behavioral data that we collect while you’re on our sites. The data we collect may include pages you’ve visited, trials you’ve initiated, videos you’ve played, purchases you’ve made, and your IP address or device ID. This information may be combined with data that RollWorks has collected from you. We use the data that we provide to RollWorks to better customize your digital advertising experience and present you with more relevant ads. RollWorks Privacy Policy

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

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

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

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

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

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