
1. 等距图表到底是什么以及为什么技术文档需要它1.1 先搞清楚“等距”这两个字我最早接触等距图表是在游戏美术的素材里。那种2.5D视角的像素建筑看起来是立体的但又不是真正的透视——所有平行线依然保持平行不会像人眼看到的真实世界那样汇聚到消失点。后来做技术文档我才发现这种图在表达系统架构、物理拓扑、部署环境的时候比纯平面示意图直观太多。等距图的核心特征是三条主轴互成120度其中两条主轴在水平面上一条垂直向上。绘制时所有物体沿这三条轴伸缩比例关系是固定的所以它既保留了三维的空间感又避免了透视图那种近大远小的失真。换句话说等距图是“用二维纸面模拟三维空间”的最佳折中方案。FossFLOW这个名字直译过来就是“开源流程”但它做的不是传统意义上的流程图而是把流程图、架构图、部署图这些常见技术图形统一转换到等距坐标系里。打开编辑器画布上不是横平竖直的网格而是菱形网格加纵向网格线配合三个方向的吸附参考线拖出来的节点天然就是斜向排列的。这个设计带来一个实打实的好处技术文档里凡是涉及“多个组件如何协作”“数据从A流到B经过哪些环节”的内容用等距图呈现之后层次感会明显增强。平面图里所有元素挤在一个层级上等距图则天然分出“前后、上下、左右”的空间关系读者一眼就能看出谁是入口、谁是出口、谁在中转。1.2 技术文档里那些“画不清楚”的图先说说我在实际工作中遇到的痛点。写系统架构文档的时候最常见的图有两种一种是UML组件图方框套方框箭头连箭头标注密密麻麻读者看两分钟就头大另一种是Visio式的网络拓扑图设备图标一排一排摆开连线交叉得像一团乱麻。问题出在哪平面图的信息密度一旦上去视觉层次就崩溃了。我印象很深的一次是给一套微服务系统画调用链关系三十多个服务节点平面图画出来之后节点之间连了七十多条线打印出来根本没法看。后来改用等距图把核心服务放在高位依赖服务放在下层数据流向用纵向的高低差来区分整张图瞬间清爽了。所以等距图的价值不在于“好看”而在于“信息结构更清晰”。它利用人眼对空间位置的天然感知给信息增加了一个新的编码维度。传统平面图只有X轴和Y轴可以用来说事等距图多了一个Z轴哪怕只是视觉上的伪三维也能让读者更快建立心智模型。FossFLOW这个工具在定位上就很准它面向的是技术文档作者核心场景是架构图、部署图、数据流图、网络拓扑图而不是产品效果图或游戏素材。用这套工具画的图能直接嵌入Markdown、GitBook、ReadTheDocs等文档系统也可以导出SVG做二次编辑。2. FossFLOW的设计思路与核心特性2.1 从“能用”到“好用”的界面设计我是在一次社区分享里看到FossFLOW的。当时的第一反应是这工具怎么做得像图形化编程软件。左边是构件库中间是画布右侧是属性面板底部还有图层和坐标信息这种布局在专业绘图软件里很常见但在开源文档工具里倒是少见。这种布局的好处是学习成本低。用过任意一款绘图软件的人打开FossFLOW基本不需要看教学。构件库按类别折叠有基础几何体正方体、圆柱体、球体、IT组件服务器、数据库、路由器、防火墙、网络符号云、链路、数据节点、标注物件文字面板、箭头、尺寸线还有容器类构件用来表达逻辑边界或部署区域。画布默认是等轴测视角但可以切换俯视图、前视图和侧视图。这个功能很实用因为不是所有元素都适合直接在等距视角下绘制。比如精确对齐就得切到俯视图微调垂直高度就得用前视图。FossFLOW支持三视图联动编辑在俯视图里移动了位置等距视图同步更新不会出现“画的时候看着没问题切视角就错位”的情况。2.2 把“立体感”做成了一套规则系统FossFLOW区别于其他开源绘图工具的地方在于它把等距绘制里的“立体感”做成了规则而不是让用户手动一条线一条线地去画。以最常见的“推拉”操作为例。画一个长方体在平面图上它只是一块菱形面片选中顶面后向上拖拽FossFLOW会自动生成四个侧面和底面拖多高就生成多高的长方体所有线框自动补齐。这个操作的底层是等距投影算法给定一个平面多边形沿垂直轴拉伸指定距离算法自动计算新顶点的坐标并绘制侧边。构件的变换逻辑也一样。一个平面矩形旋转45度后看到的不是变形的平行四边形而是自动补全了厚度变成一个立体方块。组件库里的服务器图标拖进画布后自带高度和厚度双击可以修改机架高度立体感是“默认就有”的不需要用户手动画阴影或者补线条。另外有个细节值得提一下光照和阴影。FossFLOW默认在右上方向设置了一个虚拟光源所有构件的顶面用亮色左斜面用中间色右斜面用暗色三种明度按固定系数计算。这样即使画的场景很复杂每根线框都能保持一致的视觉逻辑不会出现一面墙的明暗和另一面墙冲突的情况。2.3 开源生态里的定位在开源绘图工具里FossFLOW的处境其实很明确。它不对标draw.io那种通用型图表工具——draw.io强在流程图和UML但它的等距能力基本为零。也不对标Blender这种全功能三维软件——FossFLOW不需要建模、材质、渲染管线用户打开就是画图导出就是文档素材零学习门槛。FossFLOW的技术栈值得一提浏览器端渲染基于Canvas和SVG渲染引擎数据模型用的是JSON格式项目文件本质上就是一个描述图元、坐标、属性、样式的结构化文档。这意味着项目文件可以直接放到Git仓库里做版本管理多人协作时用Git的分支机制来审核变更这对我这种习惯用Git管理一切文档的人来说体验非常顺滑。认领一个开源项目我通常会先看它的扩展性。FossFLOW提供了插件机制插件可以注册新的构件类型、新的导出格式、甚至新的绘制工具。官方目前提供了几个插件示例包括一个自动生成架构图目录树的插件和一个从Kubernetes YAML文件生成部署图的插件——从YAML生成标准图形这事儿省掉的可是一大段重复劳动。3. 实测用FossFLOW画一张等距系统架构图3.1 从空白画布到第一组构件空口说太多不如直接跑一遍。我这里以“一个典型的Web应用部署架构”为例完整演示用FossFLOW从零画出一张等距架构图。先新建项目选择等距画布。FossFLOW的默认画布是1200 x 800像素网格尺寸默认40像素这些都可以在项目设置里改。如果你准备把图嵌入文档建议画布尺寸直接按内容区域宽度来设比如我的博客正文宽度是860像素那画布就建860 x 600后续导出png就不用再裁切。画架构图的第一步是摆“容器”。这个架构里我有三台应用服务器、一台数据库服务器、一台缓存服务器、一台负载均衡器。从构件库的“IT组件”分类里把这几个构件依次拖到画布上。注意一个问题构件拖进来的时候位置和尺寸都是随机的默认值别急着连线先把构件调整到位。调整位置时我习惯先切到俯视图。FossFLOW的视图切换按钮在顶部工具栏右侧快捷键是1等距视图、2俯视图、3前视图、4侧视图。俯视图下构件是标准矩形拖动对齐非常直观。把五个构件摆成两排上排是负载均衡器和两台应用服务器下排是数据库和缓存。接下来调整高度。切回等距视图选中构件拖动构件顶部中心的蓝色手柄向上推。负载均衡器我推到100像素高度应用服务器推到120像素数据库推到150像素缓存推到100像素。高度差一旦拉开架构的层级感就出来了数据库是数据层的核心视觉上最高、最重服务器是中间层高度适中负载均衡器在最前端像入口一样。3.2 连接关系线怎么走才不“穿模”这一步最容易翻车。FossFLOW的连线工具在等距视图下不是随便拖一条线就完事——它有三种连接方式直连直角线、斜连等距线、曲线贝塞尔曲线。技术文档架构图里数据流关系一般用斜连比较多因为等距视图下斜线符合等距透视的视觉逻辑不会显得突兀。具体操作选中构件A点工具栏里的“连接”按钮再点击构件B连线就建立好了。默认生成的线走的是“水平-垂直-水平”的路径在等距图上看起来就是“Z”字形不太美观。我摸索出来的做法是先连好线再手动拖拽路径的拐点。FossFLOW的线段支持节点编辑点两下线中间会出现可拖动的路径节点。把中间节点拖到构件的侧面让线段从“Z”字形变成“台阶”形——先水平走出一段再垂直升降再水平到达目标。这样在等距视角下线段就像是在三维空间里沿墙面和地面走线不会穿过其他构件。负载均衡器到应用服务器的连线走前端侧面应用服务器到数据库的连线走底部后方绕行缓存服务器和应用服务器之间的连线走两者之间的缝隙。层次关系是最前面的线是负载均衡到应用的流量靠后的线是应用到数据库的访问这样主次分明不会交叉成蜘蛛网。3.3 文字标注的排版细节图已经像样了还差最关键的一步标注。技术文档里的图标注写清楚了图就成功了一半标注写成一团乱麻再精美的图也白搭。FossFLOW的标注有四种形态浮动文本、标签框、引注线、尺寸线。我的习惯是构件的名称用浮动文本直接放在构件顶面不拉伸、不旋转说明性文字用标签框放在构件旁边需要特别指出的区域用引注线连接涉及具体尺寸参数的才用尺寸线。这里有个很重要的技巧等距图上的文字要保持“面向读者”。所有标注文字都平行于画面底边不做等距变换。这一点FossFLOW默认就是对的——拖入文字物件后文字始终是正立的不会跟着等距方向旋转。但要注意文字摆放的位置文字如果直接放在构件正面会和构件侧面的斜线撞在一起读起来很难受。我的排版建议是标注放在构件上方靠右的位置和构件之间保持40像素以上的安全距离如果同一区域内要标注多个构件就用表格样式统一规格——同一层级的构件标签框尺寸保持一致文字大小一致这样视觉上才整洁。3.4 导出从SVG到文档嵌入图全部画完后FossFLOW支持多种导出格式SVG矢量、PNG位图、WebP动态图部分格式需要插件、JSON项目文件。我用下来技术文档场景里优先级是SVG优先于PNG。SVG的优势是无限缩放不模糊而且FossFLOW导出的SVG保留了图层信息你可以用矢量编辑器打开二次修改。Markdown里用SVG的方式很简单如果文档系统本身支持可以直接用img srcxx.svg嵌入如果平台不支持SVG那只能导出PNG导出的时候把DPR设备像素比设为2这样在Retina屏上也能显示清晰。导出面板里还有一个“展开SVG”选项默认选中推荐保留。勾选后导出的SVG会把所有引用的构件库图标直接内联成路径数据文件体积会大一些但换来的好处是这张SVG完全自包含不依赖任何外部资源放到任何地方都能正确渲染。3.5 我个人的文档工作流最后分享一下我个人的工作流供参考。流程图、时序图、状态图我继续用Mermaid或者draw.io这些是FossFLOW的短板架构图、部署图、网络拓扑图交给FossFLOW。在开源文档项目里我建了一个docs/diagrams目录每个FossFLOW源文件保存为.ff.json格式导出的SVG也放在同目录下。写Markdown文档时引用SVG需要改图就编辑.ff.json重新导出覆盖。这样版本管理上没有任何额外负担别人clone项目后也能看到源文件和导出文件可以自行修改。4. 常见问题与排查技巧实录4.1 对齐问题为什么我的图总是看起来“歪”的很多新手用FossFLOW画等距图第一个遇到的坑就是明明元素都拖到网格上了整体看起来还是歪歪扭扭。原因是等距图有三条轴X轴、Y轴水平面内互为120度和Z轴垂直单靠鼠标在等距视图里拖动很难保证每个构件都精确贴合网格。解决办法第一绘图流程里养成“先俯视图布局再等距视图调高”的习惯第二善用吸附功能打开网格吸附和构图吸附拖动构件时会自动贴附到网格交叉点第三直接用坐标值精确输入——选中构件后在右侧属性面板里输入X、Y、Z精确数值这是最可靠的对齐方式。还有一个细节等距视图里的“水平”和平面图的“水平”不是一回事。在等距视图里沿着菱形网格对角线拖动物体其实在三维坐标系里是沿着X轴或Y轴运动的。新手容易把它当成平面图来拖结果构件的垂直高度不知不觉变了。4.2 文字显示异常中文渲染成方块FossFLOW的默认字体在某些系统上不支持中文画布里的中文会显示成方块。解决方法是在项目设置里修改默认字体。我这边实测中文字体优先级可以设为Noto Sans SC, Microsoft YaHei, PingFang SC, sans-serifWindows、macOS、Linux三个平台都能正常显示。另外导出SVG时字体会嵌入到SVG里如果用别的机器打开SVG字体缺失会回退到系统默认字体中文显示可能变样最好的办法是统一用常见的开源中文字体。4.3 性能卡顿大图拖不动怎么办画布太小不怕就怕构件太多。我试过在一张图里放了两百多个构件、三百多条连线FossFLOW开始明显掉帧。处理方法是分级优化优先检查图层结构FossFLOW支持图层把背景、构件、连线、标注分到不同图层有用但效果有限。更有效的办法是利用“构件实例化”功能重复构件比如多个服务器节点可以做成构件组画布里只保存引用渲染时共享资源。构件组和复制粘贴的区别在于改动构件组的原始定义所有实例同步更新。如果做不到实例化还有一个思路把大图拆成多张小图。技术文档本来也不建议一张图画几百个节点拆成“整体架构-模块详情”两级结构阅读体验反而更好。4.4 导出文件的隐藏坑PNG边缘发虚PNG导出后发虚通常是踩了两个坑。一个是没有把DPR调高默认DPR是1在高分屏上浏览器会把图片放大到2倍物理像素模糊是必然的另一个是画布背景透明如果画布网格线没关闭PNG里会留一层淡淡的灰色网格线嵌入浅色背景的文档里特别明显。导出前检查关闭网格线显示快捷键GDPR设为2或3背景设为白色或不透明。SVG导出一般是矢量数据不会有这类问题所以能用SVG尽量用SVG。5. 关于等距图表这件事我的几点心得和建议等距图不是万能的。流程图、时序图这类强调“顺序”和“逻辑”的图用传统平面工具就好等距图的优势场景是“空间关系”和“层次关系”架构图、部署图、拓扑图天然适合。FossFLOW不是要取代其他绘图工具而是在被大多数人忽略的等距图表这个细分领域里提供了一个开源的选择。如果你所在的项目有技术文档建议先从一张核心架构图开始试水。等距图入门比想象中简单难点不在工具操作而在“如何用空间关系来表达信息层级”。我第一次画的时候走了不少弯路后来慢慢总结出几条经验先定高度层次再连线文字标注永远正立SVG导出始终优先——这几条已经成了团队文档规范的标配。FossFLOW还在快速迭代社区里有插件可以把Kubernetes YAML自动转成部署图也有插件支持从OpenAPI规范生成API网关的等距视图。开源工具的好处就在这它不会停下来等你每天都有新东西可以玩。