Code

rename to the more common name
[inkscape.git] / share / extensions / ffproc.py
index 7eb6f2dd1b3463f87194e45a9924e2071a4019f0..b288d250d37f278bfa831466dcd5489252f83784 100755 (executable)
@@ -23,172 +23,172 @@ from ffgeom import *
 threshold=0.0000000001
 
 def FindFrets(strings, meta, scale, tuning, numfrets):
-       scale = scale['steps']
-
-       #if the string ends don't fall on the nut and bridge
-       #don't look for partial frets.
-       numStrings = len(strings)
-       doPartials = True
-       parallelFrets = True
-       
-       nut = Segment(strings[0][0],strings[-1][0])
-       bridge = Segment(strings[0][1],strings[-1][1])
-       midline = Segment(
-               Point((nut[1]['x']+nut[0]['x'])/2.0,(nut[1]['y']+nut[0]['y'])/2.0),
-               Point((bridge[1]['x']+bridge[0]['x'])/2.0,(bridge[1]['y']+bridge[0]['y'])/2.0))
-       for s in strings:
-               if nut.distanceToPoint(s[0])>=threshold or bridge.distanceToPoint(s[1])>=threshold:
-                       doPartials = False
-                       break
-
-       denom = ((bridge[1]['y']-bridge[0]['y'])*(nut[1]['x']-nut[0]['x']))-((bridge[1]['x']-bridge[0]['x'])*(nut[1]['y']-nut[0]['y']))
-       if denom != 0:
-               parallelFrets = False
-
-       fretboard = []
-       tones = len(scale)-1
-       for i in range(len(strings)):
-               base = tuning[i]
-               frets = []
-               if doPartials:
-                       frets.append(Segment(meta[i][0],meta[i+1][0]))
-               else:
-                       frets.append(Segment(strings[i][0],strings[i][0]))
-               last = strings[i][0]
-
-               for j in range(numfrets):
-                       step=((base+j-1)%(tones))+1
-                       ratio=1.0-((scale[step][1]*scale[step-1][0])/(scale[step][0]*scale[step-1][1]))
-                       x = last['x']+(ratio*(strings[i][1]['x']-last['x']))
-                       y = last['y']+(ratio*(strings[i][1]['y']-last['y']))
-                       current = Point(x,y)    
-                       temp = Segment(strings[i][0],current)
-                       totalRatio = temp.length()/strings[i].length()
-                       
-                       if doPartials:
-                               #partials depending on outer strings (questionable)
-                               if parallelFrets:
-                                       temp = nut.createParallel(current)
-                               else:
-                                       temp = Segment(strings[0].pointAtLength(strings[0].length()*totalRatio),
-                                               strings[-1].pointAtLength(strings[-1].length()*totalRatio))
-                               frets.append(Segment(intersectSegments(temp,meta[i]),intersectSegments(temp,meta[i+1])))
-                       else:
-                               frets.append(Segment(current,current))
-                       last = current
-               fretboard.append(frets)
-       return fretboard
-       
+    scale = scale['steps']
+
+    #if the string ends don't fall on the nut and bridge
+    #don't look for partial frets.
+    numStrings = len(strings)
+    doPartials = True
+    parallelFrets = True
+    
+    nut = Segment(strings[0][0],strings[-1][0])
+    bridge = Segment(strings[0][1],strings[-1][1])
+    midline = Segment(
+        Point((nut[1]['x']+nut[0]['x'])/2.0,(nut[1]['y']+nut[0]['y'])/2.0),
+        Point((bridge[1]['x']+bridge[0]['x'])/2.0,(bridge[1]['y']+bridge[0]['y'])/2.0))
+    for s in strings:
+        if nut.perpDistanceToPoint(s[0])>=threshold or bridge.perpDistanceToPoint(s[1])>=threshold:
+            doPartials = False
+            break
+
+    denom = ((bridge[1]['y']-bridge[0]['y'])*(nut[1]['x']-nut[0]['x']))-((bridge[1]['x']-bridge[0]['x'])*(nut[1]['y']-nut[0]['y']))
+    if denom != 0:
+        parallelFrets = False
+
+    fretboard = []
+    tones = len(scale)-1
+    for i in range(len(strings)):
+        base = tuning[i]
+        frets = []
+        if doPartials:
+            frets.append(Segment(meta[i][0],meta[i+1][0]))
+        else:
+            frets.append(Segment(strings[i][0],strings[i][0]))
+        last = strings[i][0]
+
+        for j in range(numfrets):
+            step=((base+j-1)%(tones))+1
+            ratio=1.0-((scale[step][1]*scale[step-1][0])/(scale[step][0]*scale[step-1][1]))
+            x = last['x']+(ratio*(strings[i][1]['x']-last['x']))
+            y = last['y']+(ratio*(strings[i][1]['y']-last['y']))
+            current = Point(x,y)    
+            temp = Segment(strings[i][0],current)
+            totalRatio = temp.length()/strings[i].length()
+            
+            if doPartials:
+                #partials depending on outer strings (questionable)
+                if parallelFrets:
+                    temp = nut.createParallel(current)
+                else:
+                    temp = Segment(strings[0].pointAtLength(strings[0].length()*totalRatio),
+                        strings[-1].pointAtLength(strings[-1].length()*totalRatio))
+                frets.append(Segment(intersectSegments(temp,meta[i]),intersectSegments(temp,meta[i+1])))
+            else:
+                frets.append(Segment(current,current))
+            last = current
+        fretboard.append(frets)
+    return fretboard
+    
 def FindStringsSingleScale(numStrings,scaleLength,nutWidth,bridgeWidth,oNF,oBF,oNL,oBL):
-       strings = []
-       meta = []
-       nutHalf = nutWidth/2
-       bridgeHalf = bridgeWidth/2
-       nutCandidateCenter = (nutHalf) + oNL
-       bridgeCandidateCenter = (bridgeHalf) + oBL
-       if bridgeCandidateCenter >= nutCandidateCenter:
-               center = bridgeCandidateCenter
-       else:
-               center = nutCandidateCenter
-       nutStringSpacing = nutWidth/(numStrings-1)
-       bridgeStringSpacing = bridgeWidth/(numStrings-1)
-       
-       for i in range(numStrings):
-               strings.append(Segment(Point(center+nutHalf-(i*nutStringSpacing),0),
-                       Point(center+bridgeHalf-(i*bridgeStringSpacing),scaleLength)))
-
-       meta.append(Segment(Point(center+nutHalf+oNF,0),Point(center+bridgeHalf+oBF,scaleLength)))
-       for i in range(1,numStrings):
-               meta.append(Segment(
-                       Point((strings[i-1][0]['x']+strings[i][0]['x'])/2.0,
-                               (strings[i-1][0]['y']+strings[i][0]['y'])/2.0),
-                       Point((strings[i-1][1]['x']+strings[i][1]['x'])/2.0,
-                               (strings[i-1][1]['y']+strings[i][1]['y'])/2.0)))
-       meta.append(Segment(Point(center-(nutHalf+oNL),0),Point(center-(bridgeHalf+oBL),scaleLength)))
-
-       return strings, meta
+    strings = []
+    meta = []
+    nutHalf = nutWidth/2
+    bridgeHalf = bridgeWidth/2
+    nutCandidateCenter = (nutHalf) + oNL
+    bridgeCandidateCenter = (bridgeHalf) + oBL
+    if bridgeCandidateCenter >= nutCandidateCenter:
+        center = bridgeCandidateCenter
+    else:
+        center = nutCandidateCenter
+    nutStringSpacing = nutWidth/(numStrings-1)
+    bridgeStringSpacing = bridgeWidth/(numStrings-1)
+    
+    for i in range(numStrings):
+        strings.append(Segment(Point(center+nutHalf-(i*nutStringSpacing),0),
+            Point(center+bridgeHalf-(i*bridgeStringSpacing),scaleLength)))
+
+    meta.append(Segment(Point(center+nutHalf+oNF,0),Point(center+bridgeHalf+oBF,scaleLength)))
+    for i in range(1,numStrings):
+        meta.append(Segment(
+            Point((strings[i-1][0]['x']+strings[i][0]['x'])/2.0,
+                (strings[i-1][0]['y']+strings[i][0]['y'])/2.0),
+            Point((strings[i-1][1]['x']+strings[i][1]['x'])/2.0,
+                (strings[i-1][1]['y']+strings[i][1]['y'])/2.0)))
+    meta.append(Segment(Point(center-(nutHalf+oNL),0),Point(center-(bridgeHalf+oBL),scaleLength)))
+
+    return strings, meta
 
 def FindStringsMultiScale(numStrings,scaleLengthF,scaleLengthL,nutWidth,bridgeWidth,perp,oNF,oBF,oNL,oBL):
-       strings = []
-       meta = []
-       nutHalf = nutWidth/2
-       bridgeHalf = bridgeWidth/2
-       nutCandidateCenter = (nutHalf)+oNL
-       bridgeCandidateCenter = (bridgeHalf)+oBL
-       if bridgeCandidateCenter >= nutCandidateCenter:
-               xcenter = bridgeCandidateCenter
-       else:
-               nutCandidateCenter
-
-       fbnxf = xcenter+nutHalf+oNF
-       fbbxf = xcenter+bridgeHalf+oBF
-       fbnxl = xcenter-(nutHalf+oNL)
-       fbbxl = xcenter-(bridgeHalf+oBL)
-
-       snxf = xcenter+nutHalf
-       sbxf = xcenter+bridgeHalf
-       snxl = xcenter-nutHalf
-       sbxl = xcenter-bridgeHalf
-
-       fdeltax = sbxf-snxf
-       ldeltax = sbxl-snxl
-       fdeltay = math.sqrt((scaleLengthF*scaleLengthF)-(fdeltax*fdeltax))
-       ldeltay = math.sqrt((scaleLengthL*scaleLengthL)-(ldeltax*ldeltax))
-
-       fperp = perp*fdeltay
-       lperp = perp*ldeltay
-
-       #temporarily place first and last strings
-       first = Segment(Point(snxf,0),Point(sbxf,fdeltay))
-       last = Segment(Point(snxl,0),Point(sbxl,ldeltay))
-       
-       if fdeltay<=ldeltay:
-               first.translate(0,(lperp-fperp))
-       else:
-               last.translate(0,(fperp-lperp))
-
-       nut = Segment(first[0].copy(),last[0].copy())
-       bridge = Segment(first[1].copy(),last[1].copy())
-       #overhang measurements are now converted from delta x to along line lengths
-       oNF = (oNF*nut.length())/nutWidth
-       oNL = (oNL*nut.length())/nutWidth
-       oBF = (oBF*bridge.length())/bridgeWidth
-       oBL = (oBL*bridge.length())/bridgeWidth
-       #place fretboard edges
-       fbf = Segment(nut.pointAtLength(-oNF),bridge.pointAtLength(-oBF))
-       fbl = Segment(nut.pointAtLength(nut.length()+oNL),bridge.pointAtLength(bridge.length()+oBL))
-       #normalize values into the first quadrant via translate
-       if fbf[0]['y']<0 or fbl[0]['y']<0:
-               if fbf[0]['y']<=fbl[0]['y']:
-                       move = -fbf[0]['y']
-               else:
-                       move = -fbl[0]['y']
-               
-               first.translate(0,move)
-               last.translate(0,move)
-               nut.translate(0,move)
-               bridge.translate(0,move)
-               fbf.translate(0,move)
-               fbl.translate(0,move)
-
-       #output values
-       nutStringSpacing = nut.length()/(numStrings-1)
-       bridgeStringSpacing = bridge.length()/(numStrings-1)
-       strings.append(first)
-       for i in range(1,numStrings-1):
-               n = nut.pointAtLength(i*nutStringSpacing)
-               b = bridge.pointAtLength(i*bridgeStringSpacing)
-               strings.append(Segment(Point(n['x'],n['y']),Point(b['x'],b['y'])))
-       strings.append(last)
-
-       meta.append(fbf)
-       for i in range(1,numStrings):
-               meta.append(Segment(
-                       Point((strings[i-1][0]['x']+strings[i][0]['x'])/2.0,
-                               (strings[i-1][0]['y']+strings[i][0]['y'])/2.0),
-                       Point((strings[i-1][1]['x']+strings[i][1]['x'])/2.0,
-                               (strings[i-1][1]['y']+strings[i][1]['y'])/2.0)))
-       
-       meta.append(fbl)
-       
-       return strings, meta
+    strings = []
+    meta = []
+    nutHalf = nutWidth/2
+    bridgeHalf = bridgeWidth/2
+    nutCandidateCenter = (nutHalf)+oNL
+    bridgeCandidateCenter = (bridgeHalf)+oBL
+    if bridgeCandidateCenter >= nutCandidateCenter:
+        xcenter = bridgeCandidateCenter
+    else:
+        nutCandidateCenter
+
+    fbnxf = xcenter+nutHalf+oNF
+    fbbxf = xcenter+bridgeHalf+oBF
+    fbnxl = xcenter-(nutHalf+oNL)
+    fbbxl = xcenter-(bridgeHalf+oBL)
+
+    snxf = xcenter+nutHalf
+    sbxf = xcenter+bridgeHalf
+    snxl = xcenter-nutHalf
+    sbxl = xcenter-bridgeHalf
+
+    fdeltax = sbxf-snxf
+    ldeltax = sbxl-snxl
+    fdeltay = math.sqrt((scaleLengthF*scaleLengthF)-(fdeltax*fdeltax))
+    ldeltay = math.sqrt((scaleLengthL*scaleLengthL)-(ldeltax*ldeltax))
+
+    fperp = perp*fdeltay
+    lperp = perp*ldeltay
+
+    #temporarily place first and last strings
+    first = Segment(Point(snxf,0),Point(sbxf,fdeltay))
+    last = Segment(Point(snxl,0),Point(sbxl,ldeltay))
+    
+    if fdeltay<=ldeltay:
+        first.translate(0,(lperp-fperp))
+    else:
+        last.translate(0,(fperp-lperp))
+
+    nut = Segment(first[0].copy(),last[0].copy())
+    bridge = Segment(first[1].copy(),last[1].copy())
+    #overhang measurements are now converted from delta x to along line lengths
+    oNF = (oNF*nut.length())/nutWidth
+    oNL = (oNL*nut.length())/nutWidth
+    oBF = (oBF*bridge.length())/bridgeWidth
+    oBL = (oBL*bridge.length())/bridgeWidth
+    #place fretboard edges
+    fbf = Segment(nut.pointAtLength(-oNF),bridge.pointAtLength(-oBF))
+    fbl = Segment(nut.pointAtLength(nut.length()+oNL),bridge.pointAtLength(bridge.length()+oBL))
+    #normalize values into the first quadrant via translate
+    if fbf[0]['y']<0 or fbl[0]['y']<0:
+        if fbf[0]['y']<=fbl[0]['y']:
+            move = -fbf[0]['y']
+        else:
+            move = -fbl[0]['y']
+        
+        first.translate(0,move)
+        last.translate(0,move)
+        nut.translate(0,move)
+        bridge.translate(0,move)
+        fbf.translate(0,move)
+        fbl.translate(0,move)
+
+    #output values
+    nutStringSpacing = nut.length()/(numStrings-1)
+    bridgeStringSpacing = bridge.length()/(numStrings-1)
+    strings.append(first)
+    for i in range(1,numStrings-1):
+        n = nut.pointAtLength(i*nutStringSpacing)
+        b = bridge.pointAtLength(i*bridgeStringSpacing)
+        strings.append(Segment(Point(n['x'],n['y']),Point(b['x'],b['y'])))
+    strings.append(last)
+
+    meta.append(fbf)
+    for i in range(1,numStrings):
+        meta.append(Segment(
+            Point((strings[i-1][0]['x']+strings[i][0]['x'])/2.0,
+                (strings[i-1][0]['y']+strings[i][0]['y'])/2.0),
+            Point((strings[i-1][1]['x']+strings[i][1]['x'])/2.0,
+                (strings[i-1][1]['y']+strings[i][1]['y'])/2.0)))
+    
+    meta.append(fbl)
+    
+    return strings, meta