Let Canvas handle 3D image

This commit is contained in:
Rikard Bartholf
2017-05-19 10:58:27 +02:00
parent 89aeb9cd5e
commit 3a0fe9fde5
4 changed files with 35 additions and 30 deletions
@@ -37,6 +37,10 @@ function ThreeDHandler(canvas) {
return this; return this;
}; };
this.isEnabled = function () {
return _overlay.visible;
};
/** /**
* @return {ThreeDHandler} * @return {ThreeDHandler}
*/ */
+27 -1
View File
@@ -46,6 +46,22 @@ var Canvas = fabric.util.createClass(fabric.Canvas, {
(this.__3dHandler = new ThreeDHandler(this)); (this.__3dHandler = new ThreeDHandler(this));
}, },
/**
* @return {String}
*/
get3dUrl: function () {
var cropData = this.getImage().transformation.getData();
return this.getImage().__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('&');
},
getApertures: function () { getApertures: function () {
return this.__aperturehandler || return this.__aperturehandler ||
(this.__aperturehandler = new ApertureHandler(this)); (this.__aperturehandler = new ApertureHandler(this));
@@ -109,7 +125,17 @@ var Canvas = fabric.util.createClass(fabric.Canvas, {
}).setCoords(); }).setCoords();
this.getViewport().reset(); this.getViewport().reset();
return this; return this;
} },
toggle3D: function (showAs3d) {
if (!showAs3d) {
return this.get3dHandler().disable();
}
fabric.Image.fromURL(encodeURI(this.get3dUrl()), function (img) {
this.get3dHandler().setImage(img);
}.bind(this));
},
}); });
module.exports = Canvas; module.exports = Canvas;
+3 -28
View File
@@ -26,10 +26,10 @@ function ImageEditor(canvasId, args) {
if (_canvas.__type === 'canvas') { if (_canvas.__type === 'canvas') {
_canvas.getButtonMenu() _canvas.getButtonMenu()
.addItem('Flat', function () { .addItem('Flat', function () {
self.toggle3D(false); _canvas.toggle3D(false);
}) })
.addItem('3D', function () { .addItem('3D', function () {
self.toggle3D(true); _canvas.toggle3D(true);
}) })
.render(); .render();
} else { } else {
@@ -67,22 +67,6 @@ 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
@@ -92,6 +76,7 @@ function ImageEditor(canvasId, args) {
callback = typeof callback === 'function' ? callback : function () {}; callback = typeof callback === 'function' ? callback : function () {};
fabric.Image.fromURL(this._url = url, function (img) { fabric.Image.fromURL(this._url = url, function (img) {
_canvas.setImage(img); _canvas.setImage(img);
img.__url = url;
img.sendToBack(); img.sendToBack();
callback(img); callback(img);
}); });
@@ -108,16 +93,6 @@ function ImageEditor(canvasId, args) {
return this; return this;
}; };
this.toggle3D = function (showAs3d) {
if (!showAs3d) {
return _canvas.get3dHandler().disable();
}
fabric.Image.fromURL(encodeURI(this.get3dUrl()), function (img) {
_canvas.get3dHandler().setImage(img);
});
};
util.setProperties(this, { util.setProperties(this, {
canvas: { canvas: {
get: function () { get: function () {
+1 -1
View File
@@ -17,7 +17,7 @@
var imageUrl = '//images.photowall.com/products/' + $input.image_id.val() + '.jpg?h=450'; var imageUrl = '//images.photowall.com/products/' + $input.image_id.val() + '.jpg?h=450';
var editor = new ImageEditor('canvas-editor', {'type': 'wallpaper'}) var editor = new ImageEditor('canvas-editor', {'type': 'canvas'})
.loadImage(imageUrl, function() { .loadImage(imageUrl, function() {
$input.w.trigger('input'); $input.w.trigger('input');
Event.handleResize(); Event.handleResize();