diff --git a/frameworks/jsmodeler.js b/frameworks/jsmodeler.js index b0a18f0..fc50241 100644 --- a/frameworks/jsmodeler.js +++ b/frameworks/jsmodeler.js @@ -1,4 +1,4 @@ -/* JSModeler 0.32.183 - http://www.github.com/kovacsv/JSModeler */ 'use strict';var JSM={mainVersion:0,subVersion:32,Eps:1E-8,Inf:9999999999,RadDeg:57.29577951308232,DegRad:0.017453292519943,IsZero:function(a){return Math.abs(a)JSM.Eps},IsNegative:function(a){return a<-JSM.Eps},IsLower:function(a,b){return b-a>JSM.Eps},IsGreater:function(a,b){return a-b>JSM.Eps},IsEqual:function(a,b){return Math.abs(b-a)JSM.Eps},IsNegative:function(a){return a<-JSM.Eps},IsLower:function(a,b){return b-a>JSM.Eps},IsGreater:function(a,b){return a-b>JSM.Eps},IsEqual:function(a,b){return Math.abs(b-a)=a&&(this.current=1E3*(this.frames/c),this.start=b,this.frames=0);return parseInt(this.current,10)}; @@ -7,8 +7,8 @@ JSM.AsyncEnvironment.prototype.OnProcess=function(a,b){if(void 0!==this.paramete JSM.AsyncRunTask=function(a,b,c,d,e){function f(g){var h=a();b.OnProcess(g,e);h&&ga.length)return c;var d=function(a){var b=a.length,c=JSM.Inf,d=-1,e,f;for(e=0;en)return m;var p=new function(){this.vertices=[];this.edges=[];this.triangles=[]},q;for(q=0;qn)return m;var p=new function(){this.vertices=[];this.edges=[];this.triangles=[]},q;for(q=0;q=d)return!0;var e,f,h,k;for(e=0;2>e;e++){h=f=-1;0===e?(f=b,h=c):1===e&&(f=c,h=b);k=[];for(k.push(a[h]);f!== -h;f=ff)return[];var g=[],h=[],l;for(a=0;a=d)return!0;var e,f,h,l;for(e=0;2>e;e++){h=f=-1;0===e?(f=b,h=c):1===e&&(f=c,h=b);l=[];for(l.push(a[h]);f!== +h;f=ff)return[];var g=[],h=[],k;for(a=0;ab.length)){for(var c=a.GetVertex(b[0]),d=a.GetVertex(b[1]),d=JSM.CoordSub(d,c),f=JSM.GetPlaneFromCoordAndDirection(c,d),g,d=[],c=0;cb.length)){for(var c=a.GetVertex(b[0]),d=a.GetVertex(b[1]),d=JSM.CoordSub(d,c),f=JSM.GetPlaneFromCoordAndDirection(c,d),g,d=[],c=0;cb.VertexCount())return!1;var d;if(null===a.polygon){d=JSM.CalculateNormal(b.vertices);var e=JSM.GetPlaneFromCoordAndDirection(b.GetVertex(0),d);a.polygon=b;void 0!==c&&(a.userData=c);a.plane=e}else{d=[];var f=[],e=[];JSM.CutPolygonWithPlane(b,a.plane,f,d,e)&&(0b.length;)b="0"+b;a=parseInt(b.substr(0,2),16);var c=parseInt(b.substr(2,2),16),b=parseInt(b.substr(4,2),16);return[a,c,b]};JSM.HexColorToNormalizedRGBComponents=function(a){a=JSM.HexColorToRGBComponents(a);return[a[0]/255,a[1]/255,a[2]/255]};JSM.HexColorToRGBColor=function(a){return parseInt("0x"+a,16)}; JSM.RGBComponentsToHexColor=function(a,b,c){function d(a){for(a=parseInt(a,10).toString(16);2>a.length;)a="0"+a;return a}a=d(a);b=d(b);c=d(c);return parseInt("0x"+a+b+c,16)};JSM.Light=function(a){var b=8355711,c=8355711,d=0,e=new JSM.Vector(1,0,0);void 0!==a&&null!==a&&(b=JSM.ValueOrDefault(a.ambient,b),c=JSM.ValueOrDefault(a.diffuse,c),d=JSM.ValueOrDefault(a.specular,d),e=JSM.ValueOrDefault(a.direction,e));this.ambient=b;this.diffuse=c;this.specular=d;this.direction=e}; -JSM.Material=function(a){var b=52224,c=52224,d=0,e=0,f=1,g=null,h=1,l=1;void 0!==a&&null!==a&&(b=JSM.ValueOrDefault(a.ambient,b),c=JSM.ValueOrDefault(a.diffuse,c),d=JSM.ValueOrDefault(a.specular,d),e=JSM.ValueOrDefault(a.shininess,e),f=JSM.ValueOrDefault(a.opacity,f),g=JSM.ValueOrDefault(a.texture,g),h=JSM.ValueOrDefault(a.textureWidth,h),l=JSM.ValueOrDefault(a.textureHeight,l));this.ambient=b;this.diffuse=c;this.specular=d;this.shininess=e;this.opacity=f;this.texture=g;this.textureWidth=h;this.textureHeight= -l};JSM.Materials=function(){this.materials=[];this.defaultMaterial=new JSM.Material};JSM.Materials.prototype.GetMaterial=function(a){return 0>a||a>=this.materials.length?this.defaultMaterial:this.materials[a]};JSM.Materials.prototype.AddMaterial=function(a){this.materials.push(a)};JSM.Materials.prototype.GetDefaultMaterial=function(){return this.defaultMaterial};JSM.Materials.prototype.Count=function(){return this.materials.length}; +JSM.Material=function(a){var b=52224,c=52224,d=0,e=0,f=1,g=null,h=1,k=1;void 0!==a&&null!==a&&(b=JSM.ValueOrDefault(a.ambient,b),c=JSM.ValueOrDefault(a.diffuse,c),d=JSM.ValueOrDefault(a.specular,d),e=JSM.ValueOrDefault(a.shininess,e),f=JSM.ValueOrDefault(a.opacity,f),g=JSM.ValueOrDefault(a.texture,g),h=JSM.ValueOrDefault(a.textureWidth,h),k=JSM.ValueOrDefault(a.textureHeight,k));this.ambient=b;this.diffuse=c;this.specular=d;this.shininess=e;this.opacity=f;this.texture=g;this.textureWidth=h;this.textureHeight= +k};JSM.Materials=function(){this.materials=[];this.defaultMaterial=new JSM.Material};JSM.Materials.prototype.GetMaterial=function(a){return 0>a||a>=this.materials.length?this.defaultMaterial:this.materials[a]};JSM.Materials.prototype.AddMaterial=function(a){this.materials.push(a)};JSM.Materials.prototype.GetDefaultMaterial=function(){return this.defaultMaterial};JSM.Materials.prototype.Count=function(){return this.materials.length}; JSM.AddVertexToBody=function(a,b,c,d){a.AddVertex(new JSM.BodyVertex(new JSM.Coord(b,c,d)))};JSM.AddPolygonToBody=function(a,b){a.AddPolygon(new JSM.BodyPolygon(b))};JSM.CalculateBodyVertexToPolygon=function(a){var b=[],c,d;for(c=0;ck;k++)0===k?m=e:1===k?m=f:2===k&&(m=g),n=Math.abs(JSM.VectorDot(b,m)),JSM.IsGreater(n,l)&&(h=k,l=n);if(-1===h)return d;b=null;0===h?b=new JSM.CoordSystem(c.origo,f,g,new JSM.Coord(0,0,0)):1===h?b=new JSM.CoordSystem(c.origo,e,g,new JSM.Coord(0,0,0)):2===h&&(b=new JSM.CoordSystem(c.origo,e,f,new JSM.Coord(0,0,0)));return null=== +JSM.CalculateCubicTextureCoord=function(a,b,c){var d=new JSM.Coord2D(0,0),e=JSM.VectorNormalize(c.e1),f=JSM.VectorNormalize(c.e2),g=JSM.VectorNormalize(c.e3),h=-1,k=0,l,m,n;for(l=0;3>l;l++)0===l?m=e:1===l?m=f:2===l&&(m=g),n=Math.abs(JSM.VectorDot(b,m)),JSM.IsGreater(n,k)&&(h=l,k=n);if(-1===h)return d;b=null;0===h?b=new JSM.CoordSystem(c.origo,f,g,new JSM.Coord(0,0,0)):1===h?b=new JSM.CoordSystem(c.origo,e,g,new JSM.Coord(0,0,0)):2===h&&(b=new JSM.CoordSystem(c.origo,e,f,new JSM.Coord(0,0,0)));return null=== b?d:JSM.CalculatePlanarTextureCoord(a,b)};JSM.CalculateCylindricalTextureCoord=function(a,b,c){var d=new JSM.Coord2D(0,0),e=JSM.VectorNormalize(c.e3);if(JSM.VectorsAreCollinear(e,b))return d=JSM.CalculateCubicTextureCoord(a,b,c),[d,0];b=new JSM.Line(c.origo,e);var f=JSM.ProjectCoordToLine(a,b);b=JSM.CoordSignedDistance(c.origo,f,e);var g=JSM.VectorNormalize(c.e1);a=JSM.CoordSub(a,f);e=JSM.GetVectorsFullAngle(a,g,e);c=JSM.VectorLength(c.e1);d.x=e*c;d.y=b;return[d,e]}; JSM.CalculatePolygonPlanarTextureCoords=function(a,b){var c=[],d=a.GetPolygon(b),e=a.GetTextureProjectionCoords(),f,g;for(f=0;fe;e++)l.AddVertexIndex(2*c[b[h[e]]]+1),x.AddVertexIndex(2*c[b[h[3-e-1]]]);f.AddPolygon(l);f.AddPolygon(x)}}var f=new JSM.Body;(function(){var d; -for(d=0;de;e++)k.AddVertexIndex(2*c[b[h[e]]]+1),x.AddVertexIndex(2*c[b[h[3-e-1]]]);f.AddPolygon(k);f.AddPolygon(x)}}var f=new JSM.Body;(function(){var d; +for(d=0;dy)){var D=void 0,A=void 0,B=void 0,K=void 0,L=void 0,M=void 0,w=void 0,G=void 0,N=void 0,E=void 0;if(3==y||k)for(E=0;Ey)){var D=void 0,A=void 0,B=void 0,K=void 0,L=void 0,M=void 0,w=void 0,G=void 0,N=void 0,E=void 0;if(3==y||l)for(E=0;Ef)){var g,n,p,q=null;if(3===f)q=JSM.CalculateBodyPolygonNormal(a,b),g=a.GetVertex(d.GetVertexIndex(0)).position,n=a.GetVertex(d.GetVertexIndex(1)).position, p=a.GetVertex(d.GetVertexIndex(2)).position,e(q,g,n,p);else if(g=!0,void 0!==c&&c&&(g=!1),q=JSM.CalculateBodyPolygonNormal(a,b),g){g=new JSM.Polygon;for(b=0;b=this.arrayBuffer JSM.BinaryReader.prototype.ReadUnsignedCharacter=function(){var a=this.dataView.getUint8(this.position,this.isLittleEndian);this.position+=1;return a};JSM.BinaryReader.prototype.ReadInteger16=function(){var a=this.dataView.getInt16(this.position,this.isLittleEndian);this.position+=2;return a};JSM.BinaryReader.prototype.ReadUnsignedInteger16=function(){var a=this.dataView.getUint16(this.position,this.isLittleEndian);this.position+=2;return a}; JSM.BinaryReader.prototype.ReadInteger32=function(){var a=this.dataView.getInt32(this.position,this.isLittleEndian);this.position+=4;return a};JSM.BinaryReader.prototype.ReadUnsignedInteger32=function(){var a=this.dataView.getUint32(this.position,this.isLittleEndian);this.position+=4;return a};JSM.BinaryReader.prototype.ReadFloat32=function(){var a=this.dataView.getFloat32(this.position,this.isLittleEndian);this.position+=4;return a}; JSM.BinaryReader.prototype.ReadDouble64=function(){var a=this.dataView.getFloat64(this.position,this.isLittleEndian);this.position+=8;return a};JSM.GetArrayBufferFromURL=function(a,b){var c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(){var a=c.response;a&&b(a)};c.send(null)};JSM.GetArrayBufferFromFile=function(a,b){var c=new FileReader;c.onloadend=function(a){a.target.readyState==FileReader.DONE&&b(a.target.result)};c.readAsArrayBuffer(a)}; -JSM.GetStringBufferFromURL=function(a,b){var c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="text";c.onload=function(){var a=c.response;a&&b(a)};c.send(null)};JSM.LoadMultipleBuffers=function(a,b,c,d,e){c>=a.length?e(b):d(a[c],function(f){b.push(f);JSM.LoadMultipleBuffers(a,b,c+1,d,e)})};JSM.GetStringBufferFromFile=function(a,b){var c=new FileReader;c.onloadend=function(a){a.target.readyState==FileReader.DONE&&b(a.target.result)};c.readAsText(a)}; +JSM.GetStringBufferFromURL=function(a,b){var c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="text";c.onload=function(){var a=c.response;a&&b(a)};c.send(null)};JSM.GetStringBufferFromFile=function(a,b){var c=new FileReader;c.onloadend=function(a){a.target.readyState==FileReader.DONE&&b(a.target.result)};c.readAsText(a)};JSM.LoadMultipleBuffers=function(a,b,c,d,e){c>=a.length?e(b):d(a[c],function(f){b.push(f);JSM.LoadMultipleBuffers(a,b,c+1,d,e)})}; JSM.GetStringBuffersFromURLList=function(a,b){JSM.LoadMultipleBuffers(a,[],0,JSM.GetStringBufferFromURL,function(a){b(a)})};JSM.GetStringBuffersFromFileList=function(a,b){JSM.LoadMultipleBuffers(a,[],0,JSM.GetStringBufferFromFile,function(a){b(a)})}; JSM.ConvertTriangleModelToJsonData=function(a){function b(a,b,c){var d=[],e=a.MaterialCount(),f;for(a=0;af.mat||f.mat>=e)||d[f.mat].push(a);var p,q;for(a=0;ad;){c=a.ReadCharacter();if(0===c)break;b+=String.fromCharCode(c);d+=1}return b}function N(a){var b=[],c;for(c=0;3>c;c++)b[c]=a.ReadFloat32();return b}function E(a,b,c){for(;a.GetPosition()<=b-6;){var d=a,e=c,f=d.ReadUnsignedInteger16(),d=d.ReadUnsignedInteger32();e(f,d)}}if(void 0===b||null===b)b={};c= -15677;d=45055;e=40960;f=40976;g=40992;h=41008;l=41024;k=41040;m=16;n=17;p=18;q=19;r=48;s=49;x=16384;v=16640;t=17920;y=18176;F=16656;C=16672;u=16736;H=16688;z=16720;I=45056;J=45058;D=45072;A=45075;B=45088;K=45089;L=45090;M=45104;(function(a){function P(a,b,c){var d={};b=a.GetPosition()+c-6;var e=!1;E(a,b,function(b,c){b==n?e||(d.r=a.ReadUnsignedCharacter()/255,d.g=a.ReadUnsignedCharacter()/255,d.b=a.ReadUnsignedCharacter()/255):b==p?(d.r=a.ReadUnsignedCharacter()/255,d.g=a.ReadUnsignedCharacter()/ +JSM.Read3dsFile=function(a,b){var c,d,e,f,g,h,k,l,m,n,p,q,r,s,x,v,t,y,F,C,u,H,z,I,J,D,A,B,K,L,M;function w(a,c){if(void 0!==b.onLog&&null!==b.onLog)b.onLog(a,c)}function G(a){for(var b="",c=0,d=0;64>d;){c=a.ReadCharacter();if(0===c)break;b+=String.fromCharCode(c);d+=1}return b}function N(a){var b=[],c;for(c=0;3>c;c++)b[c]=a.ReadFloat32();return b}function E(a,b,c){for(;a.GetPosition()<=b-6;){var d=a,e=c,f=d.ReadUnsignedInteger16(),d=d.ReadUnsignedInteger32();e(f,d)}}if(void 0===b||null===b)b={};c= +15677;d=45055;e=40960;f=40976;g=40992;h=41008;k=41024;l=41040;m=16;n=17;p=18;q=19;r=48;s=49;x=16384;v=16640;t=17920;y=18176;F=16656;C=16672;u=16736;H=16688;z=16720;I=45056;J=45058;D=45072;A=45075;B=45088;K=45089;L=45090;M=45104;(function(a){function P(a,b,c){var d={};b=a.GetPosition()+c-6;var e=!1;E(a,b,function(b,c){b==n?e||(d.r=a.ReadUnsignedCharacter()/255,d.g=a.ReadUnsignedCharacter()/255,d.b=a.ReadUnsignedCharacter()/255):b==p?(d.r=a.ReadUnsignedCharacter()/255,d.g=a.ReadUnsignedCharacter()/ 255,d.b=a.ReadUnsignedCharacter()/255,e=!0):b==m?e||(d.r=a.ReadFloat32(),d.g=a.ReadFloat32(),d.b=a.ReadFloat32()):b==q?(d.r=a.ReadFloat32(),d.g=a.ReadFloat32(),d.b=a.ReadFloat32(),e=!0):a.Skip(c-6)});return d}function Q(a,b,c){var d=0;b=a.GetPosition()+c-6;E(a,b,function(b,c){b==r?d=a.ReadUnsignedInteger16()/100:b==s?d=a.ReadFloat32():a.Skip(c-6)});return d}function R(a,c,d){w("Read material chunk ("+c.toString(16)+", "+d+")",2);var m={},n=a.GetPosition()+d-6;E(a,n,function(b,n){b==e?(w("Read material name chunk ("+ -c.toString(16)+", "+d+")",3),m.name=G(a)):b==f?(w("Read material ambient chunk ("+c.toString(16)+", "+d+")",3),m.ambient=P(a,b,n)):b==g?(w("Read material diffuse chunk ("+c.toString(16)+", "+d+")",3),m.diffuse=P(a,b,n)):b==h?(w("Read material specular chunk ("+c.toString(16)+", "+d+")",3),m.specular=P(a,b,n)):b==l?(w("Read material shininess chunk ("+c.toString(16)+", "+d+")",3),m.shininess=Q(a,b,n)):b==k?(w("Read material transparency chunk ("+c.toString(16)+", "+d+")",3),m.transparency=Q(a,b,n)): +c.toString(16)+", "+d+")",3),m.name=G(a)):b==f?(w("Read material ambient chunk ("+c.toString(16)+", "+d+")",3),m.ambient=P(a,b,n)):b==g?(w("Read material diffuse chunk ("+c.toString(16)+", "+d+")",3),m.diffuse=P(a,b,n)):b==h?(w("Read material specular chunk ("+c.toString(16)+", "+d+")",3),m.specular=P(a,b,n)):b==k?(w("Read material shininess chunk ("+c.toString(16)+", "+d+")",3),m.shininess=Q(a,b,n)):b==l?(w("Read material transparency chunk ("+c.toString(16)+", "+d+")",3),m.transparency=Q(a,b,n)): (w("Skip chunk ("+b.toString(16)+", "+n+")",3),a.Skip(n-6))});if(void 0!==b.onMaterial&&null!==b.onMaterial)b.onMaterial(m)}function S(a,c,d){w("Read faces chunk ("+c.toString(16)+", "+d+")",4);c=a.GetPosition()+d-6;var e=a.ReadUnsignedInteger16(),f,g,h,l;for(d=0;df;f++){for(g=0;3>g;g++)e.push(a.ReadFloat32()); @@ -247,22 +247,24 @@ void 0!==d&&(d=l(b.nodes[d],b),c=JSM.MatrixMultiply(c,d)));return a.matrix=c}var (h=c[h],void 0!==h&&(g.mat=h)),h=b.faceToSmoothingGroup[f],void 0!==h&&(g.curve=h)}function f(a,b,c,d){b=b.Clone();b.SetName(b.GetName()+" ("+d+")");cf.length)){g="";for(h=1;hf.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),f=parseFloat(f[3]),void 0!==b.onVertex&&null!==b.onVertex))b.onVertex(h, -g,f)}else if("vn"==f[0]){if(!(4>f.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),f=parseFloat(f[3]),void 0!==b.onNormal&&null!==b.onNormal))b.onNormal(h,g,f)}else if("f"==f[0]){if(!(4>f.length)){for(var g=[],l=[],k=void 0,h=1;hf.length)&&void 0!==b.onUseMaterial&&null!==b.onUseMaterial)b.onUseMaterial(f[1])}else if("newmtl"== -f[0]){if(!(2>f.length)&&void 0!==b.onNewMaterial&&null!==b.onNewMaterial)b.onNewMaterial(f[1])}else if("Ka"==f[0]||"Kd"==f[0]||"Ks"==f[0]){if(!(4>f.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),l=parseFloat(f[3]),void 0!==b.onMaterialComponent&&null!==b.onMaterialComponent))b.onMaterialComponent(f[0],h,g,l)}else if("Ka"==f[0]||"Kd"==f[0]||"Ks"==f[0]){if(!(4>f.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),l=parseFloat(f[3]),void 0!==b.onMaterialComponent&&null!==b.onMaterialComponent))b.onMaterialComponent(f[0], -h,g,l)}else"mtllib"==f[0]&&!(2>f.length)&&(f=g.indexOf("mtllib")+6,h=g.substr(f,g.length-f).trim(),f=h.trim(),f=void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(f):null,null!==f&&c(f))}}}c(a)}; -JSM.ConvertObjToJsonData=function(a,b){var c=new JSM.TriangleModel,d=c.AddBody(new JSM.TriangleBody("Default")),e=c.GetBody(d),f={},g=null,h=null,l=[],k=[];JSM.ReadObjFile(a,{onNewMaterial:function(a){var b=c.AddMaterial(a,{r:1,g:0,b:0},{r:1,g:0,b:0},{r:0,g:0,b:0},1);g=c.GetMaterial(b);f[a]=b},onMaterialComponent:function(a,b,c,d){null!==g&&("Ka"==a?(a=g.ambient,a.r=b,a.g=c,a.b=d):"Kd"==a?(a=g.diffuse,a.r=b,a.g=c,a.b=d):"Ks"==a&&(a=g.specular,a.r=b,a.g=c,a.b=d))},onUseMaterial:function(a){a=f[a]; -void 0!==a&&(h=a)},onMesh:function(a){a=c.AddBody(new JSM.TriangleBody(a));e=c.GetBody(a)},onVertex:function(a,b,c){l.push(new JSM.Coord(a,b,c))},onNormal:function(a,b,c){k.push(new JSM.Coord(a,b,c))},onFace:function(a,b){var c,d,f=a.length==b.length,g=a.length;for(c=0;cc;c++)b[c]=a.ReadFloat32();return b}var d=new JSM.BinaryReader(a,!0);d.Skip(80);var e=d.ReadUnsignedInteger32(),f,g,h,l,k;for(f=0;fd.length)return-1;var d=[parseFloat(d[2]),parseFloat(d[3]),parseFloat(d[4])],e=[],k,m;for(k=c+1;ke.length;k++)if(m=a[k].trim(),0!==m.length&&(m=m.split(/\s+/),0!==m.length&&"vertex"==m[0]))if(4>m.length)break;else m=[parseFloat(m[1]),parseFloat(m[2]),parseFloat(m[3])],e.push(m);k+=1;if(3!=e.length)return-1; -if(void 0!==b.onFace&&null!==b.onFace)b.onFace(e[0],e[1],e[2],d);return k}return c+1}for(var d=0,e=a.split("\n");df.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),f=parseFloat(f[3]),void 0!==b.onNormal&&null!==b.onNormal))b.onNormal(h,g,f)}else if("f"==f[0]){if(!(4>f.length)){for(var g=[],k=[],l=void 0,h=1;hf.length)&&void 0!==b.onUseMaterial&&null!==b.onUseMaterial)b.onUseMaterial(f[1])}else if("newmtl"== +f[0]){if(!(2>f.length)&&void 0!==b.onNewMaterial&&null!==b.onNewMaterial)b.onNewMaterial(f[1])}else if("Ka"==f[0]||"Kd"==f[0]||"Ks"==f[0]){if(!(4>f.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),k=parseFloat(f[3]),void 0!==b.onMaterialComponent&&null!==b.onMaterialComponent))b.onMaterialComponent(f[0],h,g,k)}else if("Ka"==f[0]||"Kd"==f[0]||"Ks"==f[0]){if(!(4>f.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),k=parseFloat(f[3]),void 0!==b.onMaterialComponent&&null!==b.onMaterialComponent))b.onMaterialComponent(f[0], +h,g,k)}else"mtllib"==f[0]&&!(2>f.length)&&(f=g.indexOf("mtllib")+6,h=g.substr(f,g.length-f).trim(),f=h.trim(),f=void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(f):null,null!==f&&c(f))}}}c(a)}; +JSM.ConvertObjToJsonData=function(a,b){var c=new JSM.TriangleModel,d=c.AddBody(new JSM.TriangleBody("Default")),e=c.GetBody(d),f={},g=null,h=null,k=[],l=[];JSM.ReadObjFile(a,{onNewMaterial:function(a){var b=c.AddMaterial(a,{r:1,g:0,b:0},{r:1,g:0,b:0},{r:0,g:0,b:0},1);g=c.GetMaterial(b);f[a]=b},onMaterialComponent:function(a,b,c,d){null!==g&&("Ka"==a?(a=g.ambient,a.r=b,a.g=c,a.b=d):"Kd"==a?(a=g.diffuse,a.r=b,a.g=c,a.b=d):"Ks"==a&&(a=g.specular,a.r=b,a.g=c,a.b=d))},onUseMaterial:function(a){a=f[a]; +void 0!==a&&(h=a)},onMesh:function(a){a=c.AddBody(new JSM.TriangleBody(a));e=c.GetBody(a)},onVertex:function(a,b,c){k.push(new JSM.Coord(a,b,c))},onNormal:function(a,b,c){l.push(new JSM.Coord(a,b,c))},onFace:function(a,b){var c,d,f=a.length==b.length,g=a.length;for(c=0;cc;c++)b[c]=a.ReadFloat32();return b}var d=new JSM.BinaryReader(a,!0);d.Skip(80);var e=d.ReadUnsignedInteger32(),f,g,h,k,l;for(f=0;fd.length)return-1;var d=[parseFloat(d[2]),parseFloat(d[3]),parseFloat(d[4])],e=[],l,m;for(l=c+1;le.length;l++)if(m=a[l].trim(),0!==m.length&&(m=m.split(/\s+/),0!==m.length&&"vertex"==m[0]))if(4>m.length)break;else m=[parseFloat(m[1]),parseFloat(m[2]),parseFloat(m[3])],e.push(m);l+=1;if(3!=e.length)return-1; +if(void 0!==b.onFace&&null!==b.onFace)b.onFace(e[0],e[1],e[2],d);return l}return c+1}for(var d=0,e=a.split("\n");db)return!1;a=new JSM.BinaryReader(a,!0);a.Skip(80);a=a.ReadUnsignedInteger32();return b!=50*a+84?!1:!0})(a)?JSM.ReadBinaryStlFile(a,{onFace:function(a,b,c,h){a=d.AddVertex(a[0],a[1],a[2]);b=d.AddVertex(b[0],b[1],b[2]);c=d.AddVertex(c[0],c[1],c[2]);h=JSM.VectorNormalize(new JSM.Vector(h[0],h[1],h[2]));h=d.AddNormal(h.x,h.y,h.z);d.AddTriangle(a, -b,c,h,h,h)}}):(a=String.fromCharCode.apply(null,new Uint8Array(a)),JSM.ReadAsciiStlFile(a,{onFace:function(a,b,c,h){a=d.AddVertex(a[0],a[1],a[2]);b=d.AddVertex(b[0],b[1],b[2]);c=d.AddVertex(c[0],c[1],c[2]);h=JSM.VectorNormalize(new JSM.Vector(h[0],h[1],h[2]));h=d.AddNormal(h.x,h.y,h.z);d.AddTriangle(a,b,c,h,h,h)}}));b.Finalize();return JSM.ConvertTriangleModelToJsonData(b)};JSM.ImportFileList=function(){this.descriptors=null}; -JSM.ImportFileList.prototype.Init=function(a){this.descriptors=[];var b,c;for(b=0;bt;t++)v[t].z=n-c;t=JSM.GeneratePrism(v,k,c,!0);l.Merge(t);if(d)for(t=0;tb&&(e=a,p=!1);for(t=0;tt;t++)v[t].z=n-c;t=JSM.GeneratePrism(v,l,c,!0);k.Merge(t);if(d)for(t=0;tb&&(e=a,p=!1);for(t=0;tg;g++)k=0===g?h.pgon1:h.pgon2,-1===k&&(k=0===g?h.pgon2:h.pgon1),k=b.GetVertex(d[k]).position,l=JSM.CoordAdd(l,JSM.VectorMultiply(k,0.25));e.push(b.AddVertex(new JSM.BodyVertex(l)))}})();(function(){var e=[],g,h,l,k;for(l=0;lg;g++)l=0===g?h.pgon1:h.pgon2,-1===l&&(l=0===g?h.pgon2:h.pgon1),l=b.GetVertex(d[l]).position,k=JSM.CoordAdd(k,JSM.VectorMultiply(l,0.25));e.push(b.AddVertex(new JSM.BodyVertex(k)))}})();(function(){var e=[],g,h,k,l;for(k=0;k