drawio
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesedrawio Diagram Generator
drawio 图表生成器
Quick Start: Create with → Define with grid settings → Add with cells → Use for shapes and edges → Set geometry with → Wrap in fence.
<mxfile><diagram><mxGraphModel><root><mxCell><mxGeometry>```drawio快速入门: 创建包含的 → 定义带有网格设置的 → 添加包含单元格的 → 使用创建形状和连接线 → 通过设置几何属性 → 用代码块包裹内容。
<diagram><mxfile><mxGraphModel><root><mxCell><mxGeometry>```drawioCritical Rules
关键规则
Structure Rules
结构规则
- S1: Check Stencil Names 🚨 NEVER guess stencil names. Check stencils/README.md for EXACT names. Wrong: → Correct:
mxgraph.cisco.routermxgraph.cisco.routers.router - S2: Stencils Require fillColor Many stencils have no default color. Always add /
fillColor. Exception: edge/link stencils are connectors, not devices.strokeColor - S3: Root Cells Required Must include and
<mxCell id="0"/>or diagram won't render.<mxCell id="1" parent="0"/> - S4: Labels Below Stencils Use for device labels.
verticalLabelPosition=bottom;verticalAlign=top;labelPosition=center;align=center; - S5: mxCell Must Be Siblings ALL mxCell elements must be siblings under — NEVER nest mxCell inside another mxCell.
<root> - S6: Container Transparency For container shapes, use to make background transparent and prevent covering child elements.
fillColor=none;
Preset Color Palette: Blue(,) Green(,) Orange(,) Red(,) Purple(,) Yellow(,) Gray(,)
#dae8fc#6c8ebf#d5e8d4#82b366#ffe6cc#d79b00#f8cecc#b85450#e1d5e7#9673a6#fff2cc#d6b656#f5f5f5#666666- S1: 核对模具名称 🚨 绝对不要猜测模具名称,请查看stencils/README.md获取准确名称。错误示例:→ 正确示例:
mxgraph.cisco.routermxgraph.cisco.routers.router - S2: 模具需设置填充色 许多模具没有默认颜色,务必添加/
fillColor属性。例外:连接线/链路模具属于连接器,不属于设备类,无需设置。strokeColor - S3: 必须包含根单元格 必须添加和
<mxCell id="0"/>,否则图表无法渲染。<mxCell id="1" parent="0"/> - S4: 标签位于模具下方 设备标签需使用以下样式:
verticalLabelPosition=bottom;verticalAlign=top;labelPosition=center;align=center; - S5: mxCell必须为同级元素 所有元素必须是
<mxCell>下的同级元素——绝对不要将一个mxCell嵌套在另一个mxCell内部。<root> - S6: 容器透明化 对于容器形状,使用设置背景透明,避免遮挡内部元素。
fillColor=none;
预设调色板: 蓝色(,) 绿色(,) 橙色(,) 红色(,) 紫色(,) 黄色(,) 灰色(,)
#dae8fc#6c8ebf#d5e8d4#82b366#ffe6cc#d79b00#f8cecc#b85450#e1d5e7#9673a6#fff2cc#d6b656#f5f5f5#666666Layout Rules
布局规则
- L1: Starting Margin Begin positioning from x=40, y=40.
- L2: Element Spacing Keep 40-60px gaps between connected shapes; 150-200px for routing channels.
- L3: Compact Layouts Use vertical stacking or grid layouts. Avoid spreading elements too far apart.
- L1: 起始边距 从x=40、y=40的位置开始布局。
- L2: 元素间距 相连形状之间保持40-60px的间距;路由通道预留150-200px的空间。
- L3: 紧凑布局 使用垂直堆叠或网格布局,避免元素过度分散。
Edge Routing Rules — CRITICAL for Clean Diagrams
连接线路由规则 —— 图表整洁的关键
- E1: No Shared Paths Multiple edges between same nodes must use DIFFERENT exit/entry positions (and
exitY=0.3, NOT both 0.5).exitY=0.7 - E2: Bidirectional Use Opposite Sides A→B: ,
exitX=1. B→A:entryX=0,exitX=0.entryX=1 - E3: Explicit Exit/Entry Points Every edge should specify: ,
exitX,exitY,entryXin style.entryY - E4: Route Around Obstacles If any shape is between source and target, use waypoints. Add 20-30px clearance. NEVER let edges cross over shapes.
- E5: Plan Layout First Organize shapes into columns/rows. Trace each edge mentally: "What shapes are between source and target?"
- E6: Multiple Waypoints Use 2-3 waypoints for L-shaped or U-shaped paths. Each direction change needs a waypoint.
- E7: Natural Connection Points NEVER use corners (). Top-to-bottom:
entryX=1,entryY=1,exitY=1. Left-to-right:entryY=0,exitX=1.entryX=0 - E8: Diagonal Routing Principle When connecting distant nodes diagonally, route along the PERIMETER (outside edge) of the diagram, NOT through the middle where other shapes exist.
- E1: 避免路径重叠 同一节点间的多条连接线必须使用不同的出口/入口位置(如和
exitY=0.3,不能都设为0.5)。exitY=0.7 - E2: 双向连接使用相反侧边 A→B:,
exitX=1;B→A:entryX=0,exitX=0。entryX=1 - E3: 明确出口/入口点 每条连接线都应在样式中指定:、
exitX、exitY、entryX。entryY - E4: 绕开障碍物 如果源节点和目标节点之间存在其他形状,使用路径点(waypoints),并预留20-30px的空隙。绝对不要让连接线穿过形状。
- E5: 先规划布局 将形状按列/行排列,在脑海中模拟每条连接线的路径:“源节点和目标节点之间有哪些形状?”
- E6: 多路径点使用 L型或U型路径使用2-3个路径点,每次方向改变都需要一个路径点。
- E7: 自然连接点 绝对不要使用角落作为连接点(如)。上下连接:
entryX=1,entryY=1,exitY=1;左右连接:entryY=0,exitX=1。entryX=0 - E8: 对角线路由原则 连接远距离节点且中间有障碍物时,沿图表外围路由,不要穿过中间的其他形状。
Pre-Generation Checklist
生成前检查清单
- Do any edges cross over non-source/target shapes? → Add waypoints
- Do any two edges share the same path? → Adjust exit/entry points
- Are any connections at corners? → Use edge centers instead
- Could rearranging shapes reduce crossings? → Revise layout
- 是否有连接线穿过非源/目标形状?→ 添加路径点
- 是否有两条连接线路径重叠?→ 调整出口/入口位置
- 是否有角落连接?→ 改用边的中心位置
- 重新排列形状能否减少交叉?→ 修改布局
Common Shapes
常见形状
Basic Shapes
基础形状
drawio
<mxfile><diagram name="Basic Shapes" id="basic-shapes"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="rect" value="Box" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="rounded" value="Rounded" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="140" y="20" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="circle" value="Circle" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="260" y="10" width="70" height="70" as="geometry"/></mxCell>
<mxCell id="diamond" value="Decision" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="350" y="10" width="70" height="70" as="geometry"/></mxCell>
<mxCell id="db" value="Database" style="shape=cylinder;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="440" y="5" width="60" height="80" as="geometry"/></mxCell>
<mxCell id="cloud" value="Cloud" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="520" y="10" width="100" height="70" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>drawio
<mxfile><diagram name="Basic Shapes" id="basic-shapes"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="rect" value="Box" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="rounded" value="Rounded" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="140" y="20" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="circle" value="Circle" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="260" y="10" width="70" height="70" as="geometry"/></mxCell>
<mxCell id="diamond" value="Decision" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="350" y="10" width="70" height="70" as="geometry"/></mxCell>
<mxCell id="db" value="Database" style="shape=cylinder;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="440" y="5" width="60" height="80" as="geometry"/></mxCell>
<mxCell id="cloud" value="Cloud" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="520" y="10" width="100" height="70" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>Container/Swimlane
容器/泳道
drawio
<mxfile><diagram name="Container Example" id="container-ex"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="container" value="Container" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="40" y="40" width="200" height="150" as="geometry"/>
</mxCell>
<mxCell id="zone" value="Zone Name" style="whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=none;verticalAlign=top;fontSize=14;" vertex="1" parent="1"><mxGeometry x="280" y="40" width="200" height="150" as="geometry"/>
</mxCell>
</root></mxGraphModel></diagram></mxfile>drawio
<mxfile><diagram name="Container Example" id="container-ex"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="container" value="Container" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="40" y="40" width="200" height="150" as="geometry"/>
</mxCell>
<mxCell id="zone" value="Zone Name" style="whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=none;verticalAlign=top;fontSize=14;" vertex="1" parent="1"><mxGeometry x="280" y="40" width="200" height="150" as="geometry"/>
</mxCell>
</root></mxGraphModel></diagram></mxfile>Swimlane with Child Elements (Relative Positioning)
包含子元素的泳道(相对定位)
drawio
<mxfile><diagram name="Swimlane" id="swimlane-ex"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="lane1" value="Frontend" style="swimlane;" vertex="1" parent="1"><mxGeometry x="40" y="40" width="200" height="200" as="geometry"/></mxCell>
<mxCell id="step1" value="Step 1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="lane1"><mxGeometry x="20" y="60" width="160" height="40" as="geometry"/></mxCell>
<mxCell id="lane2" value="Backend" style="swimlane;" vertex="1" parent="1"><mxGeometry x="280" y="40" width="200" height="200" as="geometry"/></mxCell>
<mxCell id="step2" value="Step 2" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="lane2"><mxGeometry x="20" y="60" width="160" height="40" as="geometry"/></mxCell>
<mxCell id="edge1" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;" edge="1" parent="1" source="step1" target="step2"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>Note: Child elements (, ) use / with coordinates RELATIVE to the swimlane. Edges always use (main canvas).
step1step2parent="lane1"parent="lane2"parent="1"drawio
<mxfile><diagram name="Swimlane" id="swimlane-ex"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="lane1" value="Frontend" style="swimlane;" vertex="1" parent="1"><mxGeometry x="40" y="40" width="200" height="200" as="geometry"/></mxCell>
<mxCell id="step1" value="Step 1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="lane1"><mxGeometry x="20" y="60" width="160" height="40" as="geometry"/></mxCell>
<mxCell id="lane2" value="Backend" style="swimlane;" vertex="1" parent="1"><mxGeometry x="280" y="40" width="200" height="200" as="geometry"/></mxCell>
<mxCell id="step2" value="Step 2" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="lane2"><mxGeometry x="20" y="60" width="160" height="40" as="geometry"/></mxCell>
<mxCell id="edge1" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;" edge="1" parent="1" source="step1" target="step2"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>注意: 子元素(、)使用 / ,坐标为相对于泳道的位置。连接线始终使用(主画布)。
step1step2parent="lane1"parent="lane2"parent="1"Stencil Libraries
模具库
drawio provides 8900+ pre-built stencils across 48 categories for professional diagrams. Full stencil reference: See stencils/README.md.
| Category | Examples | Use Case |
|---|---|---|
| Cloud | | Cloud architecture diagrams |
| Network | | Network topology |
| Virtualization | | Infrastructure diagrams |
| Software | | Process & UI design |
| Hardware | | Data center & electrical |
| Office | | Business diagrams |
drawio
<mxfile><diagram name="Stencil Example" id="stencil-ex"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="router" value="" style="shape=mxgraph.cisco.routers.router;html=1;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;" vertex="1" parent="1"><mxGeometry x="100" y="100" width="78" height="53" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>drawio提供8900+种预构建模具,涵盖48个分类,可用于制作专业图表。完整模具参考: 查看stencils/README.md。
| 分类 | 示例 | 适用场景 |
|---|---|---|
| 云服务 | | 云架构图 |
| 网络 | | 网络拓扑图 |
| 虚拟化 | | 基础设施图 |
| 软件 | | 流程与UI设计 |
| 硬件 | | 数据中心与电气图 |
| 办公 | | 业务图表 |
drawio
<mxfile><diagram name="Stencil Example" id="stencil-ex"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="router" value="" style="shape=mxgraph.cisco.routers.router;html=1;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;" vertex="1" parent="1"><mxGeometry x="100" y="100" width="78" height="53" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>Common Style Reference
常用样式参考
- Arrow Types: Inheritance() Implementation(
endArrow=block;endFill=0) Association(endArrow=block;endFill=0;dashed=1) Dependency(endArrow=open;endFill=1) Aggregation(endArrow=open;dashed=1) Composition(startArrow=diamondThin;startFill=0)startArrow=diamondThin;startFill=1 - Visibility Symbols: (public)
+(protected)#(private)-(package)~(derived)/ - State Colors: Pending(,
#dae8fc) Success(#6c8ebf,#d5e8d4) Error(#82b366,#f8cecc) Warning(#b85450,#fff2cc) Complete(#d6b656,#e1d5e7)#9673a6 - Shape Styles: (0,1)
rounded(hex)fillColor(hex)strokeColor(num)strokeWidth(0,1)dashed(0-100)opacity(hex)fontColor(num)fontSize(0=normal,1=bold,2=italic,3=both)fontStyle(left,center,right)align(top,middle,bottom)verticalAlign - Edge Styles: (orthogonalEdgeStyle,entityRelationEdgeStyle,elbowEdgeStyle)
edgeStyle(0,1)curved/endArrow(classic,block,open,oval,diamond,none)startArrow/endFill(0=hollow,1=filled)startFill
- 箭头类型: 继承() 实现(
endArrow=block;endFill=0) 关联(endArrow=block;endFill=0;dashed=1) 依赖(endArrow=open;endFill=1) 聚合(endArrow=open;dashed=1) 组合(startArrow=diamondThin;startFill=0)startArrow=diamondThin;startFill=1 - 可见性符号: (公共)
+(保护)#(私有)-(包)~(派生)/ - 状态颜色: 待处理(,
#dae8fc) 成功(#6c8ebf,#d5e8d4) 错误(#82b366,#f8cecc) 警告(#b85450,#fff2cc) 完成(#d6b656,#e1d5e7)#9673a6 - 形状样式: (0,1)
rounded(十六进制值)fillColor(十六进制值)strokeColor(数字)strokeWidth(0,1)dashed(0-100)opacity(十六进制值)fontColor(数字)fontSize(0=常规,1=粗体,2=斜体,3=粗斜体)fontStyle(left,center,right)align(top,middle,bottom)verticalAlign - 连接线样式: (orthogonalEdgeStyle,entityRelationEdgeStyle,elbowEdgeStyle)
edgeStyle(0,1)curved/endArrow(classic,block,open,oval,diamond,none)startArrow/endFill(0=空心,1=实心)startFill
Edge Examples
连接线示例
Basic Edge
基础连接线
drawio
<mxfile><diagram name="Edge Examples" id="edge-examples"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="a1" value="A" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell>
<mxCell id="b1" value="B" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="140" y="20" width="60" height="30" as="geometry"/></mxCell>
<mxCell style="endArrow=classic;html=1;" edge="1" parent="1" source="a1" target="b1"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="a2" value="C" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="20" y="80" width="60" height="30" as="geometry"/></mxCell>
<mxCell id="b2" value="D" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="140" y="80" width="60" height="30" as="geometry"/></mxCell>
<mxCell style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;dashed=1;html=1;" edge="1" parent="1" source="a2" target="b2"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>drawio
<mxfile><diagram name="Edge Examples" id="edge-examples"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="a1" value="A" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="60" height="30" as="geometry"/></mxCell>
<mxCell id="b1" value="B" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="140" y="20" width="60" height="30" as="geometry"/></mxCell>
<mxCell style="endArrow=classic;html=1;" edge="1" parent="1" source="a1" target="b1"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="a2" value="C" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="20" y="80" width="60" height="30" as="geometry"/></mxCell>
<mxCell id="b2" value="D" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="140" y="80" width="60" height="30" as="geometry"/></mxCell>
<mxCell style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;dashed=1;html=1;" edge="1" parent="1" source="a2" target="b2"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>Two Edges Between Same Nodes (No Overlap)
同一节点间的两条连接线(无重叠)
drawio
<mxfile><diagram name="Bidirectional" id="bidir"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="nodeA" value="A" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="40" y="60" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="nodeB" value="B" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="200" y="60" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="e1" value="Request" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.3;entryX=0;entryY=0.3;endArrow=classic;html=1;" edge="1" parent="1" source="nodeA" target="nodeB"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e2" value="Response" style="edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.7;entryX=1;entryY=0.7;endArrow=classic;html=1;" edge="1" parent="1" source="nodeB" target="nodeA"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>drawio
<mxfile><diagram name="Bidirectional" id="bidir"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="nodeA" value="A" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="40" y="60" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="nodeB" value="B" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="200" y="60" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="e1" value="Request" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.3;entryX=0;entryY=0.3;endArrow=classic;html=1;" edge="1" parent="1" source="nodeA" target="nodeB"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e2" value="Response" style="edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.7;entryX=1;entryY=0.7;endArrow=classic;html=1;" edge="1" parent="1" source="nodeB" target="nodeA"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram></mxfile>Edge with Waypoints (Routing Around Obstacle)
带路径点的连接线(绕开障碍物)
drawio
<mxfile><diagram name="Waypoints" id="waypoints"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="src" value="Source" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="40" y="40" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="obstacle" value="Obstacle" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1"><mxGeometry x="160" y="100" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="tgt" value="Target" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="280" y="160" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="edge1" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;entryX=0.5;entryY=0;endArrow=classic;html=1;" edge="1" parent="1" source="src" target="tgt">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="320" y="60"/>
</Array>
</mxGeometry>
</mxCell>
</root></mxGraphModel></diagram></mxfile>drawio
<mxfile><diagram name="Waypoints" id="waypoints"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="src" value="Source" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="40" y="40" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="obstacle" value="Obstacle" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1"><mxGeometry x="160" y="100" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="tgt" value="Target" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="280" y="160" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="edge1" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;entryX=0.5;entryY=0;endArrow=classic;html=1;" edge="1" parent="1" source="src" target="tgt">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="320" y="60"/>
</Array>
</mxGeometry>
</mxCell>
</root></mxGraphModel></diagram></mxfile>Diagonal Routing (Perimeter Pattern)
对角线路由(外围模式)
When connecting distant nodes diagonally with obstacles in between, route along the OUTSIDE perimeter:
drawio
<mxfile><diagram name="Perimeter" id="perimeter"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="main" value="Main" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="200" y="40" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="develop" value="Develop" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="200" y="120" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="hotfix" value="Hotfix" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="350" y="200" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="hotfix_to_main" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=0;entryX=1;entryY=0.5;endArrow=classic;html=1;" edge="1" parent="1" source="hotfix" target="main">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="390" y="60"/>
</Array>
</mxGeometry>
</mxCell>
</root></mxGraphModel></diagram></mxfile>Key: Route goes RIGHT (x=390) then UP, avoiding the Develop node in the middle.
连接远距离节点且中间有障碍物时,沿图表外围路由:
drawio
<mxfile><diagram name="Perimeter" id="perimeter"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="main" value="Main" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="200" y="40" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="develop" value="Develop" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="200" y="120" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="hotfix" value="Hotfix" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="350" y="200" width="80" height="40" as="geometry"/></mxCell>
<mxCell id="hotfix_to_main" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=0;entryX=1;entryY=0.5;endArrow=classic;html=1;" edge="1" parent="1" source="hotfix" target="main">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="390" y="60"/>
</Array>
</mxGeometry>
</mxCell>
</root></mxGraphModel></diagram></mxfile>关键: 连接线先向右(x=390)再向上,避开中间的Develop节点。
Complete Example: Simple Architecture
完整示例:简单架构图
drawio
<mxfile><diagram name="Architecture" id="arch-1"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="client" value="Client" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"><mxGeometry x="40" y="100" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="server" value="Server" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"><mxGeometry x="240" y="100" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="db" value="Database" style="shape=cylinder;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1"><mxGeometry x="440" y="85" width="80" height="80" as="geometry"/></mxCell>
<mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="client" target="server"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="server" target="db"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram</mxfile>drawio
<mxfile><diagram name="Architecture" id="arch-1"><mxGraphModel dx="800" dy="600" grid="1" gridSize="10"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="client" value="Client" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"><mxGeometry x="40" y="100" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="server" value="Server" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"><mxGeometry x="240" y="100" width="100" height="50" as="geometry"/></mxCell>
<mxCell id="db" value="Database" style="shape=cylinder;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1"><mxGeometry x="440" y="85" width="80" height="80" as="geometry"/></mxCell>
<mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="client" target="server"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="server" target="db"><mxGeometry relative="1" as="geometry"/></mxCell>
</root></mxGraphModel></diagram</mxfile>Common Pitfalls
常见问题
| Issue | Solution |
|---|---|
| Shape not visible | Verify |
| Edge not connecting | Ensure |
| Styles not applying | Check semicolon separators in style string |
| Text not showing | Add |
| Edges crossing shapes | Use waypoints to route around obstacles |
| Multiple edges overlapping | Use different |
| Corner connections look ugly | Use edge centers instead ( |
| Diagram too spread out | Keep within x: 0-800, y: 0-600 viewport |
| XML comments break editing | NEVER include |
| 问题 | 解决方案 |
|---|---|
| 形状不可见 | 验证 |
| 连接线未连接 | 确保 |
| 样式未生效 | 检查样式字符串中的分号分隔符是否正确 |
| 文本未显示 | 在样式中添加 |
| 连接线穿过形状 | 使用路径点绕开障碍物 |
| 多条连接线重叠 | 使用不同的 |
| 角落连接不美观 | 改用边的中心位置(如 |
| 图表过于分散 | 将元素限制在x:0-800、y:0-600的视口范围内 |
| XML注释导致编辑失败 | 绝对不要在生成的XML中包含 |
Tips for AI Generation
AI生成技巧
- Plan layout first: Sketch positions mentally before writing XML — identify potential edge crossings
- Use grid alignment: Position shapes at multiples of 10 or 20
- Unique IDs: Use descriptive IDs like ,
client,serverinstead of random stringsdb - Consistent spacing: Keep 40-60px gaps between connected shapes; 150-200px for routing channels
- Layer backgrounds first: Define zone/container cells before shapes inside them
- Color zones: Use light background colors with for region highlighting
strokeColor=none - Verify edges mentally: Before generating, trace each edge and ask "Does this cross any shape?"
- Escape special characters: Use for <,
<for >,>for &,&for ""
- 先规划布局:在编写XML前在脑海中勾勒位置,预判可能的连接线交叉问题
- 使用网格对齐:将形状定位在10或20的倍数坐标上
- 唯一ID:使用描述性ID如、
client、server,而非随机字符串db - 间距一致:相连形状之间保持40-60px的间距;路由通道预留150-200px空间
- 先绘制背景层:先定义区域/容器单元格,再添加内部形状
- 颜色分区:使用浅色背景色并设置来高亮区域
strokeColor=none - 提前验证连接线:生成前在脑海中模拟每条连接线的路径,确认是否穿过形状
- 转义特殊字符:使用表示<,
<表示>,>表示&,&表示""