NU Scaling and offsetting curves

Hi there!, I am trying to make a grashopper program in order to scale a sole using Scaling NU factor but I want to conserve the spacing properties between curves from sole (red curve as a reference, black and white curves are offsets) in every scaled sole. I have tried scaling everything (mantaining sole scaling factor for all items) but logically, all inside and outside from red curve (sole) do not mantain the desired distance.

I also have tried scaling separated item using as a bounding box reference for the red curve and finding the % scaling factor for each item and positioning them… but it does not work.

The attached picture explains what I am trying to describe.

I have tried to find some grasshopper plugins but I am really lost and I have no idea how to focus and split the problem to solve it.

Any suggestion will be very apreciated.

Thanks for your time.

1 Like

I’ve run into the same problem scaling other curvy closed curves. This might work for you: forget about the all curves together. Instead, scale just the red one, and the use Offset Curve to create new black and white ones.

just a dirty prototype of a bad idea :slight_smile:


soles scaling.gh (18.8 KB)


edit: looks like I got it wrong :slight_smile: the reference curve had to be the red one… I’ll never get back those 10 minutes of life :frowning:

let’s try again:


soles scaling_Re.gh (21.5 KB)

important: the 4-points polyline must really be like 1-2-3-4 in this order

1 Like

Hi there!
@Birk_Binnard That is the way that we are doing this now, but it is very boring and repetitive…
@inno wow! I really appreciate your effort, that is incredible your ability to do that in a short time, but it is necessary to explain everything more to reach the main problem and analise if it is possible to make a “standar solution” :stuck_out_tongue:

In footwear industry, like other ones, not always everything is “white or black” and there are multiple shapes that it is necessary to mantain some distances but some zones are not a directly offset from red curve, I am no sure if this is clear or if I am explaining well… For instance, I am going to attach more pictures in order to explain what I want:

My goal is to make a grasshopper file that selecting what kind of curves (scaled or the special ones), automatically make the full scaled sizes, something like this:

I think that it could be some separated scaling depending the % of the full scaling factor, but I am not sure… because nowadays I could not find a manually solution to replicate it automatically.

Any ideas?

Thank you so much!

well, this is a bit different than initially described :slight_smile: anyway I’d be happy to give it a try

can you post the Rhino file with the above curves in such a way we could experiment on the real ones?
specifically, the final sizes (coloured outlines) would for sure be helpful, and also any kind of standard and special shape like in the last two images

and a final “weird” question is there a way you specifically measure the size?
like something more complex than the average human being -me- would think? (I’m thinking from mid of the tip to mid of the heel)

Rhino attached with examples.
Every size is calculated asuming UE standard step size:

  • 6.66mm for Y scaling
  • 1.50mm for X scaling
    And we scale asuming origin from the point (easiest way)

ConsultaEscaladoOffset.3dm (1.7 MB)

1 Like

Ah yes - like most things it is more complicated than it seems at first glance. Do you think this approach would work:

  1. Reparameterize the base curve and divide it up into 100 (maybe more) sections.
  2. Get the curve’s normal vector for each of the 100 points.
  3. For each group of points at a particular area of the curve (such as the toe or heel), decide how much larger or smaller the desired curve needs to be.
  4. Move the points in each area along their normal vector by the amount from #3.
  5. Use an Interpolated curve through these new points to make the desired shape.

Maybe a GraphMapper or GenePool would be a good way to set the distance to move each group of points.

I have tried some things around basic shapes


soles scaling_Re_Re.gh (39.8 KB)

the following letters are problems to tackle (all the shape variations indeed :slight_smile: ) but I like this set of problems, they are interesting to me, and I wouldn’t mind dedicating some free time on that

A - is easy to implement, just an added offset value to put in the middle of the range

B - I think it’s kind of easy, I see a very clear change of direction on the tip of the silhouette, looks like it just becomes a smaller fillet on the very same curves… I think it will need two sliders: one for deciding how much “old curve” is to be trimmed out, and one to decide a new -smaller- fillet radius

C1, C2 - in my mind this problems belong to the very same family, and are tightly linked together: it’s something like “now we place a perpendicular cut somewhere”
is there a particular way you chose the direction of the straight cut on the tip of C2? because it literally looks like C2 is a straight cut, while C1 (offset apart) is a more rounded cut on the very same general direction of C2… so it would come easier to define that variation if there was a “geometrical rule” that helps finding the orientation of that cutting line (or define what line is that cut-line perpendicular to?)

in regards to these shapes: how do you manually go in deciding where this axis is located, if this is the way you are doing it?

I thought I would do like the following:

but this would require setting an additional curve to start from… so any thoughts of your could be enlightning :slight_smile:


[edit]
concept for letter B

@inno Impressive analysis! But there are some points that I need to clear.
All dimensions are illustrative, because footwear industry is all about visual appareance and some simetries, but in fact, there are no mathematical chryteria, so answering your questions:

is there a particular way you chose the direction of the straight cut on the tip of C2?
how do you manually go in deciding where this axis is located, if this is the way you are doing it?

No, just visual appareance based on the last and shoe design. But normally it should be “a half part looking the last direction throught the toe”
The other anatomycal chriteria is that the heel must be symmetrical (more or less) for both feet.

Usually the offset curve from the sole is a mathematical approximation for a visual lookalike simplification, so the main problem is not how to make this curve, otherwise how to scale it (probably the curve is given) maintaining visual distances for all the scale.

For all the above mentioned reasons I think that probably the solution could be something that @Birk_Binnard commented, analyze both sole and offset curve (perpendicular length vectors) and apply distances for each new scaled design… What do you think? Is this viable for two given curves that at the very first view there is no shared information?

1 Like

I tried to put down a dirty prototype of the method suggested by @Birk_Binnard applied only to the external curve, and it looks like working pretty well (gg)


soles scaling_Vector_Approach.gh (29.6 KB)
[be aware: the file is a real mess]

but at the moment I don’t have a clear idea how it could be applied to the blue curves, to be referenced based on the red ones:

Hi inno - I was happy to see that you thought my approach might actually be worth trying out. For some reason I couldn’t get your GH file to work properly for me, but I did get it sufficiently functional to see what your basic approach was.

I think I didn’t explain Step #3 sufficiently well. I’ll try to do better here:

For example, when dealing with the part of the base curve that forms the toe area, first identify the subset of points that control this area. Suppose it is points #65 - 73. And suppose you want to move these points outward to allow room for longer toes. My idea was to move these points along their normal vectors outward according to the distances calculated from some smooth curve like a sine curve. These distances could be calculated from a GraphMapper Sine function that starts and ends at 0 (so the new curve would match with the base curve at it’s endpoints and and be tangent to it) but would bulge out depending on the height and width of the sine curve.

You could use this same method with different parts of the base curve simply by varying the subset of points picked to move. And you could move the in or out (if this would ever be needed?) by changing the GraphMapper curve accordingly.

It might even be possible to put all this GH stuff into a cluster so you could use the same code for various parts of the base curve simply by feeding it the base curve point subsets that define the area needing alteration.