コード例 #1
0
def insert_node_at(path, at):
	index = int(at)
	t = at - index
	newpath = CreatePath()
	copy_path(newpath, path, 0, index)
	type, control, node, cont = path.Segment(index + 1)
	if type == Line:
		newpath.AppendLine((1 - t) * path.Node(index) + t * node)
		newpath.select_segment(-1)
		newpath.AppendLine(node)
	else:
		if newpath.Continuity(-1) == ContSymmetrical:
			newpath.SetContinuity(-1, ContSmooth)
		p1, p2 = control
		p1, p2, q, p3, p4 = subdivide(newpath.Node(-1), p1, p2, node, t)
		newpath.AppendBezier(p1, p2, q, ContSmooth)
		newpath.select_segment(-1)
		if cont == ContSymmetrical:
			cont = ContSmooth
		newpath.AppendBezier(p3, p4, node, cont)
	copy_path(newpath, path, index + 2)
	if path.closed:
		newpath.ClosePath()
		newpath.SetContinuity(-1, path.Continuity(-1))
	return newpath
コード例 #2
0
def split_path_at(path, at):
	index = int(at)
	t = at - index
	if path.closed:
		path1 = path2 = CreatePath()
		result = [path1]
	else:
		path1 = CreatePath()
		path2 = CreatePath()
		result = [path1, path2]
		copy_path(path1, path, 0, 0, copy_selection = 0)

	type, control, node, cont = path.Segment(index + 1)
	if type == Line:
		q = (1 - t) * path.Node(index) + t * node
		path2.AppendLine(q)
		path2.AppendLine(node)
		path2.select_segment(0)
		function = path1.AppendLine
		args = (q,)
	else:
		p1, p2 = control
		p1, p2, q, p3, p4 = subdivide(path.Node(index), p1, p2, node, t)
		path2.AppendLine(q)
		path2.AppendBezier(p3, p4, node, cont)
		path2.select_segment(0)
		function = path1.AppendBezier
		args = (p1, p2, q, ContSymmetrical)
	copy_path(path2, path, index + 2, copy_selection = 0)
	copy_path(path1, path, 1, index, copy_selection = 0)
	apply(function, args)
	return result
コード例 #3
0
def insert_segments(path):
	newpath = CreatePath()
	newpath.AppendLine(path.Node(0), path.Continuity(0))
	newpath.select_segment(0, path.SegmentSelected(0))

	for i in range(1, path.len):
		type, p12, p, cont = path.Segment(i)
		if path.SegmentSelected(i) and path.SegmentSelected(i - 1):
			if type == Line:
				node = 0.5 * path.Node(i - 1) + 0.5 * path.Node(i)
				newpath.AppendLine(node)
				newpath.select_segment(-1)
				newpath.AppendLine(path.Node(i))
				newpath.select_segment(-1)
			else:
				if newpath.Continuity(-1) == ContSymmetrical:
					newpath.SetContinuity(-1, ContSmooth)
				p1, p2 = p12
				p1, p2, node, p3, p4 = subdivide(path.Node(i - 1), p1, p2, p)
				newpath.AppendBezier(p1, p2, node, ContSymmetrical)
				newpath.select_segment(-1)
				if cont == ContSymmetrical:
					cont = ContSmooth
				newpath.AppendBezier(p3, p4, p, cont)
				newpath.select_segment(-1)
		else:
			newpath.AppendSegment(type, p12, p, cont)
			newpath.select_segment(-1, path.SegmentSelected(i))
	if path.closed:
		newpath.ClosePath()
		newpath.SetContinuity(-1, path.Continuity(-1))
	return newpath