curveTo not working

How important is it for you to do it with RoboFab? I can tell you how to do it with the plain vanilla Python API:

#MenuTitle: Drawing Sample
# -*- coding: utf-8 -*-
__doc__="""
Draw a sample path.
"""

from GlyphApp import GSLINE, GSCURVE, GSOFFCURVE

thisFont = Glyphs.font
thisLayer = thisFont.selectedLayers[0]

def addLineToPath( path, point ):
	newNode = GSNode()
	newNode.type = GSLINE
	newNode.position = point
	path.nodes.append(newNode)

def addCurveToPath( path, threePoints ):
	for i, point in enumerate( threePoints ):
		newNode = GSNode()
		if i == 2:
			newNode.type = GSCURVE
		else:
			newNode.type = GSOFFCURVE
		newNode.position = point
		path.nodes.append(newNode)

def addSegmentsToPath( path, segments ):
	for segment in segments:
		if len(segment) == 1:
			point = NSPoint( segment[0][0], segment[0][1] )
			addLineToPath( path, point )
		elif len(segment) == 3:
			points = (
				NSPoint( segment[0][0], segment[0][1] ),
				NSPoint( segment[1][0], segment[1][1] ),
				NSPoint( segment[2][0], segment[2][1] )
			)
			addCurveToPath( path, points )

newPath = GSPath()
addSegmentsToPath(
	newPath,
	( (800, 100) ),
	( (1000, 300), (1000, 600), (800, 800) ),
	( (100, 800) ),
	( (100, 100) )
)
newPath.close = True
thisLayer.paths.append(newPath)

Sorry to overcomplicate things a bit, but I could not resist abstracting into functions straight away.

Basically you create a GSNode, set its type to one of GSLINE, GSCURVE, or GSOFFCURVE, and set its position to an NSPoint. Then you append that node to a path’s nodes property, e.g., mypath.nodes.append(mynode). Eventually you set the path’s closed property to True and append the path to a layer’s paths property.

1 Like