javascript - fabricjs, Setelah memutar objek, apakah mungkin untuk mendapatkan posisi kiri, atas, dan kanan dari persegi panjang virtual


Setelah memutar objek, apakah mungkin mendapatkan posisi kiri, atas, dan kanan dari persegi panjang virtual?

Jawaban #1

Apa yang Anda cari adalah rect pembatas dari objek Anda:

getBoundingRect(ignoreVpt) → {Object} Mengembalikan koordinat dari persegi panjang pembatas objek (kiri, atas, lebar, tinggi) kotak dimaksudkan agar sejajar dengan sumbu kanvas.

Mengembalikan: Objek dengan properti left, top, width, height Tipe Objek

referensi: kode sumber fabricjs

var canvas = this.__canvas = new fabric.Canvas('c');
fabric.Object.prototype.transparentCorners = false;
var rect = new fabric.Rect({
  left: 120,
  top: 30,
  width: 100,
  height: 100,
  fill: 'green',
  angle: 20
});

canvas.on('after:render', function() {
  canvas.contextContainer.strokeStyle = '#555';
  canvas.forEachObject(function(obj) {
    var bound = obj.getBoundingRect(); // <== this is the magic
    console.log(bound);
    canvas.contextContainer.strokeRect(
      bound.left,
      bound.top,
      bound.width,
      bound.height
    );

  });

});
canvas.add(rect);
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas height=200 width=300 id="c" style="border:1px solid black"></canvas>

Karena event after:render dipicu terus-menerus setelah setiap frame dirender, Anda dapat melihat kotak pembatas yang diperbarui dari objek Anda untuk setiap pembaruan, dalam posisi, rotasi, dan dimensi.

var canvas = this.__canvas = new fabric.Canvas('c');
fabric.Object.prototype.transparentCorners = false;
var rect = new fabric.Rect({
  left: 120,
  top: 30,
  width: 100,
  height: 100,
  fill: 'green',
  angle: 20
});
canvas.add(rect);
canvas.on('after:render', function() {
  canvas.contextContainer.strokeStyle = '#555';
  var ao = canvas.getActiveObject();
  if (ao) {
    var bound = ao.getBoundingRect();

    canvas.contextContainer.strokeRect(
      bound.left,
      bound.top,
      bound.width,
      bound.height
    );
    console.log(bound);

  }
});
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas height=200 width=300 id="c" style="border:1px solid black"></canvas>

Sebagai referensi Bekerja dengan acara