'use strict'; /** * Frontend js file to generate an cube of svg's */ // http://cssdeck.com/labs/pure-css-animated-isometric-boxes try { var Snap = require('snapsvg'); } catch (e) {}; var SvgCube = function (options) { // Inputs and options var defaultOptions = { rotateX: 30, // isometric angle rotateY: 45, rotateZ: 0, perspective: 0, // doesn't do anything usefull scaleX: 1.00, scaleY: 1.00, // flatten scaleZ: 1.00, // push face size: 256, verbose: false, // outline drawOutline: false, drawShading: false, borderRadius: 0, stroke: { "stroke": 'black', // stroke color for outline "stroke-width": 0, // outline width }, // cube topUrl: '', // url for image in top of cuve topRot: 0, // rotation of top image in degrees topShad: 0, // shading for top leftUrl: '', leftRot: 0, leftShad: 0.0, rightUrl: '', rightRot: 0, rightShad: 0.0, backUrl: '', backRot: 0, backShad: 0.0, bottomUrl: '', bottomRot: 0, bottomShad: 0.0, frontUrl: '', frontRot: 0, frontShad: 0.0, } // add defaults, 2 levels deep options = options || {}; for (var opt in defaultOptions) { if (defaultOptions.hasOwnProperty(opt) && !options.hasOwnProperty(opt)) { options[opt] = defaultOptions[opt]; } for (var opt2 in defaultOptions[opt]) { if (defaultOptions[opt].hasOwnProperty(opt2) && !options[opt].hasOwnProperty(opt2)) { options[opt][opt2] = defaultOptions[opt][opt2]; } } } this.options = options // legacy compat if (options.flatten!==undefined){ options.scaleY=1-options.flatten; } if (options.angle!==undefined){ options.rotateX=options.angle; } if (!options.drawOutline) { options.stroke['stroke-width'] = 0; } this.init(); } SvgCube.prototype.init = function () { this.rotateX = this.options.rotateX this.w = this.options.size; // input image width this.h = this.options.size; this.f = 1-this.options.scaleY this.rot = this.rotateX * Math.PI / 180 this.padding = this.options.padding||0; // pading fraction this.cw = this.w; // we will keep same width but change height this.ch = this.h*5//(this.h + Math.sqrt(2)*this.h * Math.tan(this.rot)) - this.h / 2 * (this.f); //canvas height full // create SVG element var o = this.options; //var style = document.createElement('style'); //this.paper.defs.appendChild(style) var styleStr = ` ` if ($('body>.cube').length === 0) { var cube = $('
') var imageFront = $(``) cube.append(imageFront); var imageL = $(``) cube.append(imageL); var imageRight = $(``) cube.append(imageRight); var imageTop = $(``) cube.append(imageTop); var imageBack = $(``) cube.append(imageBack); var imageBottom = $(``) cube.append(imageBottom); $('body').append(cube); /* TODO these will fill in some color inside in order to allow curved edges without seeing through cube, sues o.stroke.stroke for color */ // var xMid = $(``) // cube.append(xMid); // // var yMid = $(`