Skip to content

Instantly share code, notes, and snippets.

@mtherieau
Last active May 24, 2018 15:07
Show Gist options
  • Save mtherieau/85c30d764056fc8dd48c712554a5e261 to your computer and use it in GitHub Desktop.
Save mtherieau/85c30d764056fc8dd48c712554a5e261 to your computer and use it in GitHub Desktop.
python-fretboard: landscape orientation and roman numerals for fret numbers
import fretboard
import svgwrite
fret_numerals = [None, 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX']
def rotate_90counter_and_save(fb, filename):
fb.draw()
[e.__setattr__('text', str(fret_numerals[int(e.text[:-2])])) for e in fb.drawing.elements if isinstance(e, svgwrite.text.Text) and e.text.endswith('fr')]
[e.rotate(angle=90, center=(e.attribs['x'], e.attribs['y'])) for e in fb.drawing.elements if isinstance(e, svgwrite.text.Text)]
drawing = svgwrite.Drawing()
group = drawing.g()
drawing.add(group)
for e in fb.drawing.elements:
group.add(e)
width = next((e.attribs['width'] for e in fb.drawing.elements if isinstance(e, svgwrite.shapes.Rect)), 0)
group.translate(tx=0, ty=width)
group.rotate(angle=270)
drawing.saveas(filename)
fb = fretboard.Fretboard(frets=(3, 15), style={'drawing': {'height': 1000}})
fb.add_string_label(string=0, label='E')
fb.add_string_label(string=1, label='A')
fb.add_string_label(string=2, label='D')
fb.add_string_label(string=3, label='G')
fb.add_string_label(string=4, label='B')
fb.add_string_label(string=5, label='E')
fb.add_marker(fret=5, string=[3, 5], label='1/2')
fb.add_marker(string=4, fret=6, label='R')
fb.add_marker(string=1, fret=8, label='R')
rotate_90counter_and_save(fb, 'out3.svg')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment