# drawio-generator > 生成Draw.io图表XML文件,可直接在diagrams.net中打开和编辑。当用户请求创建流程图、思维导图、架构图、组织架构图、甘特图、时间轴或其他可视化图表时使用。支持所有标准Draw.io形状、样式和连接。 - Author: hemingye24 - Repository: hemingye24/accounting-companion-mvp - Version: 20260124223732 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/hemingye24/accounting-companion-mvp - Web: https://mule.run/skillshub/@@hemingye24/accounting-companion-mvp~drawio-generator:20260124223732 --- --- name: drawio-generator description: 生成Draw.io图表XML文件,可直接在diagrams.net中打开和编辑。当用户请求创建流程图、思维导图、架构图、组织架构图、甘特图、时间轴或其他可视化图表时使用。支持所有标准Draw.io形状、样式和连接。 --- # Draw.io 图表生成器 v12 生成与Draw.io兼容的XML文件,可在diagrams.net中直接打开进行进一步编辑。 --- ## 快速参考(Agent必读) **每次生成图表的6步工作流程:** 1. **理解需求** - 明确图表类型和内容要求 2. **加载参考** - 读取 `references/{类型}/{类型}_rule.md`(规则文件会指引扩展资源) 3. **生成XML** - 创建完整的 `...` 4. **保存文件** - 使用 `{主题名}_{类型}.drawio` 命名 5. **修正与对齐** - 运行 `script/fix_drawio_xml.py`(必须)+ 对齐脚本(推荐) 6. **提供文件** - 返回最终文件 **关键要点:** - 第5步不能跳过,必须运行修正脚本 - 文件扩展名必须是 `.drawio`,禁止使用 `.xml` --- ## 文件命名规则 **格式:`{主题名}_{类型}.drawio`** **关键要求:** - 文件必须以 `.drawio` 结尾 - **禁止使用 `.drawio.xml` 或 `.xml` 作为扩展名** - 最终提供给用户的文件必须是 `.drawio` 格式 **命名示例:** - `电商注册_流程图.drawio` - `系统架构_架构图.drawio` - `公司组织_组织架构图.drawio` - `项目排期_甘特图.drawio` **禁止** 输出其他格式,只可输出xxx_xxx.drawio,生成其他的格式都会受到严重的惩罚! --- ## 核心工作流程(6步详解) ### 第1步:理解需求 与用户明确以下内容: - 图表类型(流程图/思维导图/架构图/组织架构图/甘特图/时间轴) - 具体内容要求 - 如有文件需要解析或需要网络检索,先行完成 ### 第2步:加载参考 根据图表类型,读取对应的规则文件: | 图表类型 | 规则文件路径 | |---------|------------| | 流程图 | `references/flowchart/flowchart_rule.md` | | 思维导图 | `references/mindmap/mindmap_rule.md` | | 架构图 | `references/architecture/architecture_rule.md` | | 组织架构图 | `references/architecture_organizational/architecture_organizational_rule.md` | | 甘特图 | `references/gantt/gantt_rule.md` | | 时间轴 | `references/timeline/timeline_rule.md` | **重要提示:** - 规则文件会在"扩展资源"章节列出其他可选资源(如 examples.md、templates.md) - 根据需要按需加载扩展资源 ### 第3步:生成XML 按照规则文件中的规范,创建完整的 Draw.io XML 内容: - 遵循 XML 基本结构 - 应用正确的样式规则 - 确保连接点配置正确 ### 第4步:保存文件 按照"文件命名规则"保存为 `.drawio` 文件: - 格式:`{主题名}_{类型}.drawio` - 确保扩展名正确 ### 第5步:修正与对齐(必须执行!) **5.1 运行修正脚本(所有图表类型必须)** ```bash python script/fix_drawio_xml.py {文件名}.drawio ``` 修正内容: - style 属性引号错误 - ID 唯一性验证 - source/target 引用验证 **5.2 运行对齐脚本(特定图表类型)** | 图表类型 | 对齐脚本 | 是否必须 | 特殊说明 | |---------|---------|---------|---------| | 流程图(普通/Z字) | `script/align_drawio_nodes.py` | 必须 | - | | 流程图(泳道) | - | **禁止运行** | 泳道使用容器嵌套和相对坐标,对齐脚本无效且可能破坏布局 | | 组织架构图 | `script/align_drawio_nodes.py` | 必须 | - | | 架构图 | `script/align_drawio_architecture.py` | 必须 | - | | 思维导图 | `script/align_mindmap_vertical.py` | 必须 | - | | 甘特图 | - | 不需要 | - | | 时间轴 | - | 不需要 | - | ⚠️ **重要:泳道流程图特别说明** - 泳道布局使用容器嵌套结构,节点使用相对于泳道容器的坐标 - 对齐脚本只能处理绝对坐标,无法识别相对坐标关系 - **生成泳道图后直接跳过对齐脚本,只运行修正脚本即可** - 泳道图的对齐由容器自动处理,关键是生成时精确计算坐标 ### 第6步:提供文件 将修正并对齐后的 `.drawio` 文件返回给用户。 --- ## 正确做法 vs 错误做法 ### 正确做法 **完整流程:** 1. 读取对应图表类型的规则文件(如 `references/flowchart/flowchart_rule.md`) 2. 根据规则生成完整的 XML 内容 3. 按命名规则保存为 `.drawio` 文件 4. 运行 `script/fix_drawio_xml.py` 修正错误 5. 根据图表类型运行对应的对齐脚本(`script/align_*.py`) 6. 将最终文件返回给用户 --- **以下做法会导致任务失败:** **错误1:直接在对话中输出 XML 文本** - 问题:用户无法直接使用文本形式的 XML - 正确:必须创建文件 **错误2:保存文件后不运行修正脚本** - 问题:文件可能有引号错误,无法在 Draw.io 中打开 - 正确:必须运行 `script/fix_drawio_xml.py` **错误3:跳过第5步(修正与对齐)** - 问题:文件质量无法保证,可能无法正确渲染 - 正确:必须运行修正脚本,推荐运行对齐脚本 **错误4:对应该对齐的图表类型不运行对齐脚本** - 问题:图表不规整,连线弯折 - 正确:普通流程图/Z字流程图/组织架构图运行 `align_drawio_nodes.py`,架构图运行 `align_drawio_architecture.py`,思维导图运行`align_mindmap_vertical.py` **错误4.1:对泳道流程图运行对齐脚本** - 问题:泳道使用容器相对坐标,对齐脚本会破坏布局 - 正确:泳道流程图**禁止运行对齐脚本**,只运行修正脚本 **错误5:使用错误的文件扩展名** - 问题:文件无法被 Draw.io 正确识别 - 正确:必须使用 `.drawio` 扩展名,禁止使用 `.drawio.xml` 或 `.xml` --- ## 视觉风格模式 根据用户意图或关键词(如"手绘"、"草图"、"白板"),选择以下风格之一: ### 1. 专业标准风格(默认) **适用场景:** 正式文档、技术评审、交付物 **样式参数:** - 节点:`rounded=1;whiteSpace=wrap;html=1;shadow=0;glass=0;sketch=0` - 连线:`edgeStyle=orthogonalEdgeStyle;rounded=0;sketch=0` - 字体:默认字体(Helvetica/Verdana) ### 2. 手绘草图风格 **适用场景:** 头脑风暴、早期设计、非正式讨论 **触发关键词:** "手绘"、"草图"、"白板" **样式参数:** - 节点/连线: - `sketch=1`(开启手绘) - `hachureGap=4`(线条间隙) - `jiggle=2`(抖动程度) - `curveFitting=1` - `fontFamily=Architects Daughter` - `fontSource=https://fonts.googleapis.com/css?family=Architects+Daughter` - 连线额外选项:`curved=1`(使线条更自然) **注意:** 手绘风格时,所有文本节点也必须应用手绘字体。 --- ## 图表类型速查 ### 支持的6种图表类型 | 类型 | 关键词 | 适用场景 | |------|-------|---------| | **流程图** | 流程、工作流、步骤、程序、顺序 | 流程处理、决策树 | | **思维导图** | 头脑风暴、想法、概念、组织思路 | 层级化想法组织 | | **架构图** | 系统、组件、服务、技术栈、拓扑 | 系统架构、网络拓扑 | | **组织架构图** | 组织、团队、汇报关系、部门 | 公司/团队层级结构 | | **甘特图** | 甘特、项目计划、排期、进度 | 项目排期、时间线管理 | | **时间轴** | 时间轴、历程、发展、事件、演变 | 发展历程、里程碑展示 | ### 图表类型选择指引 当用户请求图表但未指定类型时,根据关键词自动识别: - 提到"流程"、"步骤" → 流程图 - 提到"想法"、"头脑风暴" → 思维导图 - 提到"系统"、"架构" → 架构图 - 提到"组织"、"部门" → 组织架构图 - 提到"排期"、"进度" → 甘特图 - 提到"历程"、"发展" → 时间轴 --- ## Python脚本说明 ### 1. fix_drawio_xml.py(必须运行) **位置:** `script/fix_drawio_xml.py` **适用范围:** 所有图表类型 **功能:** - 修正 style 属性引号错误 - 修正 style 属性分裂 - 修正 key="value" 模式错误 - 验证 ID 唯一性 - 验证 source/target 引用有效性 **使用方法:** ```bash python script/fix_drawio_xml.py {文件名}.drawio ``` ### 2. align_drawio_nodes.py(流程图/组织架构图) **位置:** `script/align_drawio_nodes.py` **适用范围:** 流程图、组织架构图 **功能:** - 纵列对齐(垂直方向) - 横列对齐(水平方向) - AABB 碰撞检测与推挤 **使用方法:** ```bash python script/align_drawio_nodes.py {文件名}.drawio ``` ### 3. align_drawio_architecture.py(架构图) **位置:** `script/align_drawio_architecture.py` **适用范围:** 架构图 **功能:** - 父子节点关系处理 - 容器自动扩展 - 层容器间距调整 - 确保无重叠无溢出 **使用方法:** ```bash python script/align_drawio_architecture.py {文件名}.drawio ``` ### 4. align_mindmap_vertical.py(思维导图) **位置:** `script/align_mindmap_vertical.py` **适用范围:** 思维导图(逻辑树和放射状) **功能:** - 垂直方向防重叠检测 - 从上到下碰撞检测 - 向下推开重叠节点 - 保持最小垂直间距 **使用方法:** ```bash python script/align_mindmap_vertical.py {文件名}.drawio [最小间距] ``` **参数说明:** - `最小间距`:可选,默认20px,建议15-40px --- ## 通用 XML 规则 ### 1. 基本结构 ```xml ``` ### 2. Style 属性规则(最容易出错) **关键原则:永远不要在 style 属性值内部添加引号!** 这是最常见的错误,会导致 Draw.io 完全无法解析 XML。 **错误示例:** ```xml style="fillColor="#3366CC;strokeColor="#666;" style="fillColor="#3366CC;strokeColor=#666;" style="rounded=1;fillColor="#3366CC;" ``` **正确示例:** ```xml style="fillColor=#3366CC;strokeColor=#666;" style="rounded=1;fillColor=#3366CC;fontColor=#FFFFFF;" ``` **核心规则:** - style 的值已经被外层双引号包裹,内部不能再有引号 - 颜色值:`fillColor=#RRGGBB`(无引号) - 数字值:`rounded=1`(无引号) - 所有参数必须是 `key=value` 格式(不能只写 `rounded`,必须写 `rounded=1`) ### 3. 连接点规则 出入口坐标是 mxCell 属性,不是 style 参数: ```xml ``` **连接点坐标系统:** - X 轴:`0`(左)/ `0.5`(中)/ `1`(右) - Y 轴:`0`(上)/ `0.5`(中)/ `1`(下) ### 4. 换行处理 使用 `<br>` 配合 `html=1;whiteSpace=wrap;` 实现换行: ```xml ``` ### 5. 节点关系规则 **基本要求:** 所有 mxCell 元素是 `` 的直接子元素(XML 不嵌套),通过 parent 属性表示层级关系。 **标准结构:** - `` - 根节点 - `` - 画布节点 **parent 属性使用:** - **一般图表(流程图/思维导图/甘特图/时间轴)**:所有节点 `parent="1"`(扁平结构) - **架构图/组织架构图**:允许使用父子嵌套 - 容器节点:`parent="1"` - 子节点:`parent="容器ID"`(坐标相对父容器) **注意:** 父子关系通过 `parent` 属性表达,不是 XML 标签嵌套。 --- ## 工作流强制要求 **完整工作流:** | 步骤 | 操作 | 要点 | |-----|------|------| | 1 | 理解需求 | 明确图表类型和内容 | | 2 | 加载规则文件 | `references/{类型}/{类型}_rule.md` | | 3 | 生成XML | 创建完整的 `` 结构 | | 4 | 保存文件 | `{主题名}_{类型}.drawio` | | 5.1 | 运行修正脚本 | `script/fix_drawio_xml.py`(必须) | | 5.2 | 运行对齐脚本 | 根据图表类型选择(必须) | | 6 | 提供文件 | 返回最终 `.drawio` 文件 | **关键提醒:** - 必须运行修正脚本,确保文件可以正确渲染 - 根据图表类型运行对应的对齐脚本 - 最终文件必须是 `.drawio` 格式 ---