Fabric.js Rotate object programmatically around center
by yoowordpress
HTML
<script src="https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="400" height="400"></canvas>
<div>
<button id="rotate-left">Rotate left</button>
<button id="rotate-right">Rotate right</button>
</div>
CSS
canvas {
border: 1px solid #999;
}
JavaScript
/**
* fabric.js template for bug reports
*
* Please update the name of the jsfiddle (see Fiddle Options).
* This templates uses latest dev verison of fabric.js (https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js).
*/
// Do some initializing stuff
fabric.Object.prototype.set({
transparentCorners: false,
cornerColor: 'rgba(102,153,255,0.5)',
cornerSize: 12,
padding: 5
});
// initialize fabric canvas and assign to global windows object for debug
var canvas = window._canvas = new fabric.Canvas('c');
// ADD YOUR CODE HERE
canvas.add(new fabric.Triangle({
width: 100,
height: 100,
left: 150,
top: 150,
fill: '#00AC6B'
}));
function rotateObject(angleOffset) {
console.log('zzz');
var obj = canvas.getActiveObject(),
resetOrigin = false;
if (!obj) return;
var angle = obj.getAngle() + angleOffset;
if ((obj.originX !== 'center' || obj.originY !== 'center') && obj.centeredRotation) {
obj.setOriginToCenter && obj.setOriginToCenter();
resetOrigin = true;
}
angle = angle > 360 ? 90 : angle < 0 ? 270 : angle;
obj.setAngle(angle).setCoords();
if (resetOrigin) {
obj.setCenterToOrigin && obj.setCenterToOrigin();
}
canvas.renderAll();
}
fabric.util.addListener(document.getElementById('rotate-left'), 'click', function () {
rotateObject(-50);
});
fabric.util.addListener(document.getElementById('rotate-right'), 'click', function () {
rotateObject(50);
});
fabric.Object.prototype.setOriginToCenter = function () {
this._originalOriginX = this.originX;
this._originalOriginY = this.originY;
var center = this.getCenterPoint();
this.set({
originX: 'center',
originY: 'center',
left: center.x,
top: center.y
});
};
fabric.Object.prototype.setCenterToOrigin = function () {
var originPoint = this.translateToOriginPoint(
this.getCenterPoint(),
this._originalOriginX,
...