javascript - fabric.js:在用户绘图时填充自由绘图路径(套索工具)
问题描述
在fabric.js中,我们可以绘制徒手路径(http://fabricjs.com/freedrawing)(http://fabricjs.com/fabric-intro-part-4#free_drawing)
(是的,我已经看过这篇文章,但它并没有解决或引用我的问题)
我想要实现的是在用户绘制时显示填充。不仅在创建路径时(如下面的演示所示),它还为我不想要的所有其他绘制路径设置填充。我只希望填充仅应用于正在绘制的路径并在绘制时显示填充。
我的问题是,“如何在用户使用 fabric.js 中的免费绘图进行绘图时显示填充?”
var canvas = new fabric.Canvas('c', {
isDrawingMode: true
});
canvas.on('path:created', function() {
canvas.getObjects().forEach(o => {
o.fill = '#000'
});
canvas.renderAll();
});
canvas {
border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.3/fabric.js"></script>
<canvas id="c" width="600" height="400"></canvas>
解决方案
解决方案的简要简化说明:
我创建了一个名为 LassoBrush 的新类(与 PencilBrush 类非常相似,除了笔画宽度值为 0,笔画颜色 = null 和填充我从 null 更改为 this.color(用户设置为) 然后像这样调用..
canvas.freeDrawingBrush = new fabric.LassoBrush(canvas);
canvas.freeDrawingBrush.color = '#000';
canvas.isDrawingMode = true;
对于任何想知道如何解决这个问题的人......
您正在寻找的是自定义画笔。
看看PencilBrush 和 BaseBrush。
它相对直接地扩展 PencilBrush 并在上下文中为 closePath 添加一些逻辑。
要点:
当用户绘制时,画笔负责渲染您所看到的。画笔使用顶部上下文,底部上下文由 fabric.Canvas 使用。绘制完成后,将创建路径并将其添加到画布。
顶部上下文被清除。
这样做是出于性能原因。出于这个原因,存在顶级上下文。顺便说一句,EraserBrush正是我在这里所描述的,但更加复杂。
推荐阅读
- django - 在 git 中打开一个分支后,Venv 停止工作
- android - 在android studio上双击pdf文件后如何存储一些文本?
- knex.js - 设置 knex 以使用现有的 sqlite3 数据库
- c++ - 将成员函数的向量传递给基类函数
- go - Golang 通过一个客户端的两个 HTTP 请求
- python - 在同步功能中更改机器人活动
- python-3.x - 试图(填充)从 matplotlib contourf 绘制多边形,但它们似乎没有关闭
- google-bigquery - 将过帐作废收据的 transaction_start 与原始收据的 transaction_start 匹配
- javascript - jQuery .on() 没有触发所需的功能
- laravel - Laravel 8 with Lighthouse 5.3.0:在标头中传递身份验证令牌有问题