2016-11-27 3 views
4

previewfabricjs, Nach Objekt Drehen ist es möglich,

Objekt Nach dem Drehen links, oben und rechts Position viritual Rectagle zu bekommen, ist es möglich, links, oben und rechts Position des virtuellen Rechtecks ​​zu erhalten?

+0

Btw, wie etwa einfache alte 'Math.sin' /' Math.cos' und Pythagoras? Das Rotieren eines Objekts ändert seine Größe nicht. – klenium

Antwort

4

Was Sie suchen die ist rect begrenzende des Objekts:

getBoundingRect (ignoreVpt) → {Object} Gibt Koordinaten umschließende Rechteck des Objekts (links, oben, Breite , Höhe) ist die Box als ausgerichtet an der Leinwandachse vorgesehen.

Rückkehr: Objekt mit links, oben, Breite, Höhe Eigenschaften Typ Objekt

Referenz: fabricjs sourcecode

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>

Da das after:render Ereignis nach jedem Rahmen kontinuierlich abgefeuert wird gerendert wird, können Sie die aktualisierte Begrenzungsbox Ihres Objekts für jedes Update in Position, Rotation sehen und Dimensionen.

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>

Als Referenz Working with events

+1

Hey! Danke Inferon. Genau das habe ich gesucht. Ich werde das heute integrieren. –

+0

Hallo Inferon. Ich habe die Lösung ausprobiert. Das einzige Problem, dem ich gegenüberstehe, ist, ob es sich beim Ziehen eines Objekts nicht ändert. Die Coords kehren nur zurück, wenn ich die Maustaste loslasse und erneut ziehe. Ich möchte Echtzeit-Coords ziehen. Hier ist mein Code. CANVAS.on (. 'Objekt: rendern', function() { ob = Math.round (Math.floor (activeObject.getBoundingRect(), linke)); console.log ("LEFT COORDS" + ob) ; }) –

+0

Hallo Inferon, Dies ist genau ich tat, aber Problem war fabric.js Bibliothek. Wenn ich Ihre Quelldatei (rawgit.com) verwendet habe, funktioniert das jetzt einwandfrei (kann das Versionsproblem sein). Vielen Dank für die Rettung meiner Stunden. –

Verwandte Themen