=v[v.length-1]){r=v.length-1;w=1}else for(;E>=v[r+1];){r++;w/=2}E=t[r];r=w-1}do{B=g[l]*3;I=F[l]*2;l++;j[0]=~~(d[K]+0.5);p[0]=~~(d[K+1]+0.5);u[0]=d[K+2];j[1]=~~(d[y]+0.5);p[1]=~~(d[y+1]+0.5);u[1]=d[y+2];j[2]=~~(d[B]+0.5);p[2]=~~(d[B+1]+0.5);u[2]=d[B+
+2];x[0]=s[G]*w;o[0]=s[G+1]*w;x[1]=s[N]*w;o[1]=s[N+1]*w;x[2]=s[I]*w;o[2]=s[I+1]*w;y=p[0]p[1]?0:1;D=p[D]>p[2]?D:2;N=3-D-y;if(y!=D){var sa=j[D],P=u[D],T=x[D],C=o[D],V=p[D]-p[y];V=V!=0?V:1;var ka=(j[D]-j[y])/V,aa=(u[D]-u[y])/V,ha=(x[D]-x[y])/V;V=(o[D]-o[y])/V;var ma=j[D],ta=u[D],za=x[D],X=o[D],Y=p[D]-p[N];Y=Y!=0?Y:1;var da=(j[D]-j[N])/Y,fa=(u[D]-u[N])/Y,ra=(x[D]-x[N])/Y;Y=(o[D]-o[N])/Y;var na=j[N],Q=u[N],la=x[N],ya=o[N],wa=p[N]-p[y];wa=wa!=0?wa:1;var Ga=(j[N]-j[y])/
+wa,Z=(u[N]-u[y])/wa,oa=(x[N]-x[y])/wa;wa=(o[N]-o[y])/wa;var pa=p[D]*c;for(D=p[D];D>p[y];D--){if(D>=0&&Dp[N]){$=~~ma;U=ta;ua=za;va=X}else{$=~~na;U=Q;ua=la;va=ya}if(L>$){var W;W=L;L=$;$=W;W=R;R=U;U=W;W=ba;ba=ua;ua=W;W=S;S=va;va=W}U=L!=$?(U-R)/($-L):1;ua=L!=$?(ua-ba)/($-L):1;va=L!=$?(va-S)/($-L):1;if(L<0){R-=L*U;ba-=L*ua;S-=L*va;L=0}if($>=c)$=c-1;W=pa+L;if(J){L=L;R=R;ba=ba;for(S=S;L<=$;L++,R+=U,ba+=ua,S+=va){if(R>i[W]){i[W]=R;var O=E[(S&r)*w+(ba&r)],ia=((M&
+16711680)>>16)*((O&16711680)>>8),qa=((M&65280)>>8)*((O&65280)>>8),ca=(M&255)*(O&255)>>8;h[W]=ia&16711680|qa&65280|ca&255;m[W]=q}W++}}else{L=L;R=R;ba=ba;for(S=S;L<$;L++,R+=U,ba+=ua,S+=va){if(R>i[W]){ca=E[(S&r)*w+(ba&r)];O=h[W];var ja=(ca>>24&255)*(z&255)>>8;ia=((M&16711680)>>16)*((ca&16711680)>>8);qa=((M&65280)>>8)*((ca&65280)>>8);ca=(M&255)*(ca&255)>>8;if(ja>250)i[W]=R;else{var ga=255-ja;ia=ia*ja+(O&16711680)*ga>>8;qa=qa*ja+(O&65280)*ga>>8;ca=ca*ja+(O&255)*ga>>8}h[W]=ia&16711680|qa&65280|ca&255;m[W]=
+q}W++}}}sa-=ka;P-=aa;T-=ha;C-=V;if(D>p[N]){ma-=da;ta-=fa;za-=ra;X-=Y}else{na-=Ga;Q-=Z;la-=oa;ya-=wa}pa-=c}}y=B;N=I}while(g[l]!=-1);l++}}}};
+a.renderTextureSmooth=function(b){var c=this.frameWidth,f=this.frameHeight,g=b.indexBuffer,d=b.transformedVertexBuffer,e=b.transformedVertexNormalZBuffer,h=b.transformedFaceNormalZBuffer,i=this.colorBuffer,m=this.zBuffer,n=this.selectionBuffer,q=b.faceCount,j=b.internalId,A=d.length/3,k=b.material?b.material:this.defaultMaterial,J=k.getPalette(),z=b.texture,s=k.transparency==0&&!z.hasTransparency,F=~~((1-k.transparency)*255),E=b.texCoordBuffer,w=b.texCoordIndexBuffer,r=z.data,t=z.width,v=t-1,p=z.hasMipmap()?
+z.mipmaps:null,u=p?z.mipentries:null;if(k.transparency!=1){if(!e||e.length0?y:-y;if(y<0){do;while(g[K++]!=-1)}else{var B,G,N,I,D,sa,P,T;y=g[K];N=y*3;sa=w[K]*2;K++;B=g[K];I=B*3;P=w[K]*2;K++;if(p){D=g[K]*3;T=w[K]*2;t=z.width;A[0]=d[N];k[0]=d[N+1];A[1]=d[I];k[1]=d[I+1];A[2]=d[D];k[2]=d[D+1];H[0]=E[sa]*t;l[0]=E[sa+1]*t;H[1]=E[P]*t;l[1]=E[P+1]*t;H[2]=E[T]*t;l[2]=E[T+1]*t;r=(A[1]-A[0])*(k[2]-k[0])-(k[1]-k[0])*(A[2]-A[0]);if(r<0)r=-r;r+=1;v=(H[1]-H[0])*(l[2]-l[0])-(l[1]-l[0])*(H[2]-H[0]);if(v<0)v=-v;r=v/r;v=0;if(r=u[u.length-
+1]){v=u.length-1;t=1}else for(;r>=u[v+1];){v++;t/=2}r=p[v];v=t-1}do{G=g[K];D=G*3;T=w[K]*2;K++;A[0]=~~(d[N]+0.5);k[0]=~~(d[N+1]+0.5);x[0]=d[N+2];A[1]=~~(d[I]+0.5);k[1]=~~(d[I+1]+0.5);x[1]=d[I+2];A[2]=~~(d[D]+0.5);k[2]=~~(d[D+1]+0.5);x[2]=d[D+2];H[0]=E[sa]*t;l[0]=E[sa+1]*t;H[1]=E[P]*t;l[1]=E[P+1]*t;H[2]=E[T]*t;l[2]=E[T+1]*t;o[0]=e[y];o[1]=e[B];o[2]=e[G];if(b){if(o[0]<0)o[0]=-o[0];if(o[1]<0)o[1]=-o[1];if(o[2]<0)o[2]=-o[2]}B=k[0]k[1]?0:1;C=k[C]>k[2]?C:2;I=3-C-B;if(B!=
+C){P=A[C];var V=x[C],ka=H[C],aa=l[C],ha=o[C]*255,ma=k[C]-k[B];ma=ma!=0?ma:1;var ta=(A[C]-A[B])/ma,za=(x[C]-x[B])/ma,X=(H[C]-H[B])/ma,Y=(l[C]-l[B])/ma;ma=(o[C]-o[B])*255/ma;var da=A[C],fa=x[C],ra=H[C],na=l[C],Q=o[C]*255,la=k[C]-k[I];la=la!=0?la:1;var ya=(A[C]-A[I])/la,wa=(x[C]-x[I])/la,Ga=(H[C]-H[I])/la,Z=(l[C]-l[I])/la;la=(o[C]-o[I])*255/la;var oa=A[I],pa=x[I],L=H[I],R=l[I],ba=o[I]*255,S=k[I]-k[B];S=S!=0?S:1;var $=(A[I]-A[B])/S,U=(x[I]-x[B])/S,ua=(H[I]-H[B])/S,va=(l[I]-l[B])/S;S=(o[I]-o[B])*255/S;
+var W=k[C]*c;for(C=k[C];C>k[B];C--){if(C>=0&&Ck[I]){ga=~~da;Aa=fa;Ba=ra;Ca=na;Da=Q}else{ga=~~oa;Aa=pa;Ba=L;Ca=R;Da=ba}if(O>ga){var ea;ea=O;O=ga;ga=ea;ea=ia;ia=Aa;Aa=ea;ea=qa;qa=Ba;Ba=ea;ea=ca;ca=Ca;Ca=ea;ea=ja;ja=Da;Da=ea}Aa=O!=ga?(Aa-ia)/(ga-O):1;Ba=O!=ga?(Ba-qa)/(ga-O):1;Ca=O!=ga?(Ca-ca)/(ga-O):1;Da=O!=ga?(Da-ja)/(ga-O):0;if(O<0){ia-=O*Aa;qa-=O*Ba;ca-=O*Ca;ja-=O*Da;O=0}if(ga>=c)ga=c-1;ea=W+O;if(s){O=O;ia=ia;ja=ja;qa=qa;for(ca=ca;O<=ga;O++,
+ia+=Aa,ja+=Da,qa+=Ba,ca+=Ca){if(ia>m[ea]){m[ea]=ia;var xa=J[ja>0?~~ja:0],Fa=r[(ca&v)*t+(qa&v)],Ha=((xa&16711680)>>16)*((Fa&16711680)>>8),Ia=((xa&65280)>>8)*((Fa&65280)>>8);xa=(xa&255)*(Fa&255)>>8;i[ea]=Ha&16711680|Ia&65280|xa&255;n[ea]=j}ea++}}else{O=O;ia=ia;ja=ja;qa=qa;for(ca=ca;Om[ea]){xa=J[ja>0?~~ja:0];var Ea=r[(ca&v)*t+(qa&v)];Fa=i[ea];var Ja=(Ea>>24&255)*(F&255)>>8;Ha=((xa&16711680)>>16)*((Ea&16711680)>>8);Ia=((xa&65280)>>8)*((Ea&65280)>>8);xa=(xa&255)*
+(Ea&255)>>8;if(Ja>250)m[ea]=ia;else{Ea=255-Ja;Ha=Ha*Ja+(Fa&16711680)*Ea>>8;Ia=Ia*Ja+(Fa&65280)*Ea>>8;xa=xa*Ja+(Fa&255)*Ea>>8}i[ea]=Ha&16711680|Ia&65280|xa&255;n[ea]=j}ea++}}}P-=ta;V-=za;ka-=X;aa-=Y;ha-=ma;if(C>k[I]){da-=ya;fa-=wa;ra-=Ga;na-=Z;Q-=la}else{oa-=$;pa-=U;L-=ua;R-=va;ba-=S}W-=c}}B=G;I=D;P=T}while(g[K]!=-1);K++}}}};a.params=null;a.canvas=null;a.ctx=null;a.canvasData=null;a.bkgColorBuffer=null;a.colorBuffer=null;a.zBuffer=null;a.selectionBuffer=null;a.frameWidth=0;a.frameHeight=0;
+a.scene=null;a.defaultMaterial=null;a.isLoaded=false;a.isFailed=false;a.errorMsg="";a.initRotX=0;a.initRotY=0;a.initRotZ=0;a.zoomFactor=1;a.rotMatrix=null;a.transformMatrix=null;a.sceneUrl="";a.modelColor=13280792;a.bkgColor1=16777215;a.bkgColor2=16777088;a.renderMode="flat";a.definition="standard";a.isMipMappingOn=false;a.buttonStates=null;a.keyStates=null;a.mouseX=0;a.mouseY=0;a.onmousedown=null;a.onmouseup=null;a.onmousemove=null;a.beforeupdate=null;a.afterupdate=null;
+a.isDefaultInputHandlerEnabled=false;JSC3D.PickInfo=function(){this.canvasY=this.canvasX=0;this.depth=-Infinity;this.mesh=null};JSC3D.Scene=function(){this.name="";this.aabb=null;this.children=[];this.maxChildId=1};a=JSC3D.Scene.prototype;a.init=function(){if(!this.isEmpty()){for(var b=0;bf)this.aabb.minX=f;if(this.aabb.minY>g)this.aabb.minY=g;if(this.aabb.minZ>d)this.aabb.minZ=d;if(this.aabb.maxX=2&&this.texCoordIndexBuffer!=null&&this.texCoordIndexBuffer.length>=3&&this.texCoordIndexBuffer.length>=this.indexBuffer.length&&this.texture!=null&&this.texture.hasData()};
+a.calcFaceCount=function(){this.faceCount=0;var b=this.indexBuffer;b[b.length-1]!=-1&&b.push(-1);for(var c=0;cc)c=d;if(emaxY)maxY=e;if(hmaxZ)maxZ=h}this.aabb.minX=b;this.aabb.minY=minY;this.aabb.minZ=minZ;this.aabb.maxX=c;this.aabb.maxY=maxY;this.aabb.maxZ=maxZ};
+a.calcFaceNormals=function(){for(var b=this.vertexBuffer,c=this.indexBuffer,f=this.faceNormalBuffer,g=0,d=0;g0){e/=q;m/=q;n/=q}f[d++]=e;f[d++]=m;f[d++]=n;do;while(c[g++]!=-1)}};
+a.calcVertexNormals=function(){if(!this.faceNormalBuffer){this.faceNormalBuffer=new Array(this.faceCount*3);this.calcFaceNormals()}for(var b=this.vertexBuffer,c=this.indexBuffer,f=this.faceNormalBuffer,g=this.vertexNormalBuffer,d=0;d1){c/=i;
+f/=i;h/=i}i=Math.sqrt(c*c+f*f+h*h);if(i>0){c/=i;f/=i;h/=i}g[d]=c;g[d+1]=f;g[d+2]=h}};a.checkValid=function(){};a.name="";a.metadata="";a.visible=false;a.aabb=null;a.vertexBuffer=null;a.indexBuffer=null;a.vertexNormalBuffer=null;a.faceNormalBuffer=null;a.texCoordBuffer=null;a.texCoordIndexBuffer=null;a.material=null;a.texture=null;a.faceCount=0;a.isDoubleSided=false;a.internalId=0;a.transformedVertexBuffer=null;a.transformedVertexNormalZBuffer=null;a.transformedFaceNormalZBuffer=null;
+JSC3D.Material=function(){this.name="";this.ambientColor=0;this.diffuseColor=8355711;this.transparency=0;this.simulateSpecular=false;this.palette=null};a=JSC3D.Material.prototype;a.getPalette=function(){if(!this.palette){this.palette=new Array(256);this.generatePalette()}return this.palette};
+a.generatePalette=function(){var b=(this.ambientColor&16711680)>>16,c=(this.ambientColor&65280)>>8,f=this.ambientColor&255,g=(this.diffuseColor&16711680)>>16,d=(this.diffuseColor&65280)>>8,e=this.diffuseColor&255;if(this.simulateSpecular){for(var h=0;h<204;){var i=b+h*g/204,m=c+h*d/204,n=f+h*e/204;if(i>255)i=255;if(m>255)m=255;if(n>255)n=255;this.palette[h++]=i<<16|m<<8|n}for(;h<256;){i=b+g+(h-204)*(255-g)/82;m=c+d+(h-204)*(255-d)/82;n=f+e+(h-204)*(255-e)/82;if(i>255)i=255;if(m>255)m=255;if(n>255)n=
+255;this.palette[h++]=i<<16|m<<8|n}}else for(h=0;h<256;){i=b+h*g/256;m=c+h*d/256;n=f+h*e/256;if(i>255)i=255;if(m>255)m=255;if(n>255)n=255;this.palette[h++]=i<<16|m<<8|n}};a.name="";a.ambientColor=0;a.diffuseColor=8355711;a.transparency=0;a.simulateSpecular=false;a.palette=null;JSC3D.Texture=function(){this.name="";this.height=this.width=0;this.mipentries=this.mipmaps=this.data=null;this.hasTransparency=false;this.srcUrl="";this.onready=null};a=JSC3D.Texture.prototype;
+a.createFromUrl=function(b,c){var f=this,g=new Image;g.onload=function(){f.data=null;f.mipmaps=null;f.mipentries=null;f.width=0;f.height=0;f.hasTransparency=false;f.srcUrl="";f.createFromImage(this,c)};g.onerror=function(){f.data=null;f.mipmaps=null;f.mipentries=null;f.width=0;f.height=0;f.hasTransparency=false;f.srcUrl=""};g.src=b};
+a.createFromImage=function(b,c){if(!(b.width<=0||b.height<=0)){var f=false,g=JSC3D.Texture.cv;if(!g)try{g=document.createElement("canvas");JSC3D.Texture.cv=g;f=true}catch(d){return}var e=b.width>b.height?b.width:b.height;e=e<=32?32:e<=64?64:e<=128?128:e<=256?256:512;if(g.width!=e||g.height!=e){g.width=g.height=e;f=true}var h;try{var i=g.getContext("2d");f||i.clearRect(0,0,e,e);i.drawImage(b,0,0,e,e);h=i.getImageData(0,0,e,e).data}catch(m){return}f=h.length/4;this.data=new Array(f);for(var n=i=0;i<
+f;i++,n+=4){g=h[n+3];this.data[i]=g<<24|h[n]<<16|h[n+1]<<8|h[n+2];if(g<255)this.hasTransparency=true}this.height=this.width=e;this.mipmaps=null;c&&this.generateMipmaps();this.srcUrl=b.src;this.onready!=null&&typeof this.onready=="function"&&this.onready()}};a.hasData=function(){return this.data!=null};
+a.generateMipmaps=function(){if(!(this.width<=1||this.data==null||this.mipmaps!=null)){this.mipmaps=[this.data];this.mipentries=[1];for(var b=1+~~(0.1+Math.log(this.width)*Math.LOG2E),c=this.width>>1,f=1;f>>2)+((j&4278190080)>>>2)+((A&4278190080)>>>2)+((k&4278190080)>>>2)&4278190080)+((q&16711680)+(j&16711680)+(A&16711680)+(k&16711680)>>
+2&16711680)+((q&65280)+(j&65280)+(A&65280)+(k&65280)>>2&65280)+((q&255)+(j&255)+(A&255)+(k&255)>>2&255);h+=2;i++}h+=e}this.mipmaps.push(g);this.mipentries.push(Math.pow(4,f));c>>=1}}};a.hasMipmap=function(){return this.mipmaps!=null};a.name="";a.data=null;a.mipmaps=null;a.mipentries=null;a.width=0;a.height=0;a.hasTransparency=false;a.srcUrl="";a.onready=null;JSC3D.Texture.cv=null;JSC3D.AABB=function(){this.minZ=this.maxZ=this.minY=this.maxY=this.minX=this.maxX=0};
+JSC3D.AABB.prototype.center=function(){return[(this.minX+this.maxX)/2,(this.minY+this.maxY)/2,(this.minZ+this.maxZ)/2]};JSC3D.AABB.prototype.lengthOfDiagonal=function(){var b=this.maxX-this.minX,c=this.maxY-this.minY,f=this.maxZ-this.minZ;return Math.sqrt(b*b+c*c+f*f)};JSC3D.Matrix3x4=function(){this.m00=1;this.m10=this.m03=this.m02=this.m01=0;this.m11=1;this.m21=this.m20=this.m13=this.m12=0;this.m22=1;this.m23=0};a=JSC3D.Matrix3x4.prototype;
+a.identity=function(){this.m00=1;this.m10=this.m03=this.m02=this.m01=0;this.m11=1;this.m21=this.m20=this.m13=this.m12=0;this.m22=1;this.m23=0};a.scale=function(b,c,f){this.m00*=b;this.m01*=b;this.m02*=b;this.m03*=b;this.m10*=c;this.m11*=c;this.m12*=c;this.m13*=c;this.m20*=f;this.m21*=f;this.m22*=f;this.m23*=f};a.translate=function(b,c,f){this.m03+=b;this.m13+=c;this.m23+=f};
+a.rotateAboutXAxis=function(b){if(b!=0){b*=Math.PI/180;var c=Math.cos(b);b=Math.sin(b);var f=c*this.m11+b*this.m21,g=c*this.m12+b*this.m22,d=c*this.m13+b*this.m23,e=c*this.m20-b*this.m10,h=c*this.m21-b*this.m11,i=c*this.m22-b*this.m12,m=c*this.m23-b*this.m13;this.m10=c*this.m10+b*this.m20;this.m11=f;this.m12=g;this.m13=d;this.m20=e;this.m21=h;this.m22=i;this.m23=m}};
+a.rotateAboutYAxis=function(b){if(b!=0){b*=Math.PI/180;var c=Math.cos(b);b=Math.sin(b);var f=c*this.m01+b*this.m21,g=c*this.m02+b*this.m22,d=c*this.m03+b*this.m23,e=c*this.m20-b*this.m00,h=c*this.m21-b*this.m01,i=c*this.m22-b*this.m02,m=c*this.m23-b*this.m03;this.m00=c*this.m00+b*this.m20;this.m01=f;this.m02=g;this.m03=d;this.m20=e;this.m21=h;this.m22=i;this.m23=m}};
+a.rotateAboutZAxis=function(b){if(b!=0){b*=Math.PI/180;var c=Math.cos(b);b=Math.sin(b);var f=c*this.m10+b*this.m00,g=c*this.m11+b*this.m01,d=c*this.m12+b*this.m02,e=c*this.m13+b*this.m03,h=c*this.m01-b*this.m11,i=c*this.m02-b*this.m12,m=c*this.m03-b*this.m13;this.m00=c*this.m00-b*this.m10;this.m01=h;this.m02=i;this.m03=m;this.m10=f;this.m11=g;this.m12=d;this.m13=e}};
+a.multiply=function(b){var c=b.m00*this.m01+b.m01*this.m11+b.m02*this.m21,f=b.m00*this.m02+b.m01*this.m12+b.m02*this.m22,g=b.m00*this.m03+b.m01*this.m13+b.m02*this.m23+b.m03,d=b.m10*this.m00+b.m11*this.m10+b.m12*this.m20,e=b.m10*this.m01+b.m11*this.m11+b.m12*this.m21,h=b.m10*this.m02+b.m11*this.m12+b.m12*this.m22,i=b.m10*this.m03+b.m11*this.m13+b.m12*this.m23+b.m13,m=b.m20*this.m00+b.m21*this.m10+b.m22*this.m20,n=b.m20*this.m01+b.m21*this.m11+b.m22*this.m21,q=b.m20*this.m02+b.m21*this.m12+b.m22*this.m22,
+j=b.m20*this.m03+b.m21*this.m13+b.m22*this.m23+b.m23;this.m00=b.m00*this.m00+b.m01*this.m10+b.m02*this.m20;this.m01=c;this.m02=f;this.m03=g;this.m10=d;this.m11=e;this.m12=h;this.m13=i;this.m20=m;this.m21=n;this.m22=q;this.m23=j};
+JSC3D.Math3D={transformVectors:function(b,c,f){for(var g=0;g0)for(var h=0;h0)switch(i[0]){case "v":for(var A=1;A1&&k[1]!=""){if(!e.texCoordIndexBuffer)e.texCoordIndexBuffer=
+[];e.texCoordIndexBuffer.push(parseInt(k[1])-1)}}e.indexBuffer.push(-1);e.texCoordIndexBuffer&&e.texCoordIndexBuffer.push(-1);break;case "mtllib":if(i.length>1){h=i[1];g.push(h)}else h="";break;case "usemtl":if(i.length>1&&i[1]!=""&&h!=""){i=i[1];A=h+"-"+i;e=f[A];if(!e){e=new JSC3D.Mesh;e.name="obj-"+d++;e.indexBuffer=[];e.mtllib=h;e.mtl=i;f[A]=e}e=e}else e=q;break;case "#":default:break}}d=m.length>=3?new Array(m.length/3):null;h=n.length>=2?new Array(n.length/2):null;for(id in f){e=f[id];if(m.length>=
+3&&e.indexBuffer.length>0){for(c=0;c=2&&e.texCoordIndexBuffer!=null&&e.texCoordIndexBuffer.length>0){for(c=0;c0)switch(d[0]){case "newmtl":f=d[1];d={};d.material=new JSC3D.Material;d.textureFileName="";c[f]=d;break;case "Ka":break;case "Kd":if(d.length==4&&!isNaN(d[1])){var e=parseFloat(d[1])*255&255,h=parseFloat(d[2])*255&255,i=parseFloat(d[3])*255&255;d=c[f];if(d!=null)d.material.diffuseColor=e<<16|h<<8|i}break;case "Ks":break;case "d":if(d.length==2&&!isNaN(d[1])){e=parseFloat(d[1]);d=c[f];
+if(d!=null)d.material.transparency=1-e}break;case "illum":break;case "map_Kd":if(d.length==2){e=d[1];d=c[f];if(d!=null)d.textureFileName=e}break;case "#":default:break}}return c};a.setupTexture=function(b,c){var f=this,g=new JSC3D.Texture;g.onready=function(){for(var d=0;d