Fabric JS线点对点
Fabric JS line from point to point
我现在有几种不同颜色的自由绘图。我想自由画线部分而不是完全自由画。我需要在地图上标记水和煤气管线,例如 6 条线,每条线都从最后一条线开始。
function enableFreeDrawing() {
removeEvents();
canvas.isDrawingMode = true;
canvas.freeDrawingBrush.color = e.target.value;
}
document.getElementById('colorpicker').addEventListener('click', function (e) {
canvas.freeDrawingBrush.color = e.target.value;
canvas.freeDrawingBrush.width = 2;
});
请建议我如何用例如从每个点到另一个点画线。 6次点击,回车或双击完成
在 canvas 元素上,我会在每次点击时创建一个指示性圆点,并在创建新点时连接这些点。
var canvas = new fabric.Canvas("canvas");
var waterPipePoints = [];
var waterPipeLines = [];
canvas.on("mouse:down", function(event) {
var pointer = canvas.getPointer(event.e);
var positionX = pointer.x;
var positionY = pointer.y;
// Add small circle as an indicative point
var circlePoint = new fabric.Circle({
radius: 5,
fill: "blue",
left: positionX,
top: positionY,
selectable: false,
originX: "center",
originY: "center",
hoverCursor: "auto"
});
canvas.add(circlePoint);
// Store the points to draw the lines
waterPipePoints.push(circlePoint);
console.log(waterPipePoints);
if (waterPipePoints.length > 1) {
// Just draw a line using the last two points, so we don't need to clear
// and re-render all the lines
var startPoint = waterPipePoints[waterPipePoints.length - 2];
var endPoint = waterPipePoints[waterPipePoints.length - 1];
var waterLine = new fabric.Line(
[
startPoint.get("left"),
startPoint.get("top"),
endPoint.get("left"),
endPoint.get("top")
],
{
stroke: "blue",
strokeWidth: 4,
hasControls: false,
hasBorders: false,
selectable: false,
lockMovementX: true,
lockMovementY: true,
hoverCursor: "default",
originX: "center",
originY: "center"
}
);
waterPipeLines.push(waterLine);
canvas.add(waterLine);
}
});
canvas.renderAll();
请检查此示例沙箱:https://codesandbox.io/s/Whosebug-60753858-fabric-js-1720-26twl
我现在有几种不同颜色的自由绘图。我想自由画线部分而不是完全自由画。我需要在地图上标记水和煤气管线,例如 6 条线,每条线都从最后一条线开始。
function enableFreeDrawing() {
removeEvents();
canvas.isDrawingMode = true;
canvas.freeDrawingBrush.color = e.target.value;
}
document.getElementById('colorpicker').addEventListener('click', function (e) {
canvas.freeDrawingBrush.color = e.target.value;
canvas.freeDrawingBrush.width = 2;
});
请建议我如何用例如从每个点到另一个点画线。 6次点击,回车或双击完成
在 canvas 元素上,我会在每次点击时创建一个指示性圆点,并在创建新点时连接这些点。
var canvas = new fabric.Canvas("canvas");
var waterPipePoints = [];
var waterPipeLines = [];
canvas.on("mouse:down", function(event) {
var pointer = canvas.getPointer(event.e);
var positionX = pointer.x;
var positionY = pointer.y;
// Add small circle as an indicative point
var circlePoint = new fabric.Circle({
radius: 5,
fill: "blue",
left: positionX,
top: positionY,
selectable: false,
originX: "center",
originY: "center",
hoverCursor: "auto"
});
canvas.add(circlePoint);
// Store the points to draw the lines
waterPipePoints.push(circlePoint);
console.log(waterPipePoints);
if (waterPipePoints.length > 1) {
// Just draw a line using the last two points, so we don't need to clear
// and re-render all the lines
var startPoint = waterPipePoints[waterPipePoints.length - 2];
var endPoint = waterPipePoints[waterPipePoints.length - 1];
var waterLine = new fabric.Line(
[
startPoint.get("left"),
startPoint.get("top"),
endPoint.get("left"),
endPoint.get("top")
],
{
stroke: "blue",
strokeWidth: 4,
hasControls: false,
hasBorders: false,
selectable: false,
lockMovementX: true,
lockMovementY: true,
hoverCursor: "default",
originX: "center",
originY: "center"
}
);
waterPipeLines.push(waterLine);
canvas.add(waterLine);
}
});
canvas.renderAll();
请检查此示例沙箱:https://codesandbox.io/s/Whosebug-60753858-fabric-js-1720-26twl