Update JSModeler.
This commit is contained in:
parent
3ab5a709e8
commit
607bae2326
@ -1,9 +1,9 @@
|
||||
/* JSModeler 0.33.219 - http://www.github.com/kovacsv/JSModeler */ 'use strict';var JSM={mainVersion:0,subVersion:33,Eps:1E-8,Inf:9999999999,RadDeg:57.29577951308232,DegRad:0.017453292519943,IsZero:function(a){return Math.abs(a)<JSM.Eps},IsPositive:function(a){return 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},IsEqualWithEps:function(a,b,c){return Math.abs(b-a)<c},IsLowerOrEqual:function(a,b){return JSM.IsLower(a,b)||
|
||||
/* JSModeler 0.33.226 - http://www.github.com/kovacsv/JSModeler */ 'use strict';var JSM={mainVersion:0,subVersion:33,Eps:1E-8,Inf:9999999999,RadDeg:57.29577951308232,DegRad:0.017453292519943,IsZero:function(a){return Math.abs(a)<JSM.Eps},IsPositive:function(a){return 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},IsEqualWithEps:function(a,b,c){return Math.abs(b-a)<c},IsLowerOrEqual:function(a,b){return JSM.IsLower(a,b)||
|
||||
JSM.IsEqual(a,b)},IsGreaterOrEqual:function(a,b){return JSM.IsGreater(a,b)||JSM.IsEqual(a,b)},Minimum:function(a,b){return JSM.IsLower(a,b)?a:b},Maximum:function(a,b){return JSM.IsGreater(a,b)?a:b},ArcSin:function(a){return JSM.IsGreaterOrEqual(a,1)?Math.PI/2:JSM.IsLowerOrEqual(a,-1)?-Math.PI/2:Math.asin(a)},ArcCos:function(a){return JSM.IsGreaterOrEqual(a,1)?0:JSM.IsLowerOrEqual(a,-1)?Math.PI:Math.acos(a)},RandomNumber:function(a,b){return Math.random()*(b-a)+a},RandomInt:function(a,b){return Math.floor(Math.random()*
|
||||
(b-a+1)+a)},SeededRandomInt:function(a,b,c){return Math.floor((9301*c+49297)%233280/233280*(b-a+1)+a)},ValueOrDefault:function(a,b){return void 0===a||null===a?b:a},Assert:function(a,b){if(!a){var c="Assertion failed.";void 0!==b&&null!==b&&(c+=" "+b);alert(c)}},Timer:function(){this.stop=this.start=0}};JSM.Timer.prototype.Start=function(){this.start=(new Date).getTime()};JSM.Timer.prototype.Stop=function(){this.end=(new Date).getTime()};JSM.Timer.prototype.Result=function(){return this.end-this.start};
|
||||
JSM.FPSCounter=function(){this.current=this.frames=this.start=null};JSM.FPSCounter.prototype.Get=function(a){var b=(new Date).getTime();null===this.start&&(this.start=b,this.current=this.frames=0);if(null===a||void 0===a)a=1E3;this.frames+=1;var c=b-this.start;c>=a&&(this.current=1E3*(this.frames/c),this.start=b,this.frames=0);return parseInt(this.current,10)};
|
||||
JSM.BubbleSort=function(a,b){if(!(2>a.length||void 0===b||null===b)){var c,d;for(c=0;c<a.length-1;c++)for(d=0;d<a.length-c-1;d++)if(!b(a[d],a[d+1])){var e=a,f=d+1,g=e[d];e[d]=e[f];e[f]=g}}};JSM.AsyncEnvironment=function(a){this.parameters=a};JSM.AsyncEnvironment.prototype.OnStart=function(a,b){if(void 0!==this.parameters&&void 0!==this.parameters.onStart)this.parameters.onStart(a,b)};
|
||||
JSM.AsyncEnvironment.prototype.OnProcess=function(a,b){if(void 0!==this.parameters&&void 0!==this.parameters.onProcess)this.parameters.onProcess(a,b)};JSM.AsyncEnvironment.prototype.OnFinish=function(a){if(void 0!==this.parameters&&void 0!==this.parameters.onFinish)this.parameters.onFinish(a)};
|
||||
(b-a+1)+a)},SeededRandomInt:function(a,b,c){return Math.floor((9301*c+49297)%233280/233280*(b-a+1)+a)},ValueOrDefault:function(a,b){return void 0===a||null===a?b:a},CopyObjectProperties:function(a,b,c){if(!(void 0===a||null===a||void 0===b||null===b))for(var d in a)if(a.hasOwnProperty(d)&&(c||void 0===b[d]||null===b[d]))b[d]=a[d]},Assert:function(a,b){if(!a){var c="Assertion failed.";void 0!==b&&null!==b&&(c+=" "+b);alert(c)}},Timer:function(){this.stop=this.start=0}};
|
||||
JSM.Timer.prototype.Start=function(){this.start=(new Date).getTime()};JSM.Timer.prototype.Stop=function(){this.end=(new Date).getTime()};JSM.Timer.prototype.Result=function(){return this.end-this.start};JSM.FPSCounter=function(){this.current=this.frames=this.start=null};
|
||||
JSM.FPSCounter.prototype.Get=function(a){var b=(new Date).getTime();null===this.start&&(this.start=b,this.current=this.frames=0);if(null===a||void 0===a)a=1E3;this.frames+=1;var c=b-this.start;c>=a&&(this.current=1E3*(this.frames/c),this.start=b,this.frames=0);return parseInt(this.current,10)};JSM.BubbleSort=function(a,b){if(!(2>a.length||void 0===b||null===b)){var c,d;for(c=0;c<a.length-1;c++)for(d=0;d<a.length-c-1;d++)if(!b(a[d],a[d+1])){var e=a,f=d+1,g=e[d];e[d]=e[f];e[f]=g}}};
|
||||
JSM.AsyncEnvironment=function(a){this.parameters=a};JSM.AsyncEnvironment.prototype.OnStart=function(a,b){if(void 0!==this.parameters&&void 0!==this.parameters.onStart)this.parameters.onStart(a,b)};JSM.AsyncEnvironment.prototype.OnProcess=function(a,b){if(void 0!==this.parameters&&void 0!==this.parameters.onProcess)this.parameters.onProcess(a,b)};JSM.AsyncEnvironment.prototype.OnFinish=function(a){if(void 0!==this.parameters&&void 0!==this.parameters.onFinish)this.parameters.onFinish(a)};
|
||||
JSM.AsyncRunTask=function(a,b,c,d,e){function f(g){var h=a();b.OnProcess(g,e);h&&g<c-1?setTimeout(function(){f(g+1)},d):setTimeout(function(){b.OnFinish(e)},d)}if(void 0===b||null===b){var g,h;for(g=0;g<c&&!(h=a(),!h);g++);}else b.OnStart(c,e),f(0)};JSM.IsWebGLEnabled=function(a){if(!window.WebGLRenderingContext)return!1;try{var b=document.createElement("canvas");if(!b.getContext("experimental-webgl")&&!b.getContext("webgl"))return!1}catch(c){return!1}return!0};
|
||||
JSM.IsFileApiEnabled=function(a){return!window.File||!window.FileReader||!window.FileList||!window.Blob||!window.URL?!1:!0};JSM.Coord2D=function(a,b){this.x=a;this.y=b};JSM.Coord2D.prototype.Set=function(a,b){this.x=a;this.y=b};JSM.Coord2D.prototype.ToString=function(){return"("+this.x+", "+this.y+")"};JSM.Coord2D.prototype.Clone=function(){return new JSM.Coord2D(this.x,this.y)};JSM.PolarCoord=function(a,b){this.radius=a;this.angle=b};
|
||||
JSM.PolarCoord.prototype.Set=function(a,b){this.radius=a;this.angle=b};JSM.PolarCoord.prototype.ToString=function(){return"("+this.radius+", "+this.angle+")"};JSM.PolarCoord.prototype.Clone=function(){return new JSM.PolarCoord(this.radius,this.angle)};JSM.Coord=function(a,b,c){this.x=a;this.y=b;this.z=c};JSM.Coord.prototype.Set=function(a,b,c){this.x=a;this.y=b;this.z=c};JSM.Coord.prototype.ToString=function(){return"("+this.x+", "+this.y+", "+this.z+")"};
|
||||
@ -82,16 +82,16 @@ JSM.SectorIntersectsPolygon2D=function(a,b,c,d){var e=a.VertexCount(),f,g,h;for(
|
||||
JSM.IsPolygonVertexVisible2D=function(a,b,c){if(b===c)return!1;var d=a.VertexCount();if(c===(0<b?b-1:d-1)||c===(b<d-1?b+1:0))return!1;d=new JSM.Sector2D(a.GetVertex(b),a.GetVertex(c));if(JSM.SectorIntersectsPolygon2D(a,d,b,c))return!1;b=JSM.MidCoord2D(d.beg,d.end);return"CoordInsideOfPolygon"!==JSM.CoordPolygonPosition2D(b,a)?!1:!0};
|
||||
JSM.CreatePolygonWithHole2D=function(a){var b=[],c=[],d=0,e;c.push(-1);for(e=0;e<a.length;e++)null===a[e]&&(c.push(e),d+=1);c.push(e);d+=1;for(e=0;e<d;e++){var f=e,g=c[f]+1,h=c[f+1];if(0===f){f=void 0;for(f=g;f<h;f++)b.push(f)}else{for(var g=void 0,g=new JSM.Polygon2D,h=new JSM.Polygon2D,k=void 0,l=void 0,l=void 0,k=0;k<b.length;k++)l=a[b[k]],g.AddVertex(l.x,l.y);for(var m=c[f]+1,n=c[f+1],k=m;k<n;k++)l=a[k],h.AddVertex(l.x,l.y);for(var p=null,q=void 0,r=void 0,t=void 0,k=0;k<g.VertexCount();k++){r=
|
||||
b[k];for(l=m;l<n;l++)if(t=l-m,q=new JSM.Sector(a[r],a[l]),!JSM.SectorIntersectsPolygon2D(g,q,k,-1)&&!JSM.SectorIntersectsPolygon2D(h,q,-1,t)){p=[r,l];break}if(null!==p)break}g=p;h=c[f]+1;f=c[f+1];k=[];n=m=void 0;for(m=0;m<b.length;m++)k[m]=b[m];b=[];p=l=void 0;for(m=0;m<k.length;m++)if(b.push(k[m]),k[m]==g[0]){n=g[1];l=!0;for(p=!1;!p;)b.push(n),!l&&n==g[1]&&(p=!0),l&&(l=!1),n=n<f-1?n+1:h;b.push(k[m])}}}return b};
|
||||
JSM.PolygonTriangulate2D=function(a){function b(){var a=[],b,c,d,e;for(b=0;b<g.length;b++)if(d=g[b],3===d.length)if("CounterClockwise"===l)a.push(d);else{e=[];for(c=d.length-1;0<=c;c--)e.push(f-d[c]-1);a.push(e)}return a}function c(a,b,c){if(b===c)return!1;var d=a.VertexCount(),e;if(!(e=(b<d-1?b+1:0)===c))e=(0<b?b-1:d-1)===c;return e?!1:JSM.IsPolygonVertexVisible2D(a,b,c)}function d(a,b,c){var d=a.length;if(3>=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=f<d-1?f+1:0)k.push(a[f]);g.push(k)}return!0}var e=a.Clone(),f=e.VertexCount();if(3>f)return[];var g=[],h=[],k;for(a=0;a<f;a++)h.push(a);g.push(h);if(3===f)return b();var h=JSM.PolygonComplexity2D(e),l=JSM.PolygonOrientation2D(e);if("Invalid"===h||"Invalid"===l)return[];if("CounterClockwise"!==l){var m,n,p;for(a=0;a<f/2;a++)m=a,n=f-a-1,p=e.vertices[m],e.vertices[m]=e.vertices[n],e.vertices[n]=p}if("Convex"===h){for(a=0;a<f-2;a++)e=[],e.push(0),e.push((a+1)%f),e.push((a+2)%f),g.push(e);return b()}var q;
|
||||
JSM.PolygonTriangulate2D=function(a){function b(){var a=[],b,c,d,e;for(b=0;b<g.length;b++)if(d=g[b],3===d.length)if("CounterClockwise"===l)a.push(d);else{e=[];for(c=d.length-1;0<=c;c--)e.push(f-d[c]-1);a.push(e)}return a}function c(a,b,c){if(b===c)return!1;var d=a.VertexCount(),e;if(!(e=(b<d-1?b+1:0)===c))e=(0<b?b-1:d-1)===c;return e?!1:JSM.IsPolygonVertexVisible2D(a,b,c)}function d(a,b,c){var d=a.length;if(3>=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=f<d-1?f+1:0)l.push(a[f]);g.push(l)}return!0}var e=a.Clone(),f=e.VertexCount();if(3>f)return[];var g=[],h=[],k;for(a=0;a<f;a++)h.push(a);g.push(h);if(3===f)return b();var h=JSM.PolygonComplexity2D(e),l=JSM.PolygonOrientation2D(e);if("Invalid"===h||"Invalid"===l)return[];if("CounterClockwise"!==l){var m,n,p;for(a=0;a<f/2;a++)m=a,n=f-a-1,p=e.vertices[m],e.vertices[m]=e.vertices[n],e.vertices[n]=p}if("Convex"===h){for(a=0;a<f-2;a++)e=[],e.push(0),e.push((a+1)%f),e.push((a+2)%f),g.push(e);return b()}var q;
|
||||
for(a=0;a<g.length;a++)if(m=g[a],n=m.length,3!==n){p=new JSM.Polygon2D;for(h=0;h<n;h++)k=e.GetVertex(m[h]),p.AddVertex(k.x,k.y);q=!1;for(h=0;h<n;h++){for(k=0;k<n;k++)if(c(p,h,k)){d(m,h,k);q=!0;break}if(q)break}}return b()};
|
||||
JSM.CheckTriangulation2D=function(a,b){var c=JSM.PolygonSignedArea2D(a),d=0,e,f,g,h,k;for(e=0;e<b.length;e++){g=b[e];if(3!==g.length)return!1;h=new JSM.Polygon2D;for(f=0;f<g.length;f++)k=a.GetVertex(g[f]),h.AddVertex(k.x,k.y);d+=JSM.PolygonSignedArea2D(h)}return!JSM.IsEqual(c,d)?!1:!0};
|
||||
JSM.CreatePolygonWithHole=function(a){var b=[],c;for(c=0;c<a.length;c++)null!==a[c]&&b.push(a[c]);var b=JSM.CalculateNormal(b),d=new JSM.Coord(0,0,0),e=[],f;for(c=0;c<a.length;c++)null!==a[c]?(f=JSM.GetCoord2DFromCoord(a[c],d,b),e.push(f)):e.push(null);return JSM.CreatePolygonWithHole2D(e)};
|
||||
JSM.PolygonTriangulate=function(a){var b=new JSM.Polygon2D,c=JSM.CalculateNormal(a.vertices),d=new JSM.Coord(0,0,0),e=a.VertexCount(),f,g;for(f=0;f<e;f++)g=JSM.GetCoord2DFromCoord(a.GetVertex(f),d,c),b.AddVertex(g.x,g.y);return JSM.PolygonTriangulate2D(b)};
|
||||
JSM.OffsetPolygonContour=function(a,b){var c=a.VertexCount(),d=JSM.CalculateNormal(a.vertices),e,f,g,h,k,l=new JSM.Polygon,m;for(m=0;m<c;m++)e=0===m?c-1:m-1,f=m,g=m===c-1?0:m+1,e=a.GetVertex(e),f=a.GetVertex(f),h=a.GetVertex(g),k=JSM.CoordSub(e,f),g=JSM.CoordSub(h,f),k=JSM.GetVectorsAngle(k,g)/2,"Clockwise"===JSM.CoordTurnType(e,f,h,d)&&(k=Math.PI-k),e=b/Math.sin(k),e=JSM.CoordOffset(f,g,e),e=JSM.CoordRotate(e,d,k,f),l.AddVertex(e.x,e.y,e.z);return l};
|
||||
JSM.CutPolygonWithPlane=function(a,b,c,d,e){function f(a,b,c,d,e){1==b?c.push(a):-1==b?d.push(a):e.push(a)}function g(a,b,c,d){function e(a,b){if(!(2>b.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;c<b.length;c++)g=a.GetVertex(b[c]),d.push(JSM.CoordPlaneSignedDistance(g,f));for(c=0;c<b.length-1;c++)for(f=0;f<b.length-c-1;f++)if(JSM.IsGreater(d[f],d[f+1])){g=d;var h=f+1,k=g[f];g[f]=g[h];g[h]=k;g=b;h=f+1;k=g[f];g[f]=
|
||||
g[h];g[h]=k}}}function f(a,b,c,d,e,g){function h(a,b){a[a[b]]=-1;a[b]=-1}var k=[];(function(a,b,c){var d;for(d=0;d<a.VertexCount();d++)c.push(-1);for(d=0;d<b.length;d+=2){a=c;var e=b,f=d;a[e[f]]=e[f+1];a[e[f+1]]=e[f]}})(a,b,k);var l=0;g&&(l=b.length-1);for(var m=b[l],n=m,p=!1,q=0,r=new JSM.Polygon,t;;){p||(q=c[n],0!==q&&(p=!0));if(0<r.VertexCount()&&n==m)if(1==q?d.push(r):-1==q&&e.push(r),r=new JSM.Polygon,0<l&&l<b.length){n=m=b[l];continue}else break;t=a.GetVertex(n);r.AddVertex(t.x,t.y,t.z);-1!=
|
||||
k[n]?(l=g?l-2:l+2,n=k[n],h(k,n)):n=n<a.VertexCount()-1?n+1:0}}var g=[];(function(a,b){var c,d,e,f;for(c=0;c<a.length;c++)if(d=a[c],0===d){d=0<c?c-1:a.length-1;e=c<a.length-1?c+1:0;f=a[d];e=a[e];if(0!==e&&0===f){for(;0===a[d];)d=0<d?d-1:a.length-1;f=a[d]}(-1==f&&1==e||1==f&&-1==e)&&b.push(c)}})(b,g);0===g.length||0!==g.length%2||(e(a,g),f(a,g,b,c,d,!1),f(a,g,b,c,d,!0))}var h=new JSM.Polygon,k=[];b=function(a,b,c,d){function e(a,c,d,f,g){function h(a,c,d,e,f,g){var k=d[d.length-1];0!==k&&(0!==g&&k!=
|
||||
JSM.CutPolygonWithPlane=function(a,b,c,d,e){function f(a,b,c,d,e){1==b?c.push(a):-1==b?d.push(a):e.push(a)}function g(a,b,c,d){function e(a,b){if(!(2>b.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;c<b.length;c++)g=a.GetVertex(b[c]),d.push(JSM.CoordPlaneSignedDistance(g,f));for(c=0;c<b.length-1;c++)for(f=0;f<b.length-c-1;f++)if(JSM.IsGreater(d[f],d[f+1])){g=d;var h=f+1,l=g[f];g[f]=g[h];g[h]=l;g=b;h=f+1;l=g[f];g[f]=
|
||||
g[h];g[h]=l}}}function f(a,b,c,d,e,g){function h(a,b){a[a[b]]=-1;a[b]=-1}var l=[];(function(a,b,c){var d;for(d=0;d<a.VertexCount();d++)c.push(-1);for(d=0;d<b.length;d+=2){a=c;var e=b,f=d;a[e[f]]=e[f+1];a[e[f+1]]=e[f]}})(a,b,l);var k=0;g&&(k=b.length-1);for(var m=b[k],n=m,p=!1,q=0,r=new JSM.Polygon,t;;){p||(q=c[n],0!==q&&(p=!0));if(0<r.VertexCount()&&n==m)if(1==q?d.push(r):-1==q&&e.push(r),r=new JSM.Polygon,0<k&&k<b.length){n=m=b[k];continue}else break;t=a.GetVertex(n);r.AddVertex(t.x,t.y,t.z);-1!=
|
||||
l[n]?(k=g?k-2:k+2,n=l[n],h(l,n)):n=n<a.VertexCount()-1?n+1:0}}var g=[];(function(a,b){var c,d,e,f;for(c=0;c<a.length;c++)if(d=a[c],0===d){d=0<c?c-1:a.length-1;e=c<a.length-1?c+1:0;f=a[d];e=a[e];if(0!==e&&0===f){for(;0===a[d];)d=0<d?d-1:a.length-1;f=a[d]}(-1==f&&1==e||1==f&&-1==e)&&b.push(c)}})(b,g);0===g.length||0!==g.length%2||(e(a,g),f(a,g,b,c,d,!1),f(a,g,b,c,d,!0))}var h=new JSM.Polygon,k=[];b=function(a,b,c,d){function e(a,c,d,f,g){function h(a,c,d,e,f,g){var k=d[d.length-1];0!==k&&(0!==g&&k!=
|
||||
g)&&(e=a.GetVertex(e),a=a.GetVertex(f),a=new JSM.Line(a,JSM.CoordSub(a,e)),f=new JSM.Coord(0,0,0),"LineIntersectsPlane"==JSM.LinePlanePosition(a,b,f)&&(c.AddVertex(f.x,f.y,f.z),d.push(0)))}function k(a,b,c,d,e){a=a.GetVertex(d);b.AddVertex(a.x,a.y,a.z);c.push(e)}var l=0===c,n=c===a.VertexCount(),p;n?(c=0,p=a.VertexCount()-1):p=c-1;f=f[c];l||h(a,d,g,p,c,f);n||k(a,d,g,c,f);return f}var f=[],g=!1,h=!1,k,s,x;for(k=0;k<a.VertexCount();k++)s=a.GetVertex(k),s=JSM.CoordPlanePosition(s,b),x=0,"CoordInFrontOfPlane"==
|
||||
s?(x=1,h=!0):"CoordAtBackOfPlane"==s&&(x=-1,g=!0),f.push(x);if(g&&h)for(k=0;k<=a.VertexCount();k++)e(a,k,c,f,d);else{if(g)return-1;if(h)return 1}return 0}(a,b,h,k);0===h.VertexCount()&&0===k.length?f(a,b,c,d,e):g(h,k,c,d);return 0===c.length+d.length+e.length?!1:!0};JSM.BSPNode=function(){this.outside=this.inside=this.parent=this.plane=this.userData=this.polygon=null};JSM.BSPNode.prototype.IsLeaf=function(){return null===this.inside&&null===this.outside};JSM.BSPTree=function(){this.root=null};
|
||||
JSM.BSPTree.prototype.AddPolygon=function(a,b){null===this.root&&(this.root=this.GetNewNode());return this.AddPolygonToNode(this.root,a,b)};JSM.BSPTree.prototype.Traverse=function(a){this.TraverseNode(this.root,a)};JSM.BSPTree.prototype.TraverseNode=function(a,b){null!==a&&(b(a),this.TraverseNode(a.inside,b),this.TraverseNode(a.outside,b))};JSM.BSPTree.prototype.GetNodes=function(){var a=[];this.Traverse(function(b){a.push(b)});return a};
|
||||
@ -115,10 +115,9 @@ JSM.Body.prototype.GetBoundingSphereRadius=function(){var a=this.GetCenter(),b=0
|
||||
JSM.Body.prototype.Merge=function(a){var b=this.vertices.length,c,d;for(c=0;c<a.VertexCount();c++)this.vertices.push(a.GetVertex(c).Clone());var e;for(c=0;c<a.PolygonCount();c++){e=a.GetPolygon(c).Clone();for(d=0;d<e.VertexIndexCount();d++)e.vertices[d]+=b;this.polygons.push(e)}};JSM.Body.prototype.Clear=function(){this.vertices=[];this.polygons=[];this.coords=this.projection=null};JSM.Model=function(){this.bodies=[]};
|
||||
JSM.Model.prototype.AddBody=function(a){this.bodies.push(a);return this.bodies.length-1};JSM.Model.prototype.GetBody=function(a){return this.bodies[a]};JSM.Model.prototype.BodyCount=function(){return this.bodies.length};JSM.Model.prototype.VertexCount=function(){var a=0,b;for(b=0;b<this.bodies.length;b++)a+=this.bodies[b].VertexCount();return a};JSM.Model.prototype.PolygonCount=function(){var a=0,b;for(b=0;b<this.bodies.length;b++)a+=this.bodies[b].PolygonCount();return a};
|
||||
JSM.HexColorToRGBComponents=function(a){for(var b=a.toString(16);6>b.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,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;c<a.VertexCount();c++)b.push([]);var e;for(c=0;c<a.PolygonCount();c++){e=a.GetPolygon(c);for(d=0;d<e.VertexIndexCount();d++)b[e.GetVertexIndex(d)].push(c)}return b};
|
||||
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={ambient:8355711,diffuse:8355711,specular:0,direction:new JSM.Vector(1,0,0)};JSM.CopyObjectProperties(a,this,!0);JSM.CopyObjectProperties(b,this,!1)};
|
||||
JSM.Material=function(a){JSM.CopyObjectProperties(a,this,!0);JSM.CopyObjectProperties({ambient:52224,diffuse:52224,specular:0,shininess:0,opacity:1,texture:null,textureWidth:1,textureHeight:1},this,!1)};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;c<a.VertexCount();c++)b.push([]);var e;for(c=0;c<a.PolygonCount();c++){e=a.GetPolygon(c);for(d=0;d<e.VertexIndexCount();d++)b[e.GetVertexIndex(d)].push(c)}return b};
|
||||
JSM.CalculateBodyPolygonNormal=function(a,b){var c=a.GetPolygon(b),d=c.VertexIndexCount(),e=new JSM.Vector(0,0,0);if(3<=d){var f,g,h;for(f=0;f<d;f++)g=f,h=(f+1)%d,g=a.GetVertexPosition(c.GetVertexIndex(g)),h=a.GetVertexPosition(c.GetVertexIndex(h)),e.x+=(g.y-h.y)*(g.z+h.z),e.y+=(g.z-h.z)*(g.x+h.x),e.z+=(g.x-h.x)*(g.y+h.y)}return JSM.VectorNormalize(e)};JSM.CalculateBodyPolygonNormals=function(a){var b=[],c;for(c=0;c<a.PolygonCount();c++)b.push(JSM.CalculateBodyPolygonNormal(a,c));return b};
|
||||
JSM.CalculateBodyVertexNormals=function(a){var b=[],c=JSM.CalculateBodyPolygonNormals(a),d=null,e,f,g,h,k,l,m,n;for(e=0;e<a.PolygonCount();e++)if(h=a.GetPolygon(e),b[e]=[],h.HasCurveGroup()){null===d&&(d=JSM.CalculateBodyVertexToPolygon(a));for(f=0;f<h.VertexIndexCount();f++){k=new JSM.Vector(0,0,0);l=0;m=d[h.GetVertexIndex(f)];for(g=0;g<m.length;g++)n=a.GetPolygon(m[g]),n.GetCurveGroup()===h.GetCurveGroup()&&(k=JSM.CoordAdd(k,c[m[g]]),l++);k=JSM.VectorMultiply(k,1/l);k=JSM.VectorNormalize(k);b[e].push(k)}}else{g=
|
||||
c[e];for(f=0;f<h.VertexIndexCount();f++)b[e].push(new JSM.Vector(g.x,g.y,g.z))}return b};JSM.MakeBodyInsideOut=function(a){var b,c,d,e,f;for(b=0;b<a.PolygonCount();b++){d=a.GetPolygon(b);f=d.vertices.slice(0);e=f.length;d.vertices=[];for(c=0;c<e;c++)d.vertices.push(f[e-c-1])}};
|
||||
@ -212,54 +211,54 @@ JSM.TriangleBody=function(a){this.name=a;this.vertices=[];this.normals=[];this.u
|
||||
JSM.TriangleBody.prototype.SetVertex=function(a,b,c,d){this.vertices[a]=new JSM.Coord(b,c,d)};JSM.TriangleBody.prototype.VertexCount=function(){return this.vertices.length};JSM.TriangleBody.prototype.AddNormal=function(a,b,c){this.normals.push(new JSM.Coord(a,b,c));return this.normals.length-1};JSM.TriangleBody.prototype.GetNormal=function(a){return this.normals[a]};JSM.TriangleBody.prototype.NormalCount=function(){return this.normals.length};
|
||||
JSM.TriangleBody.prototype.AddUV=function(a,b){this.uvs.push(new JSM.Coord2D(a,b));return this.uvs.length-1};JSM.TriangleBody.prototype.AddDefaultUV=function(){return-1!=this.defaultUVIndex?this.defaultUVIndex:this.defaultUVIndex=this.AddUV(0,0)};JSM.TriangleBody.prototype.GetUV=function(a){return this.uvs[a]};JSM.TriangleBody.prototype.UVCount=function(){return this.uvs.length};
|
||||
JSM.TriangleBody.prototype.AddTriangle=function(a,b,c,d,e,f,g,h,k,l,m){this.triangles.push({v0:a,v1:b,v2:c,n0:d,n1:e,n2:f,u0:g,u1:h,u2:k,mat:l,curve:m});return this.triangles.length-1};JSM.TriangleBody.prototype.GetTriangle=function(a){return this.triangles[a]};JSM.TriangleBody.prototype.TriangleCount=function(){return this.triangles.length};
|
||||
JSM.TriangleBody.prototype.Finalize=function(a){function b(b,c,d,f){function g(a,b,c,d,e){var f=new JSM.Vector(0,0,0),h=0;c=a.GetTriangle(c);b=e[b];var k,l;for(e=0;e<b.length;e++)k=b[e],l=a.GetTriangle(k),c.curve==l.curve&&(f=JSM.CoordAdd(f,d[k]),h+=1);f=JSM.VectorMultiply(f,1/h);f=JSM.VectorNormalize(f);return a.AddNormal(f.x,f.y,f.z)}var p=b.triangles[e];void 0===p.mat&&(p.mat=a.AddDefaultMaterial());if(void 0===p.n0||void 0===p.n1||void 0===p.n2)void 0===p.curve||0===p.curve?(c=d[e],c=b.AddNormal(c.x,
|
||||
JSM.TriangleBody.prototype.Finalize=function(a){function b(b,c,d,f){function g(a,b,c,d,e){var f=new JSM.Vector(0,0,0),h=0;c=a.GetTriangle(c);b=e[b];var k,l;for(e=0;e<b.length;e++)k=b[e],l=a.GetTriangle(k),c.curve==l.curve&&(f=JSM.CoordAdd(f,d[k]),h+=1);f=JSM.VectorMultiply(f,1/h);f=JSM.VectorNormalize(f);return a.AddNormal(f.x,f.y,f.z)}var p=b.triangles[e];void 0===p.mat&&(p.mat=a.GetDefaultMaterialIndex());if(void 0===p.n0||void 0===p.n1||void 0===p.n2)void 0===p.curve||0===p.curve?(c=d[e],c=b.AddNormal(c.x,
|
||||
c.y,c.z),p.n0=c,p.n1=c,p.n2=c):(p.n0=g(b,p.v0,c,d,f),p.n1=g(b,p.v1,c,d,f),p.n2=g(b,p.v2,c,d,f));if(void 0===p.u0||void 0===p.u1||void 0===p.u2)p.u0=b.AddDefaultUV(),p.u1=b.AddDefaultUV(),p.u2=b.AddDefaultUV()}var c=[],d={},e;for(e=0;e<this.vertices.length;e++)d[e]=[];var f,g;for(e=0;e<this.triangles.length;e++)f=this.triangles[e],g=JSM.CalculateTriangleNormal(this.vertices[f.v0],this.vertices[f.v1],this.vertices[f.v2]),c.push(g),d[f.v0].push(e),d[f.v1].push(e),d[f.v2].push(e);for(e=0;e<this.triangles.length;e++)b(this,
|
||||
e,c,d)};JSM.TriangleBody.prototype.Clone=function(){var a=new JSM.TriangleBody(this.name),b,c;for(b=0;b<this.vertices.length;b++)a.vertices.push(this.vertices[b].Clone());for(b=0;b<this.normals.length;b++)a.normals.push(this.normals[b].Clone());for(b=0;b<this.uvs.length;b++)a.uvs.push(this.uvs[b].Clone());for(b=0;b<this.triangles.length;b++)c=this.triangles[b],a.triangles.push({v0:c.v0,v1:c.v1,v2:c.v2,n0:c.n0,n1:c.n1,n2:c.n2,u0:c.u0,u1:c.u1,u2:c.u2,mat:c.mat,curve:c.curve});return a};
|
||||
JSM.TriangleModel=function(){this.materials=[];this.bodies=[];this.defaultMaterial=-1};JSM.TriangleModel.prototype.AddMaterial=function(a,b,c,d,e,f,g,h,k,l){this.materials.push({name:a,ambient:b,diffuse:c,specular:d,shininess:e,opacity:f,texture:g,offset:h,scale:k,rotation:l});return this.materials.length-1};JSM.TriangleModel.prototype.GetMaterial=function(a){return this.materials[a]};
|
||||
JSM.TriangleModel.prototype.AddDefaultMaterial=function(){-1==this.defaultMaterial&&(this.materials.push({name:"Default",ambient:{r:0.5,g:0.5,b:0.5},diffuse:{r:0.5,g:0.5,b:0.5},specular:{r:0.1,g:0.1,b:0.1},shininess:0,opacity:1,texture:null,offset:null,scale:null,rotation:null}),this.defaultMaterial=this.materials.length-1);return this.defaultMaterial};JSM.TriangleModel.prototype.GetDefaultMaterialIndex=function(){return this.AddDefaultMaterial()};JSM.TriangleModel.prototype.MaterialCount=function(){return this.materials.length};
|
||||
JSM.TriangleModel.prototype.AddBody=function(a){this.bodies.push(a);return this.bodies.length-1};JSM.TriangleModel.prototype.AddBodyToIndex=function(a,b){this.bodies.splice(b,0,a);return b};JSM.TriangleModel.prototype.GetBody=function(a){return this.bodies[a]};JSM.TriangleModel.prototype.BodyCount=function(){return this.bodies.length};JSM.TriangleModel.prototype.GetBody=function(a){return this.bodies[a]};
|
||||
JSM.TriangleModel.prototype.Finalize=function(){var a,b;for(a=0;a<this.bodies.length;a++)b=this.bodies[a],b.Finalize(this)};JSM.BinaryReader=function(a,b){this.arrayBuffer=a;this.dataView=new DataView(a);this.isLittleEndian=b;this.position=0};JSM.BinaryReader.prototype.GetPosition=function(){return this.position};JSM.BinaryReader.prototype.GetByteLength=function(){return this.arrayBuffer.byteLength};JSM.BinaryReader.prototype.Skip=function(a){this.position+=a};
|
||||
JSM.BinaryReader.prototype.End=function(){return this.position>=this.arrayBuffer.byteLength};JSM.BinaryReader.prototype.ReadBoolean=function(){var a=this.dataView.getInt8(this.position,this.isLittleEndian);this.position+=1;return a?!0:!1};JSM.BinaryReader.prototype.ReadCharacter=function(){var a=this.dataView.getInt8(this.position,this.isLittleEndian);this.position+=1;return a};
|
||||
JSM.TriangleModel=function(){this.materials=[];this.bodies=[];this.defaultMaterial=-1};JSM.TriangleModel.prototype.AddMaterial=function(a){if(void 0===a||null===a)a={};var b={};JSM.CopyObjectProperties(a,b,!0);this.materials.push(b);return this.materials.length-1};JSM.TriangleModel.prototype.GetMaterial=function(a){return this.materials[a]};JSM.TriangleModel.prototype.AddDefaultMaterial=function(){-1==this.defaultMaterial&&(this.defaultMaterial=this.AddMaterial());return this.defaultMaterial};
|
||||
JSM.TriangleModel.prototype.GetDefaultMaterialIndex=function(){return this.AddDefaultMaterial()};JSM.TriangleModel.prototype.MaterialCount=function(){return this.materials.length};JSM.TriangleModel.prototype.AddBody=function(a){this.bodies.push(a);return this.bodies.length-1};JSM.TriangleModel.prototype.AddBodyToIndex=function(a,b){this.bodies.splice(b,0,a);return b};JSM.TriangleModel.prototype.GetBody=function(a){return this.bodies[a]};JSM.TriangleModel.prototype.BodyCount=function(){return this.bodies.length};
|
||||
JSM.TriangleModel.prototype.GetBody=function(a){return this.bodies[a]};JSM.TriangleModel.prototype.FinalizeMaterials=function(){var a={name:"Default",ambient:[0.5,0.5,0.5],diffuse:[0.5,0.5,0.5],specular:[0.1,0.1,0.1],shininess:0,opacity:1,texture:null,offset:null,scale:null,rotation:null};0===this.materials.length&&this.AddDefaultMaterial();var b,c;for(b=0;b<this.materials.length;b++)c=this.materials[b],JSM.CopyObjectProperties(a,c,!1)};
|
||||
JSM.TriangleModel.prototype.FinalizeBodies=function(){var a,b;for(a=0;a<this.bodies.length;a++)b=this.bodies[a],b.Finalize(this)};JSM.TriangleModel.prototype.Finalize=function(){this.FinalizeMaterials();this.FinalizeBodies()};JSM.BinaryReader=function(a,b){this.arrayBuffer=a;this.dataView=new DataView(a);this.isLittleEndian=b;this.position=0};JSM.BinaryReader.prototype.GetPosition=function(){return this.position};JSM.BinaryReader.prototype.GetByteLength=function(){return this.arrayBuffer.byteLength};
|
||||
JSM.BinaryReader.prototype.Skip=function(a){this.position+=a};JSM.BinaryReader.prototype.End=function(){return this.position>=this.arrayBuffer.byteLength};JSM.BinaryReader.prototype.ReadBoolean=function(){var a=this.dataView.getInt8(this.position,this.isLittleEndian);this.position+=1;return a?!0:!1};JSM.BinaryReader.prototype.ReadCharacter=function(){var a=this.dataView.getInt8(this.position,this.isLittleEndian);this.position+=1;return a};
|
||||
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.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.LoadMultipleBuffersInternal=function(a,b,c,d){if(b>=a.length)d(c);else{var e=a[b],f=null,f=e.isFile?e.isArrayBuffer?JSM.GetArrayBufferFromFile:JSM.GetStringBufferFromFile:e.isArrayBuffer?JSM.GetArrayBufferFromURL:JSM.GetStringBufferFromURL;f(e.originalObject,function(e){c.push(e);JSM.LoadMultipleBuffersInternal(a,b+1,c,d)})}};JSM.LoadMultipleBuffers=function(a,b){JSM.LoadMultipleBuffersInternal(a,0,[],function(a){b(a)})};
|
||||
JSM.ConvertTriangleModelToJsonData=function(a){function b(a,b,c){var d=[],e=a.MaterialCount(),f;for(a=0;a<b.VertexCount();a++)f=b.GetVertex(a),c.vertices.push(f.x,f.y,f.z);for(a=0;a<b.NormalCount();a++)f=b.GetNormal(a),c.normals.push(f.x,f.y,f.z);for(a=0;a<b.UVCount();a++)f=b.GetUV(a),c.uvs.push(f.x,f.y);for(a=0;a<e;a++)d.push([]);for(a=0;a<b.TriangleCount();a++)f=b.GetTriangle(a),void 0===f.mat||(0>f.mat||f.mat>=e)||d[f.mat].push(a);var p,q;for(a=0;a<d.length;a++)if(p=d[a],0!==p.length){q={material:a,
|
||||
parameters:[]};for(e=0;e<p.length;e++)f=b.GetTriangle(p[e]),q.parameters.push(f.v0,f.v1,f.v2,f.n0,f.n1,f.n2,f.u0,f.u1,f.u2);c.triangles.push(q)}}var c={version:1,materials:[],meshes:[]};(function(a,b){function c(a){return void 0===a||null===a?[0,0,0]:[a.r,a.g,a.b]}var d,e,f;for(d=0;d<a.MaterialCount();d++)e=a.GetMaterial(d),f={name:JSM.ValueOrDefault(e.name,""),ambient:c(e.ambient),diffuse:c(e.diffuse),specular:c(e.specular),shininess:JSM.ValueOrDefault(e.shininess,0),opacity:JSM.ValueOrDefault(e.opacity,
|
||||
1)},void 0!==e.texture&&null!==e.texture&&(f.texture=JSM.ValueOrDefault(e.texture,null),f.offset=void 0===e.offset||null===e.offset?[0,0]:[e.offset.x,e.offset.y],f.scale=void 0===e.scale||null===e.scale?[1,1]:[e.scale.x,e.scale.y],f.rotation=JSM.ValueOrDefault(e.rotation,0)),b.push(f)})(a,c.materials);var d,e,f;for(d=0;d<a.BodyCount();d++)e=a.GetBody(d),0!==e.TriangleCount()&&(f={name:e.GetName(),vertices:[],normals:[],uvs:[],triangles:[]},b(a,e,f),c.meshes.push(f));return c};
|
||||
parameters:[]};for(e=0;e<p.length;e++)f=b.GetTriangle(p[e]),q.parameters.push(f.v0,f.v1,f.v2,f.n0,f.n1,f.n2,f.u0,f.u1,f.u2);c.triangles.push(q)}}var c={version:1,materials:[],meshes:[]};(function(a,b){var c,d,e;for(c=0;c<a.MaterialCount();c++)d=a.GetMaterial(c),e={name:JSM.ValueOrDefault(d.name,""),ambient:d.ambient,diffuse:d.diffuse,specular:d.specular,shininess:d.shininess,opacity:d.opacity},void 0!==d.texture&&null!==d.texture&&(e.texture=JSM.ValueOrDefault(d.texture,null),e.offset=d.offset,e.scale=
|
||||
d.scale,e.rotation=d.rotation),b.push(e)})(a,c.materials);var d,e,f;for(d=0;d<a.BodyCount();d++)e=a.GetBody(d),0!==e.TriangleCount()&&(f={name:e.GetName(),vertices:[],normals:[],uvs:[],triangles:[]},b(a,e,f),c.meshes.push(f));return c};
|
||||
JSM.MergeJsonDataMeshes=function(a){function b(a,b,c){function d(a,b,c){var h=b.material,k=c[h];void 0===k&&(a.triangles.push({material:h,parameters:[]}),k=a.triangles.length-1,c[h]=k);a=a.triangles[k].parameters;for(c=0;c<b.parameters.length;c+=9)a.push(b.parameters[c]+e,b.parameters[c+1]+e,b.parameters[c+2]+e,b.parameters[c+3]+f,b.parameters[c+4]+f,b.parameters[c+5]+f,b.parameters[c+6]+g,b.parameters[c+7]+g,b.parameters[c+8]+g)}var e=a.vertices.length/3,f=a.normals.length/3,g=a.uvs.length/2;(function(a,
|
||||
b){var c;for(c=0;c<b.vertices.length;c++)a.vertices.push(b.vertices[c]);for(c=0;c<b.normals.length;c++)a.normals.push(b.normals[c]);for(c=0;c<b.uvs.length;c++)a.uvs.push(b.uvs[c])})(a,b);var r,t;for(r=0;r<b.triangles.length;r++)t=b.triangles[r],d(a,t,c)}var c={version:a.version,materials:a.materials,meshes:[]},d={name:"Merged",vertices:[],normals:[],uvs:[],triangles:[]},e={},f,g;for(f=0;f<a.meshes.length;f++)g=a.meshes[f],b(d,g,e);c.meshes.push(d);return c};
|
||||
JSM.Read3dsFile=function(a,b){var c,d,e,f,g,h,k,l,m,n,p,q,r,t,w,u,s,x,B,C,v,G,z,L,N,D,y,A,J,O,M,H,F,I,K,P,S,T,W;function E(a,c){if(void 0!==b.onLog&&null!==b.onLog)b.onLog(a,c)}function R(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 V(a){var b=[],c;for(c=0;3>c;c++)b[c]=a.ReadFloat32();return b}function Q(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=41472;t=41728;w=41816;u=41818;s=41812;x=41814;B=41820;C=48;v=49;G=16384;z=16640;L=17920;N=18176;D=16656;y=16704;A=16672;J=16736;O=16688;M=16720;H=45056;F=45058;I=45072;K=45075;P=45088;S=45089;T=45090;W=45104;(function(a){function U(a,b,c){var d={r:0,g:0,b:0};b=a.GetPosition()+c-6;var e=!1;Q(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 X(a,b,c){var d=0;b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==C?d=a.ReadUnsignedInteger16()/100:b==v?d=a.ReadFloat32():a.Skip(c-6)});return d}function Y(a,b,c){var d={name:null,offset:{x:0,y:0},scale:{x:1,y:1},
|
||||
rotation:0};b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==t?d.name=R(a):b==w?d.offset.x=a.ReadFloat32():b==u?d.offset.y=a.ReadFloat32():b==s?d.scale.x=a.ReadFloat32():b==x?d.scale.y=a.ReadFloat32():b==B?d.rotation=a.ReadFloat32():a.Skip(c-6)});return d}function Z(a,c,d){E("Read material chunk ("+c.toString(16)+", "+d+")",2);var m={},n=a.GetPosition()+d-6;Q(a,n,function(b,n){b==e?(E("Read material name chunk ("+c.toString(16)+", "+d+")",3),m.name=R(a)):b==f?(E("Read material ambient chunk ("+c.toString(16)+
|
||||
", "+d+")",3),m.ambient=U(a,b,n)):b==g?(E("Read material diffuse chunk ("+c.toString(16)+", "+d+")",3),m.diffuse=U(a,b,n)):b==h?(E("Read material specular chunk ("+c.toString(16)+", "+d+")",3),m.specular=U(a,b,n)):b==k?(E("Read material shininess chunk ("+c.toString(16)+", "+d+")",3),m.shininess=X(a,b,n)):b==l?(E("Read material transparency chunk ("+c.toString(16)+", "+d+")",3),m.transparency=X(a,b,n)):b==r?(E("Read material texture map chunk ("+c.toString(16)+", "+d+")",3),m.textureMap=Y(a,b,n)):
|
||||
(E("Skip chunk ("+b.toString(16)+", "+n+")",3),a.Skip(n-6))});if(void 0!==b.onMaterial&&null!==b.onMaterial)b.onMaterial(m)}function $(a,c,d){E("Read faces chunk ("+c.toString(16)+", "+d+")",4);c=a.GetPosition()+d-6;var e=a.ReadUnsignedInteger16(),f,g,h,k;for(d=0;d<e;d++)if(f=a.ReadUnsignedInteger16(),g=a.ReadUnsignedInteger16(),h=a.ReadUnsignedInteger16(),k=a.ReadUnsignedInteger16(),void 0!==b.onFace&&null!==b.onFace)b.onFace(f,g,h,k);Q(a,c,function(c,d){if(c==O){E("Read face materials chunk ("+
|
||||
c.toString(16)+", "+d+")",5);var f=R(a),g=a.ReadUnsignedInteger16(),h,k;for(h=0;h<g;h++)if(k=a.ReadUnsignedInteger16(),void 0!==b.onFaceMaterial&&null!==b.onFaceMaterial)b.onFaceMaterial(k,f)}else if(c==M){E("Read face smoothing groups chunk ("+c.toString(16)+", "+d+")",5);for(f=0;f<e;f++)if(g=a.ReadUnsignedInteger32(),void 0!==b.onFaceSmoothingGroup&&null!==b.onFaceSmoothingGroup)b.onFaceSmoothingGroup(f,g)}else E("Skip chunk ("+c.toString(16)+", "+d+")",5),a.Skip(d-6)})}function aa(a,c,d,e){E("Read mesh chunk ("+
|
||||
c+", "+d.toString(16)+", "+e+")",3);if(void 0!==b.onMesh&&null!==b.onMesh)b.onMesh(c);c=a.GetPosition()+e-6;Q(a,c,function(c,d){if(c==D){E("Read vertices chunk ("+c.toString(16)+", "+d+")",4);var e=a.ReadUnsignedInteger16(),f,g,h,k;for(f=0;f<e;f++)if(g=a.ReadFloat32(),h=a.ReadFloat32(),k=a.ReadFloat32(),void 0!==b.onVertex&&null!==b.onVertex)b.onVertex(g,h,k)}else if(c==y){E("Read texture vertices chunk ("+c.toString(16)+", "+d+")",4);e=a.ReadUnsignedInteger16();for(f=0;f<e;f++)if(g=a.ReadFloat32(),
|
||||
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=41472;t=41728;w=41816;u=41818;s=41812;x=41814;B=41820;C=48;v=49;G=16384;z=16640;L=17920;N=18176;D=16656;y=16704;A=16672;J=16736;O=16688;M=16720;H=45056;F=45058;I=45072;K=45075;P=45088;S=45089;T=45090;W=45104;(function(a){function U(a,b,c){var d=[0,0,0];b=a.GetPosition()+c-6;var e=!1;Q(a,b,function(b,c){b==n?e||(d[0]=a.ReadUnsignedCharacter()/255,d[1]=a.ReadUnsignedCharacter()/255,d[2]=a.ReadUnsignedCharacter()/
|
||||
255):b==p?(d[0]=a.ReadUnsignedCharacter()/255,d[1]=a.ReadUnsignedCharacter()/255,d[2]=a.ReadUnsignedCharacter()/255,e=!0):b==m?e||(d[0]=a.ReadFloat32(),d[1]=a.ReadFloat32(),d[2]=a.ReadFloat32()):b==q?(d[0]=a.ReadFloat32(),d[1]=a.ReadFloat32(),d[2]=a.ReadFloat32(),e=!0):a.Skip(c-6)});return d}function X(a,b,c){var d=0;b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==C?d=a.ReadUnsignedInteger16()/100:b==v?d=a.ReadFloat32():a.Skip(c-6)});return d}function Y(a,b,c,d){d.texture=null;d.offset=[0,0];d.scale=
|
||||
[1,1];d.rotation=0;b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==t?d.texture=R(a):b==w?d.offset[0]=a.ReadFloat32():b==u?d.offset[1]=a.ReadFloat32():b==s?d.scale[0]=a.ReadFloat32():b==x?d.scale[1]=a.ReadFloat32():b==B?d.rotation=a.ReadFloat32():a.Skip(c-6)})}function Z(a,c,d){E("Read material chunk ("+c.toString(16)+", "+d+")",2);var m={},n=a.GetPosition()+d-6;Q(a,n,function(b,n){b==e?(E("Read material name chunk ("+c.toString(16)+", "+d+")",3),m.name=R(a)):b==f?(E("Read material ambient chunk ("+c.toString(16)+
|
||||
", "+d+")",3),m.ambient=U(a,b,n)):b==g?(E("Read material diffuse chunk ("+c.toString(16)+", "+d+")",3),m.diffuse=U(a,b,n)):b==h?(E("Read material specular chunk ("+c.toString(16)+", "+d+")",3),m.specular=U(a,b,n)):b==k?(E("Read material shininess chunk ("+c.toString(16)+", "+d+")",3),m.shininess=X(a,b,n)):b==l?(E("Read material transparency chunk ("+c.toString(16)+", "+d+")",3),m.transparency=X(a,b,n)):b==r?(E("Read material texture map chunk ("+c.toString(16)+", "+d+")",3),Y(a,b,n,m)):(E("Skip chunk ("+
|
||||
b.toString(16)+", "+n+")",3),a.Skip(n-6))});if(void 0!==b.onMaterial&&null!==b.onMaterial)b.onMaterial(m)}function $(a,c,d){E("Read faces chunk ("+c.toString(16)+", "+d+")",4);c=a.GetPosition()+d-6;var e=a.ReadUnsignedInteger16(),f,g,h,k;for(d=0;d<e;d++)if(f=a.ReadUnsignedInteger16(),g=a.ReadUnsignedInteger16(),h=a.ReadUnsignedInteger16(),k=a.ReadUnsignedInteger16(),void 0!==b.onFace&&null!==b.onFace)b.onFace(f,g,h,k);Q(a,c,function(c,d){if(c==O){E("Read face materials chunk ("+c.toString(16)+", "+
|
||||
d+")",5);var f=R(a),g=a.ReadUnsignedInteger16(),h,k;for(h=0;h<g;h++)if(k=a.ReadUnsignedInteger16(),void 0!==b.onFaceMaterial&&null!==b.onFaceMaterial)b.onFaceMaterial(k,f)}else if(c==M){E("Read face smoothing groups chunk ("+c.toString(16)+", "+d+")",5);for(f=0;f<e;f++)if(g=a.ReadUnsignedInteger32(),void 0!==b.onFaceSmoothingGroup&&null!==b.onFaceSmoothingGroup)b.onFaceSmoothingGroup(f,g)}else E("Skip chunk ("+c.toString(16)+", "+d+")",5),a.Skip(d-6)})}function aa(a,c,d,e){E("Read mesh chunk ("+c+
|
||||
", "+d.toString(16)+", "+e+")",3);if(void 0!==b.onMesh&&null!==b.onMesh)b.onMesh(c);c=a.GetPosition()+e-6;Q(a,c,function(c,d){if(c==D){E("Read vertices chunk ("+c.toString(16)+", "+d+")",4);var e=a.ReadUnsignedInteger16(),f,g,h,k;for(f=0;f<e;f++)if(g=a.ReadFloat32(),h=a.ReadFloat32(),k=a.ReadFloat32(),void 0!==b.onVertex&&null!==b.onVertex)b.onVertex(g,h,k)}else if(c==y){E("Read texture vertices chunk ("+c.toString(16)+", "+d+")",4);e=a.ReadUnsignedInteger16();for(f=0;f<e;f++)if(g=a.ReadFloat32(),
|
||||
h=a.ReadFloat32(),void 0!==b.onTextureVertex&&null!==b.onTextureVertex)b.onTextureVertex(g,h)}else if(c==A)$(a,c,d);else if(c==J){E("Read transformation chunk ("+c.toString(16)+", "+d+")",4);e=[];for(f=0;4>f;f++){for(g=0;3>g;g++)e.push(a.ReadFloat32());3>f?e.push(0):e.push(1)}if(void 0!==b.onTransformation&&null!==b.onTransformation)b.onTransformation(e)}else E("Skip chunk ("+c.toString(16)+", "+d+")",4),a.Skip(d-6)})}function ba(a,b,c){E("Read object chunk ("+b.toString(16)+", "+c+")",2);b=a.GetPosition()+
|
||||
c-6;var d=R(a);Q(a,b,function(b,c){b==z?aa(a,d,b,c):(b==L?E("Skip light chunk ("+d+", "+b.toString(16)+", "+c+")",3):b==N?E("Skip camera chunk ("+d+", "+b.toString(16)+", "+c+")",3):E("Skip chunk ("+b.toString(16)+", "+c+")",3),a.Skip(c-6))})}function ca(a,b,c){E("Read editor chunk ("+b.toString(16)+", "+c+")",1);b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==d?Z(a,b,c):b==G?ba(a,b,c):(E("Skip chunk ("+b.toString(16)+", "+c+")",2),a.Skip(c-6))})}function da(a,c,d){function e(a,b){var c=[];a.Skip(10);
|
||||
var d,f,g,h=a.ReadInteger32();for(d=0;d<h;d++)a.ReadInteger32(),f=a.ReadUnsignedInteger16(),0!==f&&a.ReadFloat32(),b==S?(g=a.ReadFloat32(),f=V(a),f[3]=g):f=V(a),c.push(f);return c}E("Read object node chunk ("+c.toString(16)+", "+d+")",2);var f={name:"",nodeId:-1,flags:-1,userId:-1,pivot:[0,0,0],positions:[],rotations:[],scales:[]};c=a.GetPosition()+d-6;Q(a,c,function(b,c){b==I?(f.name=R(a),f.flags=a.ReadUnsignedInteger32(),f.userId=a.ReadUnsignedInteger16()):b==K?f.pivot=V(a):b==P?f.positions=e(a,
|
||||
P):b==S?f.rotations=e(a,S):b==T?f.scales=e(a,T):b==W?f.nodeId=a.ReadUnsignedInteger16():(E("Skip chunk ("+b.toString(16)+", "+c+")",3),a.Skip(c-6))});if(void 0!==b.onObjectNode&&null!==b.onObjectNode)b.onObjectNode(f)}function ea(a,b,c){E("Read keyframe chunk ("+b.toString(16)+", "+c+")",1);b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==F?da(a,b,c):(E("Skip chunk ("+b.toString(16)+", "+c+")",2),a.Skip(c-6))})}function fa(a,b,d){E("Read main chunk ("+b.toString(16)+", "+d+")",0);b=a.GetPosition()+d-
|
||||
6;Q(a,b,function(b,d){b==c?ca(a,b,d):b==H?ea(a,b,d):(E("Skip chunk ("+b.toString(16)+", "+d+")",1),a.Skip(d-6))})}var ga=a.GetByteLength();Q(a,ga,function(b,c){19789==b?fa(a,b,c):(E("Skip chunk ("+b.toString(16)+", "+c+")",0),a.Skip(c-6))})})(new JSM.BinaryReader(a,!0))};
|
||||
JSM.Convert3dsToJsonData=function(a,b){function c(a){return void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(a):null}var d=new JSM.TriangleModel,e=null,f={},g={},h={nodes:[],nodeIdToIndex:{}};JSM.Read3dsFile(a,{onMaterial:function(a){function b(a){return void 0===a||null===a?{r:0,g:0,b:0}:a}var e=d.AddMaterial(a.name,b(a.ambient),b(a.diffuse),b(a.specular),void 0===a.shininess||null===a.shininess?0:a.shininess,void 0===a.transparency||null===a.transparency?1:1-a.transparency),
|
||||
g=d.GetMaterial(e);if(void 0!==a.textureMap&&null!==a.textureMap){var h=c(a.textureMap.name);null!==h&&(h=new window.Blob([h]),h=window.URL.createObjectURL(h),g.texture=h,g.offset=a.textureMap.offset,g.scale=a.textureMap.scale,g.rotation=-a.textureMap.rotation)}void 0===f[a.name]&&(f[a.name]=e)},onMesh:function(a){var b=d.AddBody(new JSM.TriangleBody(a));e=d.GetBody(b);e.meshData={faceToMaterial:{},faceToSmoothingGroup:{},objectNodes:[],transformation:null};g[a]=b},onTransformation:function(a){null!==
|
||||
e&&(e.meshData.transformation=a)},onObjectNode:function(a){var b=h.nodes.length;h.nodes.push(a);h.nodeIdToIndex[a.nodeId]=b;a=g[a.name];void 0!==a&&d.GetBody(a).meshData.objectNodes.push(b)},onVertex:function(a,b,c){null!==e&&e.AddVertex(a,b,c)},onTextureVertex:function(a,b){null!==e&&e.AddUV(a,b)},onFace:function(a,b,c){null!==e&&e.AddTriangle(a,b,c)},onFaceMaterial:function(a,b){null!==e&&(e.meshData.faceToMaterial[a]=b)},onFaceSmoothingGroup:function(a,b){null!==e&&(e.meshData.faceToSmoothingGroup[a]=
|
||||
b)},onFileRequested:c});(function(a,b,c){function d(a,b,c){function e(a,b){var c=b[0],d=b[1],f=b[2],g;for(g=0;4>g;g++)a[0+g]*=c,a[4+g]*=d,a[8+g]*=f;return a}function f(a,b){var c=b[0],d=b[1],e=b[2],g;for(g=0;3>g;g++)a[12+g]+=a[0+g]*c+a[4+g]*d+a[8+g]*e;return a}function g(a,b){var c,d;for(c=0;c<a.VertexCount();c++)d=a.GetVertex(c),d=JSM.ApplyTransformation(b,d),a.SetVertex(c,d.x,d.y,d.z)}function h(a,b,c){var d=JSM.MatrixDeterminant(b);JSM.IsNegative(d)&&(b=JSM.MatrixClone(b),e(b,[-1,1,1]),c=JSM.MatrixMultiply(c,
|
||||
b),g(a,c))}function k(a,b){if(void 0!==a.matrix)return a.matrix;var c=JSM.MatrixIdentity(),d;d=0===a.positions.length?[0,0,0]:a.positions[0];c=f(c,d);if(0===a.rotations.length)d=[0,0,0,0];else{d=a.rotations[0];var g=[0,0,0,1],h=Math.sqrt(d[0]*d[0]+d[1]*d[1]+d[2]*d[2]);JSM.IsPositive(h)&&(g=-0.5*d[3],h=Math.sin(g)/h,g=[h*d[0],h*d[1],h*d[2],Math.cos(g)]);d=g}d=JSM.MatrixRotationQuaternion(d);c=JSM.MatrixMultiply(d,c);d=0===a.scales.length?[0,0,0,0]:a.scales[0];c=e(c,d);65535!=a.userId&&(d=b.nodeIdToIndex[a.userId],
|
||||
void 0!==d&&(d=k(b.nodes[d],b),c=JSM.MatrixMultiply(c,d)));return a.matrix=c}var l=a.meshData;l=void 0===l||null===l?null:l.transformation;if(null!==l){var m=null,m=null!==b?k(b,c):l;c=JSM.MatrixClone(m);m=JSM.MatrixClone(l);l=JSM.MatrixInvert(m);null!==l&&(h(a,m,l),b=void 0===b||null===b?[0,0,0]:b.pivot,f(c,[-b[0],-b[1],-b[2]]),b=JSM.MatrixMultiply(l,c),g(a,b))}}function e(a,b,c,f){d(a,b,f);b=a.UVCount()==a.VertexCount();f=a.meshData;var g,h,k;for(g=0;g<a.TriangleCount();g++)h=a.GetTriangle(g),b&&
|
||||
(h.u0=h.v0,h.u1=h.v1,h.u2=h.v2),k=f.faceToMaterial[g],void 0!==k&&(k=c[k],void 0!==k&&(h.mat=k)),k=f.faceToSmoothingGroup[g],void 0!==k&&(h.curve=k)}function f(a,b,c,d){b=b.Clone();b.SetName(b.GetName()+" ("+d+")");c<a.BodyCount()?a.AddBodyToIndex(b,c):a.AddBody(b);return b}var g,h,w,u,s,x,B;for(g=0;g<b.BodyCount();g++)if(w=b.GetBody(g),u=w.meshData,0===u.objectNodes.length)e(w,null,c,a);else{x=a.nodes[u.objectNodes[0]];for(h=1;h<u.objectNodes.length;h++)s=a.nodes[u.objectNodes[h]],B=f(b,w,g+1,h+
|
||||
1),B.meshData=w.meshData,e(B,s,c,a),g+=1;e(w,x,c,a)}})(h,d,f);d.Finalize();return JSM.ConvertTriangleModelToJsonData(d)};
|
||||
JSM.Convert3dsToJsonData=function(a,b){function c(a){return void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(a):null}var d=new JSM.TriangleModel,e=null,f={},g={},h={nodes:[],nodeIdToIndex:{}};JSM.Read3dsFile(a,{onMaterial:function(a){var b=d.AddMaterial({name:a.name,ambient:a.ambient,diffuse:a.diffuse,specular:a.specular,shininess:void 0===a.shininess||null===a.shininess?0:a.shininess,opacity:void 0===a.transparency||null===a.transparency?1:1-a.transparency}),e=d.GetMaterial(b);
|
||||
if(void 0!==a.texture&&null!==a.texture){var g=c(a.texture);null!==g&&(g=new window.Blob([g]),g=window.URL.createObjectURL(g),e.texture=g,e.offset=a.offset,e.scale=a.scale,e.rotation=-a.rotation)}void 0===f[a.name]&&(f[a.name]=b)},onMesh:function(a){var b=d.AddBody(new JSM.TriangleBody(a));e=d.GetBody(b);e.meshData={faceToMaterial:{},faceToSmoothingGroup:{},objectNodes:[],transformation:null};g[a]=b},onTransformation:function(a){null!==e&&(e.meshData.transformation=a)},onObjectNode:function(a){var b=
|
||||
h.nodes.length;h.nodes.push(a);h.nodeIdToIndex[a.nodeId]=b;a=g[a.name];void 0!==a&&d.GetBody(a).meshData.objectNodes.push(b)},onVertex:function(a,b,c){null!==e&&e.AddVertex(a,b,c)},onTextureVertex:function(a,b){null!==e&&e.AddUV(a,b)},onFace:function(a,b,c){null!==e&&e.AddTriangle(a,b,c)},onFaceMaterial:function(a,b){null!==e&&(e.meshData.faceToMaterial[a]=b)},onFaceSmoothingGroup:function(a,b){null!==e&&(e.meshData.faceToSmoothingGroup[a]=b)},onFileRequested:c});(function(a,b,c){function d(a,b,c){function e(a,
|
||||
b){var c=b[0],d=b[1],f=b[2],g;for(g=0;4>g;g++)a[0+g]*=c,a[4+g]*=d,a[8+g]*=f;return a}function f(a,b){var c=b[0],d=b[1],e=b[2],g;for(g=0;3>g;g++)a[12+g]+=a[0+g]*c+a[4+g]*d+a[8+g]*e;return a}function g(a,b){var c,d;for(c=0;c<a.VertexCount();c++)d=a.GetVertex(c),d=JSM.ApplyTransformation(b,d),a.SetVertex(c,d.x,d.y,d.z)}function h(a,b,c){var d=JSM.MatrixDeterminant(b);JSM.IsNegative(d)&&(b=JSM.MatrixClone(b),e(b,[-1,1,1]),c=JSM.MatrixMultiply(c,b),g(a,c))}function k(a,b){if(void 0!==a.matrix)return a.matrix;
|
||||
var c=JSM.MatrixIdentity(),d;d=0===a.positions.length?[0,0,0]:a.positions[0];c=f(c,d);if(0===a.rotations.length)d=[0,0,0,0];else{d=a.rotations[0];var g=[0,0,0,1],h=Math.sqrt(d[0]*d[0]+d[1]*d[1]+d[2]*d[2]);JSM.IsPositive(h)&&(g=-0.5*d[3],h=Math.sin(g)/h,g=[h*d[0],h*d[1],h*d[2],Math.cos(g)]);d=g}d=JSM.MatrixRotationQuaternion(d);c=JSM.MatrixMultiply(d,c);d=0===a.scales.length?[0,0,0,0]:a.scales[0];c=e(c,d);65535!=a.userId&&(d=b.nodeIdToIndex[a.userId],void 0!==d&&(d=k(b.nodes[d],b),c=JSM.MatrixMultiply(c,
|
||||
d)));return a.matrix=c}var l=a.meshData;l=void 0===l||null===l?null:l.transformation;if(null!==l){var m=null,m=null!==b?k(b,c):l;c=JSM.MatrixClone(m);m=JSM.MatrixClone(l);l=JSM.MatrixInvert(m);null!==l&&(h(a,m,l),b=void 0===b||null===b?[0,0,0]:b.pivot,f(c,[-b[0],-b[1],-b[2]]),b=JSM.MatrixMultiply(l,c),g(a,b))}}function e(a,b,c,f){d(a,b,f);b=a.UVCount()==a.VertexCount();f=a.meshData;var g,h,k;for(g=0;g<a.TriangleCount();g++)h=a.GetTriangle(g),b&&(h.u0=h.v0,h.u1=h.v1,h.u2=h.v2),k=f.faceToMaterial[g],
|
||||
void 0!==k&&(k=c[k],void 0!==k&&(h.mat=k)),k=f.faceToSmoothingGroup[g],void 0!==k&&(h.curve=k)}function f(a,b,c,d){b=b.Clone();b.SetName(b.GetName()+" ("+d+")");c<a.BodyCount()?a.AddBodyToIndex(b,c):a.AddBody(b);return b}var g,h,w,u,s,x,B;for(g=0;g<b.BodyCount();g++)if(w=b.GetBody(g),u=w.meshData,0===u.objectNodes.length)e(w,null,c,a);else{x=a.nodes[u.objectNodes[0]];for(h=1;h<u.objectNodes.length;h++)s=a.nodes[u.objectNodes[h]],B=f(b,w,g+1,h+1),B.meshData=w.meshData,e(B,s,c,a),g+=1;e(w,x,c,a)}})(h,
|
||||
d,f);d.Finalize();return JSM.ConvertTriangleModelToJsonData(d)};
|
||||
JSM.ReadObjFile=function(a,b){function c(a,c,d,e){if(void 0!==b.onMaterialComponent&&null!==b.onMaterialComponent)b.onMaterialComponent(a,c,d,e)}function d(a,c,d){if(void 0!==b.onVertex&&null!==b.onVertex)b.onVertex(a,c,d)}function e(a,c,d){if(void 0!==b.onNormal&&null!==b.onNormal)b.onNormal(a,c,d)}function f(a,c){if(void 0!==b.onTexCoord&&null!==b.onTexCoord)b.onTexCoord(a,c)}function g(a){return void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(a):null}function h(a){function h(a,
|
||||
b){var c=a.indexOf(b)+b.length;return a.substr(c,a.length-c).trim()}if(0!==a.length&&"#"!=a[0]){var n=a.split(/\s+/);if(!(0===n.length||"#"==n[0][0]))if("g"==n[0]){if(!(2>n.length)){var p="";for(a=1;a<n.length;a++)p+=n[a],a<n.length-1&&(p+=" ");if(void 0!==b.onMesh&&null!==b.onMesh)b.onMesh(p)}}else if("v"==n[0])4>n.length||d(parseFloat(n[1]),parseFloat(n[2]),parseFloat(n[3]));else if("vn"==n[0])4>n.length||e(parseFloat(n[1]),parseFloat(n[2]),parseFloat(n[3]));else if("vt"==n[0])3>n.length||f(parseFloat(n[1]),
|
||||
parseFloat(n[2]));else if("f"==n[0]){if(!(4>n.length)){var p=[],q=[],r=[],t;for(a=1;a<n.length;a++)t=n[a].split("/"),p.push(parseInt(t[0],10)-1),1<t.length&&0<t[1].length&&r.push(parseInt(t[1],10)-1),2<t.length&&0<t[2].length&&q.push(parseInt(t[2],10)-1);if(void 0!==b.onFace&&null!==b.onFace)b.onFace(p,q,r)}}else if("usemtl"==n[0]){if(!(2>n.length)&&void 0!==b.onUseMaterial&&null!==b.onUseMaterial)b.onUseMaterial(n[1])}else if("newmtl"==n[0]){if(!(2>n.length)&&void 0!==b.onNewMaterial&&null!==b.onNewMaterial)b.onNewMaterial(n[1])}else if("Ka"==
|
||||
n[0]||"Kd"==n[0]||"Ks"==n[0])4>n.length||c(n[0],parseFloat(n[1]),parseFloat(n[2]),parseFloat(n[3]));else if("Ns"==n[0]||"Tr"==n[0]||"d"==n[0]){if(!(2>n.length)&&void 0!==b.onMaterialParameter&&null!==b.onMaterialParameter)b.onMaterialParameter(n[0],n[1])}else if("map_Kd"==n[0]){if(!(2>n.length)&&(n=h(a,"map_Kd"),void 0!==b.onMaterialTexture&&null!==b.onMaterialTexture))b.onMaterialTexture(n)}else"mtllib"==n[0]&&!(2>n.length)&&(n=h(a,"mtllib"),n=g(n.trim()),null!==n&&k(n))}}function k(a){a=a.split("\n");
|
||||
var b,c;for(b=0;b<a.length;b++)c=a[b].trim(),h(c)}k(a)};
|
||||
JSM.ConvertObjToJsonData=function(a,b){function c(a){return void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(a):null}var d=new JSM.TriangleModel,e=d.AddBody(new JSM.TriangleBody("Default")),f=d.GetBody(e),g={},h=null,k=null,l=[],m=[],n=[];JSM.ReadObjFile(a,{onNewMaterial:function(a){var b=d.AddMaterial(a,{r:1,g:0,b:0},{r:1,g:0,b:0},{r:0,g:0,b:0},0,1,null,null,null,null);h=d.GetMaterial(b);g[a]=b},onMaterialComponent:function(a,b,c,d){null!==h&&("Ka"==a?(a=h.ambient,a.r=b,a.g=
|
||||
c,a.b=d):"Kd"==a?(a=h.diffuse,a.r=b,a.g=c,a.b=d):"Ks"==a&&(a=h.specular,a.r=b,a.g=c,a.b=d))},onMaterialParameter:function(a,b){if(null!==h)if("Ns"==a)h.shininess=(Math.log2(parseFloat(b))-1)/10;else if("Tr"==a||"d"==a)h.opacity=parseFloat(b)},onMaterialTexture:function(a){null!==h&&(a=c(a),null!==a&&(a=new window.Blob([a]),a=window.URL.createObjectURL(a),h.texture=a))},onUseMaterial:function(a){a=g[a];void 0!==a&&(k=a)},onMesh:function(a){a=d.AddBody(new JSM.TriangleBody(a));f=d.GetBody(a)},onVertex:function(a,
|
||||
b,c){l.push(new JSM.Coord(a,b,c))},onNormal:function(a,b,c){m.push(new JSM.Coord(a,b,c))},onTexCoord:function(a,b){n.push(new JSM.Coord2D(a,b))},onFace:function(a,b,c){var d,e,g=b.length==a.length,h=c.length==a.length,l=a.length;for(d=0;d<l-2;d++)e=f.AddTriangle(a[0],a[(d+1)%l],a[(d+2)%l]),e=f.GetTriangle(e),g&&(e.n0=b[0],e.n1=b[(d+1)%l],e.n2=b[(d+2)%l]),h&&(e.u0=c[0],e.u1=c[(d+1)%l],e.u2=c[(d+2)%l]),null!==k&&(e.mat=k)},onFileRequested:c});(function(a,b,c){function d(a,b,c,e,f){if(void 0!==c){var g=
|
||||
e[c];if(void 0!==g)return g;b=b[c];0===f?g=a.AddVertex(b.x,b.y,b.z):1===f?g=a.AddNormal(b.x,b.y,b.z):2===f&&(g=a.AddUV(b.x,b.y));return e[c]=g}}var e,f,g,h,k,l,m;for(e=0;e<a.BodyCount();e++){g=a.GetBody(e);k={};l={};m={};for(f=0;f<g.TriangleCount();f++)h=g.GetTriangle(f),h.v0=d(g,b,h.v0,k,0),h.v1=d(g,b,h.v1,k,0),h.v2=d(g,b,h.v2,k,0),h.n0=d(g,c,h.n0,l,1),h.n1=d(g,c,h.n1,l,1),h.n2=d(g,c,h.n2,l,1),h.u0=d(g,n,h.u0,m,2),h.u1=d(g,n,h.u1,m,2),h.u2=d(g,n,h.u2,m,2)}})(d,l,m,n);d.Finalize();return JSM.ConvertTriangleModelToJsonData(d)};
|
||||
JSM.ConvertObjToJsonData=function(a,b){function c(a){return void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(a):null}var d=new JSM.TriangleModel,e=d.AddBody(new JSM.TriangleBody("Default")),f=d.GetBody(e),g={},h=null,k=null,l=[],m=[],n=[];JSM.ReadObjFile(a,{onNewMaterial:function(a){var b=d.AddMaterial();h=d.GetMaterial(b);g[a]=b},onMaterialComponent:function(a,b,c,d){null!==h&&("Ka"==a?h.ambient=[b,c,d]:"Kd"==a?h.diffuse=[b,c,d]:"Ks"==a&&(h.specular=[b,c,d]))},onMaterialParameter:function(a,
|
||||
b){if(null!==h)if("Ns"==a)h.shininess=(Math.log2(parseFloat(b))-1)/10;else if("Tr"==a||"d"==a)h.opacity=parseFloat(b)},onMaterialTexture:function(a){null!==h&&(a=c(a),null!==a&&(a=new window.Blob([a]),a=window.URL.createObjectURL(a),h.texture=a))},onUseMaterial:function(a){a=g[a];void 0!==a&&(k=a)},onMesh:function(a){a=d.AddBody(new JSM.TriangleBody(a));f=d.GetBody(a)},onVertex:function(a,b,c){l.push(new JSM.Coord(a,b,c))},onNormal:function(a,b,c){m.push(new JSM.Coord(a,b,c))},onTexCoord:function(a,
|
||||
b){n.push(new JSM.Coord2D(a,b))},onFace:function(a,b,c){var d,e,g=b.length==a.length,h=c.length==a.length,l=a.length;for(d=0;d<l-2;d++)e=f.AddTriangle(a[0],a[(d+1)%l],a[(d+2)%l]),e=f.GetTriangle(e),g&&(e.n0=b[0],e.n1=b[(d+1)%l],e.n2=b[(d+2)%l]),h&&(e.u0=c[0],e.u1=c[(d+1)%l],e.u2=c[(d+2)%l]),null!==k&&(e.mat=k)},onFileRequested:c});(function(a,b,c){function d(a,b,c,e,f){if(void 0!==c){var g=e[c];if(void 0!==g)return g;b=b[c];0===f?g=a.AddVertex(b.x,b.y,b.z):1===f?g=a.AddNormal(b.x,b.y,b.z):2===f&&
|
||||
(g=a.AddUV(b.x,b.y));return e[c]=g}}var e,f,g,h,k,l,m;for(e=0;e<a.BodyCount();e++){g=a.GetBody(e);k={};l={};m={};for(f=0;f<g.TriangleCount();f++)h=g.GetTriangle(f),h.v0=d(g,b,h.v0,k,0),h.v1=d(g,b,h.v1,k,0),h.v2=d(g,b,h.v2,k,0),h.n0=d(g,c,h.n0,l,1),h.n1=d(g,c,h.n1,l,1),h.n2=d(g,c,h.n2,l,1),h.u0=d(g,n,h.u0,m,2),h.u1=d(g,n,h.u1,m,2),h.u2=d(g,n,h.u2,m,2)}})(d,l,m,n);d.Finalize();return JSM.ConvertTriangleModelToJsonData(d)};
|
||||
JSM.ReadBinaryStlFile=function(a,b){function c(a){var b=[],c;for(c=0;3>c;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;f<e;f++)if(l=c(d),g=c(d),h=c(d),k=c(d),d.Skip(2),void 0!==b.onFace&&null!==b.onFace)b.onFace(g,h,k,l)};
|
||||
JSM.ReadAsciiStlFile=function(a,b){function c(a,c){var d=a[c].trim();if(0===d.length)return c+1;d=d.split(/\s+/);if(0===d.length)return c+1;if("solid"!=d[0]&&"facet"==d[0]&&"normal"==d[1]){if(5>d.length)return-1;var d=[parseFloat(d[2]),parseFloat(d[3]),parseFloat(d[4])],e=[],l,m;for(l=c+1;l<a.length&&3>e.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");d<e.length&&-1!=d;)d=c(e,d)};JSM.IsBinaryStlFile=function(a){var b=a.byteLength;if(84>b)return!1;a=new JSM.BinaryReader(a,!0);a.Skip(80);a=a.ReadUnsignedInteger32();return b!=50*a+84?!1:!0};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user