Remove elements from list using distance to point

Hi,

I’m trying to create a definition that will create a random pattern facade similar to this

I’m not sure how to apply the attractor function to drop items from a list based on a distance to a point.

I’ve created a definition that creates English brick bond pattern. I can control the proportion of headers and stretchers in a list and set a cut off distance based on an attractor point. That gives me a quite regular pattern, but I’d like to achieve a gradual pattern like on the example image.

I can’t figure out how to use a linear or a logarithmic function to control number of items dropped form a list of all bricks using the value of distance to the attractor point.

Any ideas?

panels.dyn

pattern

 

 

 

 

Hi Maciej,

Are you looking for something like this:

Here is an example with circles. Hope it helps convey the idea

File: AttractorDrop.dyn

20160507-3

Hi Vikram,

Thank you for your help, it’s not exactly what I needed, but it got me on the right track.

The solution was to sort the list of points by the distance and them group by simillar distances and then map a number series to remove items.

 

Thank you

 

I’ll post the definition later when I get back to work

1 Like

Hi,

So I got it to work in principle, but it’s sooooooo slow.
I’ve tried few different nodes for sorting, but the minimal time to process the definition is 3 hours on a i7 4790, 32Gb RAM.
I’m working in an isolated Revit file with just a bunch of model lines in it.
Does anyone has any ides how to speed up this definition? I’m not sure if just Dynamo can’t handle the number of items I’m trying to process, or the definition goes into a loop?

panels.dyn (80.9 KB)

Hi,

I have narrowed down the issue to list sorting - I’ve tried a few different nodes for sorting my lists, but I can’t get below 3 hours for the definition to process. Am I missing something there?
I know that it’s a lot of elements, but it takes seconds to generate the rectangles, but when I connect any sorting node it’s hours of waiting for a result.

Hi Maciej,

You’ll need to work a bit on the way you approach this problem. You’re currently generating thousands of unique geometry objects and then performing complex geometric operations on them, thus generating new unique objects at each step. Your file simply gets clogged by the ginormous amount of geometric data it has to process.

Instead of this brute force approach, consider going for the lowest common denominator. All of your bricks are exactly the same size ( or one of two sizes in your case). Why not represent each unique brick with a single point? Points are multiple times lighter on resources and you can manipulate them with vectors incredibly fast.

I prefer to give you some basic guidance first and let you explore things for yourself, instead of just handing you a solution. You can break down this workflow in three steps:

  1. Generate a point “skeleton” that encompasses your wall boundary.

  1. Remove some of the points based on their distance to the “point of interest”.

3)Populate the points with bricks. The easiest way to do this is to first convert the points to coordinate systems and then use the “Geometry.Tranform” node to copy a “template” brick to each point location.

By limiting the amount of data down to its most essential components, you can reduce the calculation from hours and minutes to just a few seconds.

4 Likes

@Maciej_Wypych1 - @Dimitar_Venkov has the best method!

How would you do that?