在 Inkscape 扩展中,如何设置路径的控制点?

In an Inkscape extension, how do I set a path's control points?

我正在尝试构建一个用于学习目的的 Inkscape 扩展,并且想要操纵路径的控制点。

我知道我可以这样列出它们:

inkex.utils.debug([ p for p in self.svg.selected[0].path.control_points ])

但我无法设置它们 - path.control_points 是一个生成器。

除了将其转换为 SVG“d”属性、使用 svgpathtools 对其进行操作并将其重新设置之外,还有其他方法吗?

如果您知道路径中的内容,可能有一种方法可以做到这一点。如果是随机路径或者任意路径,代码会比较复杂

pel = self.svg.selected[0] # assuming selected is a path
path_old = pel.path

假设您的路径包含这两个组件,或类似的一些已知组件。

[Move(80.3412, 87.9089), Curve(99.575, 67.2665, 
        103.398, 73.9063, 113.129, 83.6942)]

您可以使用相同的组件重新创建新路径。

path_new = Path()

old_move = path_old[0]
new_move = Move(old_move.x + 10, old_move.y + 11) # modify Move coordinates
old_curve = path_old[1]
new_curve = Curve(......)

path_new.append(new_move)
path_new.append(new_curve) 

根据您的需要,有时直接操作 d 属性可能更容易。