I'm planning to make prototype 1 of the stick quintar (SQ).
It will be similar to prototype 0, only with 12 strings.
The four lowest string pairs will be in octaves (C, G, D and A) and highest to in unison (E and B).
I've made a simple script for
FreeCAD to draw the outline and strings of the SQ.
Although I know the approximate width of the nut and bridge (57mm / 2 1/4", 95mm 3 3/4"), I'm still pondering over the string distance between the corsed strings.
Right now I want to start off with a distance of 2mm (0.079") between the two highest strings and then increase the distance up to 3mm (0.118") between the two lowest strings.
I don't have a twelve string guitar around, so I gladly take some advice on this matter.
Hans
@Admin: is it possible to changes the title of this thread into: Stick Quintar: Prototypes
TIA

Code: Select all
# To do:
#
App.newDocument("Stick Quintar")
from FreeCAD import Base
import Part, math, datetime, os, copy
# Variables
## Golden ratio
goldenratio = 2.0/(math.sqrt(5.0)-1.0)
## diameter strings
diastr = []
diastr.append(0.132*25.4)
diastr.append(0.085*25.4)
diastr.append(0.055*25.4)
diastr.append(0.035*25.4)
diastr.append(0.022*25.4)
diastr.append(0.013*25.4)
corsed = 1 # 1=true 0=false
diacorsestr = []
diacorsestr.append(0.060*25.4)
diacorsestr.append(0.040*25.4)
diacorsestr.append(0.026*25.4)
diacorsestr.append(0.018*25.4)
diacorsestr.append(0.01*25.4)
diacorsestr.append(0.013*25.4)
## stringlengths
slbass = 800.0 # stringlength on bassside
sltreble = 800 # stringlength on trebleside
compensation = 2. # string compensation at the bridge
offsetbridge = (slbass-sltreble)/goldenratio # Offset off the trebleside
offsetnut = (slbass-sltreble)-offsetbridge
## Frets
numberfrets = 0
octavedivider = 12.
fretwidth = 1.5
## stringdistance
sdbridgetreble = 12.
sdbridgebass = 12.
factorsd = (sdbridgebass/sdbridgetreble)**(1./(len(diastr)-2.))
sdnuttreble = sdbridgetreble/2.5
sdside = 3.5
sdcorsetreble = 2.
sdcorsebass = 3.
factorsdcorsed = (sdcorsebass/sdcorsetreble)**(1./(len(diastr)-1.))
# width nut and bridge
sdnut = []
sdbridge = []
sdnut.append(0)
sdbridge.append(0)
for i in range(0,(len(diastr)-1)):
sdnut.append(sdnuttreble*factorsd**(len(diastr)-2-i))
sdbridge.append(sdbridgetreble*factorsd**(len(diastr)-2-i))
sdcorse = []
sdcorse.append(0)
for i in range(0,len(diastr)):
sdcorse.append(sdcorsetreble*factorsdcorsed**(len(diastr)-1-i))
widthnut = 2.*sdside+sum(sdnut)+sum(diastr)+sum(diacorsestr)+sum(sdcorse)
widthbridge = 2.*sdside+sum(sdbridge)+sum(diastr)+sum(diacorsestr)+sum(sdcorse)
rcsideneckbass = (-0.5*widthbridge+0.5*widthnut)/(slbass)
rcsidenecktreble = (0.5*widthbridge-0.5*widthnut)/(slbass)
#
nutoffset = 30.
bridgeoffset = 50.
distancetuners = 125.
enddistance = 25.
#side drawing
xbassQuintarnutend = -nutoffset
ybassQuintarnutend = -0.5*widthnut+rcsideneckbass*(xbassQuintarnutend)
xbassQuintarbridgeend = slbass+bridgeoffset+distancetuners+enddistance
ybassQuintarbridgeend = -0.5*widthnut+rcsideneckbass*(xbassQuintarbridgeend)
xtrebleQuintarnutend = -nutoffset
ytrebleQuintarnutend = 0.5*widthnut+rcsidenecktreble*(xtrebleQuintarnutend)
xtrebleQuintarbridgeend = slbass+bridgeoffset+distancetuners+enddistance
ytrebleQuintarbridgeend = 0.5*widthnut+rcsidenecktreble*(xtrebleQuintarbridgeend)
line1 = Part.makeLine((xbassQuintarnutend,ybassQuintarnutend,0),(xbassQuintarbridgeend,ybassQuintarbridgeend,0))
Part.show(line1)
line2 = Part.makeLine((xtrebleQuintarnutend,ytrebleQuintarnutend,0),(xtrebleQuintarbridgeend,ytrebleQuintarbridgeend,0))
Part.show(line2)
line3 = Part.makeLine((xbassQuintarnutend,ybassQuintarnutend,0),(xtrebleQuintarnutend,ytrebleQuintarnutend,0))
Part.show(line3)
line2 = Part.makeLine((xbassQuintarbridgeend,ybassQuintarbridgeend,0),(xtrebleQuintarbridgeend,ytrebleQuintarbridgeend,0))
Part.show(line2)
# frets drawing
for i in range(0,numberfrets+1):
xbassleft = (slbass-(slbass/2**(i/octavedivider)-0.5*fretwidth))
ybass = (-(widthnut/2.0+(widthbridge-widthnut)/2.0*xbassleft/slbass))
xtrebleleft = (offsetnut+sltreble-(sltreble/2**(i/octavedivider)-0.5*fretwidth))
ytreble = ((widthnut/2.0+(widthbridge-widthnut)/2.0*xtrebleleft/slbass))
fretleft = Part.makeLine((xbassleft,ybass,0),(xtrebleleft,ytreble,0))
Part.show(fretleft)
xbassright = (slbass-(slbass/2**(i/octavedivider)+0.5*fretwidth))
ybass = (-(widthnut/2.0+(widthbridge-widthnut)/2.0*xbassright/slbass))
xtrebleright = (offsetnut+sltreble-(sltreble/2**(i/octavedivider)+0.5*fretwidth))
ytreble = ((widthnut/2.0+(widthbridge-widthnut)/2.0*xtrebleright/slbass))
fretright = Part.makeLine((xbassright,ybass,0),(xtrebleright,ytreble,0))
Part.show(fretright)
# bridge
xbass = slbass+compensation
ybass = (-(widthnut/2.0+(widthbridge-widthnut)/2.0*xbass/slbass))
xtreble = offsetnut+sltreble+compensation
ytreble = ((widthnut/2.0+(widthbridge-widthnut)/2.0*xtreble/slbass))
bridge = Part.makeLine((xbass,ybass,0),(xtreble,ytreble,0))
Part.show(bridge)
# Strings
# width nut and bridge
#sdnut = []
#sdbridge = []
#sdnut.append(0)
#sdbridge.append(0)
#for i in range(0,(len(diastr)-1)):
# sdnut.append(sdnuttreble*factorsd**(len(diastr)-2-i))
# sdbridge.append(sdbridgetreble*factorsd**(len(diastr)-2-i))
for i in range(len(diastr)):
diastrtemp = diastr[0:i+1]
sdnuttemp = sdnut[0:i+1]
sdbridgetemp = sdbridge[0:i+1]
diacorsestrtemp = diacorsestr[0:i+1]
sdcorsetemp = sdcorse[0:i+1]
ynut1 = -widthnut/2.0 + sdside + sum(diastrtemp) + sum(sdnuttemp) + sum(diacorsestrtemp) + sum(sdcorsetemp)
ybridge1 = -widthbridge/2.0 + sdside + sum(diastrtemp) + sum(sdbridgetemp) + sum(diacorsestrtemp) + sum(sdcorsetemp)
string1 = Part.makeLine((0,ynut1,0),(slbass,ybridge1,0))
Part.show(string1)
ynut2 = ynut1-diastr[i]
ybridge2 = ybridge1-diastr[i]
string2 = Part.makeLine((0,ynut2,0),(slbass,ybridge2,0))
Part.show(string2)
ynut3 = ynut1+sdcorse[i+1]
ybridge3 = ybridge1+sdcorse[i+1]
string3 = Part.makeLine((0,ynut3,0),(slbass,ybridge3,0))
Part.show(string3)
ynut4 = ynut3+diacorsestr[i]
ybridge4 = ybridge3+diacorsestr[i]
string4 = Part.makeLine((0,ynut4,0),(slbass,ybridge4,0))
Part.show(string4)
Gui.SendMsgToActiveView("ViewFit")
print(widthnut,widthbridge)