svg-primitives 用于在 Python 中构建毫米级精确的 SVG 示意图,适合由数据或 YAML 配置驱动的流程图、方框与箭头、标签图。它提供三项机械保证:文本不溢出容器(带标签形状按实测文本包围盒加内边距自动定尺寸);箭头方向正确(使用 marker orient="auto",沿路径末端切线旋转,支持直线与三次贝塞尔曲线);绘制顺序确定(按图层注册顺序绘制,连接线可自然位于方框下方)。
主要能力包括:Canvas 作为根画布,用户单位等于毫米;Layer 按注册顺序决定 z 序;LabeledBox、Pill、Diamond 为自动定尺寸形状,支持多行文本与锚点;Arrow.connect 支持直线、三次贝塞尔、正交折线、多路径点与圆角,并可指定 src_side/dst_side;Bracket 用于分组标注;Annotation 支持引线;Group 将多个形状作为整体连接。
使用方式:从 svg_primitives 导入 Canvas、LabeledBox、Arrow,创建画布与图层,添加形状与连接线后调用 c.save("eeg.svg", output_png=True)。示例可运行:uv run --with drawsvg --with svgpathtools --with Pillow --with fonttools --with cairosvg python plugins/figures/skills/svg-primitives/examples/eeg_pipeline.py。测试命令:uv run --with pytest --with lxml --with svgelements --with svgpathtools --with drawsvg --with Pillow --with fonttools --with cairosvg --with shapely pytest plugins/figures/skills/svg-primitives/tests/ -v。
限制:SVG 无 z-index,图层顺序由首次注册决定;验证模式有 warn、strict、off;CI 环境需安装系统字体(如 apt-get install -y fonts-liberation),否则文本测量回退为启发式并告警,可用 strict_metrics=True 改为抛错。该技能不适用于由数值绘制的图表、照片类底图或手工编写 SVG 的场景。