Pucker/bloat curve points

Hi there,

Bit of a newbie user here, so sorry if I’m missing something obvious!
I’m trying to create something similar to the pucker and bloat tool in Photoshop, but for curves.

I’ve gotten as far as creating a radius of influence to capture specific curve points around an effector, and also been able to scale around that effector point. But I’m just stuck at the final point of being able to join the list of points inside and outside of the radius, and make sure they are in the correct point order to turn them back into curves.
46%20PM 58%20PM

I hope that makes sense - I’ve attached a Grasshopper script and Rhino scene for reference if I’m not making any sense.

Any help would be greatly appreciated!

PuckerBloat.gh (11.7 KB)
PuckerBloat.3dm (3.5 MB)

hi fleer,
first of all, next time you don’t have to post the 3dm file, just right click on the curves and point components and select ‘internalize geometry’ .That way they will be included in the .gh file.

now, I saw your file and you’re almost there. The only problem is that when you put your transformed points back into the lists to create the closed curves, their position in the list has changed.

eg. 1,2,3,4,5,6,7,8 ----> 1,2,6,5,4,3,7,8 (affected points in bold)

My suggestion is that you find a way to retain the index mapping so as to reconstruct the point lists in the correct order.
Unfortunately I don’t have the time now (although I like these challenges) but I hope you have enough to continue.
p.s. if you find a solution pls post it! :slight_smile:
p.s. 2 it’s better to use interpolate instead of nurbs curve so that the unaffected parts of the curves remain the same.

1 Like

You need an attractor-point definition.
You shouldn’t split your point list in “point inside radius” and “point outside radius”, because as @anikolo said, that will mess up the order of your lists.
Best is to make a function that create a value (from the distance point to attractor) that will become the amplitude of the moving vector (positive to attractor, negative away from), and that value is “0” if the point is outside your radius.

Anyway, to put again togheter your lists, instead of Merge component you can use Entwine component that does the opposite of Dispatch, more or less.

PuckerBloat_RE.gh (12.6 KB)

1 Like

Thanks Aris and Riccardo!

I got a working solution thanks to your suggestions. I ended up using the Boolean value (of whether points were within the radius) as a multiplier to cancel out their distance multipliers.
It definitely feels like a more elegant solution!

PuckerBloat_v2.gh (16.8 KB)