Update JSModeler.

This commit is contained in:
kovacsv 2014-10-18 19:37:58 +02:00
parent 5303465e77
commit 6947ef8931

View File

@ -1,4 +1,4 @@
/* JSModeler 0.33.216 - 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.218 - 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)};
@ -226,8 +226,8 @@ JSM.BinaryReader.prototype.ReadDouble64=function(){var a=this.dataView.getFloat6
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;for(d=0;d<a.MaterialCount();d++)e=a.GetMaterial(d),b.push({name:e.name,ambient:c(e.ambient),diffuse:c(e.diffuse),specular:c(e.specular),shininess:e.shininess,opacity:e.opacity,texture:e.texture,offset:void 0===e.offset||null===e.offset?
[0,0]:[e.offset.x,e.offset.y],scale:void 0===e.scale||null===e.scale?[1,1]:[e.scale.x,e.scale.y],rotation:e.rotation})})(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){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};
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||
@ -243,14 +243,14 @@ 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 ("
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=!1;if(void 0!==a.textureMap&&null!==a.textureMap){var g=c(a.textureMap.name);null!==g&&(e=new window.Blob([g]),e=window.URL.createObjectURL(e),a.textureMap.name=e,e=!0)}e||(a.textureMap=
{name:null,offset:null,scale:null,rotation:null});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,a.textureMap.name,a.textureMap.offset,a.textureMap.scale,-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){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.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"==