画布与场景
画布规格
CanvasSpec(
x_range=(0, 10),
y_range=(0, 10),
width=6.0,
height=6.0,
dpi=300,
x_label="X",
y_label="Y",
title=None
)
图形的物理尺寸与坐标范围。x_range 与 y_range 是显示的数据范围;width 与 height 是以英寸计算的图形尺寸;dpi 是 \([1, 1200]\) 内的整数。属性 x_min、x_max、y_min、y_max 可读取范围,replace(**changes) 则返回只修改指定字段的副本。范围必须有限且 lo < hi,尺寸必须是有限正数,否则会引发 ConfigurationError。
Interval(lo, hi)
有限的递增区间,lo < hi,供规格与坐标轴共用。
画布
Canvas(
spec=None,
theme=None,
config=None,
renderer=None,
*,
role_overrides=None
)
加入一个或多个图层;返回画布。
移除该 id 的图层(含群组内)或所有图层;返回画布。未知的 id 引发 ConfigurationError。
规格、主题、配置、渲染器、覆盖、场景与绑定都相同的新画布。
新画布,其场景中的这些参数换成数值(详见参数、网格与动画);原画布保留参数。
绘制场景并返回渲染器的结果(详见绘制)。
绘制、写出 .png、.pdf 或 .svg、关闭结果并返回写出的路径。选项即 SaveOptions 的字段。
封装不可变场景的流式构建器。如果参数为 None,便采用创建画布当下生效的配置(详见配置),分别是其中的 canvas_spec、theme 与 renderer。role_overrides 将角色名称映射到 StyleBundle,并应用在主题与配置之上(参见解析顺序)。
构造方法会修改画布,但不会就地改动场景:每次调用都以新场景取代画布中的场景,因此先前获取的快照、副本或绑定后的画布都会维持原有内容。
from mosaickit import Canvas, PathLayer
canvas = Canvas()
before = canvas.snapshot()
canvas.add(PathLayer([(0, 0), (1, 1)], id="line"))
# the old snapshot is unchanged
assert before.layers == ()
assert canvas.snapshot().layers[0].id == "line"
场景
Scene(layers=(), metadata={})
具有持久性且有序的图层集合,也就是每次操作都会保留旧版本。add()、extend()、remove() 与 clear() 都会返回新场景;Scene.empty() 是空场景。图层 id 在整个场景(包括群组)中必须唯一,如有重复便引发 ConfigurationError。ordered_layers 按 z_index 排序顶层图层;值相同时维持加入顺序,而这个顺序就是绘制顺序。
错误与警告
以下三个错误的基础类
模型、样式、主题、规格或配置值无效
参数缺少值、类型错误,或表达式无法求值
渲染器无法完成要求:未知的格式或渲染器、缺少的图例项目
自动布局无法避开所有障碍物(详见区域标签与点标签)
图层的模型无法哈希,因此不经缓存绘制