@storiny/obelisk
Version:
Build isometrics elements with canvas
9 lines (8 loc) • 31.8 kB
JavaScript
/*!
* Obelisk (TS) v1.1.3
* Copyright (c) Max Huang, Storiny
* Fork (https://github.com/storiny/obelisk) of https://github.com/nosir/obelisk.js
* Released under the MIT License.
*/
!function(i,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((i="undefined"!=typeof globalThis?globalThis:i||self).obelisk={})}(this,(function(i){"use strict";var t=function(){function i(i){var t=void 0===i?{}:i,n=t.inner,s=void 0===n?null:n,o=t.left,e=void 0===o?null:o,a=t.right,r=void 0===a?null:a,h=t.border,l=void 0===h?null:h,x=t.borderHighlight,m=void 0===x?null:x,c=t.horizontal,d=void 0===c?null:c,u=t.leftSlope,f=void 0===u?null:u,p=t.rightSlope,v=void 0===p?null:p;this.inner=s,this.left=e,this.right=r,this.border=l,this.borderHighlight=m,this.horizontal=d,this.leftSlope=f,this.rightSlope=v}return i.toString=function(){return"[AbstractColor]"},i}(),n=function(i,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,t){i.__proto__=t}||function(i,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(i[n]=t[n])},n(i,t)};function s(i,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function s(){this.constructor=i}n(i,t),i.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)}var o=function(){function i(){}return i.get32=function(i){return i<4278190080?i+4278190080:i},i.applyBrightness=function(i,t,n){var s,o,e,a,r=i>>>24&255;a=(313524*(s=i>>>16&255)>>20)+(615514*(o=i>>>8&255)>>20)+(119538*(e=255&i)>>20);var h=-(155189*s>>20)-(303038*o>>20)+(458227*e>>20),l=(644874*s>>20)-(540016*o>>20)-(104857*e>>20);return n?a=60+Math.pow(a,1.2):a+=t,s=a+(1195376*l>>20),o=a-(408944*h>>20)-(608174*l>>20),e=a+(2128609*h>>20),r<<24|(s=Math.max(0,Math.min(s,255)))<<16|(o=Math.max(0,Math.min(o,255)))<<8|(e=Math.max(0,Math.min(e,255)))},i}();o.toString=function(){return"[ColorGeom]"};var e=function(i){function t(t,n,s,e,a){var r=i.call(this)||this;return r.brightnessGain=-20,r.border=o.get32(void 0===t?8882055:t),r.borderHighlight=o.get32(void 0===n?16777215:n),r.left=o.get32(void 0===s?13225936:s),r.right=o.get32(void 0===e?14935011:e),r.horizontal=o.get32(void 0===a?15658992:a),r}return s(t,i),t.prototype.getByHorizontalColor=function(i){return new t(o.applyBrightness(i,4*this.brightnessGain),o.applyBrightness(i,0,!0),o.applyBrightness(i,2*this.brightnessGain),o.applyBrightness(i,this.brightnessGain),i)},t.toString=function(){return"[CubeColor]"},t}(t),a=function(i){function t(t,n){var s=i.call(this,{border:t||null,inner:n||null})||this;return s.border=o.get32(void 0===t?8882055:t),s}return s(t,i),t.toString=function(){return"[LineColor]"},t}(t),r=function(i){function t(t,n,s,e){var a=i.call(this)||this;return a.brightnessGain=-20,a.border=o.get32(void 0===t?9737880:t),a.borderHighlight=o.get32(void 0===n?16777215:n),a.left=o.get32(void 0===s?15132905:s),a.right=o.get32(void 0===e?15658992:e),a}return s(t,i),t.prototype.getByRightColor=function(i){return new t(o.applyBrightness(i,4*this.brightnessGain),o.applyBrightness(i,0,!0),o.applyBrightness(i,this.brightnessGain),i)},t.toString=function(){return"[PyramidColor]"},t}(t),h=function(i){function t(t,n){var s=i.call(this)||this;return s.brightnessGain=-20,s.border=o.get32(void 0===t?8882055:t),s.inner=o.get32(void 0===n?15658734:n),s}return s(t,i),t.prototype.getByInnerColor=function(i){return new t(o.applyBrightness(i,4*this.brightnessGain),i)},t.toString=function(){return"[SideColor]"},t}(t),l=function(i){function t(t,n,s,e,a,r){var h=i.call(this)||this;return h.brightnessGain=-20,h.border=o.get32(void 0===t?9737880:t),h.borderHighlight=o.get32(void 0===n?16777215:n),h.left=o.get32(void 0===s?13225936:s),h.right=o.get32(void 0===e?15132905:e),h.leftSlope=o.get32(void 0===a?14408667:a),h.rightSlope=o.get32(void 0===r?14408667:r),h}return s(t,i),t.prototype.getByHorizontalColor=function(i){return new t(o.applyBrightness(i,4*this.brightnessGain),o.applyBrightness(i,0,!0),o.applyBrightness(i,2*this.brightnessGain),o.applyBrightness(i,this.brightnessGain),o.applyBrightness(i,1.5*this.brightnessGain),o.applyBrightness(i,.5*this.brightnessGain))},t.toString=function(){return"[SlopeColor]"},t}(t),x=function(){function i(i){var t=void 0===i?{}:i,n=t.xAxis,s=void 0===n?null:n,o=t.yAxis,e=void 0===o?null:o,a=t.zAxis,r=void 0===a?null:a,h=t.tall,l=void 0!==h&&h;this.xAxis=s,this.yAxis=e,this.zAxis=r,this.tall=l}return i.toString=function(){return"[AbstractDimension]"},i}(),m=function(i){function t(t,n){var s=i.call(this)||this;if(s.xAxis=t||30,s.yAxis=n||30,s.xAxis%2==1||s.yAxis%2==1)throw new Error("xAxis / yAxis must be an even number");if(s.xAxis<=4||s.yAxis<=4)throw new Error("Dimensions are too small");return s}return s(t,i),t.toString=function(){return"[BrickDimension]"},t}(x),c=function(i){function t(t,n,s){var o=i.call(this)||this;if(o.xAxis=t||30,o.yAxis=n||30,o.zAxis=s||30,o.xAxis%2==1||o.yAxis%2==1)throw new Error("xAxis / yAxis must be an even number");if(o.xAxis<=4||o.yAxis<=4||o.zAxis<=2)throw new Error("Dimensions are too small");return o}return s(t,i),t.toString=function(){return"[CubeDimension]"},t}(x),d=function(i){function t(t){var n=i.call(this)||this;if(n.xAxis=t||30,n.xAxis%2==1)throw new Error("xAxis must be an even number");if(n.xAxis<2)throw new Error("Dimension is too small");return n}return s(t,i),t.toString=function(){return"[LineXDimension]"},t}(x),u=function(i){function t(t){var n=i.call(this)||this;if(n.yAxis=t||30,n.yAxis%2==1)throw new Error("yAxis must be an even number");if(n.yAxis<2)throw new Error("Dimension is too small");return n}return s(t,i),t.toString=function(){return"[LineYDimension]"},t}(x),f=function(i){function t(t){var n=i.call(this)||this;if(n.zAxis=t||30,n.zAxis<=0)throw new Error("Dimension is too small");return n}return s(t,i),t.toString=function(){return"[LineZDimension]"},t}(x),p=function(i){function t(t,n){var s=i.call(this)||this;if(s.xAxis=t||30,s.yAxis=t||30,s.tall=n||!1,s.xAxis%2==1)throw new Error("Axis must be an even number");if(s.xAxis<=4)throw new Error("Dimension is too small");return s}return s(t,i),t.toString=function(){return"[PyramidDimension]"},t}(x),v=function(i){function t(t,n){var s=i.call(this)||this;if(s.xAxis=t||30,s.zAxis=n||30,s.xAxis%2==1)throw new Error("xAxis must be an even number");if(s.xAxis<=4||s.zAxis<=2)throw new Error("Dimensions are too small");return s}return s(t,i),t.toString=function(){return"[SideXDimension]"},t}(x),b=function(i){function t(t,n){var s=i.call(this)||this;if(s.yAxis=t||30,s.zAxis=n||30,s.yAxis%2==1)throw new Error("yAxis must be an even number");if(s.yAxis<=4||s.zAxis<=2)throw new Error("Dimensions are too small");return s}return s(t,i),t.toString=function(){return"[SideYDimension]"},t}(x),A=function(i){function t(t,n){var s=i.call(this)||this;if(s.xAxis=t||30,s.yAxis=n||30,s.xAxis%2==1||s.yAxis%2==1)throw new Error("xAxis and yAxis must be even numbers");if(s.xAxis<=4||s.yAxis<=4)throw new Error("Dimensions are too small");return s}return s(t,i),t.toString=function(){return"[SlopeDimension]"},t}(x),g=function(){function i(i){var t=void 0===i?{}:i,n=t.canvas,s=void 0===n?null:n,o=t.w,e=void 0===o?null:o,a=t.h,r=void 0===a?null:a,h=t.dimension,l=void 0===h?null:h,x=t.color,m=void 0===x?null:x,c=t.border,d=void 0===c?null:c,u=t.bitmapData,f=void 0===u?null:u,p=t.useDefaultCanvas,v=void 0===p?null:p,b=t.matrix,A=void 0===b?null:b;this.canvas=s,this.w=e,this.h=r,this.dimension=l,this.color=m,this.border=d,this.bitmapData=f,this.useDefaultCanvas=v,this.matrix=A}return i.toString=function(){return"[AbstractPrimitive]"},i}(),D=function(){function i(i,t,n,s,o,e){this.a=void 0===i?1:i,this.b=t||0,this.c=n||0,this.d=void 0===s?1:s,this.tx=o||0,this.ty=e||0}return i.toString=function(){return"[Matrix]"},i}(),y=function(){function i(i,t){this.x=void 0===i?0:i,this.y=void 0===t?0:t}return i.prototype.toString=function(){return"[Point x: ".concat(this.x,", y: ").concat(this.y,"]")},i}(),w=function(){function i(i,t,n){this.x=void 0===i?0:i,this.y=void 0===t?0:t,this.z=void 0===n?0:n}return i.prototype.toGlobalCoordinates=function(i){var t=new y(this.x-this.y,Math.floor(this.x/2+this.y/2)-this.z);return void 0!==i&&(t.x+=i.x,t.y+=i.y),t},i.prototype.toString=function(){return"[Point3D x : ".concat(this.x,", y : ").concat(this.y,", z: ").concat(this.z,"]")},i}(),P=function(){function i(){}return i.getDefaultCanvas=function(){return this.defaultCanvas=this.defaultCanvas||document.createElement("canvas"),this.defaultCanvas},i.getNewCanvas=function(){return document.createElement("canvas")},i.toString=function(){return"[CanvasManager]"},i}(),S=function(){function i(i,t,n){if(void 0===i||void 0===t)throw new Error("BitmapData width or height is missing");this.canvas=n?P.getDefaultCanvas():P.getNewCanvas(),this.imageData=null,this.context=null,this.canvas&&(this.canvas.setAttribute("width",i.toString()),this.canvas.setAttribute("height",t.toString()),this.context=this.canvas.getContext("2d")||null,this.context&&(this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.mozImageSmoothingEnabled=!1,this.context.msImageSmoothingEnabled=!1,this.context.imageSmoothingEnabled=!1,this.imageData=this.context.createImageData(i,t)))}return i.prototype.setPixel=function(i,t,n){if(this.imageData){var s=4*(t*this.imageData.width+i);this.setPixelByIndex(s,n)}},i.prototype.setPixelByIndex=function(i,t){if(this.imageData){var n=this.imageData.data;n[i]=t>>>16&255,n[i+1]=t>>>8&255,n[i+2]=t>>>0&255,n[i+3]=t>>>24&255}},i.prototype.checkPixelAvailable=function(i,t){if(this.imageData){var n=4*(t*this.imageData.width+i);return 0===this.imageData.data[n+3]}return!1},i.prototype.floodFill=function(i,t,n){if(0!=(n>>>24&255)&&this.imageData){var s,o,e,a,r,h=i,l=t,x=[],m=[],c=[],d=this.imageData.width,u=this.imageData.height;if(!(h<0||l<0||h>=d||l>=u)){if(!this.checkPixelAvailable(h,l))throw new Error("Start point for flood fill is already filled");for(s=h;s>=0;s-=1){for(o=l;o>=0;o-=1){if(!this.checkPixelAvailable(s,o)){if(o===l&&this.checkPixelAvailable(s+1,o-1))for(o=this.checkPixelAvailable(s,o-1)?o-1:this.checkPixelAvailable(s+1,o-2)?o-2:-1;o>=0&&this.checkPixelAvailable(s,o);o-=1)x.push(4*(o*d+s)),m.push(o);break}x.push(4*(o*d+s)),m.push(o)}for(o=l;o<u;o+=1){if(!this.checkPixelAvailable(s,o)){if(o===l&&this.checkPixelAvailable(s+1,o+1))for(o=this.checkPixelAvailable(s,o+1)?o+1:this.checkPixelAvailable(s+1,o+2)?o+2:u;o<u&&this.checkPixelAvailable(s,o);o+=1)x.push(4*(o*d+s)),m.push(o);break}x.push(4*(o*d+s)),m.push(o)}for(s===h&&(c=m.concat()),e=!1,a=0;a<c.length;a+=1){for(r=0;r<c.length;r+=1)if(m[r]===c[a]){e=!0,l=c[a];break}if(e)break}if(!e)break;c=m.concat(),m=[]}for(l=t,c=[],m=[],s=h=i;s<d;s+=1){for(o=l;o>=0;o-=1){if(!this.checkPixelAvailable(s,o)){if(o===l&&this.checkPixelAvailable(s-1,o-1))for(o=this.checkPixelAvailable(s,o-1)?o-1:this.checkPixelAvailable(s-1,o-2)?o-2:-1;o>=0&&this.checkPixelAvailable(s,o);o-=1)x.push(4*(o*d+s)),m.push(o);break}x.push(4*(o*d+s)),m.push(o)}for(o=l;o<u;o+=1){if(!this.checkPixelAvailable(s,o)){if(o===l&&this.checkPixelAvailable(s-1,o+1))for(o=this.checkPixelAvailable(s,o+1)?o+1:this.checkPixelAvailable(s-1,o+2)?o+2:u;o<u&&this.checkPixelAvailable(s,o);o+=1)x.push(4*(o*d+s)),m.push(o);break}x.push(4*(o*d+s)),m.push(o)}for(s===h&&(c=m.concat()),e=!1,a=0;a<c.length;a+=1){for(r=0;r<c.length;r+=1)if(m[r]===c[a]){e=!0,l=c[a];break}if(e)break}if(!e)break;c=m.concat(),m=[]}for(a=0;a<x.length;a+=1)this.setPixelByIndex(x[a],n)}}},i.toString=function(){return"[BitmapData]"},i}(),C=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new m:t,e.color=void 0===n?new h:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=(this.dimension.xAxis+this.dimension.yAxis)/2,this.w-=2,this.h-=1,this.matrix=new D,this.matrix.tx=2-this.dimension.yAxis,this.matrix.ty=0},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.dimension.yAxis-2,t=this.dimension.xAxis-1,n=(this.h||0)-1,s=this.border?this.color.border:this.color.inner,o=0;o<this.dimension.xAxis;o+=1)this.bitmapData.setPixel(i+o,0+Math.floor(o/2),s),this.bitmapData.setPixel(t-o,n-Math.floor(o/2),s);for(var e=0;e<this.dimension.yAxis;e+=1)this.bitmapData.setPixel(i+1-e,0+Math.floor(e/2),s),this.bitmapData.setPixel(t-1+e,n-Math.floor(e/2),s);this.bitmapData.floodFill(Math.floor(this.w/2),Math.floor(this.h/2),this.color.inner)},t.toString=function(){return"[Brick]"},t}(g),B=function(){function i(i,t){if(!i)throw new Error("Primitive is not defined");var n=t||new w;this.canvas=i.canvas,this.x=i.matrix.tx+n.x-n.y,this.y=i.matrix.ty+Math.floor(n.x/2+n.y/2)-n.z}return i.toString=function(){return"[PixelObject]"},i}(),z=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new v:t,e.color=void 0===n?new h:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis,this.h=this.dimension.zAxis+this.dimension.xAxis/2,this.matrix=new D,this.matrix.tx=0,this.matrix.ty=-this.dimension.zAxis},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.dimension.zAxis,t=this.dimension.xAxis-1,n=this.h-this.dimension.zAxis-1,s=this.border?this.color.border:this.color.inner,o=0;o<this.dimension.xAxis;o+=1)this.bitmapData.setPixel(0+o,i+Math.floor(o/2),s),this.bitmapData.setPixel(t-o,n-Math.floor(o/2),s);for(var e=0;e<this.dimension.zAxis;e+=1)this.bitmapData.setPixel(0,i-e,s),this.bitmapData.setPixel(t,n+e,s);this.bitmapData.floodFill(Math.floor(this.w/2),Math.floor(this.h/2),this.color.inner)},t.toString=function(){return"[SideX]"},t}(g),M=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new b:t,e.color=void 0===n?new h:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.yAxis,this.h=this.dimension.zAxis+this.dimension.yAxis/2,this.matrix=new D,this.matrix.tx=2-this.dimension.yAxis,this.matrix.ty=-this.dimension.zAxis},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.h-this.dimension.zAxis-1,t=this.dimension.yAxis-1,n=this.dimension.zAxis,s=this.border?this.color.border:this.color.inner,o=0;o<this.dimension.yAxis;o+=1)this.bitmapData.setPixel(0+o,i-Math.floor(o/2),s),this.bitmapData.setPixel(t-o,n+Math.floor(o/2),s);for(var e=0;e<this.dimension.zAxis;e+=1)this.bitmapData.setPixel(0,i+e,s),this.bitmapData.setPixel(t,n-e,s);this.bitmapData.floodFill(Math.floor(this.w/2),Math.floor(this.h/2),this.color.inner)},t.toString=function(){return"[SideY]"},t}(g),E=function(i){function t(t,n,s,o){var a=i.call(this)||this;return a.useDefaultCanvas=o||!1,a.border=s||void 0===s,a.dimension=void 0===t?new c:t,a.color=void 0===n?new e:n,a.initRectangle(),a.initBitmapData(),a.build(),a.renderBitmapDataForCanvas(),a}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=this.dimension.zAxis+(this.dimension.xAxis+this.dimension.yAxis)/2,this.w-=2,this.h-=1,this.matrix=new D,this.matrix.tx=2-this.dimension.yAxis,this.matrix.ty=-this.dimension.zAxis},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.canvas=this.bitmapData.canvas},t.prototype.build=function(){var i,t,n=new C(new m(this.dimension.xAxis,this.dimension.yAxis),new h(this.color.border,this.color.horizontal),this.border),s=new z(new v(this.dimension.xAxis,this.dimension.zAxis),new h(this.color.border,this.color.left),this.border),o=new M(new b(this.dimension.yAxis,this.dimension.zAxis),new h(this.color.border,this.color.right),this.border),e=new B(n),a=new B(s),r=new B(o),l=this.bitmapData.context;l.drawImage(e.canvas,e.x+this.dimension.yAxis-2,e.y),l.drawImage(a.canvas,a.x,a.y+this.dimension.zAxis+this.dimension.yAxis/2-1),l.drawImage(r.canvas,r.x+this.w-2,a.y+this.dimension.zAxis+this.dimension.xAxis/2-1);var x=new S(this.w,this.h);if(this.border){i=this.dimension.xAxis-2,t=(this.dimension.xAxis+this.dimension.yAxis)/2-2;for(var c=0;c<this.dimension.xAxis-2;c+=1)x.setPixel(i+1-c,t-Math.floor(c/2),this.color.borderHighlight);for(var d=0;d<this.dimension.yAxis-2;d+=1)x.setPixel(i+d,t-Math.floor(d/2),this.color.borderHighlight);for(var u=0;u<this.dimension.zAxis;u+=1)x.setPixel(i,t+u,this.color.borderHighlight)}else for(c=0;c<this.dimension.zAxis;c+=1)x.setPixel(this.dimension.xAxis-2,(this.dimension.xAxis+this.dimension.yAxis)/2-1+c,this.color.left);x.context.putImageData(x.imageData,0,0),l.drawImage(x.canvas,0,0)},t.toString=function(){return"[Cube]"},t}(g),R=function(i){function t(t,n,s){var o=i.call(this)||this;return o.useDefaultCanvas=s||!1,o.dimension=void 0===t?new d:t,o.color=void 0===n?new a:n,o.initRectangle(),o.initBitmapData(),o.build(),o.renderBitmapDataForCanvas(),o}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis,this.h=this.dimension.xAxis/2,this.matrix=new D,this.matrix.tx=0,this.matrix.ty=0},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.color.border,t=0;t<this.dimension.xAxis;t+=1)this.bitmapData.setPixel(0+t,0+Math.floor(t/2),i)},t.toString=function(){return"[LineX]"},t}(g),F=function(i){function t(t,n,s){var o=i.call(this)||this;return o.useDefaultCanvas=s||!1,o.dimension=void 0===t?new u:t,o.color=void 0===n?new a:n,o.initRectangle(),o.initBitmapData(),o.build(),o.renderBitmapDataForCanvas(),o}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.yAxis,this.h=this.dimension.yAxis/2,this.matrix=new D,this.matrix.tx=2-this.dimension.yAxis,this.matrix.ty=0},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.dimension.yAxis-1,t=this.color.border,n=0;n<this.dimension.yAxis;n+=1)this.bitmapData.setPixel(i-n,0+Math.floor(n/2),t)},t.toString=function(){return"[LineY]"},t}(g),k=function(i){function t(t,n,s){var o=i.call(this)||this;return o.useDefaultCanvas=s||!1,o.dimension=void 0===t?new f:t,o.color=void 0===n?new a:n,o.initRectangle(),o.initBitmapData(),o.build(),o.renderBitmapDataForCanvas(),o}return s(t,i),t.prototype.initRectangle=function(){this.w=1,this.h=this.dimension.zAxis,this.matrix=new D,this.matrix.tx=0,this.matrix.ty=1-this.dimension.zAxis},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.color.border,t=0;t<this.dimension.zAxis;t+=1)this.bitmapData.setPixel(0,0+t,i)},t.toString=function(){return"[LineZ]"},t}(g),I=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new p:t,e.color=void 0===n?new r:n,e.hSize=e.dimension.tall?2*e.dimension.xAxis:e.dimension.xAxis,e.hOffset=e.dimension.tall?-3:-2,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=this.hSize+this.dimension.xAxis/2,this.w-=2,this.h+=this.hOffset,this.matrix=new D,this.matrix.tx=2-this.dimension.xAxis,this.matrix.ty=-this.hSize/2+2-(this.dimension.tall?this.dimension.xAxis/2:1)},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.border?this.color.border:this.color.left,t=this.border?this.color.border:this.color.right,n=this.border?this.color.borderHighlight:i,s=0;s<this.hSize+this.dimension.xAxis/2-4;s+=1)this.bitmapData.setPixel(this.dimension.xAxis-2,s+3+this.hOffset,n);for(var o=0;o<this.dimension.xAxis;o+=1)this.bitmapData.setPixel(o,this.hSize+Math.floor(o/2)+this.hOffset,i);for(var e=0;e<this.dimension.xAxis;e+=1)this.bitmapData.setPixel(e+this.dimension.xAxis-2,this.hSize+this.dimension.xAxis/2-Math.floor(e/2)-1+this.hOffset,t);if(this.dimension.tall){for(a=0;a<this.hSize-2;a+=1)this.bitmapData.setPixel(Math.floor(a/2),this.hSize-a+this.hOffset,i);for(r=2;r<this.hSize;r+=1)this.bitmapData.setPixel(Math.floor(r/2)+this.dimension.xAxis-2,r+1+this.hOffset,t)}else{for(var a=0;a<this.hSize;a+=1)this.bitmapData.setPixel(a,this.hSize-a+this.hOffset,i);for(var r=0;r<this.hSize;r+=1)this.bitmapData.setPixel(r+this.hSize-2,r+1+this.hOffset,t)}this.border||this.bitmapData.setPixel(this.dimension.xAxis-2,this.hSize+this.dimension.xAxis/2-1+this.hOffset,i),this.bitmapData.floodFill(this.dimension.xAxis-1,this.hSize+Math.floor((this.dimension.xAxis-1)/2)+this.hOffset-1,this.color.right),this.bitmapData.floodFill(this.dimension.xAxis-3,this.hSize+Math.floor((this.dimension.xAxis-1)/2)+this.hOffset-2,this.color.left)},t.toString=function(){return"[Pyramid]"},t}(g),O=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new A:t,e.color=void 0===n?new l:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=2*this.dimension.xAxis+this.dimension.yAxis/2,this.w-=2,this.h-=3,this.matrix=new D,this.matrix.tx=-(this.dimension.yAxis-2),this.matrix.ty=-(3*this.dimension.xAxis/2-2)},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.border?this.color.border:this.color.left,t=this.border?this.color.border:this.color.rightSlope,n=0;n<this.dimension.yAxis;n+=1)this.bitmapData.setPixel(n,this.dimension.yAxis/2-Math.floor(n/2)-1,t),this.bitmapData.setPixel(n+this.dimension.xAxis-2,this.h-Math.floor(n/2)-1,t);for(var s=0;s<this.dimension.xAxis;s+=1)this.bitmapData.setPixel(s,this.h-this.dimension.xAxis/2+Math.floor(s/2),i);for(var o=this.dimension.yAxis/2-1;o<this.h-this.dimension.xAxis/2;o+=1)this.bitmapData.setPixel(0,o,i);for(var e=0;e<2*this.dimension.xAxis-2;e+=1)this.bitmapData.setPixel(this.dimension.yAxis-1+Math.floor(e/2),e,t),this.bitmapData.setPixel(1+Math.floor(e/2),this.dimension.yAxis/2+e-1,t);if(this.bitmapData.floodFill(this.dimension.yAxis-2,1,this.color.rightSlope),this.bitmapData.floodFill(this.dimension.xAxis-3,this.h-3,this.color.left),this.bitmapData.setPixel(this.dimension.xAxis-2,this.h-2,this.color.left),this.border)for(var a=1;a<2*this.dimension.xAxis-3;a+=1)this.bitmapData.setPixel(1+Math.floor(a/2),this.dimension.yAxis/2+a-1,this.color.borderHighlight)},t.toString=function(){return"[SlopeEast]"},t}(g),L=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new A:t,e.color=void 0===n?new l:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=3*this.dimension.yAxis/2+this.dimension.xAxis/2,this.w-=2,this.h-=3,this.matrix=new D,this.matrix.tx=-(this.dimension.yAxis-2),this.matrix.ty=-(this.dimension.yAxis-2)},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.canvas=this.bitmapData.canvas},t.prototype.build=function(){var i=this.border?this.color.border:this.color.left,t=this.border?this.color.border:this.color.right,n=this.border?this.color.borderHighlight:this.color.left,s=new z(new v(this.dimension.xAxis,this.h-this.dimension.xAxis/2),new h(i,this.color.left)),o=new B(s),e=this.bitmapData.context;e.drawImage(o.canvas,o.x,o.y+this.h-this.dimension.xAxis/2);for(var a=new S(this.w,this.h),r=this.h-3*this.dimension.yAxis/2+2;r<this.h;r+=1)a.setPixel(this.dimension.xAxis-1,r,t);for(var l=1;l<this.dimension.yAxis;l+=1)a.setPixel(this.dimension.xAxis+l-2,this.h-Math.floor(l/2)-1,t),a.setPixel(this.dimension.xAxis+l-2,this.dimension.xAxis/2-2+l,t);a.floodFill(this.dimension.xAxis+1,this.h-3,this.color.right);for(var x=this.dimension.xAxis/2;x<this.h-1;x+=1)a.setPixel(this.dimension.xAxis-1,x,this.color.right),a.setPixel(this.dimension.xAxis-2,x,n);a.context.putImageData(a.imageData,0,0),e.drawImage(a.canvas,0,0)},t.toString=function(){return"[SlopeNorth]"},t}(g),G=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new A:t,e.color=void 0===n?new l:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=this.dimension.xAxis/2+2*this.dimension.yAxis,this.w-=2,this.h-=3,this.matrix=new D,this.matrix.tx=-(this.dimension.yAxis-2),this.matrix.ty=-(3*this.dimension.yAxis/2-2)},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.bitmapData.context.putImageData(this.bitmapData.imageData,0,0),this.canvas=this.bitmapData.canvas},t.prototype.build=function(){for(var i=this.border?this.color.border:this.color.leftSlope,t=this.border?this.color.border:this.color.right,n=0;n<this.dimension.xAxis;n+=1)this.bitmapData.setPixel(n,2*this.dimension.yAxis+Math.floor(n/2)-3,i),this.bitmapData.setPixel(n+this.dimension.yAxis-2,Math.floor(n/2),i);for(var s=0;s<this.dimension.yAxis;s+=1)this.bitmapData.setPixel(this.dimension.xAxis-2+s,this.h-Math.floor(s/2)-1,t);for(var o=this.dimension.xAxis/2-1;o<this.h-this.dimension.yAxis/2;o+=1)this.bitmapData.setPixel(this.w-1,o,t);for(var e=0;e<2*this.dimension.yAxis-2;e+=1)this.bitmapData.setPixel(Math.floor(e/2),2*this.dimension.yAxis-e-3,i),this.bitmapData.setPixel(this.dimension.xAxis-2+Math.floor(e/2),this.h-e-1,i);if(this.bitmapData.floodFill(this.dimension.yAxis-1,1,this.color.leftSlope),this.bitmapData.floodFill(this.dimension.xAxis,this.h-3,this.color.right),this.bitmapData.setPixel(this.dimension.xAxis-1,this.h-2,this.color.right),this.border)for(var a=1;a<2*this.dimension.yAxis-3;a+=1)this.bitmapData.setPixel(this.dimension.xAxis-2+Math.floor(a/2),this.h-a-1,this.color.borderHighlight)},t.toString=function(){return"[SlopeSouth]"},t}(g),H=function(i){function t(t,n,s,o){var e=i.call(this)||this;return e.useDefaultCanvas=o||!1,e.border=s||void 0===s,e.dimension=void 0===t?new A:t,e.color=void 0===n?new l:n,e.initRectangle(),e.initBitmapData(),e.build(),e.renderBitmapDataForCanvas(),e}return s(t,i),t.prototype.initRectangle=function(){this.w=this.dimension.xAxis+this.dimension.yAxis,this.h=3*this.dimension.xAxis/2+this.dimension.yAxis/2,this.w-=2,this.h-=3,this.matrix=new D,this.matrix.tx=-(this.dimension.yAxis-2),this.matrix.ty=-(this.dimension.xAxis-2)},t.prototype.initBitmapData=function(){this.bitmapData=new S(this.w,this.h,this.useDefaultCanvas||void 0)},t.prototype.renderBitmapDataForCanvas=function(){this.canvas=this.bitmapData.canvas},t.prototype.build=function(){var i=this.border?this.color.border:this.color.left,t=this.border?this.color.border:this.color.right,n=this.border?this.color.borderHighlight:this.color.left,s=new M(new b(this.dimension.yAxis,this.h-this.dimension.yAxis/2),new h(t,this.color.right)),o=new B(s),e=this.bitmapData.context;e.drawImage(o.canvas,o.x+this.w-2,o.y+this.h-this.dimension.yAxis/2);for(var a=new S(this.w,this.h),r=this.h-3*this.dimension.xAxis/2+2;r<this.h;r+=1)a.setPixel(this.dimension.xAxis-2,r,i);for(var l=0;l<this.dimension.xAxis-1;l+=1)a.setPixel(l,this.dimension.xAxis+this.dimension.yAxis/2-3+Math.floor(l/2),i),a.setPixel(l,this.dimension.xAxis+this.dimension.yAxis/2-3-l,i);a.floodFill(this.dimension.xAxis-3,this.h-3,this.color.left);for(var x=this.dimension.yAxis/2;x<this.h-1;x+=1)a.setPixel(this.dimension.xAxis-2,x,n);a.context.putImageData(a.imageData,0,0),e.drawImage(a.canvas,0,0)},t.toString=function(){return"[SlopeWest]"},t}(g),_=function(){function i(i,t){if(!i)throw new Error("Canvas is not defined");this.canvas=i,this.context=this.canvas.getContext("2d"),this.context&&(this.context.mozImageSmoothingEnabled=!1,this.context.msImageSmoothingEnabled=!1,this.context.imageSmoothingEnabled=!1),this.point=t||new y(0,0)}return i.prototype.renderObject=function(i,t){var n=new B(i,t);this.context&&this.point&&n.canvas&&this.context.drawImage(n.canvas,this.point.x+(n.x||0),this.point.y+(n.y||0))},i.prototype.clear=function(){this.canvas&&this.context&&this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.toString=function(){return"[PixelView]"},i}(),N=function(){function i(){}return i.getPixel=function(i,t,n){var s=i.data,o=4*(n*i.width+t);return s[o]<<16|s[o+1]<<8|s[o+2]},i.toString=function(){return"[CanvasTool]"},i}(),Y=function(){function i(){this.GRASS_GREEN=13434624,this.YELLOW=16776960,this.WINE_RED=16711833,this.PINK=16743615,this.PURPLE=13369599,this.BLUE=52479,this.GRAY=15658734,this.BLACK=6710886,this.FINE_COLORS=[this.GRASS_GREEN,this.YELLOW,this.WINE_RED,this.PINK,this.PURPLE,this.BLUE,this.GRAY,this.BLACK]}return i.prototype.getRandomComfortableColor=function(){return this.FINE_COLORS[Math.floor(Math.random()*this.FINE_COLORS.length)]},i.toString=function(){return"[ColorPattern]"},i}();i.AbstractColor=t,i.AbstractDimension=x,i.AbstractPrimitive=g,i.BitmapData=S,i.Brick=C,i.BrickDimension=m,i.CanvasManager=P,i.CanvasTool=N,i.ColorGeom=o,i.ColorPattern=Y,i.Cube=E,i.CubeColor=e,i.CubeDimension=c,i.LineColor=a,i.LineX=R,i.LineXDimension=d,i.LineY=F,i.LineYDimension=u,i.LineZ=k,i.LineZDimension=f,i.Matrix=D,i.PixelObject=B,i.PixelView=_,i.Point=y,i.Point3D=w,i.Pyramid=I,i.PyramidColor=r,i.PyramidDimension=p,i.SideColor=h,i.SideX=z,i.SideXDimension=v,i.SideY=M,i.SideYDimension=b,i.SlopeColor=l,i.SlopeDimension=A,i.SlopeEast=O,i.SlopeNorth=L,i.SlopeSouth=G,i.SlopeWest=H}));
//# sourceMappingURL=index.umd.min.js.map