mcpField
D
draw-io

draw-io

github.com/davila7设计与 UI33.0k843 次安装1 天前更新
代码仓库

关于 draw-io

draw-io 是用于编辑和检查 draw.io 图表的技能,提供 XML 布局调整、视觉规范和 PNG 转换指南,也适用于 Quarto 幻灯片中的图表。

主要功能

  1. 01编辑 .drawio 文件
  2. 02将图表转换为 PNG
  3. 03在 XML 中调整元素位置
  4. 04应用图表布局与无障碍规则
  5. 05检查渲染结果是否溢出

适用场景

  1. 01调整图表元素和标签
  2. 02导出供幻灯片使用的图表
  3. 03检查图表间距和箭头

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davila7/claude-code-templates --skill draw-io

安装后在 Claude Code 中输入/draw-io确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
references/
aws-icons.md
layout-guidelines.md
scripts/
convert-drawio-to-png.sh
find_aws_icon.py

详细介绍

draw.io 图表技能

1. 基本规则

  • 仅编辑 .drawio 文件
  • 不要直接编辑 .drawio.png 文件
  • 在幻灯片中使用由 pre-commit hook 自动生成的 .drawio.png

2. 字体设置

对于 Quarto 幻灯片中使用的图表, 在 mxGraphModel 标签中指定 defaultFontFamily:

<mxGraphModel defaultFontFamily="Noto Sans JP" ...>

同时在各文本元素的 style 属性中显式指定 fontFamily:

style="text;html=1;fontSize=27;fontFamily=Noto Sans JP;"

3. 转换命令

转换脚本见 scripts/convert-drawio-to-png.sh。

# Convert all .drawio files
mise exec -- pre-commit run --all-files

# Convert specific .drawio file
mise exec -- pre-commit run convert-drawio-to-png --files assets/my-diagram.drawio

# Run script directly (using skill's script)
bash ~/.claude/skills/draw-io/scripts/convert-drawio-to-png.sh assets/diagram1.drawio

内部使用的命令:

drawio -x -f png -s 2 -t -o output.drawio.png input.drawio
选项说明
-x导出模式
-f png输出 PNG 格式
-s 22 倍缩放(高分辨率)
-t透明背景
-o输出文件路径

4. 布局调整

4.1. 坐标调整步骤
  1. 在文本编辑器(纯 XML 格式)中打开 .drawio 文件
  2. 找到要调整元素的 mxCell(通过 value 属性搜索文本)
  3. 调整 mxGeometry 标签中的坐标
    • x:距左侧的位置
    • y:距顶部的位置
    • width:宽度
    • height:高度
  4. 运行转换并验证
4.2. 坐标计算
  • 元素中心坐标 = y + (height / 2)
  • 要对齐多个元素,计算并匹配中心坐标

5. 设计原则

5.1. 基本原则
  • 清晰:创建简单、视觉整洁的图表
  • 一致:统一颜色、字体、图标大小、线条粗细
  • 准确:不要为了简化而牺牲准确性
5.2. 元素规则
  • 为所有元素添加标签
  • 使用箭头指示方向 (优先使用 2 个单向箭头而非双向箭头)
  • 使用最新的官方图标
  • 添加图例以说明自定义符号
5.3. 无障碍性
  • 确保足够的颜色对比度
  • 除颜色外还使用图案
5.4. 渐进式披露

将复杂系统拆分为分阶段的图表:

图表类型用途
上下文图从外部视角的系统概览
系统图主要组件及关系
组件图技术细节与集成点
部署图基础设施配置
数据流图数据流与转换
时序图时间序列交互
5.5. 元数据

在图表中包含标题、描述、最后更新日期、作者和版本。

6. 最佳实践

6.1. 背景颜色
  • 移除 background="#ffffff"
  • 透明背景可适应各种主题
6.2. 字体大小
  • 使用 1.5 倍标准字体大小(约 18px)以保证 PDF 可读性
6.3. 日文文本宽度
  • 每个字符预留 30-40px
  • 宽度不足会导致意外的换行

<mxGeometry x="140" y="60" width="400" height="40" />
6.4. 箭头放置
  • 始终将箭头放在后面(在 XML 中紧跟在 Title 之后)
  • 放置箭头时避免与标签重叠
  • 箭头起点/终点与标签底边保持至少 20px 距离

<mxCell id="title" value="..." .../>


<mxCell id="arrow1" style="edgeStyle=..." .../>


<mxCell id="box1" .../>
6.5. 箭头与文本标签的连接

对于文本元素,exitX/exitY 不起作用,因此使用显式坐标:


<mxCell id="arrow" style="..." edge="1" parent="1">
  <mxGeometry relative="1" as="geometry">
    <mxPoint x="1279" y="500" as="sourcePoint"/>
    <mxPoint x="119" y="500" as="targetPoint"/>
    <Array as="points">
      <mxPoint x="1279" y="560"/>
      <mxPoint x="119" y="560"/>
    </Array>
  </mxGeometry>
</mxCell>
6.6. edgeLabel 偏移调整

调整 offset 属性以使箭头标签与箭头保持距离:


<mxPoint x="0" y="-40" as="offset"/>


<mxPoint x="0" y="40" as="offset"/>
6.7. 移除不必要的元素
  • 移除与上下文无关的装饰性图标
  • 例如:如果已有 ECR,则无需单独的 Docker 图标
6.8. 标签与标题
  • 仅服务名称:1 行
  • 服务名称 + 补充信息:2 行并换行
  • 冗余的标注(例如 ECR Container Registry):缩短为 1 行
  • 使用 &lt;br&gt; 标签换行
6.9. 背景框与内部元素放置

在背景框(分组框)内放置元素时, 确保留有足够的边距。

  • 必须:内部元素与框边界之间至少留有 30px 边距
  • 必须:考虑圆角(rounded=1)和描边宽度
  • 必须:始终通过视觉检查 PNG 输出是否溢出

坐标计算验证:

Background frame: y=20, height=400 -> range is y=20-420
Internal element top: frame y + 30 or more (e.g., y=50)
Internal element bottom: frame y + height - 30 or less (e.g., up to y=390)

错误示例(可能溢出):


<mxCell id="bg" style="rounded=1;strokeWidth=3;...">
  <mxGeometry x="500" y="20" width="560" height="400" />
</mxCell>

<mxCell id="label" value="Title" style="text;...">
  <mxGeometry x="510" y="30" width="540" height="35" />
</mxCell>

正确示例(边距充足):


<mxCell id="bg" style="rounded=1;strokeWidth=3;...">
  <mxGeometry x="500" y="20" width="560" height="430" />
</mxCell>

<mxCell id="label" value="Title" style="text;...">
  <mxGeometry x="510" y="50" width="540" height="35" />
</mxCell>

7. 参考

AWS 图标搜索示例:

python ~/.claude/skills/draw-io/scripts/find_aws_icon.py ec2
python ~/.claude/skills/draw-io/scripts/find_aws_icon.py lambda

8. 检查清单

  • 未设置背景色(page="0")
  • 字号合适(建议更大)
  • 箭头置于底层
  • 箭头不与标签重叠(在 PNG 中验证)
  • 箭头起点/终点与标签距离足够远(至少 20px)
  • 箭头不穿透方框或图标(在 PNG 中验证)
  • 内部元素不溢出背景框(在 PNG 中验证)
  • 背景框与内部元素之间留有 30px 以上边距
  • AWS 服务名称为官方名称/正确缩写
  • AWS 图标为最新版本(mxgraph.aws4.*)
  • 没有多余元素残留
  • 已通过视觉检查验证 PNG 转换

9. reveal.js 幻灯片中的图片显示

在 YAML 头部添加 auto-stretch: false:

---
title: "Your Presentation"
format:
  revealjs:
    auto-stretch: false
---

这可确保图片在移动设备上正确显示。

评论

支持 Markdown