Tiling script / Grasshopper

Hello everybody, i have this project that I’ve been working on its regarding the tiling of the floors using irregular natural stones so i wanted to make a script that would take these stone tiles (with preset shapes and dimensions) and lay them out on the floor in a random pattern creating the grout in between.

I thought of approaching this issue with the Voronoi pattern. Since the size of this stone is preset i thought of dividing the total floor area with the size of one irregular stone tile thus limiting the voronoi cells not to be smaller than the actual tiles. Then my idea was to script a way to make the actual tiles (that I’d import in grasshopper) appear in a random orientation in every center of a voronoi cell creating a natural finished look. Currently i have made it to this stage where i have voronoi pattern in a desired scale set out on my floor area but i cant think of a way how to make these tiles appear in the center of every cell in a randomly rotated way. Could you give me some solutions for this? Thank you in advance!

Example photo:

random polygon V0.gh (50.4 KB)
Plugin: Clipper 1
Get wilder shapes by adjusting the sliders
Honeycam 2026-04-27 14-49-03

Hey, im also working on this but I have the 3d model of a singular tile from the catalogue and I would need to use exactly that tile - do you think it wouold be possible to somehow put that tile from the catalogue in this pattern?

What i made for now is that all voronoi cells can have one tile in their center but my issue is that

  1. overlapping of tiles should not happen
  2. orientation of each individual tile should be random

So basically what im trying to achieve is to have every voronoi cell as a boundary for stone tiles that im using - it should fit inside. Does anyone have any idea how could I acheive that? Thanks!

Hello,
How about OpenNest?

https://www.food4rhino.com/en/app/opennest

Thank you, i have seen that extension but unfortunately I have Rhino7 which does not support that.

It does.

oh, ok sorry i just installed it, but im still not sure how to approach this with that extension

If you refer to an exact shape - share it.

You can randomise rotation in Gh first and then lock the orientation in ON.

This is how it looks for now - i was experimenting with two differetn shapes and sizes of the stone tile and I used OPEN Nest pluggin.


This is how my code looks like - I have separated big and small sizes of a stone tiles so I can control the amount of each. I just wish I could achieve more random look, that every tile is randomly oriented so that I have the grout formed in between them and that the stone tiles are a bit more mixed.

This is expected outcome looking at the image.

Want help? post the file.

Here is the .gh file

I was trying to maybe make all copies of the initial stone tile have a random rotation before plugging that geometry in Open Nest but that did not change the outcome a lot.

Also one more problem I ran into is the time that Open Nest takes to execute changes currently is 9.5min which is very slow, I amalso very interested in making this more fast.

270426 vol2.gh (14.1 KB)

270426 - V2.3dm (372.5 KB)

Better, but still not optimal - rotation allowed:

(I have simplified curves to get faster result)

No rotation allowed:

Or when two tiles are treated as one:

still nowhere near to the real life randomness

Oh amazing thank you. Could you maybe upload the file so that i can see how you made the modifications? Also, do you think that i should not use OpenNest plug in for this type of issues? Once again thank you!

Which option you like most?

You can use ON as an entry and the fiddle a bit by hand.

The last option with the most random layout.

I have built only one relation small to larger curve, but if you spend some time and built few more reasonable scenarios and then drop it to the ON - it could give you better result.

270426 vol2.gh (5.8 KB)

Amazing, thanks a lot, ill tryo to do that. I was really looking for an easy solution to this but I guess it is not that easy to achieve random result with a preset shape.

If I had to do it myself, for construction purpose - I’d probably do it by hand (unless there is a 100 sqm) :sweat_smile:

Yeah, its a huge building with a lot of different levels that all need to be done in this organic way so yeah :sweat_smile: