64 lines
1.4 KiB
Python
64 lines
1.4 KiB
Python
|
# robothon 06
|
||
|
# set guidelines on the average x, y of all selected points
|
||
|
# in the current glyph.
|
||
|
# useful for working on symetric glyphs.
|
||
|
|
||
|
from robofab.world import CurrentGlyph
|
||
|
|
||
|
g = CurrentGlyph()
|
||
|
|
||
|
# remove all old guides first
|
||
|
g.clearHGuides()
|
||
|
g.clearVGuides()
|
||
|
|
||
|
# this is where we'll be storing some data
|
||
|
guides = {}
|
||
|
average = {}
|
||
|
|
||
|
# iterate through the points, find the selected points
|
||
|
# and their associated off-curve points.
|
||
|
for c in g:
|
||
|
for pt in c.bPoints:
|
||
|
if pt.selected:
|
||
|
average[(pt.anchor[0], pt.anchor[1])] = 1
|
||
|
guides[(pt.anchor[0], pt.anchor[1])] = 1
|
||
|
guides[(pt.anchor[0]+pt.bcpIn[0], pt.anchor[1]+pt.bcpIn[1])] = 1
|
||
|
guides[(pt.anchor[0]+pt.bcpOut[0], pt.anchor[1]+pt.bcpOut[1])] = 1
|
||
|
|
||
|
# calculate an average position
|
||
|
x = None
|
||
|
y = None
|
||
|
for (px, py) in average.keys():
|
||
|
if x is None:
|
||
|
x = px
|
||
|
else:
|
||
|
x += px
|
||
|
if y is None:
|
||
|
y = py
|
||
|
else:
|
||
|
y += py
|
||
|
|
||
|
|
||
|
# if we found values, set some guides
|
||
|
if len(average.keys()) > 0:
|
||
|
ax = float(x) / len(average.keys())
|
||
|
ay = float(y) / len(average.keys())
|
||
|
|
||
|
# first, guides for the average
|
||
|
# attention: a vertical guide has a horizontal value
|
||
|
g.appendVGuide(ax)
|
||
|
# attention: a horizontal guide has a vertical value
|
||
|
g.appendHGuide(ay)
|
||
|
|
||
|
# then some guides for the off-curves
|
||
|
if len(guides.keys()) > 0:
|
||
|
for gx, gy in guides.keys():
|
||
|
g.appendVGuide(gx)
|
||
|
g.appendHGuide(gy)
|
||
|
|
||
|
g.update()
|
||
|
|
||
|
else:
|
||
|
print "no points selected"
|
||
|
g.update()
|