CurveBoolean complex Polylines after Offset

Hi all,

I created a pattern using parakeet in Grasshopper, that I want to lasercut to decorate a fireplace.

To do that, I need to turn the pattern into a single shape by connecting endpoints:

The only way feasible seems to me to be CurveBoolean after baking in Rhino and adding a bounding box, as GH cannot distinguish which polylines need to be connected.

But, CurveBoolean simply doesn’t work on this set. I.e it basically crashes Rhino after a long wait. I find it hard too believe that this shape would be too complex to make this possible. EDIT it does work after a while, but takes a minute or so. I would like to make more intricate patterns, though…

I’ve had trouble with this kind of geometry before, to turn the polylines into meshes in an efficiënt way. That was kind of resolved by using a specific nautilus component (thanks to the great help from people on this forum). But the original issue remains. The file for this pattern is 15mb, which seems quite big for basically a bunch of polylines.

I think the main issue is the ‘offset polyline’ (or the Clipper 2 equivalent) component used. Arcs are converted to polylines, where a lot of segments are needed to keep a fluid shape. Hence a lot of control points (around 400k) and difficult to Curveboolean.

Why is there no curve equivalent to ‘thicken lines’? And why do polylines put so much more stress on all subsequent operations in Rhino? Turning it into 3D geometry becomes basically impossible. Is there a way to convert back to curves (I tried Nautilus polyline to Arcs and lines, but that doesn’t really work)?

Thank you for your insighs.

P.S if there would be a way to do this operation directly in GH, that would be great. I did not manage with region difference/intersection.

P.P.S I’m really running into trouble lately creating decorative geometry like this (= lots of curves, polylines), GH takes ages to calculate. Even though I have a brand new laptop (with decent CPU). Can someone point me to some information on ways to optimize workflows to keep curves clean and manageable? It feels like I’m missing some basic insights on this.

Thanks again!
Parakeet_Curves.3dm (14.8 MB)

remove duplicated geometry.
_selDub
→ Delete
then reduce the polylines
_reducePolyline - i used 0.05

there are still around 3859 curves with 45615 points.

if the pattern is repetitive as the one you show.
why don t you work out one cell/ tile and then multiply it ?

to get more feedback to for the grasshopper part of your question - post a .gh definition and change category to grasshopper.

kind regards -tom

2 Likes

Thank you Tom!

There was indeed duplicate lines in my file, I had been toying around witch copies to try things.

Reduce polyline works quite well. De reduction is substantial! Unfortunately, it does not really seem to have an influence on Curve Boolean, still takes a long time…Not to mention PanarSrf or extrude after that.

Maybe the amount of segments does not influence CurveBoolean after all. So I wonder, is it an inherent ‘limitation’ of Rhino that it is resource-intensive to work with polylines?

I’m trying to understand the reason behind that, and of course find alternative workflows.

Regarding the repetitiveness: in this case yes, but I’d like to work with evolving or irregular patterns without repition, too.

Also, I need to turn the patterns into 3D Panels afterwards to be able to render.

Thanks again!

I believe the number of curves and intersections is the limitation of curveBoolean’s power.
Curve boolean is searching for intersections and regions - which is not necessary in your case if you provide proper trimming and all curves are closed and do not intersect.

I got this in less then 2 min:
_reducePolyline 0.05
_planarSrf (1 Minute)
_extractRendermesh
gumball-Extrude (there is also _extrudeMesh)

you might increase performance by not processing the entire board.
process 6 or 10 smaller sections.
Maybe even some MeshbooleanUnion at the end.

?

kind regards - tom

Hi,

thanks again, Tom!

I fiddled around a bit more, especially looked into not processing the whole board, great tip.
Also, RhinoCommon methods like curveboolean can be used in GH by using a C# (or Python) Component.

In attachment a script that works pretty good, maybe it can help others.

Parakeet_Curveboolean.gh (19.2 KB)