【问题标题】:Draw rectangle with aCoords tl, br corners instead of top, left in fabric.js?用aCoords tl,br角而不是顶部绘制矩形,留在fabric.js中?
【发布时间】:2021-03-31 01:07:37
【问题描述】:

所以我想根据从外部系统接收到的坐标在画布上绘制矩形,外部系统使用 (x1,y1)(左上角)和 (x2,y2)(右下角)坐标来绘制矩形,而在 Fabric 中.js 有点不同,例如使用 topleft 属性,我尝试使用 aCoords 并编写以下代码:


  addRect() {
    let square = new fabric.Rect({
      stroke: 'yellow',
      noScaleCache: false,
      strokeWidth: 10,
      strokeUniform: true,
      fill: 'rgba(0,0,0,0.2)',
      flipX: true,
    });
    console.log(square.getCoords());

    square.set("aCoords", { tl: new fabric.Point(100, 2), br: new fabric.Point(1, 2), tr: new fabric.Point(1, 2), bl: new fabric.Point(1, 2) });

  
    this.canvas.add(square);
  }

这似乎不起作用,我错过了什么?

【问题讨论】:

    标签: javascript canvas html5-canvas fabricjs


    【解决方案1】:

    虽然通过阅读fabricjs.com 的 API 参考并不确定,但在稍微挖掘代码之后,我几乎可以肯定 aCoords 只是作为一个吸气剂。所以你不能使用这个属性来修改形状的外观。

    您需要单独更新topleftwidthheight 属性。

    这是一个例子:

    (function() {
      var canvas = this.__canvas = new fabric.Canvas('c');
      fabric.Object.prototype.transparentCorners = false;
      let square = new fabric.Rect({
        stroke: 'yellow',
        noScaleCache: false,
        strokeWidth: 10,
        strokeUniform: true,
        fill: 'rgba(0,0,0,0.2)',
        flipX: true,
      });
    
      canvas.add(square);
    
      let x1 = 5;
      let y1 = 25;
      let x2 = 105;
      let y2 = 55;
    
      square.set("top", y1);
      square.set("left", x1);
      square.set("width", (x2 - x1));
      square.set("height", (y2 - y1));
    
    })();
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.2.0/fabric.min.js "></script>
    <canvas id="c"></canvas>

    【讨论】:

    • 谢谢,我才发现这个方法也可以!
    • 没问题 Ali - 很高兴我能帮上忙! =)
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2014-09-16
    • 2011-07-31
    • 2021-05-01
    • 2013-07-20
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多