diff --git a/jsmodeler/jsmodeler.js b/jsmodeler/jsmodeler.js index fb62da4..afd8ba8 100644 --- a/jsmodeler/jsmodeler.js +++ b/jsmodeler/jsmodeler.js @@ -1,4 +1,4 @@ -/* JSModeler 0.33.241 - 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},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)=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;c=this.maxCoordNumInNodes&&this.SplitNode(c))return this.AddCoordToNode(a,c);d=this.coords.length;this.coords.push(a);c.coords.push(d);return d}; JSM.Octree.prototype.FindNode=function(a,b){if(null===b.children)return b;var c=a.x>b.center.x,d=a.y>b.center.y,e=a.z>b.center.z;return!c&&!d&&!e?this.FindNode(a,b.children[0]):c&&!d&&!e?this.FindNode(a,b.children[1]):c&&d&&!e?this.FindNode(a,b.children[2]):!c&&d&&!e?this.FindNode(a,b.children[3]):!c&&!d&&e?this.FindNode(a,b.children[4]):c&&!d&&e?this.FindNode(a,b.children[5]):c&&d&&e?this.FindNode(a,b.children[6]):!c&&d&&e?this.FindNode(a,b.children[7]):null}; -JSM.Octree.prototype.SplitNode=function(a){function b(a,b){var e=a.center.Clone(),f=JSM.VectorMultiply(a.size,0.5);e.x+=0.5*b.x*f.x;e.y+=0.5*b.y*f.y;e.z+=0.5*b.z*f.z;return{center:e,size:f,coord:-1,children:null}}a.children=[b(a,new JSM.Coord(-1,-1,-1)),b(a,new JSM.Coord(1,-1,-1)),b(a,new JSM.Coord(1,1,-1)),b(a,new JSM.Coord(-1,1,-1)),b(a,new JSM.Coord(-1,-1,1)),b(a,new JSM.Coord(1,-1,1)),b(a,new JSM.Coord(1,1,1)),b(a,new JSM.Coord(-1,1,1))];this.FindNode(this.coords[a.coord],a).coord=a.coord;a.coord= --1};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}; +JSM.Octree.prototype.SplitNode=function(a){function b(a,b,c,d){var k=a.center.Clone();a=JSM.VectorMultiply(a.size,0.5);k.x+=0.5*b*a.x;k.y+=0.5*c*a.y;k.z+=0.5*d*a.z;return{center:k,size:a,coords:[],children:null}}if(JSM.IsZero(a.size.x)&&JSM.IsZero(a.size.y)&&JSM.IsZero(a.size.z))return!1;a.children=[b(a,-1,-1,-1),b(a,1,-1,-1),b(a,1,1,-1),b(a,-1,1,-1),b(a,-1,-1,1),b(a,1,-1,1),b(a,1,1,1),b(a,-1,1,1)];var c=a.coords;a.coords=[];var d;for(d=0;db.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={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.VertInfo=function(){this.edges=[];this.pgons=[]};JSM.EdgeInfo=function(){this.pgon2=this.pgon1=this.vert2=this.vert1=-1};JSM.PolyEdgeInfo=function(){this.index=-1;this.reverse=!1};JSM.PgonInfo=function(){this.verts=[];this.pedges=[]};JSM.AdjacencyInfo=function(){this.verts=[];this.edges=[];this.pgons=[]}; -JSM.GetPolyEdgeStartVertex=function(a,b){return a.reverse?b.edges[a.index].vert2:b.edges[a.index].vert1};JSM.GetPolyEdgeEndVertex=function(a,b){return a.reverse?b.edges[a.index].vert1:b.edges[a.index].vert2};JSM.GetAnotherPgonOfEdge=function(a,b){return-1!=a.pgon1&&a.pgon1!=b?a.pgon1:-1!=a.pgon2&&a.pgon2!=b?a.pgon2:-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);return this.materials.length-1};JSM.Materials.prototype.GetDefaultMaterial=function(){return this.defaultMaterial};JSM.Materials.prototype.Count=function(){return this.materials.length};JSM.VertInfo=function(){this.edges=[];this.pgons=[]};JSM.EdgeInfo=function(){this.pgon2=this.pgon1=this.vert2=this.vert1=-1};JSM.PolyEdgeInfo=function(){this.index=-1;this.reverse=!1};JSM.PgonInfo=function(){this.verts=[];this.pedges=[]}; +JSM.AdjacencyInfo=function(){this.verts=[];this.edges=[];this.pgons=[]};JSM.GetPolyEdgeStartVertex=function(a,b){return a.reverse?b.edges[a.index].vert2:b.edges[a.index].vert1};JSM.GetPolyEdgeEndVertex=function(a,b){return a.reverse?b.edges[a.index].vert1:b.edges[a.index].vert2};JSM.GetAnotherPgonOfEdge=function(a,b){return-1!=a.pgon1&&a.pgon1!=b?a.pgon1:-1!=a.pgon2&&a.pgon2!=b?a.pgon2:-1}; +JSM.CalculateBodyVertexToPolygon=function(a){var b=[],c,d;for(c=0;cl;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]}; @@ -145,9 +153,9 @@ JSM.CalculatePolygonPlanarTextureCoords=function(a,b){var c=[],d=a.GetPolygon(b) JSM.CalculatePolygonCylindricalTextureCoords=function(a,b,c){var d=[],e=[],f=a.GetPolygon(b);b=a.GetTextureProjectionCoords();var g,h;for(g=0;ge;e++)k.AddVertexIndex(2*c[b[h[e]]]+1),w.AddVertexIndex(2*c[b[h[3-e-1]]]);f.AddPolygon(k);f.AddPolygon(w)}}var f=new JSM.Body;(function(){var d; +JSM.GeneratePrismWithHole=function(a,b,c,d){function e(){var b=0,c=[],d;for(d=0;de;e++)k.AddVertexIndex(2*c[b[h[e]]]+1),u.AddVertexIndex(2*c[b[h[3-e-1]]]);f.AddPolygon(k);f.AddPolygon(u)}}var f=new JSM.Body;(function(){var d; for(d=0;du)){var E=void 0,y=void 0,A=void 0,J=void 0,O=void 0,M=void 0,H=void 0,F=void 0,I=void 0,K=void 0;if(3==u||l)for(K=0;Kv)){var E=void 0,y=void 0,A=void 0,J=void 0,O=void 0,M=void 0,H=void 0,F=void 0,I=void 0,K=void 0;if(3==v||l)for(K=0;Kf)){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;bd;){c=a.ReadCharacter();if(0===c)break;b+=String.fromCharCode(c);d+=1}return b}function X(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=41025;m=41040;n=16;p=17;q=18;r=19;t=41472;w=41728;u=41816;s=41818;x=41812;B=41814;C=41820;v=48;G=49;z=16384;L=16640;N=17920;E=18176;y=16656;A=16704;J=16672;O=16736;M=16688;H=16720;F=45056;I=45058;K=45072;P=45075;T=45088;S=45089;U=45090;Y=45104;(function(a){function V(a,b,c){var d=[0,0,0];b=a.GetPosition()+c-6;var e=!1;Q(a,b,function(b,c){b==p?e||(d[0]=a.ReadUnsignedCharacter()/255,d[1]=a.ReadUnsignedCharacter()/255,d[2]=a.ReadUnsignedCharacter()/ -255):b==q?(d[0]=a.ReadUnsignedCharacter()/255,d[1]=a.ReadUnsignedCharacter()/255,d[2]=a.ReadUnsignedCharacter()/255,e=!0):b==n?e||(d[0]=a.ReadFloat32(),d[1]=a.ReadFloat32(),d[2]=a.ReadFloat32()):b==r?(d[0]=a.ReadFloat32(),d[1]=a.ReadFloat32(),d[2]=a.ReadFloat32(),e=!0):a.Skip(c-6)});return d}function W(a,b,c){var d=0;b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==v?d=a.ReadUnsignedInteger16()/100:b==G?d=a.ReadFloat32():a.Skip(c-6)});return d}function Z(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==w?d.texture=R(a):b==u?d.offset[0]=a.ReadFloat32():b==s?d.offset[1]=a.ReadFloat32():b==x?d.scale[0]=a.ReadFloat32():b==B?d.scale[1]=a.ReadFloat32():b==C?d.rotation=a.ReadFloat32():a.Skip(c-6)})}function $(a,c,d){D("Read material chunk ("+c.toString(16)+", "+d+")",2);var n={},p=a.GetPosition()+d-6;Q(a,p,function(b,p){b==e?(D("Read material name chunk ("+c.toString(16)+", "+d+")",3),n.name=R(a)):b==f?(D("Read material ambient chunk ("+c.toString(16)+ +b){var c;for(c=0;cd;){c=a.ReadCharacter();if(0===c)break;b+=String.fromCharCode(c);d+=1}return b}function X(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=41025;m=41040;n=16;p=17;q=18;r=19;s=41472;u=41728;v=41816;t=41818;x=41812;B=41814;C=41820;w=48;G=49;z=16384;L=16640;N=17920;E=18176;y=16656;A=16704;J=16672;O=16736;M=16688;H=16720;F=45056;I=45058;K=45072;P=45075;T=45088;S=45089;U=45090;Y=45104;(function(a){function V(a,b,c){var d=[0,0,0];b=a.GetPosition()+c-6;var e=!1;Q(a,b,function(b,c){b==p?e||(d[0]=a.ReadUnsignedCharacter()/255,d[1]=a.ReadUnsignedCharacter()/255,d[2]=a.ReadUnsignedCharacter()/ +255):b==q?(d[0]=a.ReadUnsignedCharacter()/255,d[1]=a.ReadUnsignedCharacter()/255,d[2]=a.ReadUnsignedCharacter()/255,e=!0):b==n?e||(d[0]=a.ReadFloat32(),d[1]=a.ReadFloat32(),d[2]=a.ReadFloat32()):b==r?(d[0]=a.ReadFloat32(),d[1]=a.ReadFloat32(),d[2]=a.ReadFloat32(),e=!0):a.Skip(c-6)});return d}function W(a,b,c){var d=0;b=a.GetPosition()+c-6;Q(a,b,function(b,c){b==w?d=a.ReadUnsignedInteger16()/100:b==G?d=a.ReadFloat32():a.Skip(c-6)});return d}function Z(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==u?d.texture=R(a):b==v?d.offset[0]=a.ReadFloat32():b==t?d.offset[1]=a.ReadFloat32():b==x?d.scale[0]=a.ReadFloat32():b==B?d.scale[1]=a.ReadFloat32():b==C?d.rotation=a.ReadFloat32():a.Skip(c-6)})}function $(a,c,d){D("Read material chunk ("+c.toString(16)+", "+d+")",2);var n={},p=a.GetPosition()+d-6;Q(a,p,function(b,p){b==e?(D("Read material name chunk ("+c.toString(16)+", "+d+")",3),n.name=R(a)):b==f?(D("Read material ambient chunk ("+c.toString(16)+ ", "+d+")",3),n.ambient=V(a,b,p)):b==g?(D("Read material diffuse chunk ("+c.toString(16)+", "+d+")",3),n.diffuse=V(a,b,p)):b==h?(D("Read material specular chunk ("+c.toString(16)+", "+d+")",3),n.specular=V(a,b,p)):b==k?(D("Read material shininess chunk ("+c.toString(16)+", "+d+")",3),n.shininess=W(a,b,p)):b==l?(D("Read material shininess strength chunk ("+c.toString(16)+", "+d+")",3),n.shininessStrength=W(a,b,p)):b==m?(D("Read material transparency chunk ("+c.toString(16)+", "+d+")",3),n.transparency= -W(a,b,p)):b==t?(D("Read material texture map chunk ("+c.toString(16)+", "+d+")",3),Z(a,b,p,n)):(D("Skip chunk ("+b.toString(16)+", "+p+")",3),a.Skip(p-6))});if(void 0!==b.onMaterial&&null!==b.onMaterial)b.onMaterial(n)}function aa(a,c,d){D("Read faces chunk ("+c.toString(16)+", "+d+")",4);c=a.GetPosition()+d-6;var e=a.ReadUnsignedInteger16(),f,g,h,k;for(d=0;df;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 D("Skip chunk ("+c.toString(16)+", "+d+")",4), @@ -255,11 +263,11 @@ e&&(e.meshData.transformation=a)},onObjectNode:function(a){var b=h.nodes.length; 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;cn.length)){var p="";for(a=1;an.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;an.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"== +parseFloat(n[2]));else if("f"==n[0]){if(!(4>n.length)){var p=[],q=[],r=[],s;for(a=1;an.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;bs;s++)u[s].z=n-c;s=JSM.GeneratePrism(u,l,c,!0);k.Merge(s);if(d)for(s=0;sb&&(e=a,p=!1);for(s=0;st;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++)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;kg&&(g=3);e=m/g;for(m=1;m<=g;m++)f=l.getPointAtLength(m* +JSM.SvgToModel=function(a,b,c){function d(a,b){function c(a,b,d,e,f,g){a=a.createSVGPoint();a.x=f;a.y=g;e=a.matrixTransform(e.getCTM());a=new JSM.Coord2D(e.x,e.y);f=new JSM.Coord2D(f,g);g=b.VertexCount(d);if(0g&&(g=3);e=m/g;for(m=1;m<=g;m++)f=l.getPointAtLength(m* e),f=c(a,h,k,b,f.x,f.y);return f}function e(a,b){var c=a.VertexCount(b);if(0!==c){var d=a.GetVertex(b,0),c=a.GetVertex(b,c-1);JSM.CoordIsEqual2DWithEps(d,c,0.1)&&a.GetContour(b).vertices.pop()}}function f(a,b){return 0