vsketch
vsketch 是什么?
vsketch 是一个为绘图仪设计的 Python 生成艺术工具包,具有以下特点:
- 易于使用:vsketch 易学易用,其 API 深受 Processing 启发,给人熟悉的感觉。
- 最小化阻力:vsketch 通过名为
vsk
的命令行工具和与 vpype 的紧密集成,自动化了创作过程的每个部分(项目初始化、无阻力迭代、导出绘图仪可用文件)。 - 以绘图仪为中心:vsketch 由绘图仪用户为绘图仪用户开发。其功能集专注于这种媒介的特殊性,不试图解决其他问题。
- 互操作性:vsketch 能与流行的软件包如 Numpy 和 Shapely 良好配合,这些包是绘图仪生成艺术的真正推动者。
vsketch 由两部分组成:
- 一个名为
vsk
的命令行工具,用于自动化草图项目生命周期的每个部分:- 基于可自定义模板创建草图。
- 交互式渲染您的草图,支持实时重载和自定义参数。
- 批量导出 SVG,支持随机种子和配置管理以及多进程支持。
- 一个易学的 API,类似于 Processing,用于实现您的草图。
这个项目还处于早期阶段,需要贡献。您可以通过提供反馈和改进文档来帮助我们。
安装 vsketch
推荐使用 pipx 进行独立安装:
$ pipx install vsketch
要运行示例,需要单独下载。解压缩后,可以使用以下命令运行:
$ vsk run path/to/vsketch-master/examples/schotter
更多详情请查看安装说明。
入门
本节旨在快速介绍 vsketch 支持的工作流程。更完整的概述请查看文档。
打开终端并创建一个新项目:
$ vsk init my_project
这将创建一个新的项目结构,包含开始所需的一切:
$ ls my_project
config
output
sketch_my_project.py
sketch_my_project.py
文件包含您的草图的骨架。config
和 output
子目录由 vsk
用于存储配置和输出 SVG。
在您喜欢的编辑器中打开 sketch_my_project.py
并按如下方式修改:
import vsketch
class SchotterSketch(vsketch.SketchClass):
def draw(self, vsk: vsketch.SketchClass) -> None:
vsk.size("a4", landscape=False)
vsk.scale("cm")
for j in range(22):
with vsk.pushMatrix():
for i in range(12):
with vsk.pushMatrix():
vsk.rotate(0.03 * vsk.random(-j, j))
vsk.translate(
0.01 * vsk.randomGaussian() * j,
0.01 * vsk.randomGaussian() * j,
)
vsk.rect(0, 0, 1, 1)
vsk.translate(1, 0)
vsk.translate(0, 1)
def finalize(self, vsk: vsketch.Vsketch) -> None:
vsk.vpype("linemerge linesimplify reloop linesort")
if __name__ == "__main__":
SchotterSketch.display()
您的草图现在可以使用以下命令运行:
$ vsk run my_project
您应该看到这个:
恭喜,您刚刚重现了 Georg Nees 的著名艺术作品! 如果你能与脚本的参数进行交互操作,那不是很好吗?让我们来实现这个功能。
在类的顶部添加以下声明:
class SchotterSketch(vsketch.SketchClass):
columns = vsketch.Param(12)
rows = vsketch.Param(22)
fuzziness = vsketch.Param(1.0)
# ...
按如下方式修改draw()
方法:
def draw(self, vsk: vsketch.Vsketch) -> None:
vsk.size("a4", landscape=False)
vsk.scale("cm")
for j in range(self.rows):
with vsk.pushMatrix():
for i in range(self.columns):
with vsk.pushMatrix():
vsk.rotate(self.fuzziness * 0.03 * vsk.random(-j, j))
vsk.translate(
self.fuzziness * 0.01 * vsk.randomGaussian() * j,
self.fuzziness * 0.01 * vsk.randomGaussian() * j,
)
vsk.rect(0, 0, 1, 1)
vsk.translate(1, 0)
vsk.translate(0, 1)
按ctrl-S
/cmd-S
保存,瞧,相应的按钮就出现在查看器中了,甚至不需要重新启动!以下是增加了一些模糊度后的效果:
[图片]
让我们稍微调整一下参数,直到找到一个我们喜欢的组合,然后点击"保存"按钮,并输入"最佳配置"作为名称。
[图片]
我们刚刚保存了一个可以随时加载的配置。
最后,为了更加挑剔,我们希望能够生成这个草图的一百个版本,使用不同的随机种子,以期找到最完美的版本进行绘制和装裱。vsk
可以为你做到这一点,并使用所有可用的CPU核心:
$ vsk save --config "Best config" --seed 0..99 my_project
你会在项目的output
子目录中找到所有的SVG文件:
[图片]
下一步:
致谢
本项目文档的部分内容受到Processing项目的启发或直接复制。
许可
本项目采用MIT许可证。文档采用CC BY-NC-SA 4.0许可证。详情请参阅文档。