Skip to content

路径文本 ​

路径文本需要按 弧长 采样并逐字旋转,适合圆形徽章与流向文字;性能与路径分段数量相关。

路径数学见 第 12、第 13 课。

交互示例 ​

ECS 编辑器 ​

点击字形选中,再拖动或使用选框缩放、旋转。双击文字进入直线文本框编辑,提交后重新沿路径排版。

ECS 的 TextSerializedNode 现在支持 path、side、startOffset 和 pathOffset。属性可通过 api.edit() 更新,参与撤销重做并保存在文档 JSON 中。路径坐标与 anchorX/anchorY 一起处于文本的局部坐标系;选框缩放和翻转会同时变换曲线与字形,保持字号与字形图集不变。

ts
await api.edit(() =>
    api.updateNode({
        id: 'path-label',
        type: 'text',
        content: 'Text follows your curve',
        fontFamily: 'sans-serif',
        fontSize: 32,
        anchorX: 0,
        anchorY: 0,
        path: 'M40 230C160 35 440 35 560 230',
        textAlign: 'center',
        side: 'left',
        startOffset: 0,
        pathOffset: 0,
        fills: [{ type: 'solid', value: '#e65b5b' }],
    }),
);

点击检测按逐字旋转后的矩形进行,曲线中间的空白区域不会选中文字。双击使用直线 textarea 编辑,它跟随对象的旋转和缩放;提交后恢复路径排版。目前不提供沿曲线的光标、选区或路径控制点编辑。SVG 导出使用逐字位置和旋转保留外观;重新导入 SVG 不会恢复可编辑的路径关系。

当前支持默认的 SDF/MSDF 渲染器;Vello 后端尚未接入路径文本。

Core 路径控制点示例 ​

拖动文字或蓝色手柄可沿路径移动;拖动橙色控制点可改变曲线。手柄也支持方向键,Esc 取消拖动。

ts
const text = new Text({
    x: 0,
    y: 0,
    content: 'Text follows your curve',
    fontSize: 30,
    fill: '#F67676',
    fontFamily: 'sans-serif',
    path: 'M65 220C170 35 430 35 535 220',
    textAlign: 'center',
    side: 'left',
    startOffset: 0,
    pathOffset: 0,
    letterSpacing: 1,
});

拖动文字或蓝色手柄沿路径移动,拖动橙色控制点改变曲线。支持曲线、圆形和直线,以及两侧切换、对齐、字号、字距和基线距离调整。手柄可用方向键操作,Shift 加速,Esc 或触摸取消恢复拖动前状态。

startOffset 沿阅读方向移动,pathOffset 沿局部法线移动。开放路径溢出时隐藏字形,闭合路径可跨接缝且每行最多排一圈。包围盒随实际字形更新;SVG 导出保留逐字位置与旋转。排版细节与当前限制见文本跟随路径。

Released under the MIT License.