怎么绘制出彩色的折线,求助Canvas代码?

折线是由一系列的点相互连接而成的图形,每两个点之间所形成的部分被称为线段。在地理信息系统(GIS)中,折线对应的类型是LineString,而在可缩放矢量图形(SVG)中,折线则对应polylineline元素。

绘制彩色折线的设计思路

定义折线类,折线具有一系列属性,如下所示:

名称 类型 说明
uid String 唯一标识符
type String 图形类型
rotation float 旋转角度
coords Array 坐标数组
style Object 样式设置
properties Object 附加属性

关于折线的初始化,它通过一个构造函数来完成,该构造函数接受一个包含上述属性(除类型type外)的对象作为参数。

在空间信息方面,折线的形态和位置是由其坐标属性coords确定的。coords是一个坐标点数组,每个坐标点本身又是由浮点数构成的数组,表示该点在二维空间中的位置。例如,[[50,50], [150,80], [250,50], [350,80], [450,50]]就表示了一个由五个点构成的折线。

示例效果与源代码:

运行效果

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
51
52
53
54
55
56
57
<!DOCTYPE html>
<html>

<head>
<title>绘制基本图形(线)</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="/examples/script/codemirror/codemirror.css">
<script src="/examples/script/lib/jquery-1.11.2.min.js"></script>
<!--代码语法高亮-->
<script type="text/javascript" src="/examples/script/codemirror/codemirror.js"></script>
<script type="text/javascript" src="/examples/script/codemirror/searchcursor.js"></script>
<script type="text/javascript" src="/examples/script/codemirror/mode/javascript.js"></script>
<script type="text/javascript" src="/examples/script/codemirror/mode/css.js"></script>
<script type="text/javascript" src="/examples/script/codemirror/mode/htmlmixed.js"></script>
<script type="text/javascript" src="/examples/debug/js/data_box.js"></script>
<!-- local -->
<script src="./js/helper.js"></script>
</head>

<body style="overflow: hidden; margin:10px;">
<div id="graphWrapper" style="width:800px; height:320px; border:solid 1px #CCC;"></div>
<div id="divData" style="position: absolute; top:340px; bottom:10px; left:10px; right: 10px;"></div>
</body>
<script>
let graph;
</script>
<script type="module">
import { Graph, Polyline, debug } from "/examples/src/index.js";

// graph对象
graph = new Graph({
"target": "graphWrapper",
"enabledGeomEvent": true
});

// 网格水印层
debug.generateGrid(Object.assign({ "interval": 10, "graph":graph }, graph.getSize()));

// 新建绘图图层
let layer = graph.addLayer();

// 绘制线
layer.getSource().add(new Polyline({ "coords" : [[50, 50], [150, 80], [250, 50], [350, 80], [450, 50], [550, 80], [650, 50], [750, 80]], "style":{"lineWidth": 2, "color":"red"}}));
layer.getSource().add(new Polyline({ "coords" : [[50, 110], [150, 140], [250, 110], [350, 140], [450, 110], [550, 140], [650, 110], [750, 140]], "style":{"lineWidth": 8, "color":"gold"}}));
layer.getSource().add(new Polyline({ "coords" : [[50, 170], [150, 200], [250, 170], [350, 200], [450, 170], [550, 200], [650, 170], [750, 200]], "style":{"lineWidth": 4, "color":"green", "dash": [8, 8, 8, 8] }}));
layer.getSource().add(new Polyline({ "coords" : [[50, 230], [150, 270], [250, 230], [350, 270], [450, 230], [550, 270], [650, 230], [750, 270]], "style":{"lineWidth": 4, "color": "blue", "dash": [20, 8, 8, 8]}}));

// 为geom绑定click事件
let geoms = layer.getSource().getData();
geoms.forEach( geom => {
geom.on("click", activeShape);
})

graph.render();
</script>

</html>

尝试一下 »

总的来说,折线是地理信息系统和图形绘制中常用的基础图形之一,具有广泛的应用场景。