Voronoi: How to Offset, Fillet Cells?


Relatively new to Dynamo but familiar with parametric design. I recently read a post on “Voronoi tessellation on face” (http://dynamobim.org/forums/topic/tessellation-on-face/) and want to take it a few steps further.

How do I join the curves that come out of the voronoi node into individual cells? I would like to be able to offset these cells to give the 2D voronoi pattern some thickness.

Eventually, I’d like to vary the offset distance by the cell’s distance to attractor points/lines. I’d also like to fillet the corners of the cells. However, I’m still stuck trying to create the cells and haven’t seen a post showing how to do this. Any advice is appreciated. Thanks,

Hi @aariano

Show your work so that it would help others to undersrand your issue. Thanks :slight_smile:

Hi, see my workspace below. I want to offset the voronoi cells, but what comes out of the Voronoi.ByParametersOnSurface are disconnected curves. Thanks,

Hi @aariano

Join all the Curves using Polycurve.ByJoinedCurves node and then use Curve.Offset node.


Thanks for responding. Your solution works for individual closed shapes. However, the voronoi module creates many adjacent closed shapes that share common curves. I tried to join the curves together so that I may offset them, however this doesn’t work in my case because of the shapes’ shared curves. See workspace below.

Do you have any idea how I can create separate closed polycurves for each of the voronoi cells? Thank you,

@aariano currently your connecting points list you need to connect curves list.

@aariano you can also create polycurve using points list by using Polycurve.ByPoints node.

I am going to make my own Voronoi with blackjack and surfaces. Because why not :smiley:

So First I get a surface (from revit in this case) and I create a point grid on it. Then I create a number of random points (seed )and I measure the distances between the points in the grid and the random points. Then I group the points which have the same seed point as closest one and I create their outline with Convex hull 2D from Clockwork.

This works if you don’t care about the exact boundaries of course.
Then once you have the solids you can subtract or intersect them


With Dynamo’s voronoi you need to do some solid booleans too.
Actually you can make it on a flat surface and then remap it any curved surface

These are the operations that result in this:

voronoi solids on a flat surface

After intersection with the surface you can get the perimeter curves and points of these voronoi faces and remap them to another surface:

Also remapping the curves and applying some structural beams:

Hope that helps.
The solid operations could be really slow though :confused:


You can also use T-Splines nodes.


Hi @aariano ,

@viktor_kuzev 's solutions are all really cool
here’s my proposal, just for the sake of having fun :slight_smile:

edit : for the fillet part of the question :


Thanks, but now I can see I went too “solid” :smiley: Your solution is much more elegant and light. :slight_smile:


@Mostafa_El_Ayoubi Since your method inspired me and since @aariano was also asking about atractor:


Hi @viktor_kuzev !
Do you mind share a complete screenshot of your workflow?
I don’t get how did you convert the solid-straight edges to curvy ones.

Hi @Ahmad_Saad
I don’t think I keep that file. But what you’re asking is visible in the 1st gif (though, I admit it, not the highest quality image)

I placed some points on the polycurve and made a NurbsCurve using NurbsCurve.BYControlPoints

I tried this technique, however it gave me this error:

Warning: Curve.PointAtParameter operation failed.
Could not find sub Curve in parameter range

I used an alternative way to do it, but I thought you used some other nodes that’s why I asked for a screenshot :slight_smile:

The curves have parameters ranging from 0 - the start of the curve to 1 - its end. You’re creating a range from 0 to 10.

1 Like

Also, if you create the curve through the 1st and last point you.re going to get there drop-like shapes instead of smooth cells. That’s why I used range from 0 to 0.7 and then used the node with the closeCurve option set to true.

1 Like

thanks for the tip, I didn’t understand completely how the “curve point at parameter” works, however I still see the issue you just mentioned while I used the same values as your example.

Curve.PointAtParameter should be set to Crossproduct lacing.