diff --git a/build/Three.js b/build/Three.js index 86f334777655a94f1c67fa7a7b0895135eca61fe..698a1dd4f0419717e85a4a88f122537b6f4238f7 100644 --- a/build/Three.js +++ b/build/Three.js @@ -172,21 +172,21 @@ p;){var q=g[m++],s=q&2,f=q&4,x=q&8,t=q&16,r=q&32,w=q&64,o=q&128;if(q&1){q=new TH {};d.morphColors[f].name=a.morphColors[f].name;d.morphColors[f].colors=[];e=d.morphColors[f].colors;j=a.morphColors[f].colors;n=0;for(l=j.length;n1&&(M=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(J,M);a.name=n;if(x){a.matrixAutoUpdate=false;a.matrix.set(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15])}else{a.position.set(z[0],z[1],z[2]);if(E){a.quaternion.set(E[0],E[1],E[2],E[3]);a.useQuaternion=true}else a.rotation.set(C[0],C[1],C[2]);a.scale.set(A[0],A[1],A[2])}a.visible=s.visible;a.castShadow=s.castShadow;a.receiveShadow=s.receiveShadow;N.scene.add(a);N.objects[n]=a}}else{z=s.position;C=s.rotation;E=s.quaternion;A=s.scale;E=0;a=new THREE.Object3D; -a.name=n;a.position.set(z[0],z[1],z[2]);if(E){a.quaternion.set(E[0],E[1],E[2],E[3]);a.useQuaternion=true}else a.rotation.set(C[0],C[1],C[2]);a.scale.set(A[0],A[1],A[2]);a.visible=s.visible!==void 0?s.visible:false;N.scene.add(a);N.objects[n]=a;N.empties[n]=a}}}function f(a){return function(b){N.geometries[a]=b;e();Q=Q-1;i.onLoadComplete();h()}}function g(a){return function(b){N.geometries[a]=b}}function h(){i.callbackProgress({totalModels:ba,totalTextures:X,loadedModels:ba-Q,loadedTextures:X-F},N); -i.onLoadProgress();Q===0&&F===0&&b(N)}var i=this,j=THREE.Loader.prototype.extractUrlBase(c),l,m,n,p,r,o,q,s,x,t,w,z,C,E,A,u,H,J,M,O,$,B,G,Q,F,ba,X,N;B=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;F=Q=0;N={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(B.transform){a=B.transform.position;t=B.transform.rotation;u=B.transform.scale;a&&N.scene.position.set(a[0],a[1],a[2]);t&&N.scene.rotation.set(t[0],t[1],t[2]);u&&N.scene.scale.set(u[0], -u[1],u[2]);if(a||t||u){N.scene.updateMatrix();N.scene.updateMatrixWorld()}}a=function(a){return function(){F=F-a;h();i.onLoadComplete()}};for(r in B.cameras){u=B.cameras[r];u.type==="perspective"?O=new THREE.PerspectiveCamera(u.fov,u.aspect,u.near,u.far):u.type==="ortho"&&(O=new THREE.OrthographicCamera(u.left,u.right,u.top,u.bottom,u.near,u.far));z=u.position;t=u.target;u=u.up;O.position.set(z[0],z[1],z[2]);O.target=new THREE.Vector3(t[0],t[1],t[2]);u&&O.up.set(u[0],u[1],u[2]);N.cameras[r]=O}for(p in B.lights){t= -B.lights[p];r=t.color!==void 0?t.color:16777215;O=t.intensity!==void 0?t.intensity:1;if(t.type==="directional"){z=t.direction;w=new THREE.DirectionalLight(r,O);w.position.set(z[0],z[1],z[2]);w.position.normalize()}else if(t.type==="point"){z=t.position;w=t.distance;w=new THREE.PointLight(r,O,w);w.position.set(z[0],z[1],z[2])}else t.type==="ambient"&&(w=new THREE.AmbientLight(r));N.scene.add(w);N.lights[p]=w}for(o in B.fogs){p=B.fogs[o];p.type==="linear"?$=new THREE.Fog(0,p.near,p.far):p.type==="exp2"&& -($=new THREE.FogExp2(0,p.density));u=p.color;$.color.setRGB(u[0],u[1],u[2]);N.fogs[o]=$}if(N.cameras&&B.defaults.camera)N.currentCamera=N.cameras[B.defaults.camera];if(N.fogs&&B.defaults.fog)N.scene.fog=N.fogs[B.defaults.fog];u=B.defaults.bgcolor;N.bgColor=new THREE.Color;N.bgColor.setRGB(u[0],u[1],u[2]);N.bgColorAlpha=B.defaults.bgalpha;for(l in B.geometries){o=B.geometries[l];if(o.type=="bin_mesh"||o.type=="ascii_mesh"){Q=Q+1;i.onLoadStart()}}ba=Q;for(l in B.geometries){o=B.geometries[l];if(o.type=== -"cube"){J=new THREE.CubeGeometry(o.width,o.height,o.depth,o.segmentsWidth,o.segmentsHeight,o.segmentsDepth,null,o.flipped,o.sides);N.geometries[l]=J}else if(o.type==="plane"){J=new THREE.PlaneGeometry(o.width,o.height,o.segmentsWidth,o.segmentsHeight);N.geometries[l]=J}else if(o.type==="sphere"){J=new THREE.SphereGeometry(o.radius,o.segmentsWidth,o.segmentsHeight);N.geometries[l]=J}else if(o.type==="cylinder"){J=new THREE.CylinderGeometry(o.topRad,o.botRad,o.height,o.radSegs,o.heightSegs);N.geometries[l]= -J}else if(o.type==="torus"){J=new THREE.TorusGeometry(o.radius,o.tube,o.segmentsR,o.segmentsT);N.geometries[l]=J}else if(o.type==="icosahedron"){J=new THREE.IcosahedronGeometry(o.radius,o.subdivisions);N.geometries[l]=J}else if(o.type==="bin_mesh")c.load(d(o.url,B.urlBaseType),f(l));else if(o.type==="ascii_mesh")G.load(d(o.url,B.urlBaseType),f(l));else if(o.type==="embedded_mesh"){o=B.embeds[o.id];o.metadata=B.metadata;o&&G.createModel(o,g(l),"")}}for(q in B.textures){l=B.textures[q];if(l.url instanceof -Array){F=F+l.url.length;for(o=0;o1&&(M=new THREE.MeshFaceMaterial);c= +new THREE.Mesh(J,M);c.name=n;if(x){c.matrixAutoUpdate=false;c.matrix.set(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15])}else{c.position.set(z[0],z[1],z[2]);if(E){c.quaternion.set(E[0],E[1],E[2],E[3]);c.useQuaternion=true}else c.rotation.set(C[0],C[1],C[2]);c.scale.set(A[0],A[1],A[2])}c.visible=s.visible;c.castShadow=s.castShadow;c.receiveShadow=s.receiveShadow;a.add(c);N.objects[n]=c}}else{z=s.position;C=s.rotation;E=s.quaternion;A=s.scale;E=0;c=new THREE.Object3D; +c.name=n;c.position.set(z[0],z[1],z[2]);if(E){c.quaternion.set(E[0],E[1],E[2],E[3]);c.useQuaternion=true}else c.rotation.set(C[0],C[1],C[2]);c.scale.set(A[0],A[1],A[2]);c.visible=s.visible!==void 0?s.visible:false;a.add(c);N.objects[n]=c;N.empties[n]=c}s.children!==void 0&&e(c,s.children)}}function f(a){return function(b){N.geometries[a]=b;e(N.scene,B.objects);Q=Q-1;i.onLoadComplete();h()}}function g(a){return function(b){N.geometries[a]=b}}function h(){i.callbackProgress({totalModels:ba,totalTextures:X, +loadedModels:ba-Q,loadedTextures:X-F},N);i.onLoadProgress();Q===0&&F===0&&b(N)}var i=this,j=THREE.Loader.prototype.extractUrlBase(c),l,m,n,p,r,o,q,s,x,t,w,z,C,E,A,u,H,J,M,O,$,B,G,Q,F,ba,X,N;B=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;F=Q=0;N={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(B.transform){a=B.transform.position;t=B.transform.rotation;u=B.transform.scale;a&&N.scene.position.set(a[0],a[1],a[2]);t&&N.scene.rotation.set(t[0], +t[1],t[2]);u&&N.scene.scale.set(u[0],u[1],u[2]);if(a||t||u){N.scene.updateMatrix();N.scene.updateMatrixWorld()}}a=function(a){return function(){F=F-a;h();i.onLoadComplete()}};for(r in B.cameras){u=B.cameras[r];u.type==="perspective"?O=new THREE.PerspectiveCamera(u.fov,u.aspect,u.near,u.far):u.type==="ortho"&&(O=new THREE.OrthographicCamera(u.left,u.right,u.top,u.bottom,u.near,u.far));z=u.position;t=u.target;u=u.up;O.position.set(z[0],z[1],z[2]);O.target=new THREE.Vector3(t[0],t[1],t[2]);u&&O.up.set(u[0], +u[1],u[2]);N.cameras[r]=O}for(p in B.lights){t=B.lights[p];r=t.color!==void 0?t.color:16777215;O=t.intensity!==void 0?t.intensity:1;if(t.type==="directional"){z=t.direction;w=new THREE.DirectionalLight(r,O);w.position.set(z[0],z[1],z[2]);w.position.normalize()}else if(t.type==="point"){z=t.position;w=t.distance;w=new THREE.PointLight(r,O,w);w.position.set(z[0],z[1],z[2])}else t.type==="ambient"&&(w=new THREE.AmbientLight(r));N.scene.add(w);N.lights[p]=w}for(o in B.fogs){p=B.fogs[o];p.type==="linear"? +$=new THREE.Fog(0,p.near,p.far):p.type==="exp2"&&($=new THREE.FogExp2(0,p.density));u=p.color;$.color.setRGB(u[0],u[1],u[2]);N.fogs[o]=$}if(N.cameras&&B.defaults.camera)N.currentCamera=N.cameras[B.defaults.camera];if(N.fogs&&B.defaults.fog)N.scene.fog=N.fogs[B.defaults.fog];u=B.defaults.bgcolor;N.bgColor=new THREE.Color;N.bgColor.setRGB(u[0],u[1],u[2]);N.bgColorAlpha=B.defaults.bgalpha;for(l in B.geometries){o=B.geometries[l];if(o.type=="bin_mesh"||o.type=="ascii_mesh"){Q=Q+1;i.onLoadStart()}}ba= +Q;for(l in B.geometries){o=B.geometries[l];if(o.type==="cube"){J=new THREE.CubeGeometry(o.width,o.height,o.depth,o.segmentsWidth,o.segmentsHeight,o.segmentsDepth,null,o.flipped,o.sides);N.geometries[l]=J}else if(o.type==="plane"){J=new THREE.PlaneGeometry(o.width,o.height,o.segmentsWidth,o.segmentsHeight);N.geometries[l]=J}else if(o.type==="sphere"){J=new THREE.SphereGeometry(o.radius,o.segmentsWidth,o.segmentsHeight);N.geometries[l]=J}else if(o.type==="cylinder"){J=new THREE.CylinderGeometry(o.topRad, +o.botRad,o.height,o.radSegs,o.heightSegs);N.geometries[l]=J}else if(o.type==="torus"){J=new THREE.TorusGeometry(o.radius,o.tube,o.segmentsR,o.segmentsT);N.geometries[l]=J}else if(o.type==="icosahedron"){J=new THREE.IcosahedronGeometry(o.radius,o.subdivisions);N.geometries[l]=J}else if(o.type==="bin_mesh")c.load(d(o.url,B.urlBaseType),f(l));else if(o.type==="ascii_mesh")G.load(d(o.url,B.urlBaseType),f(l));else if(o.type==="embedded_mesh"){o=B.embeds[o.id];o.metadata=B.metadata;o&&G.createModel(o,g(l), +"")}}for(q in B.textures){l=B.textures[q];if(l.url instanceof Array){F=F+l.url.length;for(o=0;o=0&&J>=0&&C+J<1},M=1.0E-4;this.setPrecision=function(a){M=a};this.intersectObject=function(a,b){var c,d=[];if(b===true)for(var l=0,q=a.children.length;la.scale.x)return[];c={distance:v,point:a.position,face:null,object:a};d.push(c)}else if(a instanceof THREE.Mesh){l=THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(),a.matrixWorld.getColumnY().length(),a.matrixWorld.getColumnZ().length());l=a.geometry.boundingSphere.radius*Math.max(l.x,Math.max(l.y,l.z));v=B(this.origin,this.direction,a.matrixWorld.getPosition());if(v>l)return d;var z,P,p=a.geometry,r=p.vertices,s;a.matrixRotationWorld.extractRotation(a.matrixWorld);l=0;for(q=p.faces.length;l< -q;l++){c=p.faces[l];m.copy(this.origin);k.copy(this.direction);s=a.matrixWorld;h=s.multiplyVector3(h.copy(c.centroid)).subSelf(m);n=a.matrixRotationWorld.multiplyVector3(n.copy(c.normal));z=k.dot(n);if(!(Math.abs(z)0:z<0))){i.add(m,k.multiplyScalar(P));v=m.distanceTo(i);if(!(vthis.far))if(c instanceof THREE.Face3){f=s.multiplyVector3(f.copy(r[c.a]));e=s.multiplyVector3(e.copy(r[c.b]));g=s.multiplyVector3(g.copy(r[c.c])); -if(L(i,f,e,g)){c={distance:v,point:i.clone(),face:c,object:a};d.push(c)}}else if(c instanceof THREE.Face4){f=s.multiplyVector3(f.copy(r[c.a]));e=s.multiplyVector3(e.copy(r[c.b]));g=s.multiplyVector3(g.copy(r[c.c]));j=s.multiplyVector3(j.copy(r[c.d]));if(L(i,f,e,j)||L(i,e,g,j)){c={distance:v,point:i.clone(),face:c,object:a};d.push(c)}}}}}}d.sort(o);return d};this.intersectObjects=function(a,b){for(var c=[],d=0,e=a.length;d=0&&K>=0&&C+K<1},N=1.0E-4;this.setPrecision=function(a){N=a};this.intersectObject=function(a,b){var c,d=[];if(b===true)for(var l=0,q=a.children.length;la.scale.x)return[];c={distance:v,point:a.position,face:null,object:a};d.push(c)}else if(a instanceof THREE.Mesh){l=THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(),a.matrixWorld.getColumnY().length(),a.matrixWorld.getColumnZ().length());l=a.geometry.boundingSphere.radius*Math.max(l.x,Math.max(l.y,l.z));v=B(this.origin,this.direction,a.matrixWorld.getPosition());if(v>l)return d;var z,p,r=a.geometry,J=r.vertices,s;a.matrixRotationWorld.extractRotation(a.matrixWorld);l=0;for(q=r.faces.length;l< +q;l++){c=r.faces[l];m.copy(this.origin);k.copy(this.direction);s=a.matrixWorld;h=s.multiplyVector3(h.copy(c.centroid)).subSelf(m);n=a.matrixRotationWorld.multiplyVector3(n.copy(c.normal));z=k.dot(n);if(!(Math.abs(z)0:z<0))){i.add(m,k.multiplyScalar(p));v=m.distanceTo(i);if(!(vthis.far))if(c instanceof THREE.Face3){f=s.multiplyVector3(f.copy(J[c.a]));e=s.multiplyVector3(e.copy(J[c.b]));g=s.multiplyVector3(g.copy(J[c.c])); +if(M(i,f,e,g)){c={distance:v,point:i.clone(),face:c,object:a};d.push(c)}}else if(c instanceof THREE.Face4){f=s.multiplyVector3(f.copy(J[c.a]));e=s.multiplyVector3(e.copy(J[c.b]));g=s.multiplyVector3(g.copy(J[c.c]));j=s.multiplyVector3(j.copy(J[c.d]));if(M(i,f,e,j)||M(i,e,g,j)){c={distance:v,point:i.clone(),face:c,object:a};d.push(c)}}}}}}d.sort(o);return d};this.intersectObjects=function(a,b){for(var c=[],d=0,e=a.length;de?d:e;f=f>g?f:g}a()};this.add3Points=function(e,g,h,n,i,o){if(j===true){j=false;b=eh?e>i?e:i:h>i?h:i;f=g>n?g>o?g:o:n>o?n:o}else{b=eh?e>i?e>d?e:d:i>d?i:d:h>i?h>d?h:d:i>d?i:d;f=g>n?g>o?g>f?g:f:o>f?o:f:n>o?n>f?n:f:o>f?o:f}a()};this.addRectangle=function(e){if(j===true){j=false;b=e.getLeft();c=e.getTop();d=e.getRight();f=e.getBottom()}else{b=b=0&&g>=0&&f>=0&&h>=0)return true;if(e<0&&g<0||f<0&&h<0)return false; -e<0?c=Math.max(c,e/(e-g)):g<0&&(d=Math.min(d,e/(e-g)));f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h)));if(dj&&m.positionScreen.z0)){U=h[k-2];J.copy(O.positionScreen);L.copy(U.positionScreen);if(f(J,L)===true){J.multiplyScalar(1/J.w);L.multiplyScalar(1/ -L.w);R=void 0;if(r===u.length){R=new THREE.RenderableLine;u.push(R)}else R=u[r];r++;p=R;p.v1.positionScreen.copy(J);p.v2.positionScreen.copy(L);p.z=Math.max(J.z,L.z);p.material=F.material;A.elements.push(p)}}}}}b=0;for(S=A.sprites.length;b0&&E.z<1){j=void 0;if(B===x.length){j=new THREE.RenderableParticle;x.push(j)}else j=x[B];B++; +e<0?c=Math.max(c,e/(e-g)):g<0&&(d=Math.min(d,e/(e-g)));f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h)));if(dj&&m.positionScreen.z0)){U=h[k-2];K.copy(J.positionScreen);M.copy(U.positionScreen);if(f(K,M)===true){K.multiplyScalar(1/K.w);M.multiplyScalar(1/ +M.w);Q=void 0;if(r===u.length){Q=new THREE.RenderableLine;u.push(Q)}else Q=u[r];r++;p=Q;p.v1.positionScreen.copy(K);p.v2.positionScreen.copy(M);p.z=Math.max(K.z,M.z);p.material=F.material;A.elements.push(p)}}}}}b=0;for(R=A.sprites.length;b0&&E.z<1){j=void 0;if(B===x.length){j=new THREE.RenderableParticle;x.push(j)}else j=x[B];B++; v=j;v.object=F;v.x=E.x/E.w;v.y=E.y/E.w;v.z=E.z;v.rotation=F.rotation.z;v.scale.x=F.scale.x*Math.abs(v.x-(E.x+e.projectionMatrix.elements[0])/(E.w+e.projectionMatrix.elements[12]));v.scale.y=F.scale.y*Math.abs(v.y-(E.y+e.projectionMatrix.elements[5])/(E.w+e.projectionMatrix.elements[13]));v.material=F.material;A.elements.push(v)}}}g&&A.elements.sort(d);return A}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),f=Math.cos(a.z/2),e=Math.sin(a.x/2),g=Math.sin(a.y/2),j=Math.sin(a.z/2);if(b===void 0||b==="XYZ"){this.x=e*d*f+c*g*j;this.y=c*g*f-e*d*j;this.z=c*d*j+e*g*f;this.w=c*d*f-e*g*j}else if(b==="YXZ"){this.x=e*d*f+c*g*j;this.y=c*g*f-e*d*j;this.z= c*d*j-e*g*f;this.w=c*d*f+e*g*j}else if(b==="ZXY"){this.x=e*d*f-c*g*j;this.y=c*g*f+e*d*j;this.z=c*d*j+e*g*f;this.w=c*d*f-e*g*j}else if(b==="ZYX"){this.x=e*d*f-c*g*j;this.y=c*g*f+e*d*j;this.z=c*d*j-e*g*f;this.w=c*d*f+e*g*j}else if(b==="YZX"){this.x=e*d*f+c*g*j;this.y=c*g*f+e*d*j;this.z=c*d*j-e*g*f;this.w=c*d*f-e*g*j}else if(b==="XZY"){this.x=e*d*f-c*g*j;this.y=c*g*f-e*d*j;this.z=c*d*j+e*g*f;this.w=c*d*f+e*g*j}return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y* @@ -107,9 +107,9 @@ for(b=this.vertices.length;a0){var a;a=this.vertices[0];this.boundingBox.min.copy(a);this.boundingBox.max.copy(a);for(var b=this.boundingBox.min,c=this.boundingBox.max,d=1,f=this.vertices.length;dc.x)c.x= +k=a.vertices[d];h=g[e];n=g[f];i=g[t];o=m.x-j.x;q=k.x-j.x;l=m.y-j.y;p=k.y-j.y;r=m.z-j.z;u=k.z-j.z;v=n.u-h.u;B=i.u-h.u;x=n.v-h.v;A=i.v-h.v;y=1/(v*A-B*x);C.set((A*o-x*q)*y,(A*l-x*p)*y,(A*r-x*u)*y);K.set((v*q-B*o)*y,(v*p-B*l)*y,(v*u-B*r)*y);s[b].addSelf(C);s[c].addSelf(C);s[d].addSelf(C);w[b].addSelf(K);w[c].addSelf(K);w[d].addSelf(K)}var b,c,d,f,e,g,j,m,k,h,n,i,o,q,l,p,r,u,v,B,x,A,y,E,s=[],w=[],C=new THREE.Vector3,K=new THREE.Vector3,M=new THREE.Vector3,N=new THREE.Vector3,t=new THREE.Vector3;b=0;for(c= +this.vertices.length;b0){var a;a=this.vertices[0];this.boundingBox.min.copy(a);this.boundingBox.max.copy(a);for(var b=this.boundingBox.min,c=this.boundingBox.max,d=1,f=this.vertices.length;dc.x)c.x= a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}else{this.boundingBox.min.set(0,0,0);this.boundingBox.max.set(0,0,0)}},computeBoundingSphere:function(){if(!this.boundingSphere)this.boundingSphere={radius:0};for(var a,b=0,c=0,d=this.vertices.length;cb&&(b=a)}this.boundingSphere.radius=b},mergeVertices:function(){var a={},b=[],c=[],d,f=Math.pow(10,4),e,g,j,m;e=0;for(g=this.vertices.length;e0;f--)if(d.indexOf(a["abcd"[f]])!==f){d.splice(f,1);this.faces[e]=new THREE.Face3(d[0],d[1],d[2],a.normal,a.color,a.materialIndex); d=0;for(j=this.faceVertexUvs.length;d1&&(J=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(C,J);a.name=i;if(u){a.matrixAutoUpdate=false;a.matrix.set(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15])}else{a.position.set(x[0],x[1],x[2]);if(y){a.quaternion.set(y[0],y[1],y[2],y[3]);a.useQuaternion=true}else a.rotation.set(A[0],A[1],A[2]);a.scale.set(E[0],E[1],E[2])}a.visible=r.visible;a.castShadow=r.castShadow;a.receiveShadow=r.receiveShadow;z.scene.add(a);z.objects[i]=a}}else{x=r.position;A=r.rotation;y=r.quaternion;E=r.scale;y=0;a=new THREE.Object3D; -a.name=i;a.position.set(x[0],x[1],x[2]);if(y){a.quaternion.set(y[0],y[1],y[2],y[3]);a.useQuaternion=true}else a.rotation.set(A[0],A[1],A[2]);a.scale.set(E[0],E[1],E[2]);a.visible=r.visible!==void 0?r.visible:false;z.scene.add(a);z.objects[i]=a;z.empties[i]=a}}}function e(a){return function(b){z.geometries[a]=b;f();I=I-1;m.onLoadComplete();j()}}function g(a){return function(b){z.geometries[a]=b}}function j(){m.callbackProgress({totalModels:Q,totalTextures:S,loadedModels:Q-I,loadedTextures:S-N},z); -m.onLoadProgress();I===0&&N===0&&b(z)}var m=this,k=THREE.Loader.prototype.extractUrlBase(c),h,n,i,o,q,l,p,r,u,v,B,x,A,y,E,s,w,C,J,L,M,t,G,I,N,Q,S,z;t=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;N=I=0;z={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(t.transform){a=t.transform.position;v=t.transform.rotation;s=t.transform.scale;a&&z.scene.position.set(a[0],a[1],a[2]);v&&z.scene.rotation.set(v[0],v[1],v[2]);s&&z.scene.scale.set(s[0], -s[1],s[2]);if(a||v||s){z.scene.updateMatrix();z.scene.updateMatrixWorld()}}a=function(a){return function(){N=N-a;j();m.onLoadComplete()}};for(q in t.cameras){s=t.cameras[q];s.type==="perspective"?L=new THREE.PerspectiveCamera(s.fov,s.aspect,s.near,s.far):s.type==="ortho"&&(L=new THREE.OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far));x=s.position;v=s.target;s=s.up;L.position.set(x[0],x[1],x[2]);L.target=new THREE.Vector3(v[0],v[1],v[2]);s&&L.up.set(s[0],s[1],s[2]);z.cameras[q]=L}for(o in t.lights){v= -t.lights[o];q=v.color!==void 0?v.color:16777215;L=v.intensity!==void 0?v.intensity:1;if(v.type==="directional"){x=v.direction;B=new THREE.DirectionalLight(q,L);B.position.set(x[0],x[1],x[2]);B.position.normalize()}else if(v.type==="point"){x=v.position;B=v.distance;B=new THREE.PointLight(q,L,B);B.position.set(x[0],x[1],x[2])}else v.type==="ambient"&&(B=new THREE.AmbientLight(q));z.scene.add(B);z.lights[o]=B}for(l in t.fogs){o=t.fogs[l];o.type==="linear"?M=new THREE.Fog(0,o.near,o.far):o.type==="exp2"&& -(M=new THREE.FogExp2(0,o.density));s=o.color;M.color.setRGB(s[0],s[1],s[2]);z.fogs[l]=M}if(z.cameras&&t.defaults.camera)z.currentCamera=z.cameras[t.defaults.camera];if(z.fogs&&t.defaults.fog)z.scene.fog=z.fogs[t.defaults.fog];s=t.defaults.bgcolor;z.bgColor=new THREE.Color;z.bgColor.setRGB(s[0],s[1],s[2]);z.bgColorAlpha=t.defaults.bgalpha;for(h in t.geometries){l=t.geometries[h];if(l.type=="bin_mesh"||l.type=="ascii_mesh"){I=I+1;m.onLoadStart()}}Q=I;for(h in t.geometries){l=t.geometries[h];if(l.type=== -"cube"){C=new THREE.CubeGeometry(l.width,l.height,l.depth,l.segmentsWidth,l.segmentsHeight,l.segmentsDepth,null,l.flipped,l.sides);z.geometries[h]=C}else if(l.type==="plane"){C=new THREE.PlaneGeometry(l.width,l.height,l.segmentsWidth,l.segmentsHeight);z.geometries[h]=C}else if(l.type==="sphere"){C=new THREE.SphereGeometry(l.radius,l.segmentsWidth,l.segmentsHeight);z.geometries[h]=C}else if(l.type==="cylinder"){C=new THREE.CylinderGeometry(l.topRad,l.botRad,l.height,l.radSegs,l.heightSegs);z.geometries[h]= -C}else if(l.type==="torus"){C=new THREE.TorusGeometry(l.radius,l.tube,l.segmentsR,l.segmentsT);z.geometries[h]=C}else if(l.type==="icosahedron"){C=new THREE.IcosahedronGeometry(l.radius,l.subdivisions);z.geometries[h]=C}else if(l.type==="bin_mesh")c.load(d(l.url,t.urlBaseType),e(h));else if(l.type==="ascii_mesh")G.load(d(l.url,t.urlBaseType),e(h));else if(l.type==="embedded_mesh"){l=t.embeds[l.id];l.metadata=t.metadata;l&&G.createModel(l,g(h),"")}}for(p in t.textures){h=t.textures[p];if(h.url instanceof -Array){N=N+h.url.length;for(l=0;l1&&(K=new THREE.MeshFaceMaterial);c= +new THREE.Mesh(C,K);c.name=i;if(u){c.matrixAutoUpdate=false;c.matrix.set(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15])}else{c.position.set(x[0],x[1],x[2]);if(y){c.quaternion.set(y[0],y[1],y[2],y[3]);c.useQuaternion=true}else c.rotation.set(A[0],A[1],A[2]);c.scale.set(E[0],E[1],E[2])}c.visible=r.visible;c.castShadow=r.castShadow;c.receiveShadow=r.receiveShadow;a.add(c);z.objects[i]=c}}else{x=r.position;A=r.rotation;y=r.quaternion;E=r.scale;y=0;c=new THREE.Object3D; +c.name=i;c.position.set(x[0],x[1],x[2]);if(y){c.quaternion.set(y[0],y[1],y[2],y[3]);c.useQuaternion=true}else c.rotation.set(A[0],A[1],A[2]);c.scale.set(E[0],E[1],E[2]);c.visible=r.visible!==void 0?r.visible:false;a.add(c);z.objects[i]=c;z.empties[i]=c}r.children!==void 0&&f(c,r.children)}}function e(a){return function(b){z.geometries[a]=b;f(z.scene,t.objects);I=I-1;m.onLoadComplete();j()}}function g(a){return function(b){z.geometries[a]=b}}function j(){m.callbackProgress({totalModels:P,totalTextures:R, +loadedModels:P-I,loadedTextures:R-O},z);m.onLoadProgress();I===0&&O===0&&b(z)}var m=this,k=THREE.Loader.prototype.extractUrlBase(c),h,n,i,o,q,l,p,r,u,v,B,x,A,y,E,s,w,C,K,M,N,t,G,I,O,P,R,z;t=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;O=I=0;z={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(t.transform){a=t.transform.position;v=t.transform.rotation;s=t.transform.scale;a&&z.scene.position.set(a[0],a[1],a[2]);v&&z.scene.rotation.set(v[0], +v[1],v[2]);s&&z.scene.scale.set(s[0],s[1],s[2]);if(a||v||s){z.scene.updateMatrix();z.scene.updateMatrixWorld()}}a=function(a){return function(){O=O-a;j();m.onLoadComplete()}};for(q in t.cameras){s=t.cameras[q];s.type==="perspective"?M=new THREE.PerspectiveCamera(s.fov,s.aspect,s.near,s.far):s.type==="ortho"&&(M=new THREE.OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far));x=s.position;v=s.target;s=s.up;M.position.set(x[0],x[1],x[2]);M.target=new THREE.Vector3(v[0],v[1],v[2]);s&&M.up.set(s[0], +s[1],s[2]);z.cameras[q]=M}for(o in t.lights){v=t.lights[o];q=v.color!==void 0?v.color:16777215;M=v.intensity!==void 0?v.intensity:1;if(v.type==="directional"){x=v.direction;B=new THREE.DirectionalLight(q,M);B.position.set(x[0],x[1],x[2]);B.position.normalize()}else if(v.type==="point"){x=v.position;B=v.distance;B=new THREE.PointLight(q,M,B);B.position.set(x[0],x[1],x[2])}else v.type==="ambient"&&(B=new THREE.AmbientLight(q));z.scene.add(B);z.lights[o]=B}for(l in t.fogs){o=t.fogs[l];o.type==="linear"? +N=new THREE.Fog(0,o.near,o.far):o.type==="exp2"&&(N=new THREE.FogExp2(0,o.density));s=o.color;N.color.setRGB(s[0],s[1],s[2]);z.fogs[l]=N}if(z.cameras&&t.defaults.camera)z.currentCamera=z.cameras[t.defaults.camera];if(z.fogs&&t.defaults.fog)z.scene.fog=z.fogs[t.defaults.fog];s=t.defaults.bgcolor;z.bgColor=new THREE.Color;z.bgColor.setRGB(s[0],s[1],s[2]);z.bgColorAlpha=t.defaults.bgalpha;for(h in t.geometries){l=t.geometries[h];if(l.type=="bin_mesh"||l.type=="ascii_mesh"){I=I+1;m.onLoadStart()}}P=I; +for(h in t.geometries){l=t.geometries[h];if(l.type==="cube"){C=new THREE.CubeGeometry(l.width,l.height,l.depth,l.segmentsWidth,l.segmentsHeight,l.segmentsDepth,null,l.flipped,l.sides);z.geometries[h]=C}else if(l.type==="plane"){C=new THREE.PlaneGeometry(l.width,l.height,l.segmentsWidth,l.segmentsHeight);z.geometries[h]=C}else if(l.type==="sphere"){C=new THREE.SphereGeometry(l.radius,l.segmentsWidth,l.segmentsHeight);z.geometries[h]=C}else if(l.type==="cylinder"){C=new THREE.CylinderGeometry(l.topRad, +l.botRad,l.height,l.radSegs,l.heightSegs);z.geometries[h]=C}else if(l.type==="torus"){C=new THREE.TorusGeometry(l.radius,l.tube,l.segmentsR,l.segmentsT);z.geometries[h]=C}else if(l.type==="icosahedron"){C=new THREE.IcosahedronGeometry(l.radius,l.subdivisions);z.geometries[h]=C}else if(l.type==="bin_mesh")c.load(d(l.url,t.urlBaseType),e(h));else if(l.type==="ascii_mesh")G.load(d(l.url,t.urlBaseType),e(h));else if(l.type==="embedded_mesh"){l=t.embeds[l.id];l.metadata=t.metadata;l&&G.createModel(l,g(h), +"")}}for(p in t.textures){h=t.textures[p];if(h.url instanceof Array){O=O+h.url.length;for(l=0;l0){c(THREE.NormalBlending);b(1); f("rgba("+Math.floor(p.r*255)+","+Math.floor(p.g*255)+","+Math.floor(p.b*255)+","+r+")");l.fillRect(Math.floor(ba.getX()),Math.floor(ba.getY()),Math.floor(ba.getWidth()),Math.floor(ba.getHeight()))}ba.empty()}};this.render=function(a,h){function i(a){var b,c,d,e;Z.setRGB(0,0,0);ma.setRGB(0,0,0);na.setRGB(0,0,0);b=0;for(c=a.length;b>1;i=g.height>>1;k=e.scale.x* o;m=e.scale.y*q;h=k*n;j=m*i;X.set(a.x-h,a.y-j,a.x+h,a.y+j);if(ga.intersects(X)===false)return;l.save();l.translate(a.x,a.y);l.rotate(-e.rotation);l.scale(k,-m);l.translate(-n,-i);l.drawImage(g,0,0)}l.restore()}else if(g instanceof THREE.ParticleCanvasMaterial){h=e.scale.x*o;j=e.scale.y*q;X.set(a.x-h,a.y-j,a.x+h,a.y+j);if(ga.intersects(X)!==false){d(g.color.getContextStyle());f(g.color.getContextStyle());l.save();l.translate(a.x,a.y);l.rotate(-e.rotation);l.scale(h,j);g.program(l);l.restore()}}}function r(a, e,f,g){b(g.opacity);c(g.blending);l.beginPath();l.moveTo(a.positionScreen.x,a.positionScreen.y);l.lineTo(e.positionScreen.x,e.positionScreen.y);l.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(A!==a)A=l.lineWidth=a;a=g.linecap;if(y!==a)y=l.lineCap=a;a=g.linejoin;if(E!==a)E=l.lineJoin=a;d(g.color.getContextStyle());l.stroke();X.inflate(g.linewidth*2)}}function u(a,d,f,g,k,j,l,i){e.info.render.vertices=e.info.render.vertices+3;e.info.render.faces++;b(i.opacity);c(i.blending); -t=a.positionScreen.x;G=a.positionScreen.y;I=d.positionScreen.x;N=d.positionScreen.y;Q=f.positionScreen.x;S=f.positionScreen.y;x(t,G,I,N,Q,S);if(i instanceof THREE.MeshBasicMaterial)if(i.map!==null){if(i.map.mapping instanceof THREE.UVMapping){la=l.uvs[0];Fa(t,G,I,N,Q,S,la[g].u,la[g].v,la[k].u,la[k].v,la[j].u,la[j].v,i.map)}}else if(i.envMap!==null){if(i.envMap.mapping instanceof THREE.SphericalReflectionMapping){a=h.matrixWorldInverse;V.copy(l.vertexNormalsWorld[g]);za=(V.x*a.elements[0]+V.y*a.elements[4]+ -V.z*a.elements[8])*0.5+0.5;Aa=(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;V.copy(l.vertexNormalsWorld[k]);Ba=(V.x*a.elements[0]+V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Ca=(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;V.copy(l.vertexNormalsWorld[j]);Da=(V.x*a.elements[0]+V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Ea=(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;Fa(t,G,I,N,Q,S,za,Aa,Ba,Ca,Da,Ea,i.envMap)}}else i.wireframe===true?ha(i.color, -i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color);else if(i instanceof THREE.MeshLambertMaterial)if(ua===true)if(i.wireframe===false&&i.shading==THREE.SmoothShading&&l.vertexNormalsWorld.length==3){F.r=H.r=K.r=Z.r;F.g=H.g=K.g=Z.g;F.b=H.b=K.b=Z.b;n(m,l.v1.positionWorld,l.vertexNormalsWorld[0],F);n(m,l.v2.positionWorld,l.vertexNormalsWorld[1],H);n(m,l.v3.positionWorld,l.vertexNormalsWorld[2],K);F.r=Math.max(0,Math.min(i.color.r*F.r,1));F.g=Math.max(0,Math.min(i.color.g*F.g,1)); -F.b=Math.max(0,Math.min(i.color.b*F.b,1));H.r=Math.max(0,Math.min(i.color.r*H.r,1));H.g=Math.max(0,Math.min(i.color.g*H.g,1));H.b=Math.max(0,Math.min(i.color.b*H.b,1));K.r=Math.max(0,Math.min(i.color.r*K.r,1));K.g=Math.max(0,Math.min(i.color.g*K.g,1));K.b=Math.max(0,Math.min(i.color.b*K.b,1));R.r=(H.r+K.r)*0.5;R.g=(H.g+K.g)*0.5;R.b=(H.b+K.b)*0.5;aa=wa(F,H,K,R);pa(t,G,I,N,Q,S,0,0,1,0,0,1,aa)}else{D.r=Z.r;D.g=Z.g;D.b=Z.b;n(m,l.centroidWorld,l.normalWorld,D);D.r=Math.max(0,Math.min(i.color.r*D.r,1)); -D.g=Math.max(0,Math.min(i.color.g*D.g,1));D.b=Math.max(0,Math.min(i.color.b*D.b,1));i.wireframe===true?ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}else i.wireframe===true?ha(i.color,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color);else if(i instanceof THREE.MeshDepthMaterial){Y=h.near;ca=h.far;F.r=F.g=F.b=1-oa(a.positionScreen.z,Y,ca);H.r=H.g=H.b=1-oa(d.positionScreen.z,Y,ca);K.r=K.g=K.b=1-oa(f.positionScreen.z,Y,ca);R.r=(H.r+K.r)*0.5;R.g=(H.g+K.g)* -0.5;R.b=(H.b+K.b)*0.5;aa=wa(F,H,K,R);pa(t,G,I,N,Q,S,0,0,1,0,0,1,aa)}else if(i instanceof THREE.MeshNormalMaterial){D.r=qa(l.normalWorld.x);D.g=qa(l.normalWorld.y);D.b=qa(l.normalWorld.z);i.wireframe===true?ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}}function v(a,d,f,g,k,j,l,i,o){e.info.render.vertices=e.info.render.vertices+4;e.info.render.faces++;b(i.opacity);c(i.blending);if(i.map!==void 0&&i.map!==null||i.envMap!==void 0&&i.envMap!==null){u(a,d,g,0,1,3,l,i,o);u(k,f, -j,1,2,3,l,i,o)}else{t=a.positionScreen.x;G=a.positionScreen.y;I=d.positionScreen.x;N=d.positionScreen.y;Q=f.positionScreen.x;S=f.positionScreen.y;z=g.positionScreen.x;P=g.positionScreen.y;$=k.positionScreen.x;O=k.positionScreen.y;U=j.positionScreen.x;T=j.positionScreen.y;if(i instanceof THREE.MeshBasicMaterial){B(t,G,I,N,Q,S,z,P);i.wireframe===true?ha(i.color,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color)}else if(i instanceof THREE.MeshLambertMaterial)if(ua===true)if(!i.wireframe&& -i.shading==THREE.SmoothShading&&l.vertexNormalsWorld.length==4){F.r=H.r=K.r=R.r=Z.r;F.g=H.g=K.g=R.g=Z.g;F.b=H.b=K.b=R.b=Z.b;n(m,l.v1.positionWorld,l.vertexNormalsWorld[0],F);n(m,l.v2.positionWorld,l.vertexNormalsWorld[1],H);n(m,l.v4.positionWorld,l.vertexNormalsWorld[3],K);n(m,l.v3.positionWorld,l.vertexNormalsWorld[2],R);F.r=Math.max(0,Math.min(i.color.r*F.r,1));F.g=Math.max(0,Math.min(i.color.g*F.g,1));F.b=Math.max(0,Math.min(i.color.b*F.b,1));H.r=Math.max(0,Math.min(i.color.r*H.r,1));H.g=Math.max(0, -Math.min(i.color.g*H.g,1));H.b=Math.max(0,Math.min(i.color.b*H.b,1));K.r=Math.max(0,Math.min(i.color.r*K.r,1));K.g=Math.max(0,Math.min(i.color.g*K.g,1));K.b=Math.max(0,Math.min(i.color.b*K.b,1));R.r=Math.max(0,Math.min(i.color.r*R.r,1));R.g=Math.max(0,Math.min(i.color.g*R.g,1));R.b=Math.max(0,Math.min(i.color.b*R.b,1));aa=wa(F,H,K,R);x(t,G,I,N,z,P);pa(t,G,I,N,z,P,0,0,1,0,0,1,aa);x($,O,Q,S,U,T);pa($,O,Q,S,U,T,1,0,1,1,0,1,aa)}else{D.r=Z.r;D.g=Z.g;D.b=Z.b;n(m,l.centroidWorld,l.normalWorld,D);D.r=Math.max(0, -Math.min(i.color.r*D.r,1));D.g=Math.max(0,Math.min(i.color.g*D.g,1));D.b=Math.max(0,Math.min(i.color.b*D.b,1));B(t,G,I,N,Q,S,z,P);i.wireframe===true?ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}else{B(t,G,I,N,Q,S,z,P);i.wireframe===true?ha(i.color,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color)}else if(i instanceof THREE.MeshNormalMaterial){D.r=qa(l.normalWorld.x);D.g=qa(l.normalWorld.y);D.b=qa(l.normalWorld.z);B(t,G,I,N,Q,S,z,P);i.wireframe===true? -ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}else if(i instanceof THREE.MeshDepthMaterial){Y=h.near;ca=h.far;F.r=F.g=F.b=1-oa(a.positionScreen.z,Y,ca);H.r=H.g=H.b=1-oa(d.positionScreen.z,Y,ca);K.r=K.g=K.b=1-oa(g.positionScreen.z,Y,ca);R.r=R.g=R.b=1-oa(f.positionScreen.z,Y,ca);aa=wa(F,H,K,R);x(t,G,I,N,z,P);pa(t,G,I,N,z,P,0,0,1,0,0,1,aa);x($,O,Q,S,U,T);pa($,O,Q,S,U,T,1,0,1,1,0,1,aa)}}}function x(a,b,c,d,e,f){l.beginPath();l.moveTo(a,b);l.lineTo(c,d);l.lineTo(e,f);l.lineTo(a, +t=a.positionScreen.x;G=a.positionScreen.y;I=d.positionScreen.x;O=d.positionScreen.y;P=f.positionScreen.x;R=f.positionScreen.y;x(t,G,I,O,P,R);if(i instanceof THREE.MeshBasicMaterial)if(i.map!==null){if(i.map.mapping instanceof THREE.UVMapping){la=l.uvs[0];Fa(t,G,I,O,P,R,la[g].u,la[g].v,la[k].u,la[k].v,la[j].u,la[j].v,i.map)}}else if(i.envMap!==null){if(i.envMap.mapping instanceof THREE.SphericalReflectionMapping){a=h.matrixWorldInverse;V.copy(l.vertexNormalsWorld[g]);za=(V.x*a.elements[0]+V.y*a.elements[4]+ +V.z*a.elements[8])*0.5+0.5;Aa=(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;V.copy(l.vertexNormalsWorld[k]);Ba=(V.x*a.elements[0]+V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Ca=(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;V.copy(l.vertexNormalsWorld[j]);Da=(V.x*a.elements[0]+V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Ea=(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;Fa(t,G,I,O,P,R,za,Aa,Ba,Ca,Da,Ea,i.envMap)}}else i.wireframe===true?ha(i.color, +i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color);else if(i instanceof THREE.MeshLambertMaterial)if(ua===true)if(i.wireframe===false&&i.shading==THREE.SmoothShading&&l.vertexNormalsWorld.length==3){F.r=H.r=L.r=Z.r;F.g=H.g=L.g=Z.g;F.b=H.b=L.b=Z.b;n(m,l.v1.positionWorld,l.vertexNormalsWorld[0],F);n(m,l.v2.positionWorld,l.vertexNormalsWorld[1],H);n(m,l.v3.positionWorld,l.vertexNormalsWorld[2],L);F.r=Math.max(0,Math.min(i.color.r*F.r,1));F.g=Math.max(0,Math.min(i.color.g*F.g,1)); +F.b=Math.max(0,Math.min(i.color.b*F.b,1));H.r=Math.max(0,Math.min(i.color.r*H.r,1));H.g=Math.max(0,Math.min(i.color.g*H.g,1));H.b=Math.max(0,Math.min(i.color.b*H.b,1));L.r=Math.max(0,Math.min(i.color.r*L.r,1));L.g=Math.max(0,Math.min(i.color.g*L.g,1));L.b=Math.max(0,Math.min(i.color.b*L.b,1));Q.r=(H.r+L.r)*0.5;Q.g=(H.g+L.g)*0.5;Q.b=(H.b+L.b)*0.5;aa=wa(F,H,L,Q);pa(t,G,I,O,P,R,0,0,1,0,0,1,aa)}else{D.r=Z.r;D.g=Z.g;D.b=Z.b;n(m,l.centroidWorld,l.normalWorld,D);D.r=Math.max(0,Math.min(i.color.r*D.r,1)); +D.g=Math.max(0,Math.min(i.color.g*D.g,1));D.b=Math.max(0,Math.min(i.color.b*D.b,1));i.wireframe===true?ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}else i.wireframe===true?ha(i.color,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color);else if(i instanceof THREE.MeshDepthMaterial){Y=h.near;ca=h.far;F.r=F.g=F.b=1-oa(a.positionScreen.z,Y,ca);H.r=H.g=H.b=1-oa(d.positionScreen.z,Y,ca);L.r=L.g=L.b=1-oa(f.positionScreen.z,Y,ca);Q.r=(H.r+L.r)*0.5;Q.g=(H.g+L.g)* +0.5;Q.b=(H.b+L.b)*0.5;aa=wa(F,H,L,Q);pa(t,G,I,O,P,R,0,0,1,0,0,1,aa)}else if(i instanceof THREE.MeshNormalMaterial){D.r=qa(l.normalWorld.x);D.g=qa(l.normalWorld.y);D.b=qa(l.normalWorld.z);i.wireframe===true?ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}}function v(a,d,f,g,k,j,l,i,o){e.info.render.vertices=e.info.render.vertices+4;e.info.render.faces++;b(i.opacity);c(i.blending);if(i.map!==void 0&&i.map!==null||i.envMap!==void 0&&i.envMap!==null){u(a,d,g,0,1,3,l,i,o);u(k,f, +j,1,2,3,l,i,o)}else{t=a.positionScreen.x;G=a.positionScreen.y;I=d.positionScreen.x;O=d.positionScreen.y;P=f.positionScreen.x;R=f.positionScreen.y;z=g.positionScreen.x;S=g.positionScreen.y;$=k.positionScreen.x;J=k.positionScreen.y;U=j.positionScreen.x;T=j.positionScreen.y;if(i instanceof THREE.MeshBasicMaterial){B(t,G,I,O,P,R,z,S);i.wireframe===true?ha(i.color,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color)}else if(i instanceof THREE.MeshLambertMaterial)if(ua===true)if(!i.wireframe&& +i.shading==THREE.SmoothShading&&l.vertexNormalsWorld.length==4){F.r=H.r=L.r=Q.r=Z.r;F.g=H.g=L.g=Q.g=Z.g;F.b=H.b=L.b=Q.b=Z.b;n(m,l.v1.positionWorld,l.vertexNormalsWorld[0],F);n(m,l.v2.positionWorld,l.vertexNormalsWorld[1],H);n(m,l.v4.positionWorld,l.vertexNormalsWorld[3],L);n(m,l.v3.positionWorld,l.vertexNormalsWorld[2],Q);F.r=Math.max(0,Math.min(i.color.r*F.r,1));F.g=Math.max(0,Math.min(i.color.g*F.g,1));F.b=Math.max(0,Math.min(i.color.b*F.b,1));H.r=Math.max(0,Math.min(i.color.r*H.r,1));H.g=Math.max(0, +Math.min(i.color.g*H.g,1));H.b=Math.max(0,Math.min(i.color.b*H.b,1));L.r=Math.max(0,Math.min(i.color.r*L.r,1));L.g=Math.max(0,Math.min(i.color.g*L.g,1));L.b=Math.max(0,Math.min(i.color.b*L.b,1));Q.r=Math.max(0,Math.min(i.color.r*Q.r,1));Q.g=Math.max(0,Math.min(i.color.g*Q.g,1));Q.b=Math.max(0,Math.min(i.color.b*Q.b,1));aa=wa(F,H,L,Q);x(t,G,I,O,z,S);pa(t,G,I,O,z,S,0,0,1,0,0,1,aa);x($,J,P,R,U,T);pa($,J,P,R,U,T,1,0,1,1,0,1,aa)}else{D.r=Z.r;D.g=Z.g;D.b=Z.b;n(m,l.centroidWorld,l.normalWorld,D);D.r=Math.max(0, +Math.min(i.color.r*D.r,1));D.g=Math.max(0,Math.min(i.color.g*D.g,1));D.b=Math.max(0,Math.min(i.color.b*D.b,1));B(t,G,I,O,P,R,z,S);i.wireframe===true?ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}else{B(t,G,I,O,P,R,z,S);i.wireframe===true?ha(i.color,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(i.color)}else if(i instanceof THREE.MeshNormalMaterial){D.r=qa(l.normalWorld.x);D.g=qa(l.normalWorld.y);D.b=qa(l.normalWorld.z);B(t,G,I,O,P,R,z,S);i.wireframe===true? +ha(D,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):fa(D)}else if(i instanceof THREE.MeshDepthMaterial){Y=h.near;ca=h.far;F.r=F.g=F.b=1-oa(a.positionScreen.z,Y,ca);H.r=H.g=H.b=1-oa(d.positionScreen.z,Y,ca);L.r=L.g=L.b=1-oa(g.positionScreen.z,Y,ca);Q.r=Q.g=Q.b=1-oa(f.positionScreen.z,Y,ca);aa=wa(F,H,L,Q);x(t,G,I,O,z,S);pa(t,G,I,O,z,S,0,0,1,0,0,1,aa);x($,J,P,R,U,T);pa($,J,P,R,U,T,1,0,1,1,0,1,aa)}}}function x(a,b,c,d,e,f){l.beginPath();l.moveTo(a,b);l.lineTo(c,d);l.lineTo(e,f);l.lineTo(a, b)}function B(a,b,c,d,e,f,g,h){l.beginPath();l.moveTo(a,b);l.lineTo(c,d);l.lineTo(e,f);l.lineTo(g,h);l.lineTo(a,b)}function ha(a,b,c,e){if(A!==b)A=l.lineWidth=b;if(y!==c)y=l.lineCap=c;if(E!==e)E=l.lineJoin=e;d(a.getContextStyle());l.stroke();X.inflate(b*2)}function fa(a){f(a.getContextStyle());l.fill()}function Fa(a,b,c,d,e,g,h,i,k,j,m,n,o){if(!(o.image===void 0||o.image.width===0)){if(o.needsUpdate===true||ja[o.id]===void 0){var p=o.wrapS==THREE.RepeatWrapping,q=o.wrapT==THREE.RepeatWrapping;ja[o.id]= l.createPattern(o.image,p===true&&q===true?"repeat":p===true&&q===false?"repeat-x":p===false&&q===true?"repeat-y":"no-repeat");o.needsUpdate=false}f(ja[o.id]);var p=o.offset.x/o.repeat.x,q=o.offset.y/o.repeat.y,r=o.image.width*o.repeat.x,s=o.image.height*o.repeat.y,h=(h+p)*r,i=(1-i+q)*s,c=c-a,d=d-b,e=e-a,g=g-b,k=(k+p)*r-h,j=(1-j+q)*s-i,m=(m+p)*r-h,n=(1-n+q)*s-i,p=k*n-m*j;if(p===0){if(ka[o.id]===void 0){b=document.createElement("canvas");b.width=o.image.width;b.height=o.image.height;b=b.getContext("2d"); b.drawImage(o.image,0,0);ka[o.id]=b.getImageData(0,0,o.image.width,o.image.height).data}b=ka[o.id];h=(Math.floor(h)+Math.floor(i)*o.image.width)*4;D.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);fa(D)}else{p=1/p;o=(n*c-j*e)*p;j=(n*d-j*g)*p;c=(k*e-m*c)*p;d=(k*g-m*d)*p;a=a-o*h-c*i;h=b-j*h-d*i;l.save();l.transform(o,j,c,d,a,h);l.fill();l.restore()}}}function pa(a,b,c,d,e,f,g,h,i,j,k,m,n){var o,p;o=n.width-1;p=n.height-1;g=g*o;h=h*p;c=c-a;d=d-b;e=e-a;f=f-b;i=i*o-g;j=j*p-h;k=k*o-g;m=m*p-h;p=1/(i*m-k*j);o=(m* @@ -239,9 +239,9 @@ c-j*e)*p;j=(m*d-j*f)*p;c=(i*e-k*c)*p;d=(i*f-k*d)*p;a=a-o*g-c*h;b=b-j*g-d*h;l.sav 255:i;da[9]=j<0?0:j>255?255:j;da[10]=c<0?0:c>255?255:c;da[12]=k<0?0:k>255?255:k;da[13]=l<0?0:l>255?255:l;da[14]=d<0?0:d>255?255:d;sa.putImageData(ya,0,0);va.drawImage(ra,0,0);return ta}function oa(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function qa(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function ia(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;if(e!==0){e=1/Math.sqrt(e);c=c*e;d=d*e;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}var xa,Ga,W,ea;this.autoClear===true?this.clear():l.setTransform(1,0,0,-1,o,q);e.info.render.vertices= 0;e.info.render.faces=0;g=k.projectScene(a,h,this.sortElements);j=g.elements;m=g.lights;ua=m.length>0;ua===true&&i(m);xa=0;for(Ga=j.length;xa1&&(U=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(I,U);a.name=n;if(x){a.matrixAutoUpdate=false;a.matrix.set(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15])}else{a.position.set(v[0],v[1],v[2]);if(A){a.quaternion.set(A[0],A[1],A[2],A[3]);a.useQuaternion=true}else a.rotation.set(E[0],E[1],E[2]);a.scale.set(G[0],G[1],G[2])}a.visible=p.visible;a.castShadow=p.castShadow;a.receiveShadow=p.receiveShadow;N.scene.add(a);N.objects[n]=a}}else{v=p.position;E=p.rotation;A=p.quaternion;G=p.scale;A=0;a=new THREE.Object3D; -a.name=n;a.position.set(v[0],v[1],v[2]);if(A){a.quaternion.set(A[0],A[1],A[2],A[3]);a.useQuaternion=true}else a.rotation.set(E[0],E[1],E[2]);a.scale.set(G[0],G[1],G[2]);a.visible=p.visible!==void 0?p.visible:false;N.scene.add(a);N.objects[n]=a;N.empties[n]=a}}}function f(a){return function(b){N.geometries[a]=b;e();Q=Q-1;l.onLoadComplete();j()}}function h(a){return function(b){N.geometries[a]=b}}function j(){l.callbackProgress({totalModels:ea,totalTextures:ja,loadedModels:ea-Q,loadedTextures:ja-F}, -N);l.onLoadProgress();Q===0&&F===0&&b(N)}var l=this,k=THREE.Loader.prototype.extractUrlBase(c),i,m,n,o,u,q,r,p,x,w,H,v,E,A,G,C,P,I,U,V,S,z,O,Q,F,ea,ja,N;z=a;c=new THREE.BinaryLoader;O=new THREE.JSONLoader;F=Q=0;N={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(z.transform){a=z.transform.position;w=z.transform.rotation;C=z.transform.scale;a&&N.scene.position.set(a[0],a[1],a[2]);w&&N.scene.rotation.set(w[0],w[1],w[2]);C&&N.scene.scale.set(C[0], -C[1],C[2]);if(a||w||C){N.scene.updateMatrix();N.scene.updateMatrixWorld()}}a=function(a){return function(){F=F-a;j();l.onLoadComplete()}};for(u in z.cameras){C=z.cameras[u];C.type==="perspective"?V=new THREE.PerspectiveCamera(C.fov,C.aspect,C.near,C.far):C.type==="ortho"&&(V=new THREE.OrthographicCamera(C.left,C.right,C.top,C.bottom,C.near,C.far));v=C.position;w=C.target;C=C.up;V.position.set(v[0],v[1],v[2]);V.target=new THREE.Vector3(w[0],w[1],w[2]);C&&V.up.set(C[0],C[1],C[2]);N.cameras[u]=V}for(o in z.lights){w= -z.lights[o];u=w.color!==void 0?w.color:16777215;V=w.intensity!==void 0?w.intensity:1;if(w.type==="directional"){v=w.direction;H=new THREE.DirectionalLight(u,V);H.position.set(v[0],v[1],v[2]);H.position.normalize()}else if(w.type==="point"){v=w.position;H=w.distance;H=new THREE.PointLight(u,V,H);H.position.set(v[0],v[1],v[2])}else w.type==="ambient"&&(H=new THREE.AmbientLight(u));N.scene.add(H);N.lights[o]=H}for(q in z.fogs){o=z.fogs[q];o.type==="linear"?S=new THREE.Fog(0,o.near,o.far):o.type==="exp2"&& -(S=new THREE.FogExp2(0,o.density));C=o.color;S.color.setRGB(C[0],C[1],C[2]);N.fogs[q]=S}if(N.cameras&&z.defaults.camera)N.currentCamera=N.cameras[z.defaults.camera];if(N.fogs&&z.defaults.fog)N.scene.fog=N.fogs[z.defaults.fog];C=z.defaults.bgcolor;N.bgColor=new THREE.Color;N.bgColor.setRGB(C[0],C[1],C[2]);N.bgColorAlpha=z.defaults.bgalpha;for(i in z.geometries){q=z.geometries[i];if(q.type=="bin_mesh"||q.type=="ascii_mesh"){Q=Q+1;l.onLoadStart()}}ea=Q;for(i in z.geometries){q=z.geometries[i];if(q.type=== -"cube"){I=new THREE.CubeGeometry(q.width,q.height,q.depth,q.segmentsWidth,q.segmentsHeight,q.segmentsDepth,null,q.flipped,q.sides);N.geometries[i]=I}else if(q.type==="plane"){I=new THREE.PlaneGeometry(q.width,q.height,q.segmentsWidth,q.segmentsHeight);N.geometries[i]=I}else if(q.type==="sphere"){I=new THREE.SphereGeometry(q.radius,q.segmentsWidth,q.segmentsHeight);N.geometries[i]=I}else if(q.type==="cylinder"){I=new THREE.CylinderGeometry(q.topRad,q.botRad,q.height,q.radSegs,q.heightSegs);N.geometries[i]= -I}else if(q.type==="torus"){I=new THREE.TorusGeometry(q.radius,q.tube,q.segmentsR,q.segmentsT);N.geometries[i]=I}else if(q.type==="icosahedron"){I=new THREE.IcosahedronGeometry(q.radius,q.subdivisions);N.geometries[i]=I}else if(q.type==="bin_mesh")c.load(d(q.url,z.urlBaseType),f(i));else if(q.type==="ascii_mesh")O.load(d(q.url,z.urlBaseType),f(i));else if(q.type==="embedded_mesh"){q=z.embeds[q.id];q.metadata=z.metadata;q&&O.createModel(q,h(i),"")}}for(r in z.textures){i=z.textures[r];if(i.url instanceof -Array){F=F+i.url.length;for(q=0;q1&&(U=new THREE.MeshFaceMaterial);c= +new THREE.Mesh(I,U);c.name=n;if(x){c.matrixAutoUpdate=false;c.matrix.set(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15])}else{c.position.set(v[0],v[1],v[2]);if(A){c.quaternion.set(A[0],A[1],A[2],A[3]);c.useQuaternion=true}else c.rotation.set(E[0],E[1],E[2]);c.scale.set(G[0],G[1],G[2])}c.visible=p.visible;c.castShadow=p.castShadow;c.receiveShadow=p.receiveShadow;a.add(c);N.objects[n]=c}}else{v=p.position;E=p.rotation;A=p.quaternion;G=p.scale;A=0;c=new THREE.Object3D; +c.name=n;c.position.set(v[0],v[1],v[2]);if(A){c.quaternion.set(A[0],A[1],A[2],A[3]);c.useQuaternion=true}else c.rotation.set(E[0],E[1],E[2]);c.scale.set(G[0],G[1],G[2]);c.visible=p.visible!==void 0?p.visible:false;a.add(c);N.objects[n]=c;N.empties[n]=c}p.children!==void 0&&e(c,p.children)}}function f(a){return function(b){N.geometries[a]=b;e(N.scene,z.objects);Q=Q-1;l.onLoadComplete();j()}}function h(a){return function(b){N.geometries[a]=b}}function j(){l.callbackProgress({totalModels:ea,totalTextures:ja, +loadedModels:ea-Q,loadedTextures:ja-F},N);l.onLoadProgress();Q===0&&F===0&&b(N)}var l=this,k=THREE.Loader.prototype.extractUrlBase(c),i,m,n,o,u,q,r,p,x,w,H,v,E,A,G,C,P,I,U,V,S,z,O,Q,F,ea,ja,N;z=a;c=new THREE.BinaryLoader;O=new THREE.JSONLoader;F=Q=0;N={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(z.transform){a=z.transform.position;w=z.transform.rotation;C=z.transform.scale;a&&N.scene.position.set(a[0],a[1],a[2]);w&&N.scene.rotation.set(w[0], +w[1],w[2]);C&&N.scene.scale.set(C[0],C[1],C[2]);if(a||w||C){N.scene.updateMatrix();N.scene.updateMatrixWorld()}}a=function(a){return function(){F=F-a;j();l.onLoadComplete()}};for(u in z.cameras){C=z.cameras[u];C.type==="perspective"?V=new THREE.PerspectiveCamera(C.fov,C.aspect,C.near,C.far):C.type==="ortho"&&(V=new THREE.OrthographicCamera(C.left,C.right,C.top,C.bottom,C.near,C.far));v=C.position;w=C.target;C=C.up;V.position.set(v[0],v[1],v[2]);V.target=new THREE.Vector3(w[0],w[1],w[2]);C&&V.up.set(C[0], +C[1],C[2]);N.cameras[u]=V}for(o in z.lights){w=z.lights[o];u=w.color!==void 0?w.color:16777215;V=w.intensity!==void 0?w.intensity:1;if(w.type==="directional"){v=w.direction;H=new THREE.DirectionalLight(u,V);H.position.set(v[0],v[1],v[2]);H.position.normalize()}else if(w.type==="point"){v=w.position;H=w.distance;H=new THREE.PointLight(u,V,H);H.position.set(v[0],v[1],v[2])}else w.type==="ambient"&&(H=new THREE.AmbientLight(u));N.scene.add(H);N.lights[o]=H}for(q in z.fogs){o=z.fogs[q];o.type==="linear"? +S=new THREE.Fog(0,o.near,o.far):o.type==="exp2"&&(S=new THREE.FogExp2(0,o.density));C=o.color;S.color.setRGB(C[0],C[1],C[2]);N.fogs[q]=S}if(N.cameras&&z.defaults.camera)N.currentCamera=N.cameras[z.defaults.camera];if(N.fogs&&z.defaults.fog)N.scene.fog=N.fogs[z.defaults.fog];C=z.defaults.bgcolor;N.bgColor=new THREE.Color;N.bgColor.setRGB(C[0],C[1],C[2]);N.bgColorAlpha=z.defaults.bgalpha;for(i in z.geometries){q=z.geometries[i];if(q.type=="bin_mesh"||q.type=="ascii_mesh"){Q=Q+1;l.onLoadStart()}}ea= +Q;for(i in z.geometries){q=z.geometries[i];if(q.type==="cube"){I=new THREE.CubeGeometry(q.width,q.height,q.depth,q.segmentsWidth,q.segmentsHeight,q.segmentsDepth,null,q.flipped,q.sides);N.geometries[i]=I}else if(q.type==="plane"){I=new THREE.PlaneGeometry(q.width,q.height,q.segmentsWidth,q.segmentsHeight);N.geometries[i]=I}else if(q.type==="sphere"){I=new THREE.SphereGeometry(q.radius,q.segmentsWidth,q.segmentsHeight);N.geometries[i]=I}else if(q.type==="cylinder"){I=new THREE.CylinderGeometry(q.topRad, +q.botRad,q.height,q.radSegs,q.heightSegs);N.geometries[i]=I}else if(q.type==="torus"){I=new THREE.TorusGeometry(q.radius,q.tube,q.segmentsR,q.segmentsT);N.geometries[i]=I}else if(q.type==="icosahedron"){I=new THREE.IcosahedronGeometry(q.radius,q.subdivisions);N.geometries[i]=I}else if(q.type==="bin_mesh")c.load(d(q.url,z.urlBaseType),f(i));else if(q.type==="ascii_mesh")O.load(d(q.url,z.urlBaseType),f(i));else if(q.type==="embedded_mesh"){q=z.embeds[q.id];q.metadata=z.metadata;q&&O.createModel(q,h(i), +"")}}for(r in z.textures){i=z.textures[r];if(i.url instanceof Array){F=F+i.url.length;for(q=0;q