快速绘制流程图

绘制流程图是很常见的任务。这种小事却困扰了我很久,不管是在线的、APP、代码形式如 flow 等等,总是特别麻烦,而我对这样的小事又极其没耐心。今天终于用 OmniGraffle 解决了这个痛点。

Why not

  • 线上:需要网络,并且功能比较弱;速度慢
  • 其他 APP:功能比较弱;速度慢
  • 代码:线条的走向不可控

准备

  • OmniGraffle:Mac 绘图必备
  • 一份流程图的模板

流程图模板

这份模板我们需要自己制作,只需要绘制一次,永远都可以用,制作完之后是这样的:

红色的椭圆是代表流程图开始的那个节点。当然,作为一个超强的绘图 APP,自动化功能当然是必不可少的。OmniGraffle 提供了 API,根据 API 我们可以操纵 OmniGraffle 进行绘图。
当然,我知道你很懒,手动画这么一个图太麻烦了,所以我给你代码了 :P

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
console.clear();

canvas = document.windows[0].selection.canvas;
canvas.name = "流程图模板"

canvas.layers[0].name = "基础节点"
canvas.newLayer().name = "连线"
canvas.newLayer().name = "文字"

// 长方形的长和宽
var length = 140;
var width = 50;

//2个图形的上下距离
var x_distance = 140;
var y_distance = 70;


var magnets = [ // 磁极
new Point(0.0, 1.0),
new Point(0.0, -0.5),
new Point(1.0, 0.0),
new Point(-1.0, 0.0)
]

// 绘制多个图形
for (var x=0; x < 13; x++) // 这里的 5 是列数
{
for (var y=0; y < 30; y++) // 这里的 5 是行数
{
attribute = new Rect(
x*(length+x_distance),
y*(width+y_distance),
length,
width
); // 新建一个长方形

if(x==6 && y==0) // 如果是中间的那个就新建一个椭圆形
{
the_new = canvas.addShape("RoundRect", attribute)
the_new.fillColor = Color.red
}
else // 新建一个长方形
the_new = canvas.addShape("Rectangle", attribute);

the_new.shadowColor = null // 清除图形的阴影
the_new.strokeThickness = 3 // 框的厚度设为 3 点
the_new.magnets = magnets // 设置上下左右四个磁极
}
}

代码怎么运行呢?在菜单里点击 自动化,点击 显示控制台

然后把代码粘贴进入,回车即可运行。

接下来说一下手动绘制的步骤,其实很简单,不过你要是不关心的话,可以直接跳过:

  1. 先整理一下图层,将第一个图层命名为 “基础格”,名字随意,自己知道是啥就好:

    这一层图层用于存放基础的节点
  2. 右键再新建 2 个图层,命名自定,分别用于存放连接线与连接线的文字:

    结果类似这样:
  3. 选中基础格,我们在里面绘制节点,数量随意,够用就行,我一共画了 390 个节点,够我用了。然后点击形状工具开始绘制节点:

    至于大小,我选择的是 140*50,这个自定,能适应多种字数就行,不要太长不要太宽。
  4. 按住 option,点击第一个节点,拖动即可复制
  5. 由于 OmniGraffle 提供了完美拖动时的对齐提示,所以我们很容易就能把这两个节点对齐

    至于两个节点相差多远,自定,上下我选择 70 个像素点

    差不多就行。
  6. 同理,我们可以复制出 n 个一样的节点:

    拖动的时候会有相同距离提示,真的是太友好了。然后我们可以一次性选中 2 个,再重复之前的复制过程,并使它们与之前的节点距离相同
  7. 然后如法炮制列,左右距离我选择 140 像素

然后我们把字消除一下:

1
2
3
4
graphics = document.windows[0].selection.canvas.graphics
graphics.forEach(function(graphic, index){
graphic.text = ""
})

回车运行后字就没了。

然后为了方便找到中间的那个节点作为流程图的起始节点,我们把它的弄成红色的椭圆。最后为了方便我们连线,ctrl+a 后,将所有的节点设置为 4 个磁极

这样模板就绘制好了。

使用模板

使用就很简单了,首先点选 “连线” 这个图层,这样后续的连线都会自动放进去。直接使用线条工具将所需要的节点连接在一起。注意,点击一下只能使用一次线条工具,双击后就可以持续使用。由于有磁极的存在,连接是很快的:

连接完之后,再将形状修改为正确的形状:

然后我们在第一个节点右击,选择所有被使用的对象:

这样被我们使用的节点就都选中了,然后我们再右击,选择:

然后就能将这些节点放入一个新的图层:

然后我们点击图层上的眼镜就可以把基础节点给隐藏起来:

结果如下:

如果文字太多溢出节点的话,需要调整一下节点的大小。
剩下的就是加上文字,点选 “文字” 这个图层,然后加上文字即可

一些小技巧

文字在连线上的位置

加文字的时候注意把光标放在田字格上:

这样文字位置在中间,好看一些。或者可以通过 几何形状 来调:

文字过多溢出节点

如:

首先留出足够的空间给节点放大:

然后点击需要调整的节点,再点击这个,使得图形自动扩大适应文字:

结果如下:

接下来选中这三个,进行水平对齐:

结果如下:

然后调整连线长度就行了。

其实如果你提前发现了某个节点文字会比较多,完全可以在连线的时候跨几个节点,然后把连线穿过的节点删掉,这样就会留很多的空白地方用于调整。


来呀快活呀


快速绘制流程图
https://www.tr0y.wang/2019/01/02/how2drawaflow/
作者
Tr0y
发布于
2019年1月2日
更新于
2024年6月3日
许可协议