在PyX(python)中填充闭合曲线失败

时间:2018-05-28 16:06:52

标签: python graphics pyx

我显然误解了封闭曲线和填充闭合曲线在PyX中是如何工作的。我正在从四个部分构建闭合曲线,但填充失败取决于我如何定义四条曲线中的一条。下面是最小的工作/失败示例和输出。为什么upArc的第一个定义有效,但第二个定义没有?

from pyx import *
c = canvas.canvas()
cL = canvas.canvas()
cR = canvas.canvas()


upArc = path.path(path.arc(0,3,1,180,0))
right = path.line(1,3,1,0)
downArc = path.path(path.arcn(0,0,1,0,180))
left  = path.line(-1,0,-1,3)
p = upArc+right+downArc<<left

cR.fill(p,[color.rgb.blue])
cR.stroke(p)


upArc = path.path(path.arc(0,0,1,180,0)).transformed(trafo.translate(0,3))
right = path.line(1,3,1,0)
downArc = path.path(path.arcn(0,0,1,0,180))
left  = path.line(-1,0,-1,3)
p = upArc+right+downArc<<left

cL.fill(p,[color.rgb.blue])
cL.stroke(p)



c.insert(cL,[trafo.translate(-2,0)])
c.insert(cR,[trafo.translate( 2,0)])
c.writePDFfile("minfail")

结果图片。 A picture of the results.

1 个答案:

答案 0 :(得分:0)

PyX使用postscript路径模型,该模型可以在路径中包含多个子路径。 (考虑在路径中使用路径元素moveto。)填充此类路径时,会发生类似于您观察到的事情。请注意,弧在开头包含一个隐式moveto,用于填充就像lineto一样,但不是用于描边。这就是为什么使用add运算符+和连接运算符<<会有所不同。切换到加入可以解决您的问题。

(您可以使用

print(p.normpath().normsubpaths)

看,你在添加路径时有几个normsubpaths,即使arclen没有改变,因为从一个normsubpath到下一个normsubpath的moveto命令不是弧长的一部分。)