在 fabric js 中绘制外部边界框

Draw outside bounding box in fabric js

检查此 fiddle 设置圆形对象的宽度和高度:

circle.set({ radius: Math.abs(origX - pointer.x), width : 50,height :50 });

因此边界框将为 50*50

它的绘图适用于 fabricjs 1.5.0,但不适用于较新的版本。 我想在边界框外绘制,我该如何实现?

只需更改此...

circle.set({ radius: Math.abs(origX - pointer.x), width : 50,height :50 });

为此...

var newAbsValue = Math.abs(origX - pointer.x);
circle.set({ radius: newAbsValue, width : newAbsValue * 2, height : newAbsValue * 2 });

这是您的 JSFiddle 更新,http://jsfiddle.net/rekrah/8rb8Lahb/

我也遇到了同样的问题。在我的例子中,我试图在矩形的边界框外画线。我已经从其他示例中验证了在新版本的 fabric js 中不可能这样做。这是有道理的,因为它可能会导致一些其他问题。因此,您必须弄清楚其他事情。就我而言,我正在使用路径来满足我的要求。

var canvas = new fabric.Canvas('c', { selection: false });

var circle, isDown, origX, origY;

canvas.on('mouse:down', function(o){
  isDown = true;
  var pointer = canvas.getPointer(o.e);
  origX = pointer.x;
  origY = pointer.y;
  circle = new fabric.Circle({
    left: pointer.x,
    top: pointer.y,
    radius: 1,
    strokeWidth: 5,
    stroke: 'red',
    objectCaching : false,
    originX: 'center', originY: 'center'
  });
  canvas.add(circle);
});

canvas.on('mouse:move', function(o){
  if (!isDown) return;
  var pointer = canvas.getPointer(o.e);
  circle.set({ radius: Math.abs(origX - pointer.x), width : 50,height :50 });
  canvas.renderAll();
});

canvas.on('mouse:up', function(o){
  isDown = false;
});
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="500" height="500" style="border:1px solid #ccc"></canvas>

使用 objectCaching:false 以获得所需的效果。