在 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
属性可能更容易。
我正在尝试构建一个用于学习目的的 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
属性可能更容易。