Prepare for 3D image
This commit is contained in:
@@ -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;
|
||||||
@@ -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));
|
||||||
|
|||||||
@@ -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 () {
|
||||||
|
|||||||
Reference in New Issue
Block a user