【canvas】canvas基础使用(四):线型的设置

简言

学习如何使用canvas来设置线形。

线型的方法和属性

使用canvas经常会和线段打交道,下面是设置线型的常用属性和方法。

lineWidth 线宽

CanvasRenderingContext2D.lineWidth 是 Canvas 2D API 设置线段厚度的属性(即线段的宽度)。

线可以通过stroke(), strokeRect(), 和strokeText() 方法绘制。

语法:
ctx.lineWidth = value;
选项值:

  • value — 描述线段宽度的数字。0、负数、 Infinity 和 NaN 会被忽略。

示例

const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

ctx.lineWidth = 15;

ctx.beginPath();
ctx.moveTo(20, 20);
ctx.lineTo(130, 130);
ctx.rect(40, 40, 70, 70);
ctx.stroke();

在这里插入图片描述

lineCap 线段末端样式

CanvasRenderingContext2D.lineCap 是 Canvas 2D API 指定如何绘制每一条线段末端的属性。有 3 个可能的值,分别是:butt, round and square。默认值是 butt。

字面意思 线段末端样式

语法:
ctx.lineCap = “butt”;
ctx.lineCap = “round”;
ctx.lineCap = “square”;
选项值:

  • butt — 线段末端以方形结束。
  • round —线段末端以圆形结束。
  • square — 线段末端以方形结束,但是增加了一个宽度和线段相同,高度是线段厚度一半的矩形区域。

示例

const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

// Draw guides
ctx.strokeStyle = "#09f";
ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(140, 10);
ctx.moveTo(10, 140);
ctx.lineTo(140, 140);
ctx.stroke();

// Draw lines
ctx.strokeStyle = "black";
["butt", "round", "square"].forEach((lineCap, i) => {
  ctx.lineWidth = 15;
  ctx.lineCap = lineCap;
  ctx.beginPath();
  ctx.moveTo(25 + i * 50, 10);
  ctx.lineTo(25 + i * 50, 140);
  ctx.stroke();
});

在这里插入图片描述

lineJoin 线相连部分样式

CanvasRenderingContext2D.lineJoin 是 Canvas 2D API 用来设置 2 个长度不为 0 的相连部分(线段、圆弧、曲线)如何连接在一起的属性(长度为 0 的变形部分,其指定的末端和控制点在同一位置,会被忽略)。此属性有 3 个值: round, bevel and miter。默认值是 miter。

如果 2 个相连部分在同一方向,那么 lineJoin 不会产生任何效果,因为在那种情况下不会出现连接区域。

语法:
ctx.lineJoin = “bevel”;
ctx.lineJoin = “round”;
ctx.lineJoin = “miter”;
选项值:

  • round — 通过填充一个额外的,圆心在相连部分末端的扇形,绘制拐角的形状。圆角的半径是线段的宽度。
  • bevel — 在相连部分的末端填充一个额外的以三角形为底的区域,每个部分都有各自独立的矩形拐角。
  • miter — 通过延伸相连部分的外边缘,使其相交于一点,形成一个额外的菱形区域。这个设置可以通过 miterLimit 属性看到效果。

示例

const ctx = document.getElementById("canvas").getContext("2d");
ctx.lineWidth = 10;

["round", "bevel", "miter"].forEach((join, i) => {
  ctx.lineJoin = join;
  ctx.beginPath();
  ctx.moveTo(-5, 5 + i * 40);
  ctx.lineTo(35, 45 + i * 40);
  ctx.lineTo(75, 5 + i * 40);
  ctx.lineTo(115, 45 + i * 40);
  ctx.lineTo(155, 5 + i * 40);
  ctx.stroke();
});

在这里插入图片描述

miterLimit 斜接面限制比例

The CanvasRenderingContext2D.miterLimit 是 Canvas 2D API 设置斜接面限制比例的属性。当获取属性值时,会返回当前的值(默认值是10.0 )。当给属性赋值时,0、负数、 Infinity 和 NaN 都会被忽略;除此之外都会被赋予一个新值。

只有当 lineJoin 显示为 “>”(miter) 时,miterLimit 才有效。

语法:
ctx.miterLimit = value;
选项值:

  • value — 斜接面限制比例的数字。0、负数、Infinity 和 NaN 都会被忽略。

示例

在这里插入图片描述

lineDashOffset 虚线偏移量

CanvasRenderingContext2D.lineDashOffset 是 Canvas 2D API 设置虚线偏移量的属性,例如可以实现“蚂蚁线“的效果。

有虚线设置才可体现偏移

语法:
ctx.lineDashOffset = value;
选项值:

  • value — 偏移量是 float 精度的数字。初始值为 0.0。

示例

在这里插入图片描述

setLineDash() 设置线段样式

Canvas 2D API 的CanvasRenderingContext2D接口的 setLineDash() 方法在填充线时使用虚线模式。它使用一组值来指定描述模式的线和间隙的交替长度。

如果要切换回至实线模式,将 dash list 设置为一个空数组即可。

语法:
setLineDash(segments);
参数:

  • segments — 一个Array数组。一组描述交替绘制线段和间距(坐标空间单位)长度的数字。如果数组元素的数量是奇数,数组的元素会被复制并重复。例如, [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。

数组下标偶数位(0,2,4…)表示绘制,数组下标奇数位(1,3,5…)表示间距

示例

function drawDashedLine(pattern) {
  ctx.beginPath();
  ctx.setLineDash(pattern);
  ctx.moveTo(0, y);
  ctx.lineTo(300, y);
  ctx.stroke();
  y += 20;
}

const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
let y = 15;

drawDashedLine([]);
drawDashedLine([1, 1]);
drawDashedLine([10, 10]);
drawDashedLine([20, 5]);
drawDashedLine([15, 3, 3, 3]);
drawDashedLine([20, 3, 3, 3, 3, 3, 3, 3]);
drawDashedLine([12, 3, 3]); // Equals [12, 3, 3, 12, 3, 3]

在这里插入图片描述

getLineDash() 获取线段样式

CanvasRenderingContext2D.getLineDash() 是 Canvas 2D API 获取当前线段样式的方法。
语法:
ctx.getLineDash();
返回值:
一个 Array数组。一组描述交替绘制线段和间距(坐标空间单位)长度的数字。如果数组元素的数量是奇数,数组元素会被复制并重复。例如,设置线段为 [5, 15, 25] 将会得到以下返回值 [5, 15, 25, 5, 15, 25]。

示例

const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

ctx.setLineDash([10, 20]);
console.log(ctx.getLineDash()); // [10, 20]

// Draw a dashed line
ctx.beginPath();
ctx.moveTo(0, 50);
ctx.lineTo(300, 50);
ctx.stroke();

在这里插入图片描述

结语

结束了。

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: WPF的Canvas可以用于制作流程图,具体流程如下: 1. 首先,在XAML中添加一个Canvas元素,并设置其宽高。 2. 接着,在Canvas中添加Shape元素(如Rectangle、Ellipse等),利用它们来表示流程图中的节点元素。可以设置它们的颜色、边框等属性,也可以添加鼠标事件等功能。 3. 接下来,需要利用连线元素(如Line、Polyline等)将节点元素连接起来,形成整个流程图的结构。可以通过设置它们的StartPoint和EndPoint来确定连线的起始和终止位置。 4. 流程图中还可以添加文字信息,可以通过TextBlock等元素来实现。 5. 如果需要在节点元素和连线元素中添加箭头等标识,可以使用Path元素,根据需要绘制不同形状的箭头标识。 6. 最后,可以将流程图中每个元素的位置和属性保存下来,以便后续的编辑和保存操作。 通过以上步骤,可以制作出美观、实用的流程图,并且WPF的Canvas具有高度可定制性和灵活性,可以满足各种复杂的流程图需求。 ### 回答2: WPF Canvas流程图是一种基于Windows Presentation Foundation (WPF)技术制作的,用于展示流程或步骤的图形化工具。它使用Canvas面板,可以在屏幕上绘制各种图形、图表、文本等,以帮助用户直观地展示流程、计划、战略和其他复杂信息。 对于WPF Canvas流程图,用户可以通过添加图形、文本、箭头等元素来创建图表。首先,用户需要创建一个Canvas面板,并在其上添加所需的元素。对于不同类型的元素,我们可以使用WPF的各种属性和方法来定义其外观、位置和行为。例如,我们可以使用Shape类(如Rectangle、Ellipse等)来创建各种形状,使用TextBlock类来添加文本,使用Polyline类来绘制折线等。 在WPF Canvas流程图中,最常用的元素是箭头。用户可以使用Path类来创建带有箭头标记的连线,以展示不同步骤之间的关系。这些箭头可以定义其颜色、线型、粗细等属性。 此外,WPF Canvas流程图还可以使用数据绑定来自动更新图表中的元素。用户可以将数据源与Canvas面板的元素绑定,使其自动更新以反映数据的更改。这使得WPF Canvas流程图成为一种非常有用的数据可视化工具。 总之,WPF Canvas流程图是一种强大的图形化工具,可以帮助用户更好地展示复杂的流程和计划。它基于WPF技术,支持各种图形、文本、箭头等元素,并且可以使用数据绑定实现自动更新。 ### 回答3: WPF是Windows Presentation Foundation的缩写,是微软推出的一种基于.NET框架的可视化开发技术。在WPF中,Canvas是一种面板控件,它用于布局控件和绘图元素。使用Canvas控件,可以方便地绘制流程图等图形化界面。 在绘制流程图时,可以先在Canvas上添加基础元素,如矩形、文本框等。然后可以使用WPF提供的属性和方法来调整这些元素的大小、颜色、位置等。此外,Canvas还提供了Transform属性,可以通过设置该属性来实现元素的旋转、缩放等效果。 在绘制流程图过程中,可以通过添加事件处理程序来实现元素的交互。比如,可以为元素添加鼠标点击事件,当用户单击元素时,可以弹出相应的操作面板。 除了Canvas控件外,WPF还提供了许多其他的控件和功能,如TreeView、ListBox、DataGrid等。这些控件可以用于展示和编辑数据,可以与Canvas控件结合使用,实现更加丰富的图形化界面。 总的来说,WPF Canvas控件为流程图的绘制提供了便利的工具和方法。开发人员只需要使用C#或VB.NET编写代码,即可实现复杂的图形界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZSK6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值