Comparing version 0.0.1 to 0.0.2
@@ -1,1 +0,1 @@ | ||
(function(g,f){typeof exports==="object"&&typeof module!=="undefined"?f(exports,require("d3-selection"),require("@d3fc/d3fc-chart"),require("@d3fc/d3fc-rebind"),require("d3-scale"),require("d3-color"),require("d3"),require("d3-array")):typeof define==="function"&&define.amd?define(["exports","d3-selection","@d3fc/d3fc-chart","@d3fc/d3fc-rebind","d3-scale","d3-color","d3","d3-array"],f):(g=g||self,f(g.fcWebGL={},g.d3,g.fc,g.fc,g.d3,g.d3,g.d3,g.d3))})(this,function(exports,d3Selection,d3fcChart,d3fcRebind,d3Scale,d3Color,d3,d3Array){"use strict";var cartesian=function(xScale,yScale){var base=d3fcChart.chartCartesian(xScale,yScale);var chart=function chart(selection){var result=base(selection);selection.select("d3fc-canvas.plot-area").on("draw",function(d,i,nodes){var canvas=d3Selection.select(nodes[i]).select("canvas").node();var series=base.canvasPlotArea();var contextType=series.contextType?series.contextType():"2d";series.context(canvas.getContext(contextType)).xScale(xScale).yScale(yScale);series(d)});return result};d3fcRebind.rebindAll(chart,base);return chart};var functor=function(d){return typeof d==="function"?d:function(){return d}};function defined(){var outerArguments=arguments;return function(d,i){for(var c=0,j=outerArguments.length;c<j;c++){if(outerArguments[c](d,i)==null){return false}}return true}}var EPSILON=1e-6;var ARRAY_TYPE=typeof Float32Array!=="undefined"?Float32Array:Array;var RANDOM=Math.random;var degree=Math.PI/180;function create(){var out=new ARRAY_TYPE(9);if(ARRAY_TYPE!=Float32Array){out[1]=0;out[2]=0;out[3]=0;out[5]=0;out[6]=0;out[7]=0}out[0]=1;out[4]=1;out[8]=1;return out}function create$1(){var out=new ARRAY_TYPE(16);if(ARRAY_TYPE!=Float32Array){out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[11]=0;out[12]=0;out[13]=0;out[14]=0}out[0]=1;out[5]=1;out[10]=1;out[15]=1;return out}function translate(out,a,v){var x=v[0],y=v[1],z=v[2];var a00,a01,a02,a03;var a10,a11,a12,a13;var a20,a21,a22,a23;if(a===out){out[12]=a[0]*x+a[4]*y+a[8]*z+a[12];out[13]=a[1]*x+a[5]*y+a[9]*z+a[13];out[14]=a[2]*x+a[6]*y+a[10]*z+a[14];out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]}else{a00=a[0];a01=a[1];a02=a[2];a03=a[3];a10=a[4];a11=a[5];a12=a[6];a13=a[7];a20=a[8];a21=a[9];a22=a[10];a23=a[11];out[0]=a00;out[1]=a01;out[2]=a02;out[3]=a03;out[4]=a10;out[5]=a11;out[6]=a12;out[7]=a13;out[8]=a20;out[9]=a21;out[10]=a22;out[11]=a23;out[12]=a00*x+a10*y+a20*z+a[12];out[13]=a01*x+a11*y+a21*z+a[13];out[14]=a02*x+a12*y+a22*z+a[14];out[15]=a03*x+a13*y+a23*z+a[15]}return out}function perspective(out,fovy,aspect,near,far){var f=1/Math.tan(fovy/2),nf;out[0]=f/aspect;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=f;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[11]=-1;out[12]=0;out[13]=0;out[15]=0;if(far!=null&&far!==Infinity){nf=1/(near-far);out[10]=(far+near)*nf;out[14]=2*far*near*nf}else{out[10]=-1;out[14]=-2*near}return out}function create$2(){var out=new ARRAY_TYPE(3);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0;out[2]=0}return out}function length(a){var x=a[0];var y=a[1];var z=a[2];return Math.sqrt(x*x+y*y+z*z)}function fromValues(x,y,z){var out=new ARRAY_TYPE(3);out[0]=x;out[1]=y;out[2]=z;return out}function normalize(out,a){var x=a[0];var y=a[1];var z=a[2];var len=x*x+y*y+z*z;if(len>0){len=1/Math.sqrt(len)}out[0]=a[0]*len;out[1]=a[1]*len;out[2]=a[2]*len;return out}function dot(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}function cross(out,a,b){var ax=a[0],ay=a[1],az=a[2];var bx=b[0],by=b[1],bz=b[2];out[0]=ay*bz-az*by;out[1]=az*bx-ax*bz;out[2]=ax*by-ay*bx;return out}var len=length;var forEach=function(){var vec=create$2();return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=3}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];vec[2]=a[i+2];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1];a[i+2]=vec[2]}return a}}();function create$3(){var out=new ARRAY_TYPE(4);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0;out[2]=0;out[3]=0}return out}function clone(a){var out=new ARRAY_TYPE(4);out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out}function fromValues$1(x,y,z,w){var out=new ARRAY_TYPE(4);out[0]=x;out[1]=y;out[2]=z;out[3]=w;return out}function copy(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out}function set(out,x,y,z,w){out[0]=x;out[1]=y;out[2]=z;out[3]=w;return out}function add(out,a,b){out[0]=a[0]+b[0];out[1]=a[1]+b[1];out[2]=a[2]+b[2];out[3]=a[3]+b[3];return out}function scale(out,a,b){out[0]=a[0]*b;out[1]=a[1]*b;out[2]=a[2]*b;out[3]=a[3]*b;return out}function length$1(a){var x=a[0];var y=a[1];var z=a[2];var w=a[3];return Math.sqrt(x*x+y*y+z*z+w*w)}function squaredLength(a){var x=a[0];var y=a[1];var z=a[2];var w=a[3];return x*x+y*y+z*z+w*w}function normalize$1(out,a){var x=a[0];var y=a[1];var z=a[2];var w=a[3];var len=x*x+y*y+z*z+w*w;if(len>0){len=1/Math.sqrt(len)}out[0]=x*len;out[1]=y*len;out[2]=z*len;out[3]=w*len;return out}function dot$1(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function lerp(out,a,b,t){var ax=a[0];var ay=a[1];var az=a[2];var aw=a[3];out[0]=ax+t*(b[0]-ax);out[1]=ay+t*(b[1]-ay);out[2]=az+t*(b[2]-az);out[3]=aw+t*(b[3]-aw);return out}function exactEquals(a,b){return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]}function equals(a,b){var a0=a[0],a1=a[1],a2=a[2],a3=a[3];var b0=b[0],b1=b[1],b2=b[2],b3=b[3];return Math.abs(a0-b0)<=EPSILON*Math.max(1,Math.abs(a0),Math.abs(b0))&&Math.abs(a1-b1)<=EPSILON*Math.max(1,Math.abs(a1),Math.abs(b1))&&Math.abs(a2-b2)<=EPSILON*Math.max(1,Math.abs(a2),Math.abs(b2))&&Math.abs(a3-b3)<=EPSILON*Math.max(1,Math.abs(a3),Math.abs(b3))}var forEach$1=function(){var vec=create$3();return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=4}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];vec[2]=a[i+2];vec[3]=a[i+3];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1];a[i+2]=vec[2];a[i+3]=vec[3]}return a}}();function create$4(){var out=new ARRAY_TYPE(4);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0;out[2]=0}out[3]=1;return out}function identity(out){out[0]=0;out[1]=0;out[2]=0;out[3]=1;return out}function setAxisAngle(out,axis,rad){rad=rad*.5;var s=Math.sin(rad);out[0]=s*axis[0];out[1]=s*axis[1];out[2]=s*axis[2];out[3]=Math.cos(rad);return out}function getAxisAngle(out_axis,q){var rad=Math.acos(q[3])*2;var s=Math.sin(rad/2);if(s>EPSILON){out_axis[0]=q[0]/s;out_axis[1]=q[1]/s;out_axis[2]=q[2]/s}else{out_axis[0]=1;out_axis[1]=0;out_axis[2]=0}return rad}function multiply(out,a,b){var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bx=b[0],by=b[1],bz=b[2],bw=b[3];out[0]=ax*bw+aw*bx+ay*bz-az*by;out[1]=ay*bw+aw*by+az*bx-ax*bz;out[2]=az*bw+aw*bz+ax*by-ay*bx;out[3]=aw*bw-ax*bx-ay*by-az*bz;return out}function rotateX(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bx=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw+aw*bx;out[1]=ay*bw+az*bx;out[2]=az*bw-ay*bx;out[3]=aw*bw-ax*bx;return out}function rotateY(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3];var by=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw-az*by;out[1]=ay*bw+aw*by;out[2]=az*bw+ax*by;out[3]=aw*bw-ay*by;return out}function rotateZ(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bz=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw+ay*bz;out[1]=ay*bw-ax*bz;out[2]=az*bw+aw*bz;out[3]=aw*bw-az*bz;return out}function calculateW(out,a){var x=a[0],y=a[1],z=a[2];out[0]=x;out[1]=y;out[2]=z;out[3]=Math.sqrt(Math.abs(1-x*x-y*y-z*z));return out}function slerp(out,a,b,t){var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bx=b[0],by=b[1],bz=b[2],bw=b[3];var omega,cosom,sinom,scale0,scale1;cosom=ax*bx+ay*by+az*bz+aw*bw;if(cosom<0){cosom=-cosom;bx=-bx;by=-by;bz=-bz;bw=-bw}if(1-cosom>EPSILON){omega=Math.acos(cosom);sinom=Math.sin(omega);scale0=Math.sin((1-t)*omega)/sinom;scale1=Math.sin(t*omega)/sinom}else{scale0=1-t;scale1=t}out[0]=scale0*ax+scale1*bx;out[1]=scale0*ay+scale1*by;out[2]=scale0*az+scale1*bz;out[3]=scale0*aw+scale1*bw;return out}function random(out){var u1=RANDOM();var u2=RANDOM();var u3=RANDOM();var sqrt1MinusU1=Math.sqrt(1-u1);var sqrtU1=Math.sqrt(u1);out[0]=sqrt1MinusU1*Math.sin(2*Math.PI*u2);out[1]=sqrt1MinusU1*Math.cos(2*Math.PI*u2);out[2]=sqrtU1*Math.sin(2*Math.PI*u3);out[3]=sqrtU1*Math.cos(2*Math.PI*u3);return out}function invert(out,a){var a0=a[0],a1=a[1],a2=a[2],a3=a[3];var dot=a0*a0+a1*a1+a2*a2+a3*a3;var invDot=dot?1/dot:0;out[0]=-a0*invDot;out[1]=-a1*invDot;out[2]=-a2*invDot;out[3]=a3*invDot;return out}function conjugate(out,a){out[0]=-a[0];out[1]=-a[1];out[2]=-a[2];out[3]=a[3];return out}function fromMat3(out,m){var fTrace=m[0]+m[4]+m[8];var fRoot;if(fTrace>0){fRoot=Math.sqrt(fTrace+1);out[3]=.5*fRoot;fRoot=.5/fRoot;out[0]=(m[5]-m[7])*fRoot;out[1]=(m[6]-m[2])*fRoot;out[2]=(m[1]-m[3])*fRoot}else{var i=0;if(m[4]>m[0])i=1;if(m[8]>m[i*3+i])i=2;var j=(i+1)%3;var k=(i+2)%3;fRoot=Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k]+1);out[i]=.5*fRoot;fRoot=.5/fRoot;out[3]=(m[j*3+k]-m[k*3+j])*fRoot;out[j]=(m[j*3+i]+m[i*3+j])*fRoot;out[k]=(m[k*3+i]+m[i*3+k])*fRoot}return out}function fromEuler(out,x,y,z){var halfToRad=.5*Math.PI/180;x*=halfToRad;y*=halfToRad;z*=halfToRad;var sx=Math.sin(x);var cx=Math.cos(x);var sy=Math.sin(y);var cy=Math.cos(y);var sz=Math.sin(z);var cz=Math.cos(z);out[0]=sx*cy*cz-cx*sy*sz;out[1]=cx*sy*cz+sx*cy*sz;out[2]=cx*cy*sz-sx*sy*cz;out[3]=cx*cy*cz+sx*sy*sz;return out}function str(a){return"quat("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+")"}var clone$1=clone;var fromValues$2=fromValues$1;var copy$1=copy;var set$1=set;var add$1=add;var mul=multiply;var scale$1=scale;var dot$2=dot$1;var lerp$1=lerp;var length$2=length$1;var len$1=length$2;var squaredLength$1=squaredLength;var sqrLen=squaredLength$1;var normalize$2=normalize$1;var exactEquals$1=exactEquals;var equals$1=equals;var rotationTo=function(){var tmpvec3=create$2();var xUnitVec3=fromValues(1,0,0);var yUnitVec3=fromValues(0,1,0);return function(out,a,b){var dot$1=dot(a,b);if(dot$1<-.999999){cross(tmpvec3,xUnitVec3,a);if(len(tmpvec3)<1e-6)cross(tmpvec3,yUnitVec3,a);normalize(tmpvec3,tmpvec3);setAxisAngle(out,tmpvec3,Math.PI);return out}else if(dot$1>.999999){out[0]=0;out[1]=0;out[2]=0;out[3]=1;return out}else{cross(tmpvec3,a,b);out[0]=tmpvec3[0];out[1]=tmpvec3[1];out[2]=tmpvec3[2];out[3]=1+dot$1;return normalize$2(out,out)}}}();var sqlerp=function(){var temp1=create$4();var temp2=create$4();return function(out,a,b,c,d,t){slerp(temp1,a,d,t);slerp(temp2,b,c,t);slerp(out,temp1,temp2,2*t*(1-t));return out}}();var setAxes=function(){var matr=create();return function(out,view,right,up){matr[0]=right[0];matr[3]=right[1];matr[6]=right[2];matr[1]=up[0];matr[4]=up[1];matr[7]=up[2];matr[2]=-view[0];matr[5]=-view[1];matr[8]=-view[2];return normalize$2(out,fromMat3(out,matr))}}();var quat=Object.freeze({create:create$4,identity:identity,setAxisAngle:setAxisAngle,getAxisAngle:getAxisAngle,multiply:multiply,rotateX:rotateX,rotateY:rotateY,rotateZ:rotateZ,calculateW:calculateW,slerp:slerp,random:random,invert:invert,conjugate:conjugate,fromMat3:fromMat3,fromEuler:fromEuler,str:str,clone:clone$1,fromValues:fromValues$2,copy:copy$1,set:set$1,add:add$1,mul:mul,scale:scale$1,dot:dot$2,lerp:lerp$1,length:length$2,len:len$1,squaredLength:squaredLength$1,sqrLen:sqrLen,normalize:normalize$2,exactEquals:exactEquals$1,equals:equals$1,rotationTo:rotationTo,sqlerp:sqlerp,setAxes:setAxes});var squaredLength$2=squaredLength$1;function create$5(){var out=new ARRAY_TYPE(2);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0}return out}var forEach$2=function(){var vec=create$5();return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=2}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1]}return a}}();var initShaderProgram=function(gl,vsSource,fsSource){var vertexShader=loadShader(gl,gl.VERTEX_SHADER,vsSource);var fragmentShader=loadShader(gl,gl.FRAGMENT_SHADER,fsSource);var shaderProgram=gl.createProgram();gl.attachShader(shaderProgram,vertexShader);gl.attachShader(shaderProgram,fragmentShader);gl.linkProgram(shaderProgram);if(!gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)){console.error("Unable to initialize the shader program: "+gl.getProgramInfoLog(shaderProgram));return null}return shaderProgram};function loadShader(gl,type,source){var shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error("An error occurred compiling the shaders: "+gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null}return shader}var buffer=function(gl){var glBuffer=gl.createBuffer();var buffer=function buffer(array){gl.bindBuffer(gl.ARRAY_BUFFER,glBuffer);var srcArray=array.constructor===Float32Array?array:new Float32Array(array);gl.bufferData(gl.ARRAY_BUFFER,srcArray,gl.STATIC_DRAW);return glBuffer};buffer.addr=function(){return glBuffer};return buffer};var vsSource="\n attribute vec4 aVertexPosition;\n\n uniform vec4 uSeriesColor;\n\n uniform mat4 uModelViewMatrix;\n uniform mat4 uProjectionMatrix;\n\n varying lowp vec4 vColor;\n\n void main() {\n gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;\n vColor = uSeriesColor;\n }\n";var fsSource="\n varying lowp vec4 vColor;\n\n void main() {\n gl_FragColor = vColor;\n }\n";var triangles=function(gl,projectionMatrix,modelViewMatrix){var positionBuffer=buffer(gl);var buffers={position:positionBuffer.addr()};var lastColor=[-1,-1,-1,-1];var draw=function draw(positions,color){var mode=arguments.length>2&&arguments[2]!==undefined?arguments[2]:gl.TRIANGLES;positionBuffer(positions);if(color.some(function(c,i){return c!==lastColor[i]})){setColor(color);lastColor=color}drawBuffers(positions.length/2,mode)};draw.activate=function(){setupProgram(buffers);lastColor=[-1,-1,-1,-1]};var shaderProgram=initShaderProgram(gl,vsSource,fsSource);var programInfo={program:shaderProgram,attribLocations:{vertexPosition:gl.getAttribLocation(shaderProgram,"aVertexPosition")},uniformLocations:{projectionMatrix:gl.getUniformLocation(shaderProgram,"uProjectionMatrix"),modelViewMatrix:gl.getUniformLocation(shaderProgram,"uModelViewMatrix"),seriesColor:gl.getUniformLocation(shaderProgram,"uSeriesColor")}};function setupProgram(buffers){gl.useProgram(programInfo.program);gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix,false,projectionMatrix);gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix,false,modelViewMatrix);{var numComponents=2;var type=gl.FLOAT;var normalize=false;var stride=0;var offset=0;gl.bindBuffer(gl.ARRAY_BUFFER,buffers.position);gl.vertexAttribPointer(programInfo.attribLocations.vertexPosition,numComponents,type,normalize,stride,offset);gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition)}}function setColor(color){gl.uniform4fv(programInfo.uniformLocations.seriesColor,color)}function drawBuffers(vertexCount,mode){{var offset=0;gl.drawArrays(mode,offset,vertexCount)}}return draw};var vsSource$1="\n attribute vec4 aVertexPosition;\n attribute vec4 aVertexEdge;\n\n uniform vec4 uEdgeColor;\n uniform vec4 uSeriesColor;\n\n uniform mat4 uModelViewMatrix;\n uniform mat4 uProjectionMatrix;\n\n varying lowp vec4 vEdge;\n varying lowp vec4 vColor;\n varying lowp vec4 vColorEdge;\n\n void main() {\n gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;\n vColor = uSeriesColor;\n vColorEdge = uEdgeColor;\n vEdge = aVertexEdge;\n }\n";var fsSource$1="\n varying lowp vec4 vEdge;\n varying lowp vec4 vColor;\n varying lowp vec4 vColorEdge;\n\n void main() {\n lowp float r = (vEdge[1] - vEdge[0]) / 2.0;\n if (r > 1.0) {\n gl_FragColor = vColor;\n } else if (r < 0.0) {\n gl_FragColor = vColorEdge;\n } else {\n lowp vec4 blended;\n blended[0] = vColorEdge[0] + r * (vColor[0] - vColorEdge[0]);\n blended[1] = vColorEdge[1] + r * (vColor[1] - vColorEdge[1]);\n blended[2] = vColorEdge[2] + r * (vColor[2] - vColorEdge[2]);\n blended[3] = vColorEdge[3] + r * (vColor[3] - vColorEdge[3]);\n gl_FragColor = blended;\n }\n }\n";var edges=function(gl,projectionMatrix,modelViewMatrix){var positionBuffer=buffer(gl);var edgeBuffer=buffer(gl);var buffers={position:positionBuffer.addr(),edges:edgeBuffer.addr()};var lastColor=[-1,-1,-1,-1];var lastStrokeColor=[-1,-1,-1,-1];var draw=function draw(positions,color){var lineWidth=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;var strokeColor=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;positionBuffer(positions);var pixelSize=[2/gl.canvas.width,2/gl.canvas.height];var pixelDist=function pixelDist(x1,y1,x2,y2){return Math.sqrt(Math.pow((x2-x1)/pixelSize[0],2)+Math.pow((y2-y1)/pixelSize[1],2))};var edges=new Float32Array(positions.length);for(var n=0;n<positions.length;n+=6){var dist1=pixelDist(positions[n],positions[n+1],positions[n+2],positions[n+3]);var dist2=pixelDist(positions[n],positions[n+1],positions[n+4],positions[n+5]);var diff=Math.sqrt(dist1/dist2);var lw1=lineWidth*diff;var lw2=lineWidth/diff;var r1=dist1-lw1;var r2=dist2-lw2;edges[n]=0;edges[n+1]=(r1+r2)/2;edges[n+2]=dist1;edges[n+3]=r1;edges[n+4]=dist2;edges[n+5]=r2}edgeBuffer(edges);var sColor=strokeColor||color;if(color.some(function(c,i){return c!==lastColor[i]})||sColor.some(function(c,i){return c!==lastStrokeColor[i]})){setColor(color,sColor);lastColor=color;lastStrokeColor=sColor}drawBuffers(positions.length/2)};draw.activate=function(){setupProgram(buffers);lastColor=[-1,-1,-1,-1]};var shaderProgram=initShaderProgram(gl,vsSource$1,fsSource$1);var programInfo={program:shaderProgram,attribLocations:{vertexPosition:gl.getAttribLocation(shaderProgram,"aVertexPosition"),vertexEdge:gl.getAttribLocation(shaderProgram,"aVertexEdge")},uniformLocations:{projectionMatrix:gl.getUniformLocation(shaderProgram,"uProjectionMatrix"),modelViewMatrix:gl.getUniformLocation(shaderProgram,"uModelViewMatrix"),seriesColor:gl.getUniformLocation(shaderProgram,"uSeriesColor"),edgeColor:gl.getUniformLocation(shaderProgram,"uEdgeColor")}};function setupProgram(buffers){gl.useProgram(programInfo.program);gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix,false,projectionMatrix);gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix,false,modelViewMatrix);{var numComponents=2;var type=gl.FLOAT;var normalize=false;var stride=0;var offset=0;gl.bindBuffer(gl.ARRAY_BUFFER,buffers.position);gl.vertexAttribPointer(programInfo.attribLocations.vertexPosition,numComponents,type,normalize,stride,offset);gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition)}{var _numComponents=2;var _type=gl.FLOAT;var _normalize=false;var _stride=0;var _offset=0;gl.bindBuffer(gl.ARRAY_BUFFER,buffers.edges);gl.vertexAttribPointer(programInfo.attribLocations.vertexEdge,_numComponents,_type,_normalize,_stride,_offset);gl.enableVertexAttribArray(programInfo.attribLocations.vertexEdge)}}function setColor(color,strokeColor){gl.uniform4fv(programInfo.uniformLocations.seriesColor,color);gl.uniform4fv(programInfo.uniformLocations.edgeColor,strokeColor)}function drawBuffers(vertexCount){{var offset=0;gl.drawArrays(gl.TRIANGLES,offset,vertexCount)}}return draw};var drawFunctions={triangles:triangles,edges:edges};var setupGL=function(gl){var drawModules={};var projectionMatrix=create$1();var modelViewMatrix=create$1();var draw=function draw(){clearScene()};var activated;Object.keys(drawFunctions).forEach(function(key){draw[key]=function(){if(!drawModules[key]){drawModules[key]=drawFunctions[key](gl,projectionMatrix,modelViewMatrix)}if(activated!=key)drawModules[key].activate();activated=key;return drawModules[key].apply(drawModules,arguments)}});draw.triangleStrip=function(positions,color){draw.triangles(positions,color,gl.TRIANGLE_STRIP)};draw.triangleFan=function(positions,color){draw.triangles(positions,color,gl.TRIANGLE_FAN)};var normaliseVector=function normaliseVector(vector){var length=Math.sqrt(Math.pow(vector[0],2)+Math.pow(vector[1],2));return[vector[0]/length,vector[1]/length]};var lineNormal=function lineNormal(p1,p2){return normaliseVector([p2[1]-p1[1],-(p2[0]-p1[0])])};var getNormal=function getNormal(points,index){var n1=index>0&&lineNormal([points[index-2],points[index-1]],[points[index],points[index+1]]);var n2=index<points.length-2&&lineNormal([points[index],points[index+1]],[points[index+2],points[index+3]]);if(!n2){return n1}else if(!n1){return n2}else{return normaliseVector([(n1[0]+n2[0])/2,(n1[1]+n2[1])/2])}};var tf=.6;draw.line=function(positions,width,color){var points=new Float32Array(positions.length*2);for(var n=0;n<positions.length;n+=2){var normal=getNormal(positions,n);var p=n*2;points[p]=positions[n]+tf*width[0]*normal[0];points[p+1]=positions[n+1]+tf*width[1]*normal[1];points[p+2]=positions[n]-tf*width[0]*normal[0];points[p+3]=positions[n+1]-tf*width[1]*normal[1]}draw.triangles(points,color,gl.TRIANGLE_STRIP)};initMatrices();function initMatrices(){var fieldOfView=90*Math.PI/180;var aspect=1;var zNear=.1;var zFar=100;perspective(projectionMatrix,fieldOfView,aspect,zNear,zFar);translate(modelViewMatrix,modelViewMatrix,[-0,0,-1])}function clearScene(){gl.viewport(0,0,gl.canvas.width,gl.canvas.height);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA)}return draw};var createBase=function(initialValues){var context=null;var draw=null;var env=Object.assign({},initialValues);var base=function base(){if(!draw){draw=setupGL(context);draw()}};Object.keys(env).forEach(function(key){base[key]=function(){if(!arguments.length){return env[key]}env[key]=arguments.length<=0?undefined:arguments[0];return base}});base.context=function(){if(!arguments.length){return context}context=arguments.length<=0?undefined:arguments[0];return base};base.draw=function(){if(!arguments.length){return draw}draw=arguments.length<=0?undefined:arguments[0];return base};base.contextType=function(){return"webgl"};return base};var xyBase=function(){var baseValue=function baseValue(){return 0};var crossValue=function crossValue(d){return d.x};var mainValue=function mainValue(d){return d.y};var align="center";var bandwidth=function bandwidth(){return 5};var orient="vertical";var base=createBase({decorate:function decorate(){},defined:function defined$1(d,i){return defined(baseValue,crossValue,mainValue)(d,i)},xScale:d3Scale.scaleIdentity(),yScale:d3Scale.scaleIdentity()});base.getTransposer=function(){if(base.orient()!=="vertical"){return function(points){var transposed=new points.constructor(points.length);for(var n=0;n<points.length;n+=2){transposed[n]=points[n+1];transposed[n+1]=points[n]}console.log(transposed);return transposed}}return function(points){return points}};base.transposer=function(points){return base.getTransposer()(points)};base.valueFn=function(){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);return function(d,i){if(orient==="vertical"){var y=yScale(mainValue(d,i),i);var y0=yScale(baseValue(d,i),i);var x=xScale(crossValue(d,i),i);return{d:d,x:x,y:y,y0:y0}}else{var _y=xScale(mainValue(d,i),i);var _y2=xScale(baseValue(d,i),i);var _x=yScale(crossValue(d,i),i);return{d:d,x:_x,y:_y,y0:_y2}}}};base.baseValue=function(){if(!arguments.length){return baseValue}baseValue=functor(arguments.length<=0?undefined:arguments[0]);return base};base.crossValue=function(){if(!arguments.length){return crossValue}crossValue=functor(arguments.length<=0?undefined:arguments[0]);return base};base.mainValue=function(){if(!arguments.length){return mainValue}mainValue=functor(arguments.length<=0?undefined:arguments[0]);return base};base.bandwidth=function(){if(!arguments.length){return bandwidth}bandwidth=functor(arguments.length<=0?undefined:arguments[0]);return base};base.align=function(){if(!arguments.length){return align}align=arguments.length<=0?undefined:arguments[0];return base};base.orient=function(){if(!arguments.length){return orient}orient=arguments.length<=0?undefined:arguments[0];return base};return base};var red="#c60";var green="#6c0";var black="#000";var gray="#ddd";var darkGray="#999";var colors={red:red,green:green,black:black,gray:gray,darkGray:darkGray};var toGl=function toGl(v){return v/255};var glColor=function glColor(value){var c=d3Color.color(value);return[toGl(c.r),toGl(c.g),toGl(c.b),Math.sqrt(c.opacity)]};var alignOffset=function(align,width){switch(align){case"left":return width/2;case"right":return-width/2;default:return 0}};var bar=function(){var base=xyBase();var bar=function bar(data){base();var context=base.context();var filteredData=data.filter(base.defined());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};var projectedData=filteredData.map(valueFn(pixel));context.fillStyle=colors.darkGray;context.strokeStyle="transparent";context.strokeWidth=1;base.decorate()(context,data,0);var fillColor=glColor(context.fillStyle);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var vertices=Array(projectedData.length*12);var lines=[];var transposer=base.getTransposer();projectedData.forEach(function(datum,i){var x0=datum.x0,x1=datum.x1,y0=datum.y0,y1=datum.y1;var p=i*12;vertices[p]=x0;vertices[p+1]=y0;vertices[p+2]=x1;vertices[p+3]=y0;vertices[p+4]=x0;vertices[p+5]=y1;vertices[p+6]=x0;vertices[p+7]=y1;vertices[p+8]=x1;vertices[p+9]=y0;vertices[p+10]=x1;vertices[p+11]=y1;if(strokeColor){if(base.orient()==="vertical"){lines.push([x0,y0,x0,y1,x1,y1,x1,y0])}else{lines.push([x0,y0,x1,y0,x1,y1,x0,y1])}}});base.draw().triangles(vertices,fillColor);lines.forEach(function(line){base.draw().line(line,[strokeWidth*pixel.x,strokeWidth*pixel.y],strokeColor)});base.draw(null)};var valueFn=function valueFn(pixel){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);if(base.orient()==="vertical"){return function(d,i){var width=base.bandwidth()(d,i)*pixel.x;var offset=alignOffset(base.align(),width);var x=xScale(base.crossValue()(d,i),i);var y0=yScale(base.baseValue()(d,i),i);var y1=yScale(base.mainValue()(d,i),i);return{x0:x-offset,x1:x-offset+width,y0:y0,y1:y1}}}else{return function(d,i){var height=base.bandwidth()(d,i)*pixel.y;var offset=alignOffset(base.align(),height);var x0=yScale(base.baseValue()(d,i),i);var x1=yScale(base.mainValue()(d,i),i);var y=xScale(base.crossValue()(d,i),i);return{x0:x0,x1:x1,y0:y-offset,y1:y-offset+height}}}};d3fcRebind.rebindAll(bar,base);return bar};var line=function(){var base=xyBase();var line=function line(data){base();var context=base.context();var filteredData=data.filter(base.defined());var projectedData=filteredData.map(valueFn());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};context.strokeStyle=colors.darkGray;context.strokeWidth=1;base.decorate()(context,data,0);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var vertices=new Float32Array(projectedData.length*2);projectedData.forEach(function(datum,i){var p=i*2;vertices[p]=datum.x;vertices[p+1]=datum.y});base.draw().line(vertices,[strokeWidth*pixel.x,strokeWidth*pixel.y],strokeColor);base.draw(null)};var valueFn=function valueFn(){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);if(base.orient()==="vertical"){return function(d,i){return{x:xScale(base.crossValue()(d,i),i),y:yScale(base.mainValue()(d,i),i)}}}else{return function(d,i){return{y:xScale(base.crossValue()(d,i),i),x:yScale(base.mainValue()(d,i),i)}}}};d3fcRebind.rebindAll(line,base,d3fcRebind.exclude("baseValue","bandwidth","align"));return line};function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_nonIterableSpread()}function _arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i<arr.length;i++)arr2[i]=arr[i];return arr2}}function _iterableToArray(iter){if(Symbol.iterator in Object(iter)||Object.prototype.toString.call(iter)==="[object Arguments]")return Array.from(iter)}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}var area=function(){var base=xyBase();var area=function area(data){base();var context=base.context();var filteredData=data.filter(base.defined());var projectedData=filteredData.map(base.valueFn());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};context.fillStyle=colors.darkGray;context.strokeStyle="transparent";context.strokeWidth=1;base.decorate()(context,data,0);var fillColor=glColor(context.fillStyle);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var vertices=[];var linePoints=[];projectedData.forEach(function(datum,i){var points=[datum.x,datum.y0,datum.x,datum.y];vertices.push.apply(vertices,_toConsumableArray(base.transposer(points)));if(i<projectedData.length-1){var next=projectedData[i+1];var dh=datum.y-datum.y0;var nh=next.y-next.y0;if(nh<0!==dh<0){var dx=next.x-datum.x;var x=datum.x+dx*Math.abs(dh)/(Math.abs(dh)+Math.abs(nh));var extra=[x,datum.y0,x,datum.y0];vertices.push.apply(vertices,_toConsumableArray(base.transposer(extra)))}}if(strokeColor){linePoints.push(datum.x,datum.y)}});base.draw().triangleStrip(vertices,fillColor);if(strokeColor){base.draw().line(base.transposer(linePoints),[strokeWidth*pixel.x,strokeWidth*pixel.y],strokeColor)}base.draw(null)};d3fcRebind.rebindAll(area,base,d3fcRebind.exclude("bandwidth","align"));return area};var point=function(){var base=xyBase();var size=5;var type=d3.symbolCircle;var typePoints=null;var point=function point(data){base();var context=base.context();var filteredData=data.filter(base.defined());var projectedData=filteredData.map(valueFn());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};context.fillStyle=colors.darkGray;context.strokeStyle="transparent";context.strokeWidth=1;base.decorate()(context,data,0);var fillColor=glColor(context.fillStyle);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var points=typePoints?shapePoints(projectedData,pixel):circlePoints(projectedData,pixel);if(strokeColor){base.draw().edges(points,fillColor,strokeWidth,strokeColor)}else{base.draw().triangles(points,fillColor)}base.draw(null)};var shapePoints=function shapePoints(projectedData,pixel){var trianglesPerShape=typePoints.length-1;var points=new Float32Array(projectedData.length*trianglesPerShape*6);var allPointsIndex=0;projectedData.forEach(function(datum,i){var computedSize=Math.floor(Math.sqrt(datum.size)*.5);var x=datum.x;var y=datum.y;for(var n=0;n<typePoints.length-1;n++){var p=allPointsIndex;points[p]=x;points[p+1]=y;points[p+2]=x+typePoints[n][0]*computedSize*pixel.x;points[p+3]=y-typePoints[n][1]*computedSize*pixel.y;points[p+4]=x+typePoints[n+1][0]*computedSize*pixel.x;points[p+5]=y-typePoints[n+1][1]*computedSize*pixel.y;allPointsIndex+=6}});return points};var circlePoints=function circlePoints(projectedData,pixel){var sizes=Array(projectedData.length);var allPointsSize=0;projectedData.forEach(function(datum,i){sizes[i]=Math.floor(Math.sqrt(datum.size)*.65);allPointsSize+=sizes[i]});var points=new Float32Array(allPointsSize*2*6);var allPointsIndex=0;projectedData.forEach(function(datum,i){var computedSize=sizes[i];var x=datum.x;var y=datum.y;var getX=function getX(angle){return x+Math.sin(angle)*computedSize*pixel.x};var getY=function getY(angle){return y+Math.cos(angle)*computedSize*pixel.y};var num=2*computedSize;for(var n=0;n<num;n++){var a1=2*n*Math.PI/num;var a2=2*(n+1)*Math.PI/num;var p=allPointsIndex;points[p]=x;points[p+1]=y;points[p+2]=getX(a1);points[p+3]=getY(a1);points[p+4]=getX(a2);points[p+5]=getY(a2);allPointsIndex+=6}});return points};var valueFn=function valueFn(){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);var sizeFn=typeof size==="function"?size:function(){return size};if(base.orient()==="vertical"){return function(d,i){return{x:xScale(base.crossValue()(d,i),i),y:yScale(base.mainValue()(d,i),i),size:sizeFn(d)}}}else{return function(d,i){return{y:xScale(base.crossValue()(d,i),i),x:yScale(base.mainValue()(d,i),i),size:sizeFn(d)}}}};point.size=function(){if(!arguments.length){return size}size=arguments.length<=0?undefined:arguments[0];return point};point.type=function(){if(!arguments.length){return type}type=arguments.length<=0?undefined:arguments[0];if(type==d3.symbolCircle){typePoints=null}else{typePoints=shapeToPoints(type)}return point};d3fcRebind.rebindAll(point,base,d3fcRebind.exclude("baseValue","bandwidth","align"));return point};function shapeToPoints(d3Shape){if(d3Shape){var shapeSymbol=d3.symbol().type(d3Shape);var shapePath=shapeSymbol.size(5)();var points=shapePath.substring(1,shapePath.length-1).split("L").map(function(p){return p.split(",").map(function(c){return parseFloat(c)})});if(points.length===1){var l=-points[0][0];points.push([l,-l]);points.push([l,l]);points.push([-l,l])}points.push(points[0]);return points}return[]}var multiBase=function(){var series=[];var mapping=function mapping(d){return d};var key=function key(_,i){return i};var multi=createBase({decorate:function decorate(){},xScale:d3Scale.scaleIdentity(),yScale:d3Scale.scaleIdentity()});multi.mapping=function(){if(!arguments.length){return mapping}mapping=arguments.length<=0?undefined:arguments[0];return multi};multi.key=function(){if(!arguments.length){return key}key=arguments.length<=0?undefined:arguments[0];return multi};multi.series=function(){if(!arguments.length){return series}series=arguments.length<=0?undefined:arguments[0];return multi};return multi};var multiSeries=function(){var base=multiBase();var multi=function multi(data){base();var context=base.context();var mapping=base.mapping();var series=base.series();var xScale=base.xScale();var yScale=base.yScale();series.forEach(function(dataSeries,index){var seriesData=mapping(data,index,series);dataSeries.context(context).xScale(xScale).yScale(yScale);var adaptedDecorate;if(dataSeries.decorate){adaptedDecorate=dataSeries.decorate();dataSeries.decorate(function(c,d,i){base.decorate()(c,data,index);adaptedDecorate(c,d,i)})}else{base.decorate()(context,data,index)}dataSeries.draw(base.draw());dataSeries(seriesData);if(adaptedDecorate){dataSeries.decorate(adaptedDecorate)}});base.draw(null)};d3fcRebind.rebindAll(multi,base);return multi};var repeat=function(){var orient="vertical";var series=null;var multi=multiSeries();var repeat=function repeat(data){if(orient==="vertical"){multi.series(data[0].map(function(_){return series})).mapping(function(data,index){return data.map(function(d){return d[index]})})}else{multi.series(data.map(function(_){return series})).mapping(function(data,index){return data[index]})}multi(data)};repeat.series=function(){if(!arguments.length){return series}series=arguments.length<=0?undefined:arguments[0];return repeat};repeat.orient=function(){if(!arguments.length){return orient}orient=arguments.length<=0?undefined:arguments[0];return repeat};d3fcRebind.rebindAll(repeat,multi,d3fcRebind.exclude("series","mapping"));return repeat};var groupedBase=function(series){var bandwidth=function bandwidth(){return 50};var align="center";var offsetScale=d3Scale.scaleBand();var grouped=createBase({decorate:function decorate(){},xScale:d3Scale.scaleLinear(),yScale:d3Scale.scaleLinear()});grouped.offsetScaleForDatum=function(data,d,i,screenPixels){var width=2*bandwidth(d,i)/screenPixels;var offset=alignOffset(align,width);var halfWidth=width/2;return offsetScale.domain(d3Array.range(0,data.length)).range([-halfWidth+offset,halfWidth+offset])};grouped.bandwidth=function(){if(!arguments.length){return bandwidth}bandwidth=functor(arguments.length<=0?undefined:arguments[0]);return grouped};grouped.align=function(){if(!arguments.length){return align}align=arguments.length<=0?undefined:arguments[0];return grouped};d3fcRebind.rebindAll(grouped,offsetScale,d3fcRebind.includeMap({paddingInner:"paddingOuter"}));return grouped};function grouped(series){var base=groupedBase(series);var grouped=function grouped(data){data.forEach(function(seriesData,index){var isVertical=series.orient()!=="horizontal";var baseScale=isVertical?base.xScale():base.yScale();var compositeScale=createCompositeScale(data,baseScale,index,baseScale.range());if(isVertical){series.xScale(compositeScale);series.yScale(base.yScale())}else{series.yScale(compositeScale);series.xScale(base.xScale())}if(series.bandwidth){series.bandwidth(function(d,i){return base.bandwidth()(d,i)/data.length})}series.decorate(function(c,d){return base.decorate()(c,d,index)});series.draw(base.draw());series(seriesData)});base.draw(null)};var createCompositeScale=function createCompositeScale(data,baseScale,index,range){var compositeScale=function compositeScale(d,i){var offset=base.offsetScaleForDatum(data,d,i,range[1]-range[0]);console.log(index,offset(index),baseScale(d)+offset(index)+offset.bandwidth()/2);return baseScale(d)+offset(index)+offset.bandwidth()/2};compositeScale.copy=function(){return createCompositeScale(data,baseScale.copy(),index,range)};compositeScale.range=function(){if(!arguments.length){return baseScale.range()}baseScale.range.apply(baseScale,arguments);return compositeScale};return compositeScale};d3fcRebind.rebindAll(grouped,series,d3fcRebind.exclude("decorate","xScale","yScale"));d3fcRebind.rebindAll(grouped,base,d3fcRebind.exclude("offsetScaleForDatum","context"));return grouped}exports.cartesian=cartesian;exports.seriesWebGLArea=area;exports.seriesWebGLBar=bar;exports.seriesWebGLGrouped=grouped;exports.seriesWebGLLine=line;exports.seriesWebGLMulti=multiSeries;exports.seriesWebGLPoint=point;exports.seriesWebGLRepeat=repeat;Object.defineProperty(exports,"__esModule",{value:true})}); | ||
(function(g,f){typeof exports==="object"&&typeof module!=="undefined"?f(exports,require("d3-selection"),require("@d3fc/d3fc-chart"),require("@d3fc/d3fc-rebind"),require("d3-scale"),require("d3-color"),require("d3"),require("d3-array")):typeof define==="function"&&define.amd?define(["exports","d3-selection","@d3fc/d3fc-chart","@d3fc/d3fc-rebind","d3-scale","d3-color","d3","d3-array"],f):(g=g||self,f(g.fcWebGL={},g.d3,g.fc,g.fc,g.d3,g.d3,g.d3,g.d3))})(this,function(exports,d3Selection,d3fcChart,d3fcRebind,d3Scale,d3Color,d3,d3Array){"use strict";var cartesian=function(xScale,yScale){var base=d3fcChart.chartCartesian(xScale,yScale);var chart=function chart(selection){var result=base(selection);selection.select("d3fc-canvas.plot-area").on("draw",function(d,i,nodes){var canvas=d3Selection.select(nodes[i]).select("canvas").node();var series=base.canvasPlotArea();var contextType=series.contextType?series.contextType():"2d";series.context(canvas.getContext(contextType)).xScale(xScale).yScale(yScale);series(d)});return result};d3fcRebind.rebindAll(chart,base);return chart};var functor=function(d){return typeof d==="function"?d:function(){return d}};function defined(){var outerArguments=arguments;return function(d,i){for(var c=0,j=outerArguments.length;c<j;c++){if(outerArguments[c](d,i)==null){return false}}return true}}var EPSILON=1e-6;var ARRAY_TYPE=typeof Float32Array!=="undefined"?Float32Array:Array;var RANDOM=Math.random;var degree=Math.PI/180;function create(){var out=new ARRAY_TYPE(9);if(ARRAY_TYPE!=Float32Array){out[1]=0;out[2]=0;out[3]=0;out[5]=0;out[6]=0;out[7]=0}out[0]=1;out[4]=1;out[8]=1;return out}function create$1(){var out=new ARRAY_TYPE(16);if(ARRAY_TYPE!=Float32Array){out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[11]=0;out[12]=0;out[13]=0;out[14]=0}out[0]=1;out[5]=1;out[10]=1;out[15]=1;return out}function translate(out,a,v){var x=v[0],y=v[1],z=v[2];var a00,a01,a02,a03;var a10,a11,a12,a13;var a20,a21,a22,a23;if(a===out){out[12]=a[0]*x+a[4]*y+a[8]*z+a[12];out[13]=a[1]*x+a[5]*y+a[9]*z+a[13];out[14]=a[2]*x+a[6]*y+a[10]*z+a[14];out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]}else{a00=a[0];a01=a[1];a02=a[2];a03=a[3];a10=a[4];a11=a[5];a12=a[6];a13=a[7];a20=a[8];a21=a[9];a22=a[10];a23=a[11];out[0]=a00;out[1]=a01;out[2]=a02;out[3]=a03;out[4]=a10;out[5]=a11;out[6]=a12;out[7]=a13;out[8]=a20;out[9]=a21;out[10]=a22;out[11]=a23;out[12]=a00*x+a10*y+a20*z+a[12];out[13]=a01*x+a11*y+a21*z+a[13];out[14]=a02*x+a12*y+a22*z+a[14];out[15]=a03*x+a13*y+a23*z+a[15]}return out}function perspective(out,fovy,aspect,near,far){var f=1/Math.tan(fovy/2),nf;out[0]=f/aspect;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=f;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[11]=-1;out[12]=0;out[13]=0;out[15]=0;if(far!=null&&far!==Infinity){nf=1/(near-far);out[10]=(far+near)*nf;out[14]=2*far*near*nf}else{out[10]=-1;out[14]=-2*near}return out}function create$2(){var out=new ARRAY_TYPE(3);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0;out[2]=0}return out}function length(a){var x=a[0];var y=a[1];var z=a[2];return Math.sqrt(x*x+y*y+z*z)}function fromValues(x,y,z){var out=new ARRAY_TYPE(3);out[0]=x;out[1]=y;out[2]=z;return out}function normalize(out,a){var x=a[0];var y=a[1];var z=a[2];var len=x*x+y*y+z*z;if(len>0){len=1/Math.sqrt(len)}out[0]=a[0]*len;out[1]=a[1]*len;out[2]=a[2]*len;return out}function dot(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}function cross(out,a,b){var ax=a[0],ay=a[1],az=a[2];var bx=b[0],by=b[1],bz=b[2];out[0]=ay*bz-az*by;out[1]=az*bx-ax*bz;out[2]=ax*by-ay*bx;return out}var len=length;var forEach=function(){var vec=create$2();return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=3}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];vec[2]=a[i+2];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1];a[i+2]=vec[2]}return a}}();function create$3(){var out=new ARRAY_TYPE(4);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0;out[2]=0;out[3]=0}return out}function clone(a){var out=new ARRAY_TYPE(4);out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out}function fromValues$1(x,y,z,w){var out=new ARRAY_TYPE(4);out[0]=x;out[1]=y;out[2]=z;out[3]=w;return out}function copy(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out}function set(out,x,y,z,w){out[0]=x;out[1]=y;out[2]=z;out[3]=w;return out}function add(out,a,b){out[0]=a[0]+b[0];out[1]=a[1]+b[1];out[2]=a[2]+b[2];out[3]=a[3]+b[3];return out}function scale(out,a,b){out[0]=a[0]*b;out[1]=a[1]*b;out[2]=a[2]*b;out[3]=a[3]*b;return out}function length$1(a){var x=a[0];var y=a[1];var z=a[2];var w=a[3];return Math.sqrt(x*x+y*y+z*z+w*w)}function squaredLength(a){var x=a[0];var y=a[1];var z=a[2];var w=a[3];return x*x+y*y+z*z+w*w}function normalize$1(out,a){var x=a[0];var y=a[1];var z=a[2];var w=a[3];var len=x*x+y*y+z*z+w*w;if(len>0){len=1/Math.sqrt(len)}out[0]=x*len;out[1]=y*len;out[2]=z*len;out[3]=w*len;return out}function dot$1(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function lerp(out,a,b,t){var ax=a[0];var ay=a[1];var az=a[2];var aw=a[3];out[0]=ax+t*(b[0]-ax);out[1]=ay+t*(b[1]-ay);out[2]=az+t*(b[2]-az);out[3]=aw+t*(b[3]-aw);return out}function exactEquals(a,b){return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]}function equals(a,b){var a0=a[0],a1=a[1],a2=a[2],a3=a[3];var b0=b[0],b1=b[1],b2=b[2],b3=b[3];return Math.abs(a0-b0)<=EPSILON*Math.max(1,Math.abs(a0),Math.abs(b0))&&Math.abs(a1-b1)<=EPSILON*Math.max(1,Math.abs(a1),Math.abs(b1))&&Math.abs(a2-b2)<=EPSILON*Math.max(1,Math.abs(a2),Math.abs(b2))&&Math.abs(a3-b3)<=EPSILON*Math.max(1,Math.abs(a3),Math.abs(b3))}var forEach$1=function(){var vec=create$3();return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=4}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];vec[2]=a[i+2];vec[3]=a[i+3];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1];a[i+2]=vec[2];a[i+3]=vec[3]}return a}}();function create$4(){var out=new ARRAY_TYPE(4);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0;out[2]=0}out[3]=1;return out}function identity(out){out[0]=0;out[1]=0;out[2]=0;out[3]=1;return out}function setAxisAngle(out,axis,rad){rad=rad*.5;var s=Math.sin(rad);out[0]=s*axis[0];out[1]=s*axis[1];out[2]=s*axis[2];out[3]=Math.cos(rad);return out}function getAxisAngle(out_axis,q){var rad=Math.acos(q[3])*2;var s=Math.sin(rad/2);if(s>EPSILON){out_axis[0]=q[0]/s;out_axis[1]=q[1]/s;out_axis[2]=q[2]/s}else{out_axis[0]=1;out_axis[1]=0;out_axis[2]=0}return rad}function multiply(out,a,b){var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bx=b[0],by=b[1],bz=b[2],bw=b[3];out[0]=ax*bw+aw*bx+ay*bz-az*by;out[1]=ay*bw+aw*by+az*bx-ax*bz;out[2]=az*bw+aw*bz+ax*by-ay*bx;out[3]=aw*bw-ax*bx-ay*by-az*bz;return out}function rotateX(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bx=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw+aw*bx;out[1]=ay*bw+az*bx;out[2]=az*bw-ay*bx;out[3]=aw*bw-ax*bx;return out}function rotateY(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3];var by=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw-az*by;out[1]=ay*bw+aw*by;out[2]=az*bw+ax*by;out[3]=aw*bw-ay*by;return out}function rotateZ(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bz=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw+ay*bz;out[1]=ay*bw-ax*bz;out[2]=az*bw+aw*bz;out[3]=aw*bw-az*bz;return out}function calculateW(out,a){var x=a[0],y=a[1],z=a[2];out[0]=x;out[1]=y;out[2]=z;out[3]=Math.sqrt(Math.abs(1-x*x-y*y-z*z));return out}function slerp(out,a,b,t){var ax=a[0],ay=a[1],az=a[2],aw=a[3];var bx=b[0],by=b[1],bz=b[2],bw=b[3];var omega,cosom,sinom,scale0,scale1;cosom=ax*bx+ay*by+az*bz+aw*bw;if(cosom<0){cosom=-cosom;bx=-bx;by=-by;bz=-bz;bw=-bw}if(1-cosom>EPSILON){omega=Math.acos(cosom);sinom=Math.sin(omega);scale0=Math.sin((1-t)*omega)/sinom;scale1=Math.sin(t*omega)/sinom}else{scale0=1-t;scale1=t}out[0]=scale0*ax+scale1*bx;out[1]=scale0*ay+scale1*by;out[2]=scale0*az+scale1*bz;out[3]=scale0*aw+scale1*bw;return out}function random(out){var u1=RANDOM();var u2=RANDOM();var u3=RANDOM();var sqrt1MinusU1=Math.sqrt(1-u1);var sqrtU1=Math.sqrt(u1);out[0]=sqrt1MinusU1*Math.sin(2*Math.PI*u2);out[1]=sqrt1MinusU1*Math.cos(2*Math.PI*u2);out[2]=sqrtU1*Math.sin(2*Math.PI*u3);out[3]=sqrtU1*Math.cos(2*Math.PI*u3);return out}function invert(out,a){var a0=a[0],a1=a[1],a2=a[2],a3=a[3];var dot=a0*a0+a1*a1+a2*a2+a3*a3;var invDot=dot?1/dot:0;out[0]=-a0*invDot;out[1]=-a1*invDot;out[2]=-a2*invDot;out[3]=a3*invDot;return out}function conjugate(out,a){out[0]=-a[0];out[1]=-a[1];out[2]=-a[2];out[3]=a[3];return out}function fromMat3(out,m){var fTrace=m[0]+m[4]+m[8];var fRoot;if(fTrace>0){fRoot=Math.sqrt(fTrace+1);out[3]=.5*fRoot;fRoot=.5/fRoot;out[0]=(m[5]-m[7])*fRoot;out[1]=(m[6]-m[2])*fRoot;out[2]=(m[1]-m[3])*fRoot}else{var i=0;if(m[4]>m[0])i=1;if(m[8]>m[i*3+i])i=2;var j=(i+1)%3;var k=(i+2)%3;fRoot=Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k]+1);out[i]=.5*fRoot;fRoot=.5/fRoot;out[3]=(m[j*3+k]-m[k*3+j])*fRoot;out[j]=(m[j*3+i]+m[i*3+j])*fRoot;out[k]=(m[k*3+i]+m[i*3+k])*fRoot}return out}function fromEuler(out,x,y,z){var halfToRad=.5*Math.PI/180;x*=halfToRad;y*=halfToRad;z*=halfToRad;var sx=Math.sin(x);var cx=Math.cos(x);var sy=Math.sin(y);var cy=Math.cos(y);var sz=Math.sin(z);var cz=Math.cos(z);out[0]=sx*cy*cz-cx*sy*sz;out[1]=cx*sy*cz+sx*cy*sz;out[2]=cx*cy*sz-sx*sy*cz;out[3]=cx*cy*cz+sx*sy*sz;return out}function str(a){return"quat("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+")"}var clone$1=clone;var fromValues$2=fromValues$1;var copy$1=copy;var set$1=set;var add$1=add;var mul=multiply;var scale$1=scale;var dot$2=dot$1;var lerp$1=lerp;var length$2=length$1;var len$1=length$2;var squaredLength$1=squaredLength;var sqrLen=squaredLength$1;var normalize$2=normalize$1;var exactEquals$1=exactEquals;var equals$1=equals;var rotationTo=function(){var tmpvec3=create$2();var xUnitVec3=fromValues(1,0,0);var yUnitVec3=fromValues(0,1,0);return function(out,a,b){var dot$1=dot(a,b);if(dot$1<-.999999){cross(tmpvec3,xUnitVec3,a);if(len(tmpvec3)<1e-6)cross(tmpvec3,yUnitVec3,a);normalize(tmpvec3,tmpvec3);setAxisAngle(out,tmpvec3,Math.PI);return out}else if(dot$1>.999999){out[0]=0;out[1]=0;out[2]=0;out[3]=1;return out}else{cross(tmpvec3,a,b);out[0]=tmpvec3[0];out[1]=tmpvec3[1];out[2]=tmpvec3[2];out[3]=1+dot$1;return normalize$2(out,out)}}}();var sqlerp=function(){var temp1=create$4();var temp2=create$4();return function(out,a,b,c,d,t){slerp(temp1,a,d,t);slerp(temp2,b,c,t);slerp(out,temp1,temp2,2*t*(1-t));return out}}();var setAxes=function(){var matr=create();return function(out,view,right,up){matr[0]=right[0];matr[3]=right[1];matr[6]=right[2];matr[1]=up[0];matr[4]=up[1];matr[7]=up[2];matr[2]=-view[0];matr[5]=-view[1];matr[8]=-view[2];return normalize$2(out,fromMat3(out,matr))}}();var quat=Object.freeze({create:create$4,identity:identity,setAxisAngle:setAxisAngle,getAxisAngle:getAxisAngle,multiply:multiply,rotateX:rotateX,rotateY:rotateY,rotateZ:rotateZ,calculateW:calculateW,slerp:slerp,random:random,invert:invert,conjugate:conjugate,fromMat3:fromMat3,fromEuler:fromEuler,str:str,clone:clone$1,fromValues:fromValues$2,copy:copy$1,set:set$1,add:add$1,mul:mul,scale:scale$1,dot:dot$2,lerp:lerp$1,length:length$2,len:len$1,squaredLength:squaredLength$1,sqrLen:sqrLen,normalize:normalize$2,exactEquals:exactEquals$1,equals:equals$1,rotationTo:rotationTo,sqlerp:sqlerp,setAxes:setAxes});var squaredLength$2=squaredLength$1;function create$5(){var out=new ARRAY_TYPE(2);if(ARRAY_TYPE!=Float32Array){out[0]=0;out[1]=0}return out}var forEach$2=function(){var vec=create$5();return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=2}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1]}return a}}();var initShaderProgram=function(gl,vsSource,fsSource){var vertexShader=loadShader(gl,gl.VERTEX_SHADER,vsSource);var fragmentShader=loadShader(gl,gl.FRAGMENT_SHADER,fsSource);var shaderProgram=gl.createProgram();gl.attachShader(shaderProgram,vertexShader);gl.attachShader(shaderProgram,fragmentShader);gl.linkProgram(shaderProgram);if(!gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)){console.error("Unable to initialize the shader program: "+gl.getProgramInfoLog(shaderProgram));return null}return shaderProgram};function loadShader(gl,type,source){var shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error("An error occurred compiling the shaders: "+gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null}return shader}var buffer=function(gl){var glBuffer=gl.createBuffer();var buffer=function buffer(array){gl.bindBuffer(gl.ARRAY_BUFFER,glBuffer);var srcArray=array.constructor===Float32Array?array:new Float32Array(array);gl.bufferData(gl.ARRAY_BUFFER,srcArray,gl.STATIC_DRAW);return glBuffer};buffer.addr=function(){return glBuffer};return buffer};var vsSource="\n attribute vec4 aVertexPosition;\n\n uniform vec4 uSeriesColor;\n\n uniform mat4 uModelViewMatrix;\n uniform mat4 uProjectionMatrix;\n\n varying lowp vec4 vColor;\n\n void main() {\n gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;\n vColor = uSeriesColor;\n }\n";var fsSource="\n varying lowp vec4 vColor;\n\n void main() {\n gl_FragColor = vColor;\n }\n";var triangles=function(gl,projectionMatrix,modelViewMatrix){var positionBuffer=buffer(gl);var buffers={position:positionBuffer.addr()};var lastColor=[-1,-1,-1,-1];var draw=function draw(positions,color){var mode=arguments.length>2&&arguments[2]!==undefined?arguments[2]:gl.TRIANGLES;positionBuffer(positions);if(color.some(function(c,i){return c!==lastColor[i]})){setColor(color);lastColor=color}drawBuffers(positions.length/2,mode)};draw.activate=function(){setupProgram(buffers);lastColor=[-1,-1,-1,-1]};var shaderProgram=initShaderProgram(gl,vsSource,fsSource);var programInfo={program:shaderProgram,attribLocations:{vertexPosition:gl.getAttribLocation(shaderProgram,"aVertexPosition")},uniformLocations:{projectionMatrix:gl.getUniformLocation(shaderProgram,"uProjectionMatrix"),modelViewMatrix:gl.getUniformLocation(shaderProgram,"uModelViewMatrix"),seriesColor:gl.getUniformLocation(shaderProgram,"uSeriesColor")}};function setupProgram(buffers){gl.useProgram(programInfo.program);gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix,false,projectionMatrix);gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix,false,modelViewMatrix);{var numComponents=2;var type=gl.FLOAT;var normalize=false;var stride=0;var offset=0;gl.bindBuffer(gl.ARRAY_BUFFER,buffers.position);gl.vertexAttribPointer(programInfo.attribLocations.vertexPosition,numComponents,type,normalize,stride,offset);gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition)}}function setColor(color){gl.uniform4fv(programInfo.uniformLocations.seriesColor,color)}function drawBuffers(vertexCount,mode){{var offset=0;gl.drawArrays(mode,offset,vertexCount)}}return draw};var vsSource$1="\n attribute vec4 aVertexPosition;\n attribute vec4 aVertexEdge;\n\n uniform vec4 uEdgeColor;\n uniform vec4 uSeriesColor;\n\n uniform mat4 uModelViewMatrix;\n uniform mat4 uProjectionMatrix;\n\n varying lowp vec4 vEdge;\n varying lowp vec4 vColor;\n varying lowp vec4 vColorEdge;\n\n void main() {\n gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;\n vColor = uSeriesColor;\n vColorEdge = uEdgeColor;\n vEdge = aVertexEdge;\n }\n";var fsSource$1="\n varying lowp vec4 vEdge;\n varying lowp vec4 vColor;\n varying lowp vec4 vColorEdge;\n\n void main() {\n lowp float r = clamp((vEdge[1] - vEdge[0]) / 2.0, 0.0, 1.0);\n gl_FragColor = r * vColor + (1.0 - r) * vColorEdge;\n }\n";var edges=function(gl,projectionMatrix,modelViewMatrix){var positionBuffer=buffer(gl);var edgeBuffer=buffer(gl);var buffers={position:positionBuffer.addr(),edges:edgeBuffer.addr()};var lastColor=[-1,-1,-1,-1];var lastStrokeColor=[-1,-1,-1,-1];var draw=function draw(positions,color){var lineWidth=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;var strokeColor=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;positionBuffer(positions);var pixelSize=[2/gl.canvas.width,2/gl.canvas.height];var pixelDist=function pixelDist(x1,y1,x2,y2){return Math.sqrt(Math.pow((x2-x1)/pixelSize[0],2)+Math.pow((y2-y1)/pixelSize[1],2))};var edges=new Float32Array(positions.length);for(var n=0;n<positions.length;n+=6){var dist1=pixelDist(positions[n],positions[n+1],positions[n+2],positions[n+3]);var dist2=pixelDist(positions[n],positions[n+1],positions[n+4],positions[n+5]);var diff=Math.sqrt(dist1/dist2);var lw1=lineWidth*diff;var lw2=lineWidth/diff;var r1=dist1-lw1;var r2=dist2-lw2;edges[n]=0;edges[n+1]=(r1+r2)/2;edges[n+2]=dist1;edges[n+3]=r1;edges[n+4]=dist2;edges[n+5]=r2}edgeBuffer(edges);var sColor=strokeColor||color;if(color.some(function(c,i){return c!==lastColor[i]})||sColor.some(function(c,i){return c!==lastStrokeColor[i]})){setColor(color,sColor);lastColor=color;lastStrokeColor=sColor}drawBuffers(positions.length/2)};draw.activate=function(){setupProgram(buffers);lastColor=[-1,-1,-1,-1]};var shaderProgram=initShaderProgram(gl,vsSource$1,fsSource$1);var programInfo={program:shaderProgram,attribLocations:{vertexPosition:gl.getAttribLocation(shaderProgram,"aVertexPosition"),vertexEdge:gl.getAttribLocation(shaderProgram,"aVertexEdge")},uniformLocations:{projectionMatrix:gl.getUniformLocation(shaderProgram,"uProjectionMatrix"),modelViewMatrix:gl.getUniformLocation(shaderProgram,"uModelViewMatrix"),seriesColor:gl.getUniformLocation(shaderProgram,"uSeriesColor"),edgeColor:gl.getUniformLocation(shaderProgram,"uEdgeColor")}};function setupProgram(buffers){gl.useProgram(programInfo.program);gl.uniformMatrix4fv(programInfo.uniformLocations.projectionMatrix,false,projectionMatrix);gl.uniformMatrix4fv(programInfo.uniformLocations.modelViewMatrix,false,modelViewMatrix);{var numComponents=2;var type=gl.FLOAT;var normalize=false;var stride=0;var offset=0;gl.bindBuffer(gl.ARRAY_BUFFER,buffers.position);gl.vertexAttribPointer(programInfo.attribLocations.vertexPosition,numComponents,type,normalize,stride,offset);gl.enableVertexAttribArray(programInfo.attribLocations.vertexPosition)}{var _numComponents=2;var _type=gl.FLOAT;var _normalize=false;var _stride=0;var _offset=0;gl.bindBuffer(gl.ARRAY_BUFFER,buffers.edges);gl.vertexAttribPointer(programInfo.attribLocations.vertexEdge,_numComponents,_type,_normalize,_stride,_offset);gl.enableVertexAttribArray(programInfo.attribLocations.vertexEdge)}}function setColor(color,strokeColor){gl.uniform4fv(programInfo.uniformLocations.seriesColor,color);gl.uniform4fv(programInfo.uniformLocations.edgeColor,strokeColor)}function drawBuffers(vertexCount){{var offset=0;gl.drawArrays(gl.TRIANGLES,offset,vertexCount)}}return draw};var drawFunctions={triangles:triangles,edges:edges};var setupGL=function(gl){var drawModules={};var projectionMatrix=create$1();var modelViewMatrix=create$1();var draw=function draw(){clearScene()};var activated;Object.keys(drawFunctions).forEach(function(key){draw[key]=function(){if(!drawModules[key]){drawModules[key]=drawFunctions[key](gl,projectionMatrix,modelViewMatrix)}if(activated!=key)drawModules[key].activate();activated=key;return drawModules[key].apply(drawModules,arguments)}});draw.triangleStrip=function(positions,color){draw.triangles(positions,color,gl.TRIANGLE_STRIP)};draw.triangleFan=function(positions,color){draw.triangles(positions,color,gl.TRIANGLE_FAN)};var normaliseVector=function normaliseVector(vector){var length=Math.sqrt(Math.pow(vector[0],2)+Math.pow(vector[1],2));return[vector[0]/length,vector[1]/length]};var lineNormal=function lineNormal(p1,p2){return normaliseVector([p2[1]-p1[1],-(p2[0]-p1[0])])};var getNormal=function getNormal(points,index){var n1=index>0&&lineNormal([points[index-2],points[index-1]],[points[index],points[index+1]]);var n2=index<points.length-2&&lineNormal([points[index],points[index+1]],[points[index+2],points[index+3]]);if(!n2){return n1}else if(!n1){return n2}else{return normaliseVector([(n1[0]+n2[0])/2,(n1[1]+n2[1])/2])}};var tf=.6;draw.line=function(positions,width,color){var points=new Float32Array(positions.length*2);for(var n=0;n<positions.length;n+=2){var normal=getNormal(positions,n);var p=n*2;points[p]=positions[n]+tf*width[0]*normal[0];points[p+1]=positions[n+1]+tf*width[1]*normal[1];points[p+2]=positions[n]-tf*width[0]*normal[0];points[p+3]=positions[n+1]-tf*width[1]*normal[1]}draw.triangles(points,color,gl.TRIANGLE_STRIP)};initMatrices();function initMatrices(){var fieldOfView=90*Math.PI/180;var aspect=1;var zNear=.1;var zFar=100;perspective(projectionMatrix,fieldOfView,aspect,zNear,zFar);translate(modelViewMatrix,modelViewMatrix,[-0,0,-1])}function clearScene(){gl.viewport(0,0,gl.canvas.width,gl.canvas.height);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA)}return draw};var createBase=function(initialValues){var context=null;var draw=null;var env=Object.assign({},initialValues);var base=function base(){if(!draw){draw=setupGL(context);draw()}};Object.keys(env).forEach(function(key){base[key]=function(){if(!arguments.length){return env[key]}env[key]=arguments.length<=0?undefined:arguments[0];return base}});base.context=function(){if(!arguments.length){return context}context=arguments.length<=0?undefined:arguments[0];return base};base.draw=function(){if(!arguments.length){return draw}draw=arguments.length<=0?undefined:arguments[0];return base};base.contextType=function(){return"webgl"};return base};var xyBase=function(){var baseValue=function baseValue(){return 0};var crossValue=function crossValue(d){return d.x};var mainValue=function mainValue(d){return d.y};var align="center";var bandwidth=function bandwidth(){return 5};var orient="vertical";var base=createBase({decorate:function decorate(){},defined:function defined$1(d,i){return defined(baseValue,crossValue,mainValue)(d,i)},xScale:d3Scale.scaleIdentity(),yScale:d3Scale.scaleIdentity()});base.getTransposer=function(){if(base.orient()!=="vertical"){return function(points){var transposed=new points.constructor(points.length);for(var n=0;n<points.length;n+=2){transposed[n]=points[n+1];transposed[n+1]=points[n]}console.log(transposed);return transposed}}return function(points){return points}};base.transposer=function(points){return base.getTransposer()(points)};base.valueFn=function(){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);return function(d,i){if(orient==="vertical"){var y=yScale(mainValue(d,i),i);var y0=yScale(baseValue(d,i),i);var x=xScale(crossValue(d,i),i);return{d:d,x:x,y:y,y0:y0}}else{var _y=xScale(mainValue(d,i),i);var _y2=xScale(baseValue(d,i),i);var _x=yScale(crossValue(d,i),i);return{d:d,x:_x,y:_y,y0:_y2}}}};base.baseValue=function(){if(!arguments.length){return baseValue}baseValue=functor(arguments.length<=0?undefined:arguments[0]);return base};base.crossValue=function(){if(!arguments.length){return crossValue}crossValue=functor(arguments.length<=0?undefined:arguments[0]);return base};base.mainValue=function(){if(!arguments.length){return mainValue}mainValue=functor(arguments.length<=0?undefined:arguments[0]);return base};base.bandwidth=function(){if(!arguments.length){return bandwidth}bandwidth=functor(arguments.length<=0?undefined:arguments[0]);return base};base.align=function(){if(!arguments.length){return align}align=arguments.length<=0?undefined:arguments[0];return base};base.orient=function(){if(!arguments.length){return orient}orient=arguments.length<=0?undefined:arguments[0];return base};return base};var red="#c60";var green="#6c0";var black="#000";var gray="#ddd";var darkGray="#999";var colors={red:red,green:green,black:black,gray:gray,darkGray:darkGray};var toGl=function toGl(v){return v/255};var glColor=function glColor(value){var c=d3Color.color(value);return[toGl(c.r),toGl(c.g),toGl(c.b),Math.sqrt(c.opacity)]};var alignOffset=function(align,width){switch(align){case"left":return width/2;case"right":return-width/2;default:return 0}};var bar=function(){var base=xyBase();var bar=function bar(data){base();var context=base.context();var filteredData=data.filter(base.defined());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};var projectedData=filteredData.map(valueFn(pixel));context.fillStyle=colors.darkGray;context.strokeStyle="transparent";context.strokeWidth=1;base.decorate()(context,data,0);var fillColor=glColor(context.fillStyle);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var vertices=Array(projectedData.length*12);var lines=[];var transposer=base.getTransposer();projectedData.forEach(function(datum,i){var x0=datum.x0,x1=datum.x1,y0=datum.y0,y1=datum.y1;var p=i*12;vertices[p]=x0;vertices[p+1]=y0;vertices[p+2]=x1;vertices[p+3]=y0;vertices[p+4]=x0;vertices[p+5]=y1;vertices[p+6]=x0;vertices[p+7]=y1;vertices[p+8]=x1;vertices[p+9]=y0;vertices[p+10]=x1;vertices[p+11]=y1;if(strokeColor){if(base.orient()==="vertical"){lines.push([x0,y0,x0,y1,x1,y1,x1,y0])}else{lines.push([x0,y0,x1,y0,x1,y1,x0,y1])}}});base.draw().triangles(vertices,fillColor);lines.forEach(function(line){base.draw().line(line,[strokeWidth*pixel.x,strokeWidth*pixel.y],strokeColor)});base.draw(null)};var valueFn=function valueFn(pixel){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);if(base.orient()==="vertical"){return function(d,i){var width=base.bandwidth()(d,i)*pixel.x;var offset=alignOffset(base.align(),width);var x=xScale(base.crossValue()(d,i),i);var y0=yScale(base.baseValue()(d,i),i);var y1=yScale(base.mainValue()(d,i),i);return{x0:x-offset,x1:x-offset+width,y0:y0,y1:y1}}}else{return function(d,i){var height=base.bandwidth()(d,i)*pixel.y;var offset=alignOffset(base.align(),height);var x0=yScale(base.baseValue()(d,i),i);var x1=yScale(base.mainValue()(d,i),i);var y=xScale(base.crossValue()(d,i),i);return{x0:x0,x1:x1,y0:y-offset,y1:y-offset+height}}}};d3fcRebind.rebindAll(bar,base);return bar};var line=function(){var base=xyBase();var line=function line(data){base();var context=base.context();var filteredData=data.filter(base.defined());var projectedData=filteredData.map(valueFn());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};context.strokeStyle=colors.darkGray;context.strokeWidth=1;base.decorate()(context,data,0);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var vertices=new Float32Array(projectedData.length*2);projectedData.forEach(function(datum,i){var p=i*2;vertices[p]=datum.x;vertices[p+1]=datum.y});base.draw().line(vertices,[strokeWidth*pixel.x,strokeWidth*pixel.y],strokeColor);base.draw(null)};var valueFn=function valueFn(){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);if(base.orient()==="vertical"){return function(d,i){return{x:xScale(base.crossValue()(d,i),i),y:yScale(base.mainValue()(d,i),i)}}}else{return function(d,i){return{y:xScale(base.crossValue()(d,i),i),x:yScale(base.mainValue()(d,i),i)}}}};d3fcRebind.rebindAll(line,base,d3fcRebind.exclude("baseValue","bandwidth","align"));return line};function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_nonIterableSpread()}function _arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i<arr.length;i++)arr2[i]=arr[i];return arr2}}function _iterableToArray(iter){if(Symbol.iterator in Object(iter)||Object.prototype.toString.call(iter)==="[object Arguments]")return Array.from(iter)}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}var area=function(){var base=xyBase();var area=function area(data){base();var context=base.context();var filteredData=data.filter(base.defined());var projectedData=filteredData.map(base.valueFn());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};context.fillStyle=colors.darkGray;context.strokeStyle="transparent";context.strokeWidth=1;base.decorate()(context,data,0);var fillColor=glColor(context.fillStyle);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var vertices=[];var linePoints=[];projectedData.forEach(function(datum,i){var points=[datum.x,datum.y0,datum.x,datum.y];vertices.push.apply(vertices,_toConsumableArray(base.transposer(points)));if(i<projectedData.length-1){var next=projectedData[i+1];var dh=datum.y-datum.y0;var nh=next.y-next.y0;if(nh<0!==dh<0){var dx=next.x-datum.x;var x=datum.x+dx*Math.abs(dh)/(Math.abs(dh)+Math.abs(nh));var extra=[x,datum.y0,x,datum.y0];vertices.push.apply(vertices,_toConsumableArray(base.transposer(extra)))}}if(strokeColor){linePoints.push(datum.x,datum.y)}});base.draw().triangleStrip(vertices,fillColor);if(strokeColor){base.draw().line(base.transposer(linePoints),[strokeWidth*pixel.x,strokeWidth*pixel.y],strokeColor)}base.draw(null)};d3fcRebind.rebindAll(area,base,d3fcRebind.exclude("bandwidth","align"));return area};var point=function(){var base=xyBase();var size=5;var type=d3.symbolCircle;var typePoints=null;var point=function point(data){base();var context=base.context();var filteredData=data.filter(base.defined());var projectedData=filteredData.map(valueFn());var xRange=base.xScale().range();var yRange=base.yScale().range();var pixel={x:Math.abs(2/(xRange[1]-xRange[0])),y:Math.abs(2/(yRange[1]-yRange[0]))};context.fillStyle=colors.darkGray;context.strokeStyle="transparent";context.strokeWidth=1;base.decorate()(context,data,0);var fillColor=glColor(context.fillStyle);var strokeColor=context.strokeStyle!="transparent"?glColor(context.strokeStyle):null;var strokeWidth=parseInt(context.strokeWidth);var points=typePoints?shapePoints(projectedData,pixel):circlePoints(projectedData,pixel);if(strokeColor){base.draw().edges(points,fillColor,strokeWidth,strokeColor)}else{base.draw().triangles(points,fillColor)}base.draw(null)};var shapePoints=function shapePoints(projectedData,pixel){var trianglesPerShape=typePoints.length-1;var points=new Float32Array(projectedData.length*trianglesPerShape*6);var allPointsIndex=0;projectedData.forEach(function(datum,i){var computedSize=Math.floor(Math.sqrt(datum.size)*.5);var x=datum.x;var y=datum.y;for(var n=0;n<typePoints.length-1;n++){var p=allPointsIndex;points[p]=x;points[p+1]=y;points[p+2]=x+typePoints[n][0]*computedSize*pixel.x;points[p+3]=y-typePoints[n][1]*computedSize*pixel.y;points[p+4]=x+typePoints[n+1][0]*computedSize*pixel.x;points[p+5]=y-typePoints[n+1][1]*computedSize*pixel.y;allPointsIndex+=6}});return points};var circlePoints=function circlePoints(projectedData,pixel){var sizes=Array(projectedData.length);var allPointsSize=0;projectedData.forEach(function(datum,i){sizes[i]=Math.floor(Math.sqrt(datum.size)*.65);allPointsSize+=sizes[i]});var points=new Float32Array(allPointsSize*2*6);var allPointsIndex=0;projectedData.forEach(function(datum,i){var computedSize=sizes[i];var x=datum.x;var y=datum.y;var getX=function getX(angle){return x+Math.sin(angle)*computedSize*pixel.x};var getY=function getY(angle){return y+Math.cos(angle)*computedSize*pixel.y};var num=2*computedSize;for(var n=0;n<num;n++){var a1=2*n*Math.PI/num;var a2=2*(n+1)*Math.PI/num;var p=allPointsIndex;points[p]=x;points[p+1]=y;points[p+2]=getX(a1);points[p+3]=getY(a1);points[p+4]=getX(a2);points[p+5]=getY(a2);allPointsIndex+=6}});return points};var valueFn=function valueFn(){var xScale=base.xScale().copy().range([-1,1]);var yScale=base.yScale().copy().range([-1,1]);var sizeFn=typeof size==="function"?size:function(){return size};if(base.orient()==="vertical"){return function(d,i){return{x:xScale(base.crossValue()(d,i),i),y:yScale(base.mainValue()(d,i),i),size:sizeFn(d)}}}else{return function(d,i){return{y:xScale(base.crossValue()(d,i),i),x:yScale(base.mainValue()(d,i),i),size:sizeFn(d)}}}};point.size=function(){if(!arguments.length){return size}size=arguments.length<=0?undefined:arguments[0];return point};point.type=function(){if(!arguments.length){return type}type=arguments.length<=0?undefined:arguments[0];if(type==d3.symbolCircle){typePoints=null}else{typePoints=shapeToPoints(type)}return point};d3fcRebind.rebindAll(point,base,d3fcRebind.exclude("baseValue","bandwidth","align"));return point};function shapeToPoints(d3Shape){if(d3Shape){var shapeSymbol=d3.symbol().type(d3Shape);var shapePath=shapeSymbol.size(5)();var points=shapePath.substring(1,shapePath.length-1).split("L").map(function(p){return p.split(",").map(function(c){return parseFloat(c)})});if(points.length===1){var l=-points[0][0];points.push([l,-l]);points.push([l,l]);points.push([-l,l])}points.push(points[0]);return points}return[]}var multiBase=function(){var series=[];var mapping=function mapping(d){return d};var key=function key(_,i){return i};var multi=createBase({decorate:function decorate(){},xScale:d3Scale.scaleIdentity(),yScale:d3Scale.scaleIdentity()});multi.mapping=function(){if(!arguments.length){return mapping}mapping=arguments.length<=0?undefined:arguments[0];return multi};multi.key=function(){if(!arguments.length){return key}key=arguments.length<=0?undefined:arguments[0];return multi};multi.series=function(){if(!arguments.length){return series}series=arguments.length<=0?undefined:arguments[0];return multi};return multi};var multiSeries=function(){var base=multiBase();var multi=function multi(data){base();var context=base.context();var mapping=base.mapping();var series=base.series();var xScale=base.xScale();var yScale=base.yScale();series.forEach(function(dataSeries,index){var seriesData=mapping(data,index,series);dataSeries.context(context).xScale(xScale).yScale(yScale);var adaptedDecorate;if(dataSeries.decorate){adaptedDecorate=dataSeries.decorate();dataSeries.decorate(function(c,d,i){base.decorate()(c,data,index);adaptedDecorate(c,d,i)})}else{base.decorate()(context,data,index)}dataSeries.draw(base.draw());dataSeries(seriesData);if(adaptedDecorate){dataSeries.decorate(adaptedDecorate)}});base.draw(null)};d3fcRebind.rebindAll(multi,base);return multi};var repeat=function(){var orient="vertical";var series=null;var multi=multiSeries();var repeat=function repeat(data){if(orient==="vertical"){multi.series(data[0].map(function(_){return series})).mapping(function(data,index){return data.map(function(d){return d[index]})})}else{multi.series(data.map(function(_){return series})).mapping(function(data,index){return data[index]})}multi(data)};repeat.series=function(){if(!arguments.length){return series}series=arguments.length<=0?undefined:arguments[0];return repeat};repeat.orient=function(){if(!arguments.length){return orient}orient=arguments.length<=0?undefined:arguments[0];return repeat};d3fcRebind.rebindAll(repeat,multi,d3fcRebind.exclude("series","mapping"));return repeat};var groupedBase=function(series){var bandwidth=function bandwidth(){return 50};var align="center";var offsetScale=d3Scale.scaleBand();var grouped=createBase({decorate:function decorate(){},xScale:d3Scale.scaleLinear(),yScale:d3Scale.scaleLinear()});grouped.offsetScaleForDatum=function(data,d,i,screenPixels){var width=2*bandwidth(d,i)/screenPixels;var offset=alignOffset(align,width);var halfWidth=width/2;return offsetScale.domain(d3Array.range(0,data.length)).range([-halfWidth+offset,halfWidth+offset])};grouped.bandwidth=function(){if(!arguments.length){return bandwidth}bandwidth=functor(arguments.length<=0?undefined:arguments[0]);return grouped};grouped.align=function(){if(!arguments.length){return align}align=arguments.length<=0?undefined:arguments[0];return grouped};d3fcRebind.rebindAll(grouped,offsetScale,d3fcRebind.includeMap({paddingInner:"paddingOuter"}));return grouped};function grouped(series){var base=groupedBase(series);var grouped=function grouped(data){data.forEach(function(seriesData,index){var isVertical=series.orient()!=="horizontal";var baseScale=isVertical?base.xScale():base.yScale();var compositeScale=createCompositeScale(data,baseScale,index,baseScale.range());if(isVertical){series.xScale(compositeScale);series.yScale(base.yScale())}else{series.yScale(compositeScale);series.xScale(base.xScale())}if(series.bandwidth){series.bandwidth(function(d,i){return base.bandwidth()(d,i)/data.length})}series.decorate(function(c,d){return base.decorate()(c,d,index)});series.draw(base.draw());series(seriesData)});base.draw(null)};var createCompositeScale=function createCompositeScale(data,baseScale,index,range){var compositeScale=function compositeScale(d,i){var offset=base.offsetScaleForDatum(data,d,i,range[1]-range[0]);console.log(index,offset(index),baseScale(d)+offset(index)+offset.bandwidth()/2);return baseScale(d)+offset(index)+offset.bandwidth()/2};compositeScale.copy=function(){return createCompositeScale(data,baseScale.copy(),index,range)};compositeScale.range=function(){if(!arguments.length){return baseScale.range()}baseScale.range.apply(baseScale,arguments);return compositeScale};return compositeScale};d3fcRebind.rebindAll(grouped,series,d3fcRebind.exclude("decorate","xScale","yScale"));d3fcRebind.rebindAll(grouped,base,d3fcRebind.exclude("offsetScaleForDatum","context"));return grouped}exports.cartesian=cartesian;exports.seriesWebGLArea=area;exports.seriesWebGLBar=bar;exports.seriesWebGLGrouped=grouped;exports.seriesWebGLLine=line;exports.seriesWebGLMulti=multiSeries;exports.seriesWebGLPoint=point;exports.seriesWebGLRepeat=repeat;Object.defineProperty(exports,"__esModule",{value:true})}); |
@@ -33,2 +33,12 @@ const slider = () => { | ||
const moveToPosition = x => { | ||
const position = 100 * Math.floor((max / 100) * (x / sliderWidth)); | ||
const newValue = Math.min(max, Math.max(min, position)); | ||
if (value !== newValue) { | ||
value = newValue; | ||
slider(selection); | ||
on.change(value); | ||
} | ||
}; | ||
const x = (value / max) * (size.width - textSize); | ||
@@ -44,11 +54,5 @@ const handleWidth = size.height - 8; | ||
.style('cursor', 'pointer') | ||
.call(d3.drag().on('drag', () => { | ||
const position = 100 * Math.floor((max / 100) * (d3.event.x / sliderWidth)); | ||
const newValue = Math.min(max, Math.max(min, position)); | ||
if (value !== newValue) { | ||
value = newValue; | ||
slider(selection); | ||
on.change(value); | ||
} | ||
})); | ||
.call(d3.drag().on('drag', () => moveToPosition(d3.event.x))); | ||
selection.on('click', () => moveToPosition(d3.event.x)); | ||
}; | ||
@@ -55,0 +59,0 @@ |
{ | ||
"name": "d3fc-webgl", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "A WebGL implementation of d3fc series", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
@@ -33,15 +33,4 @@ import initShaderProgram from './initShaderProgram'; | ||
void main() { | ||
lowp float r = (vEdge[1] - vEdge[0]) / 2.0; | ||
if (r > 1.0) { | ||
gl_FragColor = vColor; | ||
} else if (r < 0.0) { | ||
gl_FragColor = vColorEdge; | ||
} else { | ||
lowp vec4 blended; | ||
blended[0] = vColorEdge[0] + r * (vColor[0] - vColorEdge[0]); | ||
blended[1] = vColorEdge[1] + r * (vColor[1] - vColorEdge[1]); | ||
blended[2] = vColorEdge[2] + r * (vColor[2] - vColorEdge[2]); | ||
blended[3] = vColorEdge[3] + r * (vColor[3] - vColorEdge[3]); | ||
gl_FragColor = blended; | ||
} | ||
lowp float r = clamp((vEdge[1] - vEdge[0]) / 2.0, 0.0, 1.0); | ||
gl_FragColor = r * vColor + (1.0 - r) * vColorEdge; | ||
} | ||
@@ -48,0 +37,0 @@ `; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
555227
3844