Voronoi on a surface does not work

I was trying to create something similar to the structure in the below picture
My approach was populating T-spline surface and then applying the vorX (voronax form from point cells) this worked for some surfaces but it dosen’t work for the surface I want it to be applied

What could be the possible problem here
Also if there are any other approaches to create something like in below picture?

Any form of help is much appreciated !!

voronoi on surface.gh (4.1 MB)
(internalised Breps)

You are usind some add-on(s) that I don’t have. Anyway I have stuff for that type of task. it’s done with C# … but so what? That’s not the issue here at all. See this? - shown with clip for clarity (a random TSpline blob VS Vor cells out of points in the blob’s BBox):

The big issue here is that’s VERY slow … meaning that violates any known rule of interactive parametric usage. Even the Brep (blob) / Brep (vor Cells) sections (as Curves) option available is very slow (but less so I confess).

The other issue is that the former works with Blob’s BrepFaces VS the Vor Cells meaning that may exist pieces of the same face but due to a trim with another (adjacent) Vor Cell. See what I mean (spot the “long seam”):

This means that even more time is required for joining the pieces.

And all that while the pieces are not (yet) thickened nor are treated as windows

So if you are willing to pay a BIG price by waiting the computer to finish the job, notify.

Thanks for the info Pfotiad0
I was using VORONAX_GH plugin to create the pattern

I’m trying to create the expected final result being faceted than being curved surfaces( at least less curved like in the photo I have attached above)
I don’t mind the waiting time since this is regarding an academic project and I’m stuck in the process. Also, time is running out.

Could this C# create something similar and do you mind posting it here if so?

Not sure if is the salvation of any kind. Not sure that works always (broke my nerves and thus further tests are abandoned). More time was required for joining the pieces due to the same vor Cell “cutter” (compare the attached image VS the previous one).

Result: 5000 ms !!! just to start working …

But hope dies last: get it and feel free to report any bug (I expect some):

Voronoi3d_V1B.gh (126.2 KB)
Voronoi3d_V1B.3dm (665.9 KB)

But this (a Nurbs based solution) is NOT the way to cut the mustard: just imagine the implications of doing a similar envelope even for Academic level of study. Not to mention combine it with some pragmatic LBS (truss or other). Not to mention that is pig ugly.

BTW: Faceted? You mean planar eh? That … well … is another giant rabbit hole I’m afraid. For instance see the result on some “cooperative” vor type of cells (Ugly gaps even if they are small with relatively “easy” curvature, so to speak). Imagine attempting that kind of stuff on the Brep provited as test …

But if you want that type of stuff I could post it as well.


Thanks again!
It works but kind of damaged

What I need is exactly this kind of division on my surface. I prefer edges being totally straight. I’m trying this for weeks now and no luck yet. As you mentioned it was very time consuming and become non-responsive often.
But It’s too late to turn back, have to finish this somehow. Is there any help, that would be very appreciated.

YIKES ! As I said not tested enough … or … your Brep is bananas. I’ll test the code against your stuff ASAP and I see what gives,

PS: Your Brep appears as far from origin as is possible (all my NVidia Quadros fail to display a thing or two). I suspect tolerance issues (C# provided is tested with tol: 0.0001 mm) … or something similar. In case that nothing works … can you post a R file with the thing “around” the global origin???


Your closed blob works OK:

The monster (5km long) open thingy:

Yields indeed some bananas results:

BUT it takes 66000 ms !!! to finish … meaning that I’m not man enough to test the reasons (most likely tolerance).

Moral: you tell me.


Not solvable the nurbs way (having in mind rule N1: interactive, that is).

Plan B:

  1. Use MeshMachine and do a tri-Mesh from the TSpline blob (an envelope NOT the open on top thing that you posted).
  2. Combine (randomly) triads to quads (higher order becomes far more complex as a task).
  3. Option: (requires code) interactively modify vertices for achieving some better aesthetics,
  4. Planarize with K2
  5. Do some sort of truss to support the envelope.

Cons? Quads not higher order stuff (doable, mind - but … forget it at present time). Pros? Real-time and rational.

Plan C: Do it manually (far better results in every sense)

Would it help if you use kangaroo physics to solve the planarization of voronoi paneling?

K2 is a must … but not with the nurbs approach.

That said - just for the record - the C# works rather 100% OK with lot’s of blobs (about 50 tested insofar) … except with that monster open thingy. But that’s expected (Murphy’s law N666):

What would be the Planet Utopia solution? (Get any ugly blob do a Facet Dome kind of thingy in 40 ms [max] - ~1500+ times faster, that is). Facet Dome means that the BrepFaces (or Polylines) are planar … meaning the obvious (PS: try the GH Facet Dome component as well).

But that’s not possible in a blob … unless visible gaps (maybe big) are acceptable. I’m going to add that option (use a blob instead of a sphere) In the above C# and I’ll post it when ready. Expect ugliness to the max.

1 Like

BIG news:

Time for that stupid (and 100% useless) nurbs Voronoi “skins” C# posted above (V1B) is reduced from 60000 ms to 6000 ms for that giant open blob (and that prior implementing // stuff).

But is 100% useless and 100% off-topic (good news: hope dies last) not to mention that I hate anything even remotely related with Voronoi things (and computers to be honest).

When fully ready I’ll post it here.But why? you tell me.

1 Like

I tried the GH facet dome component as well, but the result was like below

It works for the sphere, but not for the surface I wanted… does this c# facet dome component works on surfaces like this?

About the C# component, It would be very useful if it exports the curves lines and centre points and cell as the output parameters. otherwise paneling on the surface would be very hard task.

The Facet Dome on Sphere [I suspect that is using the fit Sphere to Points Method as well] works as follows: From each random Point3d p on a Sphere gets the plane at point p having ZAxis the Sphere normal at p. Then it gets the lines due to ccx pair events from every collection of Planes adjacent to a given point VS the Plane at p (some sort of connectivity is obviously required for that). These lines do the resulting polylines and/or Brep faces. If you were familiar with coding I could provide an abstract demo on that matter (i.e. going from [sorted] lines of any length to a closed polyline like the Facet Dome [and my C# captured above] does). Anyway … forget that (is not our issue).

As I said I’ll try to port this concept on a blob (I have no ready C# attempting that] … but … well … there’s a heavy price to pay since the polylines would appear having (big or small) gaps between them. The result would be an aesthetic havoc, mind. On the other hand doing a proper Load Bearing Structure supporting all that ugliness is easy AND rational AND costs less than the GNP of Nigeria (Always have a hint on dollars even when in the Academic bandwagon),

Other than that the BIG issue here is:

  1. Abandon any method using the blob VS vor 3d cells (i.e. anything doing nurbs type of results),
  2. Achieve at any cost an interactive solution (Elapsed< 300 milliseconds),
  3. Achieve planarity on the resulting BrepFaces (preferably polylines).
  4. Interactively choose what “facet” is opening and what is roof (that would be my gift - impossible to do that with native stuff) . Plus do something when near the ground.
  5. Do some realistic solution with the openings (even by Academic standards).

This is the challenge … for anything plus that … implementing any trivial stuff in any C# is a matter of minutes - this would be never an issue here.


As I said V1B is completely reformed into V1C. 3 modes: solids, skin BrepFaces and Curves. Custom random point creation. Plus a random elimination option of results for LOL effects. Why? well … since that crap V1B C# has absolutely no usage for anything even remotely related with AEC > let’s target “art” (millions wait for me).

But … after testing it against my typical combo of test Breps (about 50) … the thing never exits when case N50 is used (keep percentage: 60%, mode: Surfaces [Solids works OK]):

Where is the bug? Why this happens? You tell me (more tomorrow with the release [ I do hope]).

Moral: I hate computers, Voronoi 2/3/4/5/D, solids, surfaces, curves, points and meshes.


Trying out this plan B
I tried the mesh machine

Plan B:

  1. Combine (randomly) triads to quads (higher order becomes far more complex as a task).
  2. Option: ( requires code ) interactively modify vertices for achieving some better aesthetics,
  3. Planarize with K2
  4. Do some sort of truss to support the envelope.

I can’t find a wayu to go beyond the first step, could you be more specific about the second step here?

And by the way what did you mean by doing it manually (plan C), drawing edges manually?

Allow some time (it’s Monday: havoc in the practice) to test the FacetDome on a blob concept and if it fails … we’ll see ways to play with meshes by combining triads into quads (But … if we forget the image that you posted … triads is the rational way to go [plus: is the pure engineering way - planarity and the likes]). Triads can being combined ideally with a stiff LBS (a W truss I would suggest) system as well. But … these days … the absurd (and ultra kitsch) reings supreme.

That said K2 can achieve quad planarity quite effectively … but doing similar things in real-life … is not a walk to paradise (and in most of cases envelopes leak over time). On the other hand the Academic way of thinking is a thing that you’ll pay heavily when you’ll become a pro.

In the mean time - just for the record - get the promised V1C (// is removed: what could be the meaning for going from 10000ms to 2000 ?? still is NOT an interactive solution > meaning that is just a crap solution).

The only thing that V1C can do is to make some s***t art stuff (antigravity is required, mind if you use the takePercentage option != 1). The other thing that can do is to teach you how NOT to do things.

PS: VIC rejects automatically any Brep that is not closed (so don’t feed the thing with open ones [or 10Km long ones]). Tolerance used in all Methods is user controlled as well.

PS: Your 5km big brep still refuses to play ball correctly (but is not an envelope anyway). Must be something wrong on that thing (other than the tolerance issues due to the huge size). I’ve seen this happening (in rare occasions) when going from TSplines to “complex” R polysurfaces - keep in mind that TSplines are dead by now (so there’s nobody to blame/report a bug).

Voronoi3d_V1C.gh (129.0 KB)
Voronoi3d_V1C.3dm (2.9 MB)

BTW: In some other (parallel) world and in some other (parallel) rational reality … this is what I would do if I was you: get any (correct I do hope) TSpline blob > use MM for some sort or relaxation (or K2 if you insist) > do a W truss (in real-time) > be a happy (and reasonable) bunny.

Mesh_ToTruss_InSomeOtherWorld.3dm (4.3 MB)

I hear you: but that’s not what I want. Indeed … a true man must walk the full walk (to nowhere).

1 Like


There’s a nasty situation here in practice. I think that the FacetDome on blobs … well … maybe this w/e (but maybe not: I hate “situations”).

Enter Lila (she’s very smart, mind). Lila said: why not do some flat Vor cells, map them to a Surface and then finish with the “thicken” job? I said: well … that works only on a Surface and not in a poly Surface. Lila said: indeed but since the main point here is to indicate the obvious (gaps in the flat vor polys [unless you use K2 for an attempt to planarize them] - they are flush only in a sphere) why bother doing the other thing? Smart girl I confess. Open and enjoy (kinda).

Morph_VoronoiPolylinesAndThicken_V1.gh (76.0 KB)

Thanks again Pfotiad0
I was busy with preparing the space layouts.

I tried the Lila’s method and actually it’s a good approach to my problem. but also It doesn’t work on my ‘5km thing’ since it doesn’t represent a single surface. I tried deconstructing Brep and applying it to the surfaces but it only creates separate surfaces with different projections with different attributes.

All the problem is with this surface I have, I’ll see whether I can recreate the same surface (or ap near same surface) with a different approach or try relaxing the existing one as you suggested. Mesh relaxing one is something I’m not familiar with, but I’ll do some research and see. If there is already developed definition or plugin somewhere, could you please mention the link here?