algorithmic modeling for Rhino

Guitar Nut conundrum: equal spaces and equal centers question


i'm playing around trying to make a nut-slot template maker for guitars. Basically there are two ways to cut the little grooves on the top end of the guitars neck (the nut):

1. equal centres:  the nut's width is divided in equal segments resulting in queal spacing from string center to string center but the spacing bewteen the top strings is smaller than between the lower strings. It's not very comfortable to play, on bass guitar it's really awkward

2. equal spaces: the nut is divided so that the spacing between the outer edges of all 6 strings is the same. Since eachstring has a different width (gauge) this requires some calculations but is much more comfortable to play

i have attached my pathetic simple attempt at creating this. It works for 'equal centres' but i can't really figure out several things:

A. how to use a table or list of values as an input for the string gauges. Ideally i would like to select from different 'sets' of strings so that i can create different nut templates for different thickness strings easily. So ideally i would like to select a preset like: 'light', 'ultra light', 'medium', 'light top heavy bottom' and then it would adjust everything according to the different string gauges defined in those sets/lists.

B. how to use metric units for the spacing of the top and bottom strings to the fretboard/neck edge. I have tried to do it by eyeballing it with the 'point on curve' element which i'm pretty sure is not the way to do it properly. I want to be able to simply input this in mm, so for example a 4mm distance from the strings to the fretboard edge.

C. how to figure out the 'equal spaces' and divide the bridge and nut curves accordingly so that the distance from the outside edge of the top and bottom strings to the fretboard is equal, and the spacing between the strings outer edges (not the centres) is equal.

would really appreciate any help or tips to point me into the right direction :)

Views: 1297


Reply to This

Replies to This Discussion

You didn't internalize your 'Bridge' and 'Nut' curves.

Regarding metric units - irrelevant to solving the problem as long as your 'String Gauges' are also metric?  If not, make them so before further efforts.

To explicitly preserve the sequence of 'String Gauges', use 'Merge' to combine the slider values into a single list.  Better yet, skip the sliders and use the panel of values instead; right-click the panel to enable "Multiline Data".

Is it safe to assume that the gaps at the top and bottom are 1/2 the gaps between the strings?

Here is the way I would start; next is how to apply that "gap" between the strings...


ah sorry, did not know about internalizing curves, and completely forgot about enabling multi line data, it's been a long time since i last used grasshopper i guess

many thanks for your help, will look at it and try to understand :)

i attached the file with the internalised data and your network pasted in, i renamed everything really explicitly so i understand the structure better. so indeed the question is now how to construct and position the centerpoint position of the strings. :-)


I think it's better to rename inputs and outputs and AVOID renaming components, as it makes the code hard to understand.

I've messed around with this far too long and am still not happy with the results!  Looks off to me?  :(  Mental block so must quit for now.


No attachment?  Would love to try other string sets.

Well, well, it looks like I nailed it after all!  Proof in green group.  My only mistake was forgetting to use "x/2" on the 'Pipe R (Radius)' input.


sooo coool, many many thx. now i just have to take it apart to understand how you did it, i'm learning a lot already :-)

this will make my guitar building life so much easier!

Don't take it apart!  ;)  Just examine the outputs at every step using panels.  It's not that complicated, all the computations are done by the end of the yellow group.  The "strings" group uses 'Evaluate Length (Eval)' to get the points on the 'Nut', then applies the 't' values from that to the 'Bridge'.  'Remap' uses the 'Nut' curve as the source domain (actual length as used by 'Eval') and the default (0 To 1) domain as the target, applied to the reparameterized 'Bridge' curve.  Simple!  :)  Love it when a plan works out.  Cheers.

Hi discopimp,

I hope I understood your explanation/goal correctly, here's my two cents.  
Note: If the bridges aren't parallel (or very different in length) there is a little bit of deviation because the 'angle of attack' for each string on the bridge(s) isn't 90° (see silly image below).
I don't think these exaggerated situations will occur on a real instrument (or?).
@ Joseph: the dimensions on your 'second bridge' are incorrect.


@ Joseph: the dimensions on your 'second bridge' are incorrect.

Interesting.  And it's not because of 'ReMap' because 'Crv CP' gives identical results:

The differences in gap distance between strings on the 'Bridge' is reduced if you measure them along a line parallel to the 'Neck', perpendicular to the strings:

But there are still differences up to ~1.5%.  Can you explain why please?

@ Joseph: the dimensions on your 'second bridge' are incorrect.

I made a few changes to apply the same logic to both 'Nut' and 'Bridge'; it fixes the problem and is a better solution (simpler code too).  I'm still curious about why yesterday's code failed on the 'Bridge' though?


ha, i should have checked my email, i was spending the last couple of hours measuring and trying to figure this out :-)

i noticed the weirdness while patching a loft for the compound radius fretboard that the nut is spaced correctly but not the bridge:

not sure if it^'s related but i was trying to figure out why the fretboard isn't centered at the last fret:

will check your new version now .. my patch is a mess now that i've put the fret generator, your string generator and the new compound radius fretboardmaker all together ... i seriously need to think about a good layout strategy for this patch so i don't get lost :/

Sorry about that.  I vaguely understand why 't' values aren't reliable indicators of relative length on curves but it's remains a mystery to me on straight lines.





© 2018   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service