Glyphs で背景レイヤーに描いた骨格から線幅を持ったパスを自動生成する

フォント作成ソフト Glyphs でグリフに対する操作を自動化してみた。

一番分かりやすいドキュメントは Glyphs SDK の ObjectWrapper/GlyphsApp/__init__.py だった。

#MenuTitle: Make Offset
# -*- coding: utf-8 -*-
__doc__="""
Make paths offset from background layer
"""

import copy

# Get the filter
offsetCurveFilter = NSClassFromString("GlyphsFilterOffsetCurve")

for glyph in Glyphs.font.glyphs:
	layer = glyph.layers[0]
	""":type : GSLayer"""

	paths = glyph.layers[0].paths
	""":type : LayerPathsProxy"""

	# Remove current paths
	for path in paths:
		paths.remove(path)
	
	# Copy paths from background
	bgPaths = glyph.layers[0].background.paths
	""":type : LayerPathsProxy"""
	for bgPath in bgPaths:
		paths.append(copy.copy(bgPath))
	
	# Apply filter
	offsetCurveFilter.offsetLayer_offsetX_offsetY_makeStroke_autoStroke_position_error_shadow_(layer, 15, 15, True, 0, 0.5, None, None)
  • Glyphs.font は現在開いているフォント
  • 今はレイヤーが1枚なので glyph.layers[0] で参照できているが、レイヤーが複数になったときその順序がどうなるかまだ試していない
  • Python ではリストの項目をすべて削除するのに del paths[:] のようにできるが、LayerPathsProxy は del paths[:] が使えないので paths.remove(path) で一つ一つ消す
  • オブジェクトの deep copy には copy モジュールを使う