Prepare for 3D image

This commit is contained in:
Rikard Bartholf
2017-05-18 15:42:31 +02:00
parent 2acdcafe09
commit 0d6654c67d
3 changed files with 92 additions and 3 deletions
@@ -0,0 +1,51 @@
'use strict';
function ThreeDHandler(canvas) {
var _overlay = new fabric.Group();
var _image;
var self = this;
function init() {
_overlay.addWithUpdate(new fabric.Rect({
width: canvas.width,
height: canvas.height - 60,
top: 60,
left: 0,
fill: canvas.backgroundColor,
}));
canvas.add(_overlay);
}
init();
this.disable = function () {
canvas.remove(_overlay);
canvas.renderAll();
return this;
};
this.enable = function () {
if (!_overlay.canvas) {
canvas.add(_overlay);
}
canvas.renderAll();
return this;
};
this.setImage = function (img) {
this.enable();
img.set({
originX: 'center',
originY: 'center',
});
_overlay
.remove(_image)
.add(_image = img);
return this;
};
}
module.exports = ThreeDHandler;
+6
View File
@@ -5,6 +5,7 @@ var ApertureHandler = require('./ApertureHandler');
var ButtonMenu = require('./ButtonMenu'); var ButtonMenu = require('./ButtonMenu');
var DragbarHandler = require('./DragbarHandler'); var DragbarHandler = require('./DragbarHandler');
var Viewport = require('./Viewport'); var Viewport = require('./Viewport');
var ThreeDHandler = require('./3dHandler');
var Canvas = fabric.util.createClass(fabric.Canvas, { var Canvas = fabric.util.createClass(fabric.Canvas, {
initialize: function (id) { initialize: function (id) {
@@ -30,6 +31,11 @@ var Canvas = fabric.util.createClass(fabric.Canvas, {
}); });
}, },
get3dHandler: function () {
return this.__3dHandler ||
(this.__3dHandler = new ThreeDHandler(this));
},
getApertures: function () { getApertures: function () {
return this.__aperturehandler || return this.__aperturehandler ||
(this.__aperturehandler = new ApertureHandler(this)); (this.__aperturehandler = new ApertureHandler(this));
+35 -3
View File
@@ -6,6 +6,7 @@ var config = require('../config');
function ImageEditor(canvasId, args) { function ImageEditor(canvasId, args) {
var _canvas; var _canvas;
var self = this;
var _settings = $.extend({ var _settings = $.extend({
'type': 'wallpaper' 'type': 'wallpaper'
@@ -25,8 +26,12 @@ function ImageEditor(canvasId, args) {
*/ */
if (_canvas.__type === 'canvas') { if (_canvas.__type === 'canvas') {
_canvas.getButtonMenu() _canvas.getButtonMenu()
.addItem('3D', function () {}) .addItem('3D', function () {
.addItem('Flat', function () {}, true) self.toggle3D(true);
})
.addItem('Flat', function () {
self.toggle3D(false);
})
.render(); .render();
} else { } else {
_canvas.getButtonMenu() _canvas.getButtonMenu()
@@ -63,6 +68,22 @@ function ImageEditor(canvasId, args) {
return typeof value === 'undefined' ? defaultValue : value; return typeof value === 'undefined' ? defaultValue : value;
}; };
/**
* @return {String}
*/
this.get3dUrl = function () {
var cropData = _canvas.getImage().transformation.getData();
return this._url.replace(/\?h=\d+$/, '?') +
[
'h=313',
'canvas[edge]=' + cropData.edge,
'crop[w]=' + cropData.width,
'crop[h]=' + cropData.height,
'crop[x]=' + cropData.x,
'crop[y]=' + cropData.y,
].join('&');
};
/** /**
* @param {Number|String} url * @param {Number|String} url
* @param {Function} callback * @param {Function} callback
@@ -70,8 +91,9 @@ function ImageEditor(canvasId, args) {
*/ */
this.loadImage = function (url, callback) { this.loadImage = function (url, callback) {
callback = typeof callback === 'function' ? callback : function () {}; callback = typeof callback === 'function' ? callback : function () {};
fabric.Image.fromURL(url, function (img) { fabric.Image.fromURL(this._url = url, function (img) {
_canvas.setImage(img); _canvas.setImage(img);
img.sendToBack();
callback(img); callback(img);
}); });
return this; return this;
@@ -87,6 +109,16 @@ function ImageEditor(canvasId, args) {
return this; return this;
}; };
this.toggle3D = function (showAs3d) {
if (!showAs3d) {
return this.loadImage(this._url);
}
fabric.Image.fromURL(this.get3dUrl(), function (img) {
_canvas.get3dHandler().setImage(img);
});
};
util.setProperties(this, { util.setProperties(this, {
canvas: { canvas: {
get: function () { get: function () {