Modify file structure.
This commit is contained in:
parent
f73dcaf012
commit
3f4e598ccd
60
embeddable/include/online3dembedder.js
Normal file
60
embeddable/include/online3dembedder.js
Normal file
@ -0,0 +1,60 @@
|
||||
function Online3DViewerLoad ()
|
||||
{
|
||||
function LoadViewer (viewerElement)
|
||||
{
|
||||
var urls = viewerElement.getAttribute ('sourcefiles');
|
||||
if (urls === undefined || urls === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var viewerSettings = {
|
||||
cameraEyePosition : [6.0, -5.5, 4.0],
|
||||
cameraCenterPosition : [0.0, 0.0, 0.0],
|
||||
cameraUpVector : [0.0, 0.0, 1.0]
|
||||
};
|
||||
|
||||
var viewer = new JSM.ThreeViewer ();
|
||||
if (!viewer.Start (viewerElement, viewerSettings)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var myThis = this;
|
||||
var urlList = urls.split ('|');
|
||||
JSM.ConvertURLListToJsonData (urlList, {
|
||||
onError : function () {
|
||||
return;
|
||||
},
|
||||
onReady : function (fileNames, jsonData) {
|
||||
var currentMeshIndex = 0;
|
||||
var environment = new JSM.AsyncEnvironment ({
|
||||
onStart : function (taskCount/*, meshes*/) {
|
||||
viewer.EnableDraw (false);
|
||||
},
|
||||
onProcess : function (currentTask, meshes) {
|
||||
while (currentMeshIndex < meshes.length) {
|
||||
viewer.AddMesh (meshes[currentMeshIndex]);
|
||||
currentMeshIndex = currentMeshIndex + 1;
|
||||
}
|
||||
},
|
||||
onFinish : function (meshes) {
|
||||
if (meshes.length > 0) {
|
||||
viewer.AdjustClippingPlanes (50.0);
|
||||
viewer.FitInWindow ();
|
||||
}
|
||||
viewer.EnableDraw (true);
|
||||
viewer.Draw ();
|
||||
}
|
||||
});
|
||||
JSM.ConvertJSONDataToThreeMeshes (jsonData, null, environment);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var viewers = document.getElementsByClassName ('3dviewer');
|
||||
var i;
|
||||
for (i = 0; i < viewers.length; i++) {
|
||||
LoadViewer (viewers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener ('load', Online3DViewerLoad, true);
|
||||
29
embeddable/index.html
Normal file
29
embeddable/index.html
Normal file
@ -0,0 +1,29 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
||||
<script type="text/javascript" src="../../build/three.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="include/importer.css">
|
||||
<link rel="stylesheet" type="text/css" href="include/floatingdialog.css">
|
||||
|
||||
<script type="text/javascript" src="../jsmodeler/three.min.js"></script>
|
||||
<script type="text/javascript" src="../jsmodeler/jsmodeler.js"></script>
|
||||
<script type="text/javascript" src="include/online3dembedder.js"></script>
|
||||
|
||||
<title>Online 3D Viewer</title>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<canvas class="3dviewer" sourcefiles="testfiles/cube.3ds" width="200" height="200"></canvas>
|
||||
<canvas class="3dviewer" sourcefiles="testfiles/cubeobj.obj" width="200" height="200"></canvas>
|
||||
<canvas class="3dviewer" sourcefiles="testfiles/cubeobj.obj|testfiles/cubeobj.mtl" width="200" height="200"></canvas>
|
||||
<canvas class="3dviewer" sourcefiles="testfiles/objects_ascii.stl" width="200" height="200"></canvas>
|
||||
<canvas class="3dviewer" sourcefiles="testfiles/objects_binary.stl" width="200" height="200"></canvas>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
BIN
embeddable/testfiles/cube.3ds
Normal file
BIN
embeddable/testfiles/cube.3ds
Normal file
Binary file not shown.
24
embeddable/testfiles/cubeobj.mtl
Normal file
24
embeddable/testfiles/cubeobj.mtl
Normal file
@ -0,0 +1,24 @@
|
||||
#
|
||||
## Alias OBJ Material File
|
||||
# Exported from SketchUp, (c) 2000-2012 Trimble Navigation Limited
|
||||
|
||||
newmtl FrontColor
|
||||
Ka 0.000000 0.000000 0.000000
|
||||
Kd 1.000000 1.000000 1.000000
|
||||
Ks 0.330000 0.330000 0.330000
|
||||
|
||||
newmtl M_0020_Red
|
||||
Ka 0.000000 0.000000 0.000000
|
||||
Kd 1.000000 0.000000 0.000000
|
||||
Ks 0.330000 0.330000 0.330000
|
||||
|
||||
newmtl M_0103_Blue
|
||||
Ka 0.000000 0.000000 0.000000
|
||||
Kd 0.000000 0.000000 1.000000
|
||||
Ks 0.330000 0.330000 0.330000
|
||||
|
||||
newmtl M_0076_Green
|
||||
Ka 0.000000 0.000000 0.000000
|
||||
Kd 0.000000 0.501961 0.000000
|
||||
Ks 0.330000 0.330000 0.330000
|
||||
|
||||
63
embeddable/testfiles/cubeobj.obj
Normal file
63
embeddable/testfiles/cubeobj.obj
Normal file
@ -0,0 +1,63 @@
|
||||
# Alias OBJ Model File
|
||||
# Exported from SketchUp, (c) 2000-2012 Trimble Navigation Limited
|
||||
# File units = meters
|
||||
|
||||
mtllib cubeobj.mtl
|
||||
|
||||
g Mesh1 Model
|
||||
|
||||
usemtl FrontColor
|
||||
v -1.94623 0 0.600186
|
||||
vt 76.6233 -23.6294
|
||||
vn 0 -1 -0
|
||||
v -1.94623 0 -0.979814
|
||||
vt 76.6233 38.5753
|
||||
v 1.51377 0 -0.979814
|
||||
vt -59.5972 38.5753
|
||||
v 1.51377 0 0.600186
|
||||
vt -59.5972 -23.6294
|
||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||
|
||||
vt -38.5753 0
|
||||
vn -1 0 -0
|
||||
vt 23.6294 0
|
||||
v -1.94623 0.69 0.600186
|
||||
vt 23.6294 27.1654
|
||||
v -1.94623 0.69 -0.979814
|
||||
vt -38.5753 27.1654
|
||||
f 2/5/2 1/6/2 5/7/2 6/8/2
|
||||
|
||||
usemtl M_0076_Green
|
||||
vt -76.6233 0
|
||||
vn 0 0 1
|
||||
vt 59.5972 0
|
||||
v 1.51377 0.69 0.600186
|
||||
vt 59.5972 27.1654
|
||||
vt -76.6233 27.1654
|
||||
f 1/9/3 4/10/3 7/11/3 5/12/3
|
||||
|
||||
usemtl M_0103_Blue
|
||||
vt -23.6294 0
|
||||
vn 1 0 -0
|
||||
vt 38.5753 0
|
||||
v 1.51377 0.69 -0.979814
|
||||
vt 38.5753 27.1654
|
||||
vt -23.6294 27.1654
|
||||
f 4/13/4 3/14/4 8/15/4 7/16/4
|
||||
|
||||
usemtl FrontColor
|
||||
vt -59.5972 0
|
||||
vn 0 0 -1
|
||||
vt 76.6233 0
|
||||
vt 76.6233 27.1654
|
||||
vt -59.5972 27.1654
|
||||
f 3/17/5 2/18/5 6/19/5 8/20/5
|
||||
|
||||
usemtl M_0020_Red
|
||||
vt -76.6233 38.5753
|
||||
vn 0 1 -0
|
||||
vt -76.6233 -23.6294
|
||||
vt 59.5972 -23.6294
|
||||
vt 59.5972 38.5753
|
||||
f 6/21/6 5/22/6 7/23/6 8/24/6
|
||||
|
||||
4006
embeddable/testfiles/objects_ascii.stl
Normal file
4006
embeddable/testfiles/objects_ascii.stl
Normal file
File diff suppressed because it is too large
Load Diff
BIN
embeddable/testfiles/objects_binary.stl
Normal file
BIN
embeddable/testfiles/objects_binary.stl
Normal file
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
/* JSModeler 0.33.184 - 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.194 - 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)};
|
||||
@ -64,7 +64,7 @@ JSM.CoordPlaneDirectionalDistance=function(a,b,c){return Math.abs(JSM.CoordPlane
|
||||
JSM.Project=function(a,b,c,d,e,f,g,h,k){b=JSM.MatrixView(b,c,d);g=JSM.MatrixPerspective(e,f,g,h);e=new JSM.Coord(0,0,0);h=[];f=[];h[0]=a.x;h[1]=a.y;h[2]=a.z;h[3]=1;f=JSM.MatrixVectorMultiply(g,JSM.MatrixVectorMultiply(b,h));a=f[3];JSM.IsZero(a)?k=null:(f[0]=0.5*(f[0]/a)+0.5,f[1]=0.5*(f[1]/a)+0.5,f[2]=0.5*(f[2]/a)+0.5,f[0]=f[0]*k[2]+k[0],f[1]=f[1]*k[3]+k[1],e.x=f[0],e.y=f[1],e.z=f[2],k=e);return k};
|
||||
JSM.ConvexHull2D=function(a){function b(a,b){var c=a.length,d=0,e;for(e=1;e<c;e++)b==d?d=e:"Clockwise"==JSM.CoordTurnType2D(a[b],a[d],a[e])&&(d=e);return d}var c=[];if(3>a.length)return c;var d=function(a){var b=a.length,c=JSM.Inf,d=-1,e,f;for(e=0;e<b;e++)f=a[e].x,JSM.IsLower(f,c)&&(c=f,d=e);return d}(a),e=d,f;do c.push(e),e=f=b(a,e);while(f!=d);return c};
|
||||
JSM.ConvexHull3D=function(a){function b(){this.position=null}function c(){this.tri2=this.tri1=this.vert2=this.vert1=null}function d(){this.valid=this.edges=this.vertices=null}function e(a,c){var d=new b;d.position=c;a.vertices.push(d);return a.vertices.length-1}function f(a,b,d,e){var f=-1,g,h;for(g=0;g<a.edges.length;g++)if(h=a.edges[g],h.vert1==d&&h.vert2==e||h.vert1==e&&h.vert2==d){f=g;break}-1==f&&(f=new c,f.vert1=d,f.vert2=e,f.tri1=-1,f.tri2=-1,a.edges.push(f),f=a.edges.length-1);a=a.edges[f];
|
||||
a.tri1!=b&&a.tri2!=b&&(-1==a.tri1?a.tri1=b:-1==a.tri2&&(a.tri2=b));return f}function g(a,b,c,e){var g=a.triangles.length,h=f(a,g,b,c),l=f(a,g,c,e),g=f(a,g,e,b),k=new d;k.vertices=[b,c,e];k.edges=[h,l,g];k.valid=!0;a.triangles.push(k);return a.triangles.length-1}function h(a,b,c){a=a.edges[c];a.tri1==b?a.tri1=-1:a.tri2==b&&(a.tri2=-1)}function k(a,b,c,d,e){c=a.vertices[c].position;d=a.vertices[d].position;e=a.vertices[e].position;a=JSM.CoordSub(a.vertices[b].position,e);b=JSM.CoordSub(c,e);c=JSM.CoordSub(d,
|
||||
a.tri1!=b&&a.tri2!=b&&(-1==a.tri1?a.tri1=b:-1==a.tri2&&(a.tri2=b));return f}function g(a,b,c,e){var g=a.triangles.length,h=f(a,g,b,c),k=f(a,g,c,e),g=f(a,g,e,b),l=new d;l.vertices=[b,c,e];l.edges=[h,k,g];l.valid=!0;a.triangles.push(l);return a.triangles.length-1}function h(a,b,c){a=a.edges[c];a.tri1==b?a.tri1=-1:a.tri2==b&&(a.tri2=-1)}function k(a,b,c,d,e){c=a.vertices[c].position;d=a.vertices[d].position;e=a.vertices[e].position;a=JSM.CoordSub(a.vertices[b].position,e);b=JSM.CoordSub(c,e);c=JSM.CoordSub(d,
|
||||
e);return JSM.VectorDot(a,JSM.VectorCross(b,c))/6}function l(a,b){var c=[],d,e;for(d=0;d<a.triangles.length;d++)e=a.triangles[d],e.valid?!JSM.IsLower(k(a,e.vertices[0],e.vertices[2],e.vertices[1],b),0)?c.push(!0):c.push(!1):c.push(!1);var f,l,m,n=[];for(d=0;d<c.length;d++)c[d]&&(e=a.triangles[d],e.valid&&(f=a.edges[e.edges[0]],l=a.edges[e.edges[1]],m=a.edges[e.edges[2]],f=-1==f.tri1||-1==f.tri2||c[f.tri1]!=c[f.tri2],l=-1==l.tri1||-1==l.tri2||c[l.tri1]!=c[l.tri2],m=-1==m.tri1||-1==m.tri2||c[m.tri1]!=
|
||||
c[m.tri2],f&&n.push([e.vertices[0],e.vertices[1],b]),l&&n.push([e.vertices[1],e.vertices[2],b]),m&&n.push([e.vertices[2],e.vertices[0],b])));for(d=0;d<c.length;d++)c[d]&&(e=a.triangles[d],e.valid&&(e=a,m=d,f=e.triangles[m],f.valid&&(h(e,m,f.edges[0]),h(e,m,f.edges[1]),h(e,m,f.edges[2]),f.valid=!1)));for(d=0;d<n.length;d++)c=n[d],g(a,c[0],c[1],c[2])}var m=[],n=a.length;if(4>n)return m;var p=new function(){this.vertices=[];this.edges=[];this.triangles=[]},q;for(q=0;q<n;q++)e(p,a[q]);(function(a){var b=
|
||||
-1,b=!JSM.IsLower(k(a,0,1,2,3),0)?g(a,0,1,2):g(a,0,2,1),b=a.triangles[b];g(a,b.vertices[0],b.vertices[2],3);g(a,b.vertices[2],b.vertices[1],3);g(a,b.vertices[1],b.vertices[0],3)})(p);for(q=4;q<n;q++)l(p,q);for(q=0;q<p.triangles.length;q++)a=p.triangles[q],a.valid&&m.push(a.vertices);return m};JSM.Polygon2D=function(){this.vertices=[]};JSM.Polygon2D.prototype.AddVertex=function(a,b){this.vertices.push(new JSM.Coord2D(a,b))};JSM.Polygon2D.prototype.GetVertex=function(a){return this.vertices[a]};
|
||||
@ -90,8 +90,8 @@ JSM.PolygonTriangulate=function(a){var b=new JSM.Polygon2D,c=JSM.CalculateNormal
|
||||
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,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,s;;){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;s=a.GetVertex(n);r.AddVertex(s.x,s.y,s.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 l=d[d.length-1];0!==l&&(0!==g&&l!=
|
||||
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 l(a,b,c,d,e){a=a.GetVertex(d);b.AddVertex(a.x,a.y,a.z);c.push(e)}var k=0===c,n=c===a.VertexCount(),p;n?(c=0,p=a.VertexCount()-1):p=c-1;f=f[c];k||h(a,d,g,p,c,f);n||l(a,d,g,c,f);return f}var f=[],g=!1,h=!1,k,t,y;for(k=0;k<a.VertexCount();k++)t=a.GetVertex(k),t=JSM.CoordPlanePosition(t,b),y=0,"CoordInFrontOfPlane"==
|
||||
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,t,y;for(k=0;k<a.VertexCount();k++)t=a.GetVertex(k),t=JSM.CoordPlanePosition(t,b),y=0,"CoordInFrontOfPlane"==
|
||||
t?(y=1,h=!0):"CoordAtBackOfPlane"==t&&(y=-1,g=!0),f.push(y);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};
|
||||
JSM.BSPTree.prototype.NodeCount=function(){var a=0;this.Traverse(function(){a+=1});return a};
|
||||
@ -138,8 +138,8 @@ 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;g<f.VertexIndexCount();g++)h=a.GetVertexPosition(f.GetVertexIndex(g)),h=JSM.CalculateCylindricalTextureCoord(h,c,b),d.push(h[0]),e.push(h[1]);g=JSM.VectorNormalize(b.e3);if(JSM.VectorsAreCollinear(g,c))return d;a=!1;for(g=0;g<e.length;g++){for(c=g+1;c<e.length;c++)if(JSM.IsGreater(Math.abs(e[g]-e[c]),Math.PI)){a=!0;break}if(a)break}if(a){b=JSM.VectorLength(b.e1);
|
||||
for(g=0;g<e.length;g++)JSM.IsLower(e[g],Math.PI)&&(d[g].x=b*(e[g]+2*Math.PI))}return d};JSM.CalculateBodyPlanarTextureCoords=function(a){var b=[],c;for(c=0;c<a.PolygonCount();c++)b.push(JSM.CalculatePolygonPlanarTextureCoords(a,c));return b};JSM.CalculateBodyCubicTextureCoords=function(a){var b=[],c=JSM.CalculateBodyPolygonNormals(a),d,e;for(d=0;d<a.PolygonCount();d++)e=c[d],b.push(JSM.CalculatePolygonCubicTextureCoords(a,d,e));return b};
|
||||
JSM.CalculateBodyCylindricalTextureCoords=function(a){var b=[],c=JSM.CalculateBodyPolygonNormals(a),d,e;for(d=0;d<a.PolygonCount();d++)e=c[d],b.push(JSM.CalculatePolygonCylindricalTextureCoords(a,d,e));return b};JSM.CalculateBodyTextureCoords=function(a){var b=[],c=a.GetTextureProjectionType();"Planar"===c?b=JSM.CalculateBodyPlanarTextureCoords(a):"Cubic"===c?b=JSM.CalculateBodyCubicTextureCoords(a):"Cylindrical"===c&&(b=JSM.CalculateBodyCylindricalTextureCoords(a));return b};
|
||||
JSM.CutBodyByPlane=function(a,b){function c(a,b,c){function d(a){q.push(new JSM.Coord(p.x,p.y,p.z));r.push(a)}function e(c,d){s=JSM.VectorNormalize(JSM.CoordSub(a[d],a[c]));M=new JSM.Line(a[c],s);w=JSM.LinePlaneIntersection(M,b);q.push(new JSM.Coord(w.x,w.y,w.z));r.push(-1)}var f=void 0!==c&&null!==c,g=a.length,h=[],l=[],k=!1,m,n,p;for(m=0;m<g;m++)p=a[m],n=JSM.CoordPlanePosition(p,b),l.push("CoordAtBackOfPlane"!==n),0<m&&l[m-1]!==l[m]&&(k=!0);if(!k){if(!1===l[0])return h;for(m=0;m<g;m++)p=a[m],h.push(new JSM.Coord(p.x,
|
||||
p.y,p.z)),f&&c.push(m);return h}var q=[],r=[],s,M,w;for(m=0;m<g;m++)k=m-1,n=m,0===m&&(k=g-1),p=a[n],l[n]?(l[k]||e(k,n),d(n)):l[k]&&e(k,n);for(m=0;m<q.length;m++)g=q[m],l=h[h.length-1],0===m||!JSM.CoordIsEqual(l,g)?(h.push(new JSM.Coord(g.x,g.y,g.z)),f&&(g=r[m],c.push(g))):f&&(g=r[m],l=r[m-1],-1!==g?c[c.length-1]=g:-1!==l&&(c[c.length-1]=l));return h}function d(a){var b=-1,c;for(c=s;c<e.VertexCount();c++)if(JSM.CoordIsEqual(e.GetVertexPosition(c),a)){b=c;break}-1===b&&(b=e.AddVertex(new JSM.BodyVertex(new JSM.Coord(a.x,
|
||||
JSM.CutBodyByPlane=function(a,b){function c(a,b,c){function d(a){q.push(new JSM.Coord(p.x,p.y,p.z));r.push(a)}function e(c,d){s=JSM.VectorNormalize(JSM.CoordSub(a[d],a[c]));M=new JSM.Line(a[c],s);w=JSM.LinePlaneIntersection(M,b);q.push(new JSM.Coord(w.x,w.y,w.z));r.push(-1)}var f=void 0!==c&&null!==c,g=a.length,h=[],k=[],l=!1,m,n,p;for(m=0;m<g;m++)p=a[m],n=JSM.CoordPlanePosition(p,b),k.push("CoordAtBackOfPlane"!==n),0<m&&k[m-1]!==k[m]&&(l=!0);if(!l){if(!1===k[0])return h;for(m=0;m<g;m++)p=a[m],h.push(new JSM.Coord(p.x,
|
||||
p.y,p.z)),f&&c.push(m);return h}var q=[],r=[],s,M,w;for(m=0;m<g;m++)l=m-1,n=m,0===m&&(l=g-1),p=a[n],k[n]?(k[l]||e(l,n),d(n)):k[l]&&e(l,n);for(m=0;m<q.length;m++)g=q[m],k=h[h.length-1],0===m||!JSM.CoordIsEqual(k,g)?(h.push(new JSM.Coord(g.x,g.y,g.z)),f&&(g=r[m],c.push(g))):f&&(g=r[m],k=r[m-1],-1!==g?c[c.length-1]=g:-1!==k&&(c[c.length-1]=k));return h}function d(a){var b=-1,c;for(c=s;c<e.VertexCount();c++)if(JSM.CoordIsEqual(e.GetVertexPosition(c),a)){b=c;break}-1===b&&(b=e.AddVertex(new JSM.BodyVertex(new JSM.Coord(a.x,
|
||||
a.y,a.z))));return b}var e=new JSM.Body,f=[],g=[],h=[],k=[],l,m,n,p,q;for(l=0;l<a.PolygonCount();l++){n=a.GetPolygon(l);p=[];for(m=0;m<n.VertexIndexCount();m++)q=a.GetVertexPosition(n.GetVertexIndex(m)),p.push(new JSM.Coord(q.x,q.y,q.z));q=[];p=c(p,b,q);for(m=0;m<q.length;m++)-1!==q[m]&&(h[n.GetVertexIndex(q[m])]=!0);f.push(p);g.push(q)}var r;for(l=0;l<a.VertexCount();l++)h[l]&&(r=a.GetVertexPosition(l),k[l]=e.AddVertex(new JSM.BodyVertex(new JSM.Coord(r.x,r.y,r.z))));var s=e.VertexCount();for(l=
|
||||
0;l<a.PolygonCount();l++)if(n=a.GetPolygon(l),p=f[l],q=g[l],0!==q.length){h=[];for(m=0;m<q.length;m++)-1!==q[m]?h.push(k[n.GetVertexIndex(q[m])]):(r=p[m],h.push(d(r)));m=new JSM.BodyPolygon(h);m.InheritAttributes(n);e.AddPolygon(m)}return e};
|
||||
JSM.GenerateRectangle=function(a,b){var c=new JSM.Body,d=a/2,e=b/2;c.AddVertex(new JSM.BodyVertex(new JSM.Coord(-d,-e,0)));c.AddVertex(new JSM.BodyVertex(new JSM.Coord(d,-e,0)));c.AddVertex(new JSM.BodyVertex(new JSM.Coord(d,e,0)));c.AddVertex(new JSM.BodyVertex(new JSM.Coord(-d,e,0)));c.AddPolygon(new JSM.BodyPolygon([0,1,2,3]));c.SetCubicTextureProjection(new JSM.Coord(-d,-e,0),new JSM.Coord(1,0,0),new JSM.Coord(0,1,0),new JSM.Coord(0,0,1));return c};
|
||||
@ -210,7 +210,7 @@ for(l=0;l<k.edges.length;l++)f(l);var m=-1;for(l=0;l<k.pgons.length;l++)m=g(l,m)
|
||||
JSM.TriangleBody=function(a){this.name=a;this.vertices=[];this.normals=[];this.triangles=[]};JSM.TriangleBody.prototype.SetName=function(a){this.name=a};JSM.TriangleBody.prototype.GetName=function(){return this.name};JSM.TriangleBody.prototype.AddVertex=function(a,b,c){this.vertices.push(new JSM.Coord(a,b,c));return this.vertices.length-1};JSM.TriangleBody.prototype.GetVertex=function(a){return this.vertices[a]};
|
||||
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.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 l,k;for(e=0;e<b.length;e++)l=b[e],k=a.GetTriangle(l),c.curve==k.curve&&(f=JSM.CoordAdd(f,d[l]),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],b=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.AddDefaultMaterial());if(void 0===p.n0||void 0===p.n1||void 0===p.n2)void 0===p.curve||0===p.curve?(c=d[e],b=b.AddNormal(c.x,
|
||||
c.y,c.z),p.n0=b,p.n1=b,p.n2=b):(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))}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.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){this.materials.push({name:a,ambient:b,diffuse:c,specular:d,opacity:e});return this.materials.length-1};JSM.TriangleModel.prototype.GetMaterial=function(a){return this.materials[a]};
|
||||
@ -226,15 +226,15 @@ JSM.GetStringBuffersFromURLList=function(a,b){JSM.LoadMultipleBuffers(a,[],0,JSM
|
||||
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);c.uvs.push(0,0);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,0,0,0);c.triangles.push(q)}}var c={version:1,materials:[],meshes:[]};(function(a,b){var c,d;for(c=0;c<a.MaterialCount();c++)d=a.GetMaterial(c),b.push({name:d.name,ambient:[d.ambient.r,d.ambient.g,d.ambient.b],diffuse:[d.diffuse.r,d.diffuse.g,d.diffuse.b],specular:[d.specular.r,d.specular.g,d.specular.b],opacity:d.opacity})})(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,l=c[h];void 0===l&&(a.triangles.push({material:h,parameters:[]}),l=a.triangles.length-1,c[h]=l);a=a.triangles[l].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,
|
||||
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,s;for(r=0;r<b.triangles.length;r++)s=b.triangles[r],d(a,s,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,s,x,v,t,y,F,C,u,H,z,I,J,D,A,B,K,L,M;function w(a,c){if(void 0!==b.onLog&&null!==b.onLog)b.onLog(a,c)}function G(a){for(var b="",c=0,d=0;64>d;){c=a.ReadCharacter();if(0===c)break;b+=String.fromCharCode(c);d+=1}return b}function N(a){var b=[],c;for(c=0;3>c;c++)b[c]=a.ReadFloat32();return b}function E(a,b,c){for(;a.GetPosition()<=b-6;){var d=a,e=c,f=d.ReadUnsignedInteger16(),d=d.ReadUnsignedInteger32();e(f,d)}}if(void 0===b||null===b)b={};c=
|
||||
15677;d=45055;e=40960;f=40976;g=40992;h=41008;k=41024;l=41040;m=16;n=17;p=18;q=19;r=48;s=49;x=16384;v=16640;t=17920;y=18176;F=16656;C=16672;u=16736;H=16688;z=16720;I=45056;J=45058;D=45072;A=45075;B=45088;K=45089;L=45090;M=45104;(function(a){function P(a,b,c){var d={};b=a.GetPosition()+c-6;var e=!1;E(a,b,function(b,c){b==n?e||(d.r=a.ReadUnsignedCharacter()/255,d.g=a.ReadUnsignedCharacter()/255,d.b=a.ReadUnsignedCharacter()/255):b==p?(d.r=a.ReadUnsignedCharacter()/255,d.g=a.ReadUnsignedCharacter()/
|
||||
255,d.b=a.ReadUnsignedCharacter()/255,e=!0):b==m?e||(d.r=a.ReadFloat32(),d.g=a.ReadFloat32(),d.b=a.ReadFloat32()):b==q?(d.r=a.ReadFloat32(),d.g=a.ReadFloat32(),d.b=a.ReadFloat32(),e=!0):a.Skip(c-6)});return d}function Q(a,b,c){var d=0;b=a.GetPosition()+c-6;E(a,b,function(b,c){b==r?d=a.ReadUnsignedInteger16()/100:b==s?d=a.ReadFloat32():a.Skip(c-6)});return d}function R(a,c,d){w("Read material chunk ("+c.toString(16)+", "+d+")",2);var m={},n=a.GetPosition()+d-6;E(a,n,function(b,n){b==e?(w("Read material name chunk ("+
|
||||
c.toString(16)+", "+d+")",3),m.name=G(a)):b==f?(w("Read material ambient chunk ("+c.toString(16)+", "+d+")",3),m.ambient=P(a,b,n)):b==g?(w("Read material diffuse chunk ("+c.toString(16)+", "+d+")",3),m.diffuse=P(a,b,n)):b==h?(w("Read material specular chunk ("+c.toString(16)+", "+d+")",3),m.specular=P(a,b,n)):b==k?(w("Read material shininess chunk ("+c.toString(16)+", "+d+")",3),m.shininess=Q(a,b,n)):b==l?(w("Read material transparency chunk ("+c.toString(16)+", "+d+")",3),m.transparency=Q(a,b,n)):
|
||||
(w("Skip chunk ("+b.toString(16)+", "+n+")",3),a.Skip(n-6))});if(void 0!==b.onMaterial&&null!==b.onMaterial)b.onMaterial(m)}function S(a,c,d){w("Read faces chunk ("+c.toString(16)+", "+d+")",4);c=a.GetPosition()+d-6;var e=a.ReadUnsignedInteger16(),f,g,h,l;for(d=0;d<e;d++)if(f=a.ReadUnsignedInteger16(),g=a.ReadUnsignedInteger16(),h=a.ReadUnsignedInteger16(),l=a.ReadUnsignedInteger16(),void 0!==b.onFace&&null!==b.onFace)b.onFace(f,g,h,l);E(a,c,function(c,d){if(c==H){w("Read face materials chunk ("+
|
||||
c.toString(16)+", "+d+")",5);var f=G(a),g=a.ReadUnsignedInteger16(),h,l;for(h=0;h<g;h++)if(l=a.ReadUnsignedInteger16(),void 0!==b.onFaceMaterial&&null!==b.onFaceMaterial)b.onFaceMaterial(l,f)}else if(c==z){w("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 w("Skip chunk ("+c.toString(16)+", "+d+")",5),a.Skip(d-6)})}function T(a,c,d,e){w("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;E(a,c,function(c,d){if(c==F){w("Read vertices chunk ("+c.toString(16)+", "+d+")",4);var e=a.ReadUnsignedInteger16(),f,g,h,l;for(f=0;f<e;f++)if(g=a.ReadFloat32(),h=a.ReadFloat32(),l=a.ReadFloat32(),void 0!==b.onVertex&&null!==b.onVertex)b.onVertex(g,h,l)}else if(c==C)S(a,c,d);else if(c==u){w("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());
|
||||
(w("Skip chunk ("+b.toString(16)+", "+n+")",3),a.Skip(n-6))});if(void 0!==b.onMaterial&&null!==b.onMaterial)b.onMaterial(m)}function S(a,c,d){w("Read faces chunk ("+c.toString(16)+", "+d+")",4);c=a.GetPosition()+d-6;var e=a.ReadUnsignedInteger16(),f,g,h,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);E(a,c,function(c,d){if(c==H){w("Read face materials chunk ("+
|
||||
c.toString(16)+", "+d+")",5);var f=G(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==z){w("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 w("Skip chunk ("+c.toString(16)+", "+d+")",5),a.Skip(d-6)})}function T(a,c,d,e){w("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;E(a,c,function(c,d){if(c==F){w("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==C)S(a,c,d);else if(c==u){w("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 w("Skip chunk ("+c.toString(16)+", "+d+")",4),a.Skip(d-6)})}function U(a,b,c){w("Read object chunk ("+b.toString(16)+", "+c+")",2);b=a.GetPosition()+c-6;var d=G(a);E(a,b,function(b,c){b==v?T(a,d,b,c):(b==t?w("Skip light chunk ("+d+", "+b.toString(16)+", "+c+")",3):b==y?w("Skip camera chunk ("+d+", "+b.toString(16)+", "+c+")",3):w("Skip chunk ("+b.toString(16)+", "+c+")",3),a.Skip(c-6))})}function V(a,
|
||||
b,c){w("Read editor chunk ("+b.toString(16)+", "+c+")",1);b=a.GetPosition()+c-6;E(a,b,function(b,c){b==d?R(a,b,c):b==x?U(a,b,c):(w("Skip chunk ("+b.toString(16)+", "+c+")",2),a.Skip(c-6))})}function W(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==K?(g=a.ReadFloat32(),f=N(a),f[3]=g):f=N(a),c.push(f);return c}w("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;E(a,c,function(b,c){b==D?(f.name=G(a),f.flags=a.ReadUnsignedInteger32(),f.userId=a.ReadUnsignedInteger16()):b==A?f.pivot=N(a):b==B?f.positions=e(a,B):b==K?f.rotations=e(a,K):b==L?f.scales=e(a,L):b==M?f.nodeId=a.ReadUnsignedInteger16():(w("Skip chunk ("+b.toString(16)+", "+c+")",3),a.Skip(c-6))});if(void 0!==b.onObjectNode&&null!==b.onObjectNode)b.onObjectNode(f)}function X(a,b,c){w("Read keyframe chunk ("+
|
||||
@ -242,8 +242,8 @@ b.toString(16)+", "+c+")",1);b=a.GetPosition()+c-6;E(a,b,function(b,c){b==J?W(a,
|
||||
JSM.Convert3dsToJsonData=function(a){var b=new JSM.TriangleModel,c=null,d={},e={},f={nodes:[],nodeIdToIndex:{}};JSM.Read3dsFile(a,{onMaterial:function(a){function c(a){return void 0===a||null===a?{r:0,g:0,b:0}:a}var e=b.AddMaterial(a.name,c(a.ambient),c(a.diffuse),c(a.specular),void 0===a.transparency||null===a.transparency?1:1-a.transparency);void 0===d[a.name]&&(d[a.name]=e)},onMesh:function(a){var d=b.AddBody(new JSM.TriangleBody(a));c=b.GetBody(d);c.meshData={faceToMaterial:{},faceToSmoothingGroup:{},
|
||||
objectNodes:[],transformation:null};e[a]=d},onTransformation:function(a){null!==c&&(c.meshData.transformation=a)},onObjectNode:function(a){var c=f.nodes.length;f.nodes.push(a);f.nodeIdToIndex[a.nodeId]=c;a=e[a.name];void 0!==a&&b.GetBody(a).meshData.objectNodes.push(c)},onVertex:function(a,b,d){null!==c&&c.AddVertex(a,b,d)},onFace:function(a,b,d){null!==c&&c.AddTriangle(a,b,d)},onFaceMaterial:function(a,b){null!==c&&(c.meshData.faceToMaterial[a]=b)},onFaceSmoothingGroup:function(a,b){null!==c&&(c.meshData.faceToSmoothingGroup[a]=
|
||||
b)}});(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 l(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=l(b.nodes[d],b),c=JSM.MatrixMultiply(c,d)));return a.matrix=c}var k=a.meshData;k=void 0===k||null===k?null:k.transformation;if(null!==k){var m=null,m=null!==b?l(b,c):k;c=JSM.MatrixClone(m);m=JSM.MatrixClone(k);k=JSM.MatrixInvert(m);null!==k&&(h(a,m,k),b=void 0===b||null===b?[0,0,0]:b.pivot,f(c,[-b[0],-b[1],-b[2]]),b=JSM.MatrixMultiply(k,c),g(a,b))}}function e(a,b,c,f){d(a,b,f);b=a.meshData;var g,h;for(f=0;f<a.TriangleCount();f++)g=a.GetTriangle(f),h=b.faceToMaterial[f],void 0!==h&&
|
||||
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.meshData;var g,h;for(f=0;f<a.TriangleCount();f++)g=a.GetTriangle(f),h=b.faceToMaterial[f],void 0!==h&&
|
||||
(h=c[h],void 0!==h&&(g.mat=h)),h=b.faceToSmoothingGroup[f],void 0!==h&&(g.curve=h)}function f(a,b,c,d){b=b.Clone();b.SetName(b.GetName()+" ("+d+")");c<a.BodyCount()?a.AddBodyToIndex(b,c):a.AddBody(b);return b}var p,q,r,s,x,v,t;for(p=0;p<b.BodyCount();p++)if(r=b.GetBody(p),s=r.meshData,0===s.objectNodes.length)e(r,null,c,a);else{v=a.nodes[s.objectNodes[0]];for(q=1;q<s.objectNodes.length;q++)x=a.nodes[s.objectNodes[q]],t=f(b,r,p+1,q+1),t.meshData=r.meshData,e(t,x,c,a),p+=1;e(r,v,c,a)}})(f,b,d);b.Finalize();
|
||||
return JSM.ConvertTriangleModelToJsonData(b)};
|
||||
JSM.ReadObjFile=function(a,b){function c(a){a=a.split("\n");var e,f;for(e=0;e<a.length;e++){var g=f=a[e].trim();if(0!==g.length&&"#"!=g[0]&&(f=g.split(/\s+/),!(0===f.length||"#"==f[0][0]))){var h=void 0,h=void 0;if("g"==f[0]){if(!(2>f.length)){g="";for(h=1;h<f.length;h++)g+=f[h],h<f.length-1&&(g+=" ");if(void 0!==b.onMesh&&null!==b.onMesh)b.onMesh(g)}}else if("v"==f[0]){if(!(4>f.length)&&(h=parseFloat(f[1]),g=parseFloat(f[2]),f=parseFloat(f[3]),void 0!==b.onVertex&&null!==b.onVertex))b.onVertex(h,
|
||||
@ -252,19 +252,19 @@ f[0]){if(!(2>f.length)&&void 0!==b.onNewMaterial&&null!==b.onNewMaterial)b.onNew
|
||||
h,g,k)}else"mtllib"==f[0]&&!(2>f.length)&&(f=g.indexOf("mtllib")+6,h=g.substr(f,g.length-f).trim(),f=h.trim(),f=void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(f):null,null!==f&&c(f))}}}c(a)};
|
||||
JSM.ConvertObjToJsonData=function(a,b){var c=new JSM.TriangleModel,d=c.AddBody(new JSM.TriangleBody("Default")),e=c.GetBody(d),f={},g=null,h=null,k=[],l=[];JSM.ReadObjFile(a,{onNewMaterial:function(a){var b=c.AddMaterial(a,{r:1,g:0,b:0},{r:1,g:0,b:0},{r:0,g:0,b:0},1);g=c.GetMaterial(b);f[a]=b},onMaterialComponent:function(a,b,c,d){null!==g&&("Ka"==a?(a=g.ambient,a.r=b,a.g=c,a.b=d):"Kd"==a?(a=g.diffuse,a.r=b,a.g=c,a.b=d):"Ks"==a&&(a=g.specular,a.r=b,a.g=c,a.b=d))},onUseMaterial:function(a){a=f[a];
|
||||
void 0!==a&&(h=a)},onMesh:function(a){a=c.AddBody(new JSM.TriangleBody(a));e=c.GetBody(a)},onVertex:function(a,b,c){k.push(new JSM.Coord(a,b,c))},onNormal:function(a,b,c){l.push(new JSM.Coord(a,b,c))},onFace:function(a,b){var c,d,f=a.length==b.length,g=a.length;for(c=0;c<g-2;c++)d=e.AddTriangle(a[0],a[(c+1)%g],a[(c+2)%g]),d=e.GetTriangle(d),f&&(d.n0=b[0],d.n1=b[(c+1)%g],d.n2=b[(c+2)%g]),null!==h&&(d.mat=h)},onFileRequested:function(a){return void 0!==b.onFileRequested&&null!==b.onFileRequested?b.onFileRequested(a):
|
||||
null}});(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));return e[c]=g}}var e,f,g,h,l,k;for(e=0;e<a.BodyCount();e++){g=a.GetBody(e);l={};k={};for(f=0;f<g.TriangleCount();f++)h=g.GetTriangle(f),h.v0=d(g,b,h.v0,l,0),h.v1=d(g,b,h.v1,l,0),h.v2=d(g,b,h.v2,l,0),h.n0=d(g,c,h.n0,k,1),h.n1=d(g,c,h.n1,k,1),h.n2=d(g,c,h.n2,k,1)}})(c,k,l);c.Finalize();return JSM.ConvertTriangleModelToJsonData(c)};
|
||||
null}});(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));return e[c]=g}}var e,f,g,h,k,l;for(e=0;e<a.BodyCount();e++){g=a.GetBody(e);k={};l={};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)}})(c,k,l);c.Finalize();return JSM.ConvertTriangleModelToJsonData(c)};
|
||||
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.ConvertStlToJsonData=function(a){var b=new JSM.TriangleModel,c=b.AddBody(new JSM.TriangleBody("Default")),d=b.GetBody(c);(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})(a)?JSM.ReadBinaryStlFile(a,{onFace:function(a,b,c,h){a=d.AddVertex(a[0],a[1],a[2]);b=d.AddVertex(b[0],b[1],b[2]);c=d.AddVertex(c[0],c[1],c[2]);h=JSM.VectorNormalize(new JSM.Vector(h[0],h[1],h[2]));h=d.AddNormal(h.x,h.y,h.z);d.AddTriangle(a,
|
||||
b,c,h,h,h)}}):(a=String.fromCharCode.apply(null,new Uint8Array(a)),JSM.ReadAsciiStlFile(a,{onFace:function(a,b,c,h){a=d.AddVertex(a[0],a[1],a[2]);b=d.AddVertex(b[0],b[1],b[2]);c=d.AddVertex(c[0],c[1],c[2]);h=JSM.VectorNormalize(new JSM.Vector(h[0],h[1],h[2]));h=d.AddNormal(h.x,h.y,h.z);d.AddTriangle(a,b,c,h,h,h)}}));b.Finalize();return JSM.ConvertTriangleModelToJsonData(b)};JSM.ImportFileList=function(){this.type=this.descriptors=this.originalList=null};
|
||||
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};
|
||||
JSM.ConvertStlToJsonData=function(a,b){var c=new JSM.TriangleModel,d=c.AddBody(new JSM.TriangleBody("Default")),e=c.GetBody(d);null!==a?JSM.ReadBinaryStlFile(a,{onFace:function(a,b,c,d){a=e.AddVertex(a[0],a[1],a[2]);b=e.AddVertex(b[0],b[1],b[2]);c=e.AddVertex(c[0],c[1],c[2]);d=JSM.VectorNormalize(new JSM.Vector(d[0],d[1],d[2]));d=e.AddNormal(d.x,d.y,d.z);e.AddTriangle(a,b,c,d,d,d)}}):null!==b&&JSM.ReadAsciiStlFile(b,{onFace:function(a,b,c,d){a=e.AddVertex(a[0],a[1],a[2]);b=e.AddVertex(b[0],b[1],b[2]);
|
||||
c=e.AddVertex(c[0],c[1],c[2]);d=JSM.VectorNormalize(new JSM.Vector(d[0],d[1],d[2]));d=e.AddNormal(d.x,d.y,d.z);e.AddTriangle(a,b,c,d,d,d)}});c.Finalize();return JSM.ConvertTriangleModelToJsonData(c)};JSM.ImportFileList=function(){this.type=this.descriptors=this.originalList=null};
|
||||
JSM.ImportFileList.prototype.InitFromFiles=function(a){this.originalList=a;this.descriptors=[];var b,c;for(b=0;b<a.length;b++)c=a[b],c={originalObject:c,originalFileName:c.name,fileName:c.name.toUpperCase(),extension:this.GetFileExtension(c.name)},this.descriptors.push(c);this.type="file"};
|
||||
JSM.ImportFileList.prototype.InitFromURLs=function(a){this.originalList=a;this.descriptors=[];var b,c,d;for(b=0;b<a.length;b++)c=a[b],d=c.split("/"),d=0===d.length?"":d[d.length-1],c={originalObject:c,originalFileName:d,fileName:d.toUpperCase(),extension:this.GetFileExtension(d)},this.descriptors.push(c);this.type="url"};JSM.ImportFileList.prototype.GetOriginalList=function(a){return this.originalList};JSM.ImportFileList.prototype.GetFileDescriptor=function(a){return this.descriptors[a]};
|
||||
JSM.ImportFileList.prototype.GetType=function(a){return this.type};JSM.ImportFileList.prototype.GetMainFileIndex=function(a){var b;for(a=0;a<this.descriptors.length;a++)if(b=this.descriptors[a],this.IsSupportedExtension(b.extension))return a;return-1};JSM.ImportFileList.prototype.GetFileIndexByName=function(a){var b,c;for(b=0;b<this.descriptors.length;b++)if(c=this.descriptors[b],c.fileName==a.toUpperCase())return b;return-1};
|
||||
JSM.ImportFileList.prototype.IsSupportedExtension=function(a){return".3DS"==a||".OBJ"==a||".STL"==a?!0:!1};JSM.ImportFileList.prototype.GetFileExtension=function(a){var b=a.lastIndexOf(".");if(-1==b)return"";a=a.substr(b);return a=a.toUpperCase()};
|
||||
JSM.ConvertImportFileListToJsonData=function(a,b){function c(){if(void 0!==b.onError&&null!==b.onError)b.onError()}function d(a,c){if(void 0!==b.onReady&&null!==b.onReady)b.onReady(a,c)}var e=a.GetMainFileIndex();if(-1===e)c();else{var f=a.GetFileDescriptor(e),g={main:f.originalFileName,requested:[],missing:[]},h=null,k=a.GetType();"file"==k?h={getArrayBuffer:JSM.GetArrayBufferFromFile,getStringBuffers:JSM.GetStringBuffersFromFileList}:"url"==k&&(h={getArrayBuffer:JSM.GetArrayBufferFromURL,getStringBuffers:JSM.GetStringBuffersFromURLList});
|
||||
null===h?c():".3DS"==f.extension?h.getArrayBuffer(f.originalObject,function(a){a=JSM.Convert3dsToJsonData(a);d(g,a)}):".OBJ"==f.extension?h.getStringBuffers(a.GetOriginalList(),function(b){var c=JSM.ConvertObjToJsonData(b[e],{onFileRequested:function(c){var d=a.GetFileIndexByName(c);if(-1==d)return g.missing.push(c),null;g.requested.push(c);return b[d]}});d(g,c)}):".STL"==f.extension&&h.getArrayBuffer(f.originalObject,function(a){a=JSM.ConvertStlToJsonData(a);d(g,a)})}};
|
||||
JSM.ConvertFileListToJsonData=function(a,b){var c=new JSM.ImportFileList;c.InitFromFiles(a);JSM.ConvertImportFileListToJsonData(c,b)};JSM.ConvertURLListToJsonData=function(a,b){var c=new JSM.ImportFileList;c.InitFromURLs(a);JSM.ConvertImportFileListToJsonData(c,b)};
|
||||
JSM.ImportFileList.prototype.InitFromURLs=function(a){this.originalList=a;this.descriptors=[];var b,c,d;for(b=0;b<a.length;b++)c=a[b],d=this.GetFileName(c),c={originalObject:c,originalFileName:d,fileName:d.toUpperCase(),extension:this.GetFileExtension(d)},this.descriptors.push(c);this.type="url"};JSM.ImportFileList.prototype.GetOriginalList=function(a){return this.originalList};
|
||||
JSM.ImportFileList.prototype.GetFileName=function(a){var b=a.split("/");1==b.length&&(b=a.split("\\"));return 0===b.length?"":b[b.length-1]};JSM.ImportFileList.prototype.GetFileDescriptor=function(a){return this.descriptors[a]};JSM.ImportFileList.prototype.GetType=function(a){return this.type};JSM.ImportFileList.prototype.GetMainFileIndex=function(a){var b;for(a=0;a<this.descriptors.length;a++)if(b=this.descriptors[a],this.IsSupportedExtension(b.extension))return a;return-1};
|
||||
JSM.ImportFileList.prototype.GetFileIndexByName=function(a){var b,c,d;for(b=0;b<this.descriptors.length;b++)if(c=this.descriptors[b],d=this.GetFileName(a),c.fileName==d.toUpperCase())return b;return-1};JSM.ImportFileList.prototype.IsSupportedExtension=function(a){return".3DS"==a||".OBJ"==a||".STL"==a?!0:!1};JSM.ImportFileList.prototype.GetFileExtension=function(a){var b=a.lastIndexOf(".");if(-1==b)return"";a=a.substr(b);return a=a.toUpperCase()};
|
||||
JSM.ConvertImportFileListToJsonData=function(a,b){function c(){if(void 0!==b.onError&&null!==b.onError)b.onError()}function d(a,c){if(void 0!==b.onReady&&null!==b.onReady)b.onReady(a,c)}var e=a.GetMainFileIndex();if(-1===e)c();else{var f=a.GetFileDescriptor(e),g={main:f.originalFileName,requested:[],missing:[]},h=null,k=a.GetType();"file"==k?h={getArrayBuffer:JSM.GetArrayBufferFromFile,getStringBuffer:JSM.GetStringBufferFromFile,getStringBuffers:JSM.GetStringBuffersFromFileList}:"url"==k&&(h={getArrayBuffer:JSM.GetArrayBufferFromURL,
|
||||
getStringBuffer:JSM.GetStringBufferFromURL,getStringBuffers:JSM.GetStringBuffersFromURLList});if(null===h)c();else try{".3DS"==f.extension?h.getArrayBuffer(f.originalObject,function(a){a=JSM.Convert3dsToJsonData(a);d(g,a)}):".OBJ"==f.extension?h.getStringBuffers(a.GetOriginalList(),function(b){var c=JSM.ConvertObjToJsonData(b[e],{onFileRequested:function(c){var d=a.GetFileIndexByName(c);if(-1==d)return g.missing.push(c),null;g.requested.push(c);return b[d]}});d(g,c)}):".STL"==f.extension&&h.getArrayBuffer(f.originalObject,
|
||||
function(a){JSM.IsBinaryStlFile(a)?(a=JSM.ConvertStlToJsonData(a,null),d(g,a)):h.getStringBuffer(f.originalObject,function(a){a=JSM.ConvertStlToJsonData(null,a);d(g,a)})})}catch(l){c()}}};JSM.ConvertFileListToJsonData=function(a,b){var c=new JSM.ImportFileList;c.InitFromFiles(a);JSM.ConvertImportFileListToJsonData(c,b)};JSM.ConvertURLListToJsonData=function(a,b){var c=new JSM.ImportFileList;c.InitFromURLs(a);JSM.ConvertImportFileListToJsonData(c,b)};
|
||||
JSM.GenerateSolidWithRadius=function(a,b){var c=new JSM.Body,d=!0;"Tetrahedron"===a?c=JSM.GenerateTetrahedron():"Hexahedron"===a?c=JSM.GenerateHexahedron():"Octahedron"===a?c=JSM.GenerateOctahedron():"Dodecahedron"===a?c=JSM.GenerateDodecahedron():"Icosahedron"===a?c=JSM.GenerateIcosahedron():"TruncatedTetrahedron"===a?c=JSM.GenerateTruncatedTetrahedron():"Cuboctahedron"===a?c=JSM.GenerateCuboctahedron():"TruncatedCube"===a?c=JSM.GenerateTruncatedCube():"TruncatedOctahedron"===a?c=JSM.GenerateTruncatedOctahedron():
|
||||
"Rhombicuboctahedron"===a?c=JSM.GenerateRhombicuboctahedron():"TruncatedCuboctahedron"===a?c=JSM.GenerateTruncatedCuboctahedron():"SnubCube"===a?c=JSM.GenerateSnubCube():"Icosidodecahedron"===a?c=JSM.GenerateIcosidodecahedron():"TruncatedDodecahedron"===a?c=JSM.GenerateTruncatedDodecahedron():"TruncatedIcosahedron"===a?c=JSM.GenerateTruncatedIcosahedron():"Rhombicosidodecahedron"===a?c=JSM.GenerateRhombicosidodecahedron():"TruncatedIcosidodecahedron"===a?c=JSM.GenerateTruncatedIcosidodecahedron():
|
||||
"SnubDodecahedron"===a?c=JSM.GenerateSnubDodecahedron():"TetrakisHexahedron"===a?(c=JSM.GenerateTetrakisHexahedron(),d=!1):"RhombicDodecahedron"===a?(c=JSM.GenerateRhombicDodecahedron(),d=!1):"PentakisDodecahedron"===a?(c=JSM.GeneratePentakisDodecahedron(),d=!1):"SmallStellatedDodecahedron"===a?(c=JSM.GenerateSmallStellatedDodecahedron(),d=!1):"GreatDodecahedron"===a?(c=JSM.GenerateGreatDodecahedron(),d=!1):"SmallTriambicIcosahedron"===a?(c=JSM.GenerateSmallTriambicIcosahedron(),d=!1):"GreatStellatedDodecahedron"===
|
||||
@ -377,8 +377,8 @@ v.push(new JSM.Coord(m*a,m*b,0));v.push(new JSM.Coord(0,m*b,0));var k=new JSM.Bo
|
||||
JSM.GenerateConvexHullBody=function(a){var b=new JSM.Body,c=JSM.ConvexHull3D(a),d={},e,f,g,h;for(e=0;e<c.length;e++){g=c[e];for(f=0;f<g.length;f++)h=g[f],h in d||(d[h]=b.VertexCount(),b.AddVertex(new JSM.BodyVertex(a[h])))}for(e=0;e<c.length;e++){g=c[e];a=[];for(f=0;f<g.length;f++)h=g[f],a.push(d[h]);b.AddPolygon(new JSM.BodyPolygon(a))}return b};
|
||||
JSM.GenerateSuperShape=function(a,b,c,d,e,f,g,h,k,l,m,n,p,q){function r(a){var b=Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z),c=Math.asin(a.z/b);a=Math.atan2(a.y,a.x);return[b,c,a]}function s(a,b,c,d,e,f,g){b=Math.abs(Math.cos(d*a/4)/b);a=Math.abs(Math.sin(d*a/4)/c);return Math.pow(Math.pow(b,f)+Math.pow(a,g),-1/e)}function x(p,q){var x=new JSM.Coord(0,0,0),t=s(p,g,h,k,l,m,n),r=s(q,a,b,c,d,e,f);x.x=r*Math.cos(q)*t*Math.cos(p);x.y=r*Math.sin(q)*t*Math.cos(p);x.z=t*Math.sin(p);return x}p=JSM.GenerateSphere(1,
|
||||
p,q);var v,t;for(q=0;q<p.VertexCount();q++)v=p.GetVertex(q),t=v.position,t=r(t),t=x(t[1],t[2]),v.SetPosition(t);return p};
|
||||
JSM.OrderPolygons=function(a,b,c){var d=[],e=[],f=[],g=[],h=[],k=[],l=[],m=a.PolygonCount(),n,p;for(n=0;n<m;n++){k.push(n);l.push([]);for(p=0;p<m;p++)l[n].push(null)}(function(){var l=JSM.VectorNormalize(JSM.CoordSub(c,b)),l=JSM.GetPlaneFromCoordAndDirection(b,l),k,m,n,p,t,y;for(k=0;k<a.PolygonCount();k++){t=JSM.Inf;y=-JSM.Inf;n=a.GetPolygon(k);for(m=0;m<n.VertexIndexCount();m++)p=a.GetVertexPosition(n.GetVertexIndex(m)),p=JSM.CoordPlaneDistance(p,l),JSM.IsLower(p,t)&&(t=p),JSM.IsGreater(p,y)&&(y=
|
||||
p);d.push(t);e.push(y);m=a.GetPolygon(k);n=new JSM.Coord(0,0,0);y=t=void 0;for(t=0;t<m.VertexIndexCount();t++)y=a.GetVertexPosition(m.GetVertexIndex(t)),n=JSM.CoordAdd(n,y);m=n=JSM.VectorMultiply(n,1/m.VertexIndexCount());n=JSM.CoordPlaneDistance(m,l);f.push(m);g.push(n);n=JSM.CalculateBodyPolygonNormal(a,k);t=JSM.VectorNormalize(JSM.CoordSub(m,b));t=JSM.VectorDot(n,t);JSM.IsGreaterOrEqual(t,0)&&(n=JSM.VectorMultiply(n,-1));m=JSM.GetPlaneFromCoordAndDirection(m,n);h.push(m)}})();(function(){var a=
|
||||
JSM.OrderPolygons=function(a,b,c){var d=[],e=[],f=[],g=[],h=[],k=[],l=[],m=a.PolygonCount(),n,p;for(n=0;n<m;n++){k.push(n);l.push([]);for(p=0;p<m;p++)l[n].push(null)}(function(){var k=JSM.VectorNormalize(JSM.CoordSub(c,b)),k=JSM.GetPlaneFromCoordAndDirection(b,k),l,m,n,p,t,y;for(l=0;l<a.PolygonCount();l++){t=JSM.Inf;y=-JSM.Inf;n=a.GetPolygon(l);for(m=0;m<n.VertexIndexCount();m++)p=a.GetVertexPosition(n.GetVertexIndex(m)),p=JSM.CoordPlaneDistance(p,k),JSM.IsLower(p,t)&&(t=p),JSM.IsGreater(p,y)&&(y=
|
||||
p);d.push(t);e.push(y);m=a.GetPolygon(l);n=new JSM.Coord(0,0,0);y=t=void 0;for(t=0;t<m.VertexIndexCount();t++)y=a.GetVertexPosition(m.GetVertexIndex(t)),n=JSM.CoordAdd(n,y);m=n=JSM.VectorMultiply(n,1/m.VertexIndexCount());n=JSM.CoordPlaneDistance(m,k);f.push(m);g.push(n);n=JSM.CalculateBodyPolygonNormal(a,l);t=JSM.VectorNormalize(JSM.CoordSub(m,b));t=JSM.VectorDot(n,t);JSM.IsGreaterOrEqual(t,0)&&(n=JSM.VectorMultiply(n,-1));m=JSM.GetPlaneFromCoordAndDirection(m,n);h.push(m)}})();(function(){var a=
|
||||
k.length,b,c;for(b=0;b<a-1;b++)for(c=0;c<a-b-1;c++){var d;d=k[c];var f=k[c+1];d=JSM.IsLower(e[d],e[f])?!0:JSM.IsEqual(e[d],e[f])&&JSM.IsLower(g[d],g[f])?!0:!1;if(d){d=k;var f=c+1,h=d[c];d[c]=d[f];d[f]=h}}})();(function(){var b=k.length,c,f;for(c=0;c<b-1;c++)for(f=0;f<b-c-1;f++){var g;g=k[f];var m=k[f+1];if(null!==l[g][m])g=l[g][m];else{var n;if(n=JSM.IsLowerOrEqual(d[g],e[m])){var p=m;n=h[g];for(var F=h[p],C=void 0,u=void 0,H=!0,z=a.GetPolygon(g),C=0;C<z.VertexIndexCount();C++)if(u=a.GetVertexPosition(z.GetVertexIndex(C)),
|
||||
"CoordInFrontOfPlane"===JSM.CoordPlanePosition(u,F)){H=!1;break}if(H)n=!1;else{F=!0;p=a.GetPolygon(p);for(C=0;C<p.VertexIndexCount();C++)if(u=a.GetVertexPosition(p.GetVertexIndex(C)),"CoordAtBackOfPlane"===JSM.CoordPlanePosition(u,n)){F=!1;break}n=F?!1:!0}}g=n?l[g][m]=!0:l[g][m]=!1}g&&(g=k,m=f+1,n=g[f],g[f]=g[m],g[m]=n)}})();return k};JSM.CanvasDrawer=function(a){this.canvas=a;this.context=this.canvas.getContext("2d")};JSM.CanvasDrawer.prototype.GetWidth=function(){return this.canvas.width};
|
||||
JSM.CanvasDrawer.prototype.GetHeight=function(){return this.canvas.height};JSM.CanvasDrawer.prototype.BeginPath=function(){this.context.beginPath()};JSM.CanvasDrawer.prototype.EndPath=function(){this.context.stroke()};JSM.CanvasDrawer.prototype.Clear=function(){this.context.clearRect(0,0,this.canvas.width,this.canvas.height);this.context.fillStyle="#ffffff";this.context.fillRect(0,0,this.canvas.width,this.canvas.height)};
|
||||
@ -395,14 +395,14 @@ var e=[];(function(){var f,g,h,k,l;for(f=0;f<c.edges.length;f++){h=c.edges[f];k=
|
||||
c.edges[k],h=JSM.MidCoord(a.GetVertex(g.vert1).position,a.GetVertex(g.vert2).position),e.push(h);var m,n,p;for(k=0;k<c.verts.length;k++){m=c.verts[k];p=new JSM.Coord(0,0,0);g=new JSM.Coord(0,0,0);n=1/m.pgons.length;for(l=0;l<m.pgons.length;l++)h=b.GetVertex(d[m.pgons[l]]).position,p=JSM.CoordAdd(p,JSM.VectorMultiply(h,n));n=1/m.edges.length;for(l=0;l<m.edges.length;l++)h=e[m.edges[l]],g=JSM.CoordAdd(g,JSM.VectorMultiply(h,n));m=m.edges.length;l=b.GetVertex(k).position;l.x=(p.x+2*g.x+(m-3)*l.x)/m;
|
||||
l.y=(p.y+2*g.y+(m-3)*l.y)/m;l.z=(p.z+2*g.z+(m-3)*l.z)/m}})();(function(){var f,g,h,k,l,m,n,p;for(m=0;m<c.pgons.length;m++){p=c.pgons[m];f=p.verts.length;for(n=0;n<f;n++)g=p.pedges[n],h=p.pedges[(n+1)%f],k=d[m],g=e[g.index],l=JSM.GetPolyEdgeStartVertex(h,c),h=e[h.index],k=new JSM.BodyPolygon([k,g,l,h]),h=a.GetPolygon(m),k.material=h.material,k.curved=h.curved,b.AddPolygon(k)}})();return b};
|
||||
JSM.CatmullClarkSubdivision=function(a,b){var c=a,d;for(d=0;d<b;d++)c=JSM.CatmullClarkSubdivisionOneIteration(c);return c};
|
||||
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(0<g&&JSM.CoordIsEqual2DWithEps(b.GetVertex(d,g-1),a,0.1))return f;b.AddVertex(d,e.x,e.y);return f}function d(a,b,e,f,g,h,k){var l=document.createElementNS("http://www.w3.org/2000/svg","path"),m="M "+f.x+" "+f.y+" ",n,q,t,r,s;for(n=0;n<g.length;n++)if(q=g[n],q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS||
|
||||
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(0<g&&JSM.CoordIsEqual2DWithEps(b.GetVertex(d,g-1),a,0.1))return f;b.AddVertex(d,e.x,e.y);return f}function d(a,b,e,f,g,h,l){var k=document.createElementNS("http://www.w3.org/2000/svg","path"),m="M "+f.x+" "+f.y+" ",n,q,t,r,s;for(n=0;n<g.length;n++)if(q=g[n],q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS||
|
||||
q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL)t=q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS?"C":"c",m+=t+" "+q.x1+" "+q.y1+" "+q.x2+" "+q.y2+" "+q.x+" "+q.y+" ";else if(q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS||q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL)t=q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS?"Q":"q",m+=t+" "+q.x1+" "+q.y1+" "+q.x+" "+q.y+" ";else if(q.pathSegType==SVGPathSeg.PATHSEG_ARC_ABS||q.pathSegType==SVGPathSeg.PATHSEG_ARC_REL)t=q.pathSegType==
|
||||
SVGPathSeg.PATHSEG_ARC_ABS?"A":"a",r=q.largeArcFlag?1:0,s=q.sweepFlag?1:0,m+=t+" "+q.r1+" "+q.r2+" "+q.angle+" "+r+" "+s+" "+q.x+" "+q.y+" ";else if(q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL)t=q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS?"S":"s",m+=t+" "+q.x2+" "+q.y2+" "+q.x+" "+q.y+" ";l.setAttributeNS(null,"d",m);m=l.getTotalLength();g=0;0<e&&(g=parseInt(m/e,10));3>g&&(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<a.VertexCount(b)?(e(a,b),a.AddContour(),b+1):b}var g=new JSM.ContourPolygon2D,h=document.createElementNS("http://www.w3.org/2000/svg","svg"),l;if(a instanceof SVGPathElement){var k=new JSM.Coord2D(0,0),F=new JSM.Coord2D(0,0),C=b;a.hasAttribute("segmentlength")&&(C=parseFloat(a.getAttribute("segmentlength")));
|
||||
var u,H,z=0;for(l=0;l<a.pathSegList.numberOfItems;l++)if(u=a.pathSegList.getItem(l),u.pathSegType!=SVGPathSeg.PATHSEG_CLOSEPATH)if(u.pathSegType==SVGPathSeg.PATHSEG_MOVETO_ABS)z=f(g,z),k=c(h,g,z,a,u.x,u.y),F=k.Clone();else if(u.pathSegType==SVGPathSeg.PATHSEG_MOVETO_REL)z=f(g,z),k=c(h,g,z,a,F.x+u.x,F.y+u.y),F=k.Clone();else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_ABS)k=c(h,g,z,a,u.x,u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_REL)k=c(h,g,z,a,k.x+u.x,k.y+u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS)k=
|
||||
c(h,g,z,a,u.x,k.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS)k=c(h,g,z,a,k.x,u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL)k=c(h,g,z,a,k.x+u.x,k.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL)k=c(h,g,z,a,k.x,k.y+u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL||
|
||||
u.pathSegType==SVGPathSeg.PATHSEG_ARC_ABS||u.pathSegType==SVGPathSeg.PATHSEG_ARC_REL||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL){H=[];if(u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL){for(;l<a.pathSegList.numberOfItems;l++){u=a.pathSegList.getItem(l);if(!(u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL))break;
|
||||
H.push(u)}l-=1}else H.push(u);k=d(h,a,C,k,H,g,z)}e(g,z)}else if(a instanceof SVGRectElement)c(h,g,0,a,a.x.baseVal.value,a.y.baseVal.value),c(h,g,0,a,a.x.baseVal.value+a.width.baseVal.value,a.y.baseVal.value),c(h,g,0,a,a.x.baseVal.value+a.width.baseVal.value,a.y.baseVal.value+a.height.baseVal.value),c(h,g,0,a,a.x.baseVal.value,a.y.baseVal.value+a.height.baseVal.value);else if(a instanceof SVGPolygonElement)for(l=0;l<a.points.numberOfItems;l++)k=a.points.getItem(l),c(h,g,0,a,k.x,k.y);g.color=function(a){for(var b=
|
||||
SVGPathSeg.PATHSEG_ARC_ABS?"A":"a",r=q.largeArcFlag?1:0,s=q.sweepFlag?1:0,m+=t+" "+q.r1+" "+q.r2+" "+q.angle+" "+r+" "+s+" "+q.x+" "+q.y+" ";else if(q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL)t=q.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS?"S":"s",m+=t+" "+q.x2+" "+q.y2+" "+q.x+" "+q.y+" ";k.setAttributeNS(null,"d",m);m=k.getTotalLength();g=0;0<e&&(g=parseInt(m/e,10));3>g&&(g=3);e=m/g;for(m=1;m<=g;m++)f=k.getPointAtLength(m*
|
||||
e),f=c(a,h,l,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<a.VertexCount(b)?(e(a,b),a.AddContour(),b+1):b}var g=new JSM.ContourPolygon2D,h=document.createElementNS("http://www.w3.org/2000/svg","svg"),k;if(a instanceof SVGPathElement){var l=new JSM.Coord2D(0,0),F=new JSM.Coord2D(0,0),C=b;a.hasAttribute("segmentlength")&&(C=parseFloat(a.getAttribute("segmentlength")));
|
||||
var u,H,z=0;for(k=0;k<a.pathSegList.numberOfItems;k++)if(u=a.pathSegList.getItem(k),u.pathSegType!=SVGPathSeg.PATHSEG_CLOSEPATH)if(u.pathSegType==SVGPathSeg.PATHSEG_MOVETO_ABS)z=f(g,z),l=c(h,g,z,a,u.x,u.y),F=l.Clone();else if(u.pathSegType==SVGPathSeg.PATHSEG_MOVETO_REL)z=f(g,z),l=c(h,g,z,a,F.x+u.x,F.y+u.y),F=l.Clone();else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_ABS)l=c(h,g,z,a,u.x,u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_REL)l=c(h,g,z,a,l.x+u.x,l.y+u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS)l=
|
||||
c(h,g,z,a,u.x,l.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS)l=c(h,g,z,a,l.x,u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL)l=c(h,g,z,a,l.x+u.x,l.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL)l=c(h,g,z,a,l.x,l.y+u.y);else if(u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL||
|
||||
u.pathSegType==SVGPathSeg.PATHSEG_ARC_ABS||u.pathSegType==SVGPathSeg.PATHSEG_ARC_REL||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL){H=[];if(u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL){for(;k<a.pathSegList.numberOfItems;k++){u=a.pathSegList.getItem(k);if(!(u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS||u.pathSegType==SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL))break;
|
||||
H.push(u)}k-=1}else H.push(u);l=d(h,a,C,l,H,g,z)}e(g,z)}else if(a instanceof SVGRectElement)c(h,g,0,a,a.x.baseVal.value,a.y.baseVal.value),c(h,g,0,a,a.x.baseVal.value+a.width.baseVal.value,a.y.baseVal.value),c(h,g,0,a,a.x.baseVal.value+a.width.baseVal.value,a.y.baseVal.value+a.height.baseVal.value),c(h,g,0,a,a.x.baseVal.value,a.y.baseVal.value+a.height.baseVal.value);else if(a instanceof SVGPolygonElement)for(k=0;k<a.points.numberOfItems;k++)l=a.points.getItem(k),c(h,g,0,a,l.x,l.y);g.color=function(a){for(var b=
|
||||
"";null!==a&&void 0!==a&&0===b.length;)b=a.getAttribute("fill"),null===b&&(b=a.style.fill),a=a.parentElement;a=0;if(0===b.length)return a;if("#"==b[0])a=JSM.HexColorToRGBColor(b.substring(1));else{var c=b.indexOf("("),d=b.indexOf(")");if(-1==c||-1==d)return a;b=b.substring(c+1,d).split(", ");if(3!=b.length)return a;a=JSM.RGBComponentsToHexColor(b[0],b[1],b[2])}return a}(a);return g}function e(a,b){function c(a,b){var d=[],e,f;if("Clockwise"==b)for(e=0;e<a.VertexCount();e++)f=a.GetVertex(e),d.push(new JSM.Coord(f.x,
|
||||
0,-f.y));else for(e=a.VertexCount()-1;0<=e;e--)f=a.GetVertex(e),d.push(new JSM.Coord(f.x,0,-f.y));return d}function d(a,b,c){a.push(null);var e;if("CounterClockwise"==c)for(c=0;c<b.VertexCount();c++)e=b.GetVertex(c),a.push(new JSM.Coord(e.x,0,-e.y));else for(c=b.VertexCount()-1;0<=c;c--)e=b.GetVertex(c),a.push(new JSM.Coord(e.x,0,-e.y))}var e=[],f=new JSM.Vector(0,-1,0),g,h;h=a.ContourCount();if(1==h)h=JSM.PolygonOrientation2D(a.GetContour(0)),g=c(a.GetContour(0),h),g=JSM.GeneratePrism(g,f,b,!0),
|
||||
e.push(g);else if(1<h){h=JSM.PolygonOrientation2D(a.GetContour(0));var k=c(a.GetContour(0),h),l=!1,F;for(F=1;F<a.ContourCount();F++)g=JSM.PolygonOrientation2D(a.GetContour(F)),g==h?(g=c(a.GetContour(F),h),g=JSM.GeneratePrism(g,f,b,!0),e.push(g)):(d(k,a.GetContour(F),g),l=!0);g=l?JSM.GeneratePrismWithHole(k,f,b,!0):JSM.GeneratePrism(k,f,b,!0);e.push(g)}f=new JSM.Material({ambient:a.color,diffuse:a.color});return[e,f]}var f=new JSM.Model,g=new JSM.Materials;c=function(a,b){function c(a,b,d){a=a.getElementsByTagName(b);
|
||||
@ -423,8 +423,8 @@ JSM.RenderGeometry.prototype.GetNormalBuffer=function(){return this.normalBuffer
|
||||
JSM.RenderGeometry.prototype.Compile=function(a,b){this.material.Compile(a,b);this.vertexBuffer=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer);a.bufferData(a.ARRAY_BUFFER,this.vertexArray,a.STATIC_DRAW);this.vertexBuffer.itemSize=3;this.vertexBuffer.numItems=parseInt(this.vertexArray.length/3,10);this.normalBuffer=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,this.normalBuffer);a.bufferData(a.ARRAY_BUFFER,this.normalArray,a.STATIC_DRAW);this.normalBuffer.itemSize=3;this.normalBuffer.numItems=
|
||||
parseInt(this.normalArray.length/3,10);null!==this.uvArray&&(this.uvBuffer=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),a.bufferData(a.ARRAY_BUFFER,this.uvArray,a.STATIC_DRAW),this.uvBuffer.itemSize=2,this.uvBuffer.numItems=parseInt(this.uvArray.length/2,10))};JSM.Renderer=function(){this.geometries=this.light=this.camera=this.texShader=this.shader=this.context=this.canvas=null};
|
||||
JSM.Renderer.prototype.Init=function(a,b,c){return!this.InitContext(a)||!this.InitView(b,c)||!this.InitShaders()||!this.InitBuffers()?!1:!0};
|
||||
JSM.Renderer.prototype.InitContext=function(a){if(!window.WebGLRenderingContext)return!1;this.canvas=document.getElementById(a);if(null===this.canvas||void 0===this.canvas.getContext)return!1;this.context=this.canvas.getContext("webgl")||this.canvas.getContext("experimental-webgl");if(null===this.context)return!1;this.context.viewportWidth=this.canvas.width;this.context.viewportHeight=this.canvas.height;this.context.viewport(0,0,this.context.viewportWidth,this.context.viewportHeight);this.context.clearColor(1,
|
||||
1,1,1);this.context.enable(this.context.DEPTH_TEST);this.context.depthFunc(this.context.LEQUAL);this.context.enable(this.context.BLEND);this.context.blendEquation(this.context.FUNC_ADD);this.context.blendFunc(this.context.SRC_ALPHA,this.context.ONE_MINUS_SRC_ALPHA);return!0};
|
||||
JSM.Renderer.prototype.InitContext=function(a){if(!window.WebGLRenderingContext)return!1;this.canvas=a;if(null===this.canvas||void 0===this.canvas.getContext)return!1;this.context=this.canvas.getContext("webgl")||this.canvas.getContext("experimental-webgl");if(null===this.context)return!1;this.context.viewportWidth=this.canvas.width;this.context.viewportHeight=this.canvas.height;this.context.viewport(0,0,this.context.viewportWidth,this.context.viewportHeight);this.context.clearColor(1,1,1,1);this.context.enable(this.context.DEPTH_TEST);
|
||||
this.context.depthFunc(this.context.LEQUAL);this.context.enable(this.context.BLEND);this.context.blendEquation(this.context.FUNC_ADD);this.context.blendFunc(this.context.SRC_ALPHA,this.context.ONE_MINUS_SRC_ALPHA);return!0};
|
||||
JSM.Renderer.prototype.InitShaders=function(){function a(a,b,c){c=a.createShader(c);a.shaderSource(c,b);a.compileShader(c);return!a.getShaderParameter(c,a.COMPILE_STATUS)?null:c}function b(b,c,d){c=a(b,c,b.FRAGMENT_SHADER);d=a(b,d,b.VERTEX_SHADER);if(null===c||null===d)return null;var e=b.createProgram();b.attachShader(e,d);b.attachShader(e,c);b.linkProgram(e);return!b.getProgramParameter(e,b.LINK_STATUS)?null:e}function c(a){var b="";a&&(b="#define USETEXTURE");return[b,"uniform highp vec3 uPolygonAmbientColor;\nuniform highp vec3 uPolygonDiffuseColor;\nuniform highp vec3 uPolygonSpecularColor;\nuniform highp float uPolygonShininess;\nuniform highp vec3 uLightAmbientColor;\nuniform highp vec3 uLightDiffuseColor;\nuniform highp vec3 uLightSpecularColor;\nvarying highp vec3 vVertex;\nvarying highp vec3 vNormal;\nvarying highp vec3 vLight;\n#ifdef USETEXTURE\nvarying highp vec2 vUV;\nuniform sampler2D uSampler;\n#endif\nvoid main (void) {\n\thighp vec3 N = normalize (vNormal);\n\tif (!gl_FrontFacing) {\n\t\tN = -N;\n\t}\n\thighp vec3 L = normalize (-vLight);\n\thighp vec3 E = normalize (-vVertex);\n\thighp vec3 R = normalize (-reflect (L, N));\n\thighp vec3 ambientComponent = uPolygonAmbientColor * uLightAmbientColor;\n\thighp vec3 diffuseComponent = uPolygonDiffuseColor * uLightDiffuseColor * max (dot (N, L), 0.0);\n\thighp vec3 specularComponent = uPolygonSpecularColor * uLightSpecularColor * pow (max (dot (R, E), 0.0), uPolygonShininess);\n#ifdef USETEXTURE\n\thighp vec3 textureColor = texture2D (uSampler, vec2 (vUV.s, vUV.t)).xyz;\n\tambientComponent = textureColor * ambientComponent;\n\tdiffuseComponent = textureColor * diffuseComponent;\n\tspecularComponent = textureColor * specularComponent;\n#endif\n\tambientComponent = clamp (ambientComponent, 0.0, 1.0);\n\tdiffuseComponent = clamp (diffuseComponent, 0.0, 1.0);\n\tspecularComponent = clamp (specularComponent, 0.0, 1.0);\n\tgl_FragColor = vec4 (ambientComponent + diffuseComponent + specularComponent, 1.0);\n}"].join("\n")}
|
||||
function d(a){var b="";a&&(b="#define USETEXTURE");return[b,"attribute highp vec3 aVertexPosition;\nattribute highp vec3 aVertexNormal;\nuniform highp mat4 uViewMatrix;\nuniform highp mat4 uModelViewMatrix;\nuniform highp mat4 uProjectionMatrix;\nuniform highp vec3 uLightDirection;\nvarying highp vec3 vVertex;\nvarying highp vec3 vNormal;\nvarying highp vec3 vLight;\n#ifdef USETEXTURE\nattribute highp vec2 aVertexUV;\nvarying highp vec2 vUV;\n#endif\nvoid main (void) {\n\tvVertex = vec3 (uModelViewMatrix * vec4 (aVertexPosition, 1.0));\n\tvNormal = normalize (vec3 (uModelViewMatrix * vec4 (aVertexNormal, 0.0)));\n\tvLight = normalize (vec3 (uViewMatrix * vec4 (uLightDirection, 0.0)));\n#ifdef USETEXTURE\n\tvUV = aVertexUV;\n#endif\n\tgl_Position = uProjectionMatrix * vec4 (vVertex, 1.0);\n}"].join("\n")}
|
||||
function e(a,b){b.vertexPositionAttribute=a.getAttribLocation(b,"aVertexPosition");b.vertexNormalAttribute=a.getAttribLocation(b,"aVertexNormal");b.lightAmbientColorUniform=a.getUniformLocation(b,"uLightAmbientColor");b.lightDiffuseColorUniform=a.getUniformLocation(b,"uLightDiffuseColor");b.lightSpecularColorUniform=a.getUniformLocation(b,"uLightSpecularColor");b.lightDirectionUniform=a.getUniformLocation(b,"uLightDirection");b.vMatrixUniform=a.getUniformLocation(b,"uViewMatrix");b.mvMatrixUniform=
|
||||
@ -438,7 +438,7 @@ this.light.direction.z),this.context.uniform3f(n.lightAmbientColorUniform,d[0],d
|
||||
k[1],k[2]),this.context.uniform1f(n.polygonShininessUniform,l),n==this.texShader&&(c=m.GetUVBuffer(),this.context.activeTexture(this.context.TEXTURE0),this.context.bindTexture(this.context.TEXTURE_2D,m.material.textureBuffer),this.context.bindBuffer(this.context.ARRAY_BUFFER,c),this.context.vertexAttribPointer(n.vertexUVAttribute,c.itemSize,this.context.FLOAT,!1,0,0),this.context.enableVertexAttribArray(n.vertexUVAttribute),this.context.uniform1i(n.samplerUniform,0)),c=JSM.MatrixMultiply(m.GetTransformationMatrix(),
|
||||
b),this.context.uniformMatrix4fv(n.mvMatrixUniform,!1,c),c=m.GetVertexBuffer(),this.context.bindBuffer(this.context.ARRAY_BUFFER,c),this.context.enableVertexAttribArray(n.vertexPositionAttribute),this.context.vertexAttribPointer(n.vertexPositionAttribute,c.itemSize,this.context.FLOAT,!1,0,0),m=m.GetNormalBuffer(),this.context.bindBuffer(this.context.ARRAY_BUFFER,m),this.context.enableVertexAttribArray(n.vertexNormalAttribute),this.context.vertexAttribPointer(n.vertexNormalAttribute,m.itemSize,this.context.FLOAT,
|
||||
!1,0,0),this.context.drawArrays(this.context.TRIANGLES,0,c.numItems)};JSM.PointCloudRenderer=function(){this.pointSize=this.points=this.camera=this.shader=this.context=this.canvas=null};JSM.PointCloudRenderer.prototype.Init=function(a,b){return!this.InitContext(a)||!this.InitShaders()||!this.InitBuffers()||!this.InitView(b)?!1:!0};
|
||||
JSM.PointCloudRenderer.prototype.InitContext=function(a){if(!window.WebGLRenderingContext)return!1;this.canvas=document.getElementById(a);if(null===this.canvas||void 0===this.canvas.getContext)return!1;this.context=this.canvas.getContext("experimental-webgl");if(null===this.context)return!1;this.context.viewportWidth=this.canvas.width;this.context.viewportHeight=this.canvas.height;this.context.clearColor(1,1,1,1);this.context.enable(this.context.DEPTH_TEST);return!0};
|
||||
JSM.PointCloudRenderer.prototype.InitContext=function(a){if(!window.WebGLRenderingContext)return!1;this.canvas=a;if(null===this.canvas||void 0===this.canvas.getContext)return!1;this.context=this.canvas.getContext("experimental-webgl");if(null===this.context)return!1;this.context.viewportWidth=this.canvas.width;this.context.viewportHeight=this.canvas.height;this.context.clearColor(1,1,1,1);this.context.enable(this.context.DEPTH_TEST);return!0};
|
||||
JSM.PointCloudRenderer.prototype.InitShaders=function(){function a(a,b,c){c=a.createShader(c);a.shaderSource(c,b);a.compileShader(c);return!a.getShaderParameter(c,a.COMPILE_STATUS)?null:c}var b=a(this.context,"varying highp vec3 vColor;\nvoid main (void) {\n\tgl_FragColor = vec4 (vColor, 1.0);\n}",this.context.FRAGMENT_SHADER),c=a(this.context,"attribute highp vec3 aVertexPosition;\nattribute highp vec3 aVertexColor;\nuniform highp mat4 uViewMatrix;\nuniform highp mat4 uProjectionMatrix;\nuniform highp float uPointSize;\nvarying highp vec3 vColor;\nvoid main (void) {\n\tvColor = aVertexColor;\n\tgl_PointSize = uPointSize;\n\tgl_Position = uProjectionMatrix * uViewMatrix * vec4 (aVertexPosition, 1.0);\n}",
|
||||
this.context.VERTEX_SHADER);if(null===b||null===c)return!1;this.shader=this.context.createProgram();this.context.attachShader(this.shader,c);this.context.attachShader(this.shader,b);this.context.linkProgram(this.shader);if(!this.context.getProgramParameter(this.shader,this.context.LINK_STATUS))return!1;this.context.useProgram(this.shader);this.shader.vertexPositionAttribute=this.context.getAttribLocation(this.shader,"aVertexPosition");this.context.enableVertexAttribArray(this.shader.vertexPositionAttribute);
|
||||
this.shader.vertexColorAttribute=this.context.getAttribLocation(this.shader,"aVertexColor");this.context.enableVertexAttribArray(this.shader.vertexColorAttribute);this.shader.pMatrixUniform=this.context.getUniformLocation(this.shader,"uProjectionMatrix");this.shader.vMatrixUniform=this.context.getUniformLocation(this.shader,"uViewMatrix");this.shader.pointSizeUniform=this.context.getUniformLocation(this.shader,"uPointSize");return!0};
|
||||
@ -469,20 +469,20 @@ JSM.Navigation.prototype.OnMouseDown=function(a){a.preventDefault();this.mouse.D
|
||||
JSM.Navigation.prototype.OnMouseUp=function(a){a.preventDefault();this.mouse.Up(a,this.canvas)};JSM.Navigation.prototype.OnMouseOut=function(a){a.preventDefault();this.mouse.Out(a,this.canvas)};JSM.Navigation.prototype.OnMouseWheel=function(a){a.preventDefault();if(this.cameraEnableZoom){null===a&&(a=window.event);var b=0;a.detail?b=-a.detail:a.wheelDelta&&(b=a.wheelDelta/40);this.Zoom(0<b);this.DrawCallback()}};
|
||||
JSM.Navigation.prototype.OnTouchStart=function(a){a.preventDefault();this.touch.Start(a,this.canvas)};JSM.Navigation.prototype.OnTouchMove=function(a){a.preventDefault();this.touch.Move(a,this.canvas);this.touch.down&&this.cameraEnableOrbit&&(this.Orbit(0.5*this.touch.diffX,0.5*this.touch.diffY),this.DrawCallback())};JSM.Navigation.prototype.OnTouchEnd=function(a){a.preventDefault();this.touch.End(a,this.canvas)};JSM.Navigation.prototype.OnContextMenu=function(a){a.preventDefault()};
|
||||
JSM.Navigation.prototype.OnResize=function(a){a.preventDefault();this.ResizeCallback()};JSM.SoftwareViewer=function(){this.navigation=this.drawMode=this.drawer=this.bodies=this.camera=this.canvas=null};JSM.SoftwareViewer.prototype.Start=function(a,b){return!this.InitCanvas(a)||!this.InitCamera(b)?!1:!0};
|
||||
JSM.SoftwareViewer.prototype.InitCanvas=function(a){this.bodies=[];this.canvas=document.getElementById(a);if(!this.canvas)return!1;this.canvas instanceof HTMLCanvasElement?this.drawer=new JSM.CanvasDrawer(this.canvas):this.canvas instanceof SVGSVGElement&&(this.drawer=new JSM.SVGDrawer(this.canvas));if(!this.drawer)return!1;this.drawMode="Wireframe";return!0};
|
||||
JSM.SoftwareViewer.prototype.InitCanvas=function(a){this.bodies=[];this.canvas=a;if(!this.canvas)return!1;this.canvas instanceof HTMLCanvasElement?this.drawer=new JSM.CanvasDrawer(this.canvas):this.canvas instanceof SVGSVGElement&&(this.drawer=new JSM.SVGDrawer(this.canvas));if(!this.drawer)return!1;this.drawMode="Wireframe";return!0};
|
||||
JSM.SoftwareViewer.prototype.InitCamera=function(a){this.camera=JSM.ValueOrDefault(a,new JSM.Camera);if(!this.camera)return!1;this.navigation=new JSM.Navigation;return!this.navigation.Init(this.canvas,this.camera,this.Draw.bind(this),this.Resize.bind(this))?!1:!0};JSM.SoftwareViewer.prototype.AddBody=function(a,b){this.bodies.push([a,b])};JSM.SoftwareViewer.prototype.RemoveBodies=function(){this.bodies=[]};
|
||||
JSM.SoftwareViewer.prototype.FitInWindow=function(){var a=this.GetCenter(),b=this.GetBoundingSphereRadius(a);this.navigation.FitInWindow(a,b);this.Draw()};JSM.SoftwareViewer.prototype.GetCenter=function(){var a=this.GetBoundingBox();return JSM.MidCoord(a[0],a[1])};
|
||||
JSM.SoftwareViewer.prototype.GetBoundingBox=function(){var a=new JSM.Coord(JSM.Inf,JSM.Inf,JSM.Inf),b=new JSM.Coord(-JSM.Inf,-JSM.Inf,-JSM.Inf),c,d,e,f;for(c=0;c<this.bodies.length;c++){e=this.bodies[c][0];for(d=0;d<e.VertexCount();d++)f=e.GetVertex(d),a.x=JSM.Minimum(a.x,f.position.x),a.y=JSM.Minimum(a.y,f.position.y),a.z=JSM.Minimum(a.z,f.position.z),b.x=JSM.Maximum(b.x,f.position.x),b.y=JSM.Maximum(b.y,f.position.y),b.z=JSM.Maximum(b.z,f.position.z)}return[a,b]};
|
||||
JSM.SoftwareViewer.prototype.GetBoundingSphereRadius=function(a){if(void 0===a||null===a)a=this.GetCenter();var b=0,c,d,e,f;for(c=0;c<this.bodies.length;c++){e=this.bodies[c][0];for(d=0;d<e.VertexCount();d++)f=e.GetVertex(d),f=JSM.CoordDistance(a,f.position),JSM.IsGreater(f,b)&&(b=f)}return b};JSM.SoftwareViewer.prototype.Resize=function(){this.Draw()};
|
||||
JSM.SoftwareViewer.prototype.Draw=function(){var a,b;this.drawer.Clear();for(a=0;a<this.bodies.length;a++)b=this.bodies[a],JSM.DrawProjectedBody(b[0],b[1],this.camera,this.drawMode,!1,this.drawer);return!0};JSM.SpriteViewer=function(){this.navigation=this.projected=this.points=this.callbacks=this.camera=this.canvas=null};JSM.SpriteViewer.prototype.Start=function(a,b,c){return!this.InitCanvas(a)||!this.InitCamera(b)||!this.InitCallbacks(c)?!1:!0};
|
||||
JSM.SpriteViewer.prototype.InitCanvas=function(a){this.points=[];this.canvas=document.getElementById(a);return!this.canvas?!1:!0};JSM.SpriteViewer.prototype.InitCamera=function(a){this.camera=JSM.ValueOrDefault(a,new JSM.Camera);if(!this.camera)return!1;this.navigation=new JSM.Navigation;return!this.navigation.Init(this.canvas,this.camera,this.Draw.bind(this))?!1:!0};
|
||||
JSM.SpriteViewer.prototype.InitCanvas=function(a){this.points=[];this.canvas=a;return!this.canvas?!1:!0};JSM.SpriteViewer.prototype.InitCamera=function(a){this.camera=JSM.ValueOrDefault(a,new JSM.Camera);if(!this.camera)return!1;this.navigation=new JSM.Navigation;return!this.navigation.Init(this.canvas,this.camera,this.Draw.bind(this))?!1:!0};
|
||||
JSM.SpriteViewer.prototype.InitCallbacks=function(a){this.callbacks={onPointDraw:null};void 0!==a&&(void 0!==a.onDrawStart&&(this.callbacks.onDrawStart=a.onDrawStart),void 0!==a.onPointDraw&&(this.callbacks.onPointDraw=a.onPointDraw),void 0!==a.onDrawEnd&&(this.callbacks.onDrawEnd=a.onDrawEnd));return!0};JSM.SpriteViewer.prototype.AddPoint=function(a){this.points.push(a)};JSM.SpriteViewer.prototype.RemovePoints=function(){this.points=[]};JSM.SpriteViewer.prototype.Resize=function(){this.Draw()};
|
||||
JSM.SpriteViewer.prototype.NearestPointUnderPosition=function(a,b,c){b=new JSM.Coord2D(b,c);c=-1;var d=JSM.Inf,e,f,g;for(e=0;e<this.projected.length;e++)f=this.projected[e],g=JSM.CoordDistance2D(new JSM.Coord2D(f.position.x,f.position.y),b),JSM.IsLower(g,a)&&JSM.IsLower(g,d)&&(c=f.originalIndex,d=g);return c};JSM.SpriteViewer.prototype.NearestPointUnderMouse=function(a){return this.NearestPointUnderPosition(a,this.navigation.mouse.currX,this.navigation.mouse.currY)};
|
||||
JSM.SpriteViewer.prototype.NearestPointUnderTouch=function(a){return this.NearestPointUnderPosition(a,this.navigation.touch.currX,this.navigation.touch.currY)};JSM.SpriteViewer.prototype.FitInWindow=function(){var a=this.GetCenter(),b=this.GetBoundingSphereRadius(a);this.navigation.FitInWindow(a,b);this.Draw()};JSM.SpriteViewer.prototype.GetCenter=function(){var a=this.GetBoundingBox();return JSM.MidCoord(a[0],a[1])};
|
||||
JSM.SpriteViewer.prototype.GetBoundingBox=function(){var a=new JSM.Coord(JSM.Inf,JSM.Inf,JSM.Inf),b=new JSM.Coord(-JSM.Inf,-JSM.Inf,-JSM.Inf),c,d;for(c=0;c<this.points.length;c++)d=this.points[c],a.x=JSM.Minimum(a.x,d.x),a.y=JSM.Minimum(a.y,d.y),a.z=JSM.Minimum(a.z,d.z),b.x=JSM.Maximum(b.x,d.x),b.y=JSM.Maximum(b.y,d.y),b.z=JSM.Maximum(b.z,d.z);return[a,b]};
|
||||
JSM.SpriteViewer.prototype.GetBoundingSphereRadius=function(a){if(void 0===a||null===a)a=this.GetCenter();var b=0,c,d;for(c=0;c<this.points.length;c++)d=this.points[c],d=JSM.CoordDistance(a,d),JSM.IsGreater(d,b)&&(b=d);return b};
|
||||
JSM.SpriteViewer.prototype.Draw=function(){if(null!==this.callbacks.onDrawStart)this.callbacks.onDrawStart(this.canvas);var a=this.canvas.width/this.canvas.height,b=[0,0,this.canvas.width,this.canvas.height];this.projected=[];var c,d;for(c=0;c<this.points.length;c++)d=this.points[c],d=JSM.Project(d,this.camera.eye,this.camera.center,this.camera.up,this.camera.fieldOfView*JSM.DegRad,a,this.camera.nearClippingPlane,this.camera.farClippingPlane,b),d.y=this.canvas.height-d.y,null!==d&&this.projected.push({position:d,
|
||||
originalIndex:c});this.projected.sort(function(a,b){return a.position.z>b.position.z?-1:a.position.z<b.position.z?1:0});for(c=0;c<this.projected.length;c++)if(null!==this.callbacks.onPointDraw)this.callbacks.onPointDraw(this.canvas,this.projected[c].originalIndex,this.projected[c].position);if(null!==this.callbacks.onDrawEnd)this.callbacks.onDrawEnd(this.canvas);return!0};JSM.Viewer=function(){this.navigation=this.renderer=this.canvas=null};
|
||||
originalIndex:c});this.projected.sort(function(a,b){return a.position.z>b.position.z?-1:a.position.z<b.position.z?1:0});for(c=0;c<this.projected.length;c++)if(null!==this.callbacks.onPointDraw)this.callbacks.onPointDraw(this.canvas,this.projected[c].originalIndex,this.projected[c].position);if(null!==this.callbacks.onDrawEnd)this.callbacks.onDrawEnd(this.canvas);return!0};JSM.Viewer=function(){this.navigation=this.renderer=null};
|
||||
JSM.Viewer.prototype.Init=function(a,b,c){return!this.InitRenderer(a,b,c)||!this.InitNavigation()?!1:!0};JSM.Viewer.prototype.InitRenderer=function(a,b,c){this.renderer=new JSM.Renderer;return!this.renderer.Init(a,b,c)?!1:!0};JSM.Viewer.prototype.InitNavigation=function(){this.navigation=new JSM.Navigation;return!this.navigation.Init(this.renderer.canvas,this.renderer.camera,this.Draw.bind(this),this.Resize.bind(this))?!1:!0};
|
||||
JSM.Viewer.prototype.SetClearColor=function(a,b,c){this.renderer.SetClearColor(a,b,c);this.Draw()};JSM.Viewer.prototype.AddGeometries=function(a){this.renderer.AddGeometries(a);this.Draw()};JSM.Viewer.prototype.RemoveGeometries=function(){this.renderer.RemoveGeometries();this.Draw()};JSM.Viewer.prototype.FitInWindow=function(){var a=this.GetCenter(),b=this.GetBoundingSphereRadius(a);this.navigation.FitInWindow(a,b);this.Draw()};
|
||||
JSM.Viewer.prototype.GetCenter=function(){var a=this.GetBoundingBox();return JSM.MidCoord(a[0],a[1])};
|
||||
@ -505,7 +505,7 @@ JSM.JSONFileConverter.prototype.Convert=function(a){(new JSM.JSONFileLoader(this
|
||||
JSM.ThreeViewer.prototype.Start=function(a,b){if(!this.IsWebGLEnabled()||!this.InitSettings(b)||!this.InitThree(a)||!this.InitCamera(b)||!this.InitLights())return!1;this.drawLoop=!1;this.enableDraw=!0;this.DrawIfNeeded();return!0};JSM.ThreeViewer.prototype.IsWebGLEnabled=function(){return!window.WebGLRenderingContext||!document.createElement("canvas").getContext("experimental-webgl")?!1:!0};
|
||||
JSM.ThreeViewer.prototype.InitSettings=function(a){this.settings={cameraEyePosition:new JSM.Coord(1,1,1),cameraCenterPosition:new JSM.Coord(0,0,0),cameraUpVector:new JSM.Coord(0,0,1),lightAmbientColor:[0.5,0.5,0.5],lightDiffuseColor:[0.5,0.5,0.5]};void 0!==a&&(void 0!==a.cameraEyePosition&&(this.settings.cameraEyePosition=JSM.CoordFromArray(a.cameraEyePosition)),void 0!==a.cameraCenterPosition&&(this.settings.cameraCenterPosition=JSM.CoordFromArray(a.cameraCenterPosition)),void 0!==a.cameraUpVector&&
|
||||
(this.settings.cameraUpVector=JSM.CoordFromArray(a.cameraUpVector)),void 0!==a.lightAmbientColor&&(this.settings.lightAmbientColor=a.lightAmbientColor),void 0!==a.lightDiffuseColor&&(this.settings.lightDiffuseColor=a.lightDiffuseColor));return!0};
|
||||
JSM.ThreeViewer.prototype.InitThree=function(a){this.canvas=document.getElementById(a);if(!this.canvas||!this.canvas.getContext)return!1;this.scene=new THREE.Scene;if(!this.scene)return!1;this.renderer=new THREE.WebGLRenderer({canvas:this.canvas,antialias:!0});if(!this.renderer)return!1;this.renderer.setClearColor(new THREE.Color(16777215));this.renderer.setSize(this.canvas.width,this.canvas.height);return!0};
|
||||
JSM.ThreeViewer.prototype.InitThree=function(a){this.canvas=a;if(!this.canvas||!this.canvas.getContext)return!1;this.scene=new THREE.Scene;if(!this.scene)return!1;this.renderer=new THREE.WebGLRenderer({canvas:this.canvas,antialias:!0});if(!this.renderer)return!1;this.renderer.setClearColor(new THREE.Color(16777215));this.renderer.setSize(this.canvas.width,this.canvas.height);return!0};
|
||||
JSM.ThreeViewer.prototype.InitCamera=function(a){this.cameraMove=new JSM.Camera(JSM.CoordFromArray(a.cameraEyePosition),JSM.CoordFromArray(a.cameraCenterPosition),JSM.CoordFromArray(a.cameraUpVector),a.fieldOfView,a.nearClippingPlane,a.farClippingPlane);if(!this.cameraMove)return!1;this.navigation=new JSM.Navigation;if(!this.navigation.Init(this.canvas,this.cameraMove,this.DrawIfNeeded.bind(this),this.Resize.bind(this)))return!1;this.camera=new THREE.PerspectiveCamera(this.cameraMove.fieldOfView,
|
||||
this.canvas.width/this.canvas.height,this.cameraMove.nearClippingPlane,this.cameraMove.farClippingPlane);if(!this.camera)return!1;this.scene.add(this.camera);return!0};
|
||||
JSM.ThreeViewer.prototype.InitLights=function(){var a=new THREE.Color,b=new THREE.Color;a.setRGB(this.settings.lightAmbientColor[0],this.settings.lightAmbientColor[1],this.settings.lightAmbientColor[2]);b.setRGB(this.settings.lightDiffuseColor[0],this.settings.lightDiffuseColor[1],this.settings.lightDiffuseColor[2]);this.ambientLight=new THREE.AmbientLight(a.getHex());if(!this.ambientLight)return!1;this.scene.add(this.ambientLight);this.directionalLight=new THREE.DirectionalLight(b.getHex());if(!this.directionalLight)return!1;
|
||||
@ -22,12 +22,19 @@ def ReplaceInFile (filePath, source, dest):
|
||||
file.close ()
|
||||
|
||||
def BuildWebSite (rootFolder, resultFolder):
|
||||
websiteFolder = os.path.join (resultFolder, 'website')
|
||||
shutil.copytree (os.path.join (rootFolder, 'website'), websiteFolder)
|
||||
shutil.copytree (os.path.join (rootFolder, 'frameworks'), os.path.join (websiteFolder, 'frameworks'))
|
||||
indexFilePath = os.path.join (websiteFolder, 'index.html')
|
||||
ReplaceInFile (indexFilePath, '../frameworks/', 'frameworks/')
|
||||
targetFolder = os.path.join (resultFolder, 'website')
|
||||
shutil.copytree (os.path.join (rootFolder, 'website'), targetFolder)
|
||||
shutil.copytree (os.path.join (rootFolder, 'jsmodeler'), os.path.join (targetFolder, 'jsmodeler'))
|
||||
indexFilePath = os.path.join (targetFolder, 'index.html')
|
||||
ReplaceInFile (indexFilePath, '../jsmodeler/', 'jsmodeler/')
|
||||
|
||||
def BuildEmbeddable (rootFolder, resultFolder):
|
||||
targetFolder = os.path.join (resultFolder, 'embeddable')
|
||||
shutil.copytree (os.path.join (rootFolder, 'embeddable'), targetFolder)
|
||||
shutil.copytree (os.path.join (rootFolder, 'jsmodeler'), os.path.join (targetFolder, 'jsmodeler'))
|
||||
indexFilePath = os.path.join (targetFolder, 'index.html')
|
||||
ReplaceInFile (indexFilePath, '../jsmodeler/', 'jsmodeler/')
|
||||
|
||||
def Main ():
|
||||
rootFolder = os.path.abspath ('..')
|
||||
resultFolder = os.path.join (rootFolder, 'build')
|
||||
@ -37,6 +44,9 @@ def Main ():
|
||||
|
||||
PrintInfo ('Building website to folder <' + resultFolder + '>.')
|
||||
BuildWebSite (rootFolder, resultFolder)
|
||||
|
||||
PrintInfo ('Building embeddable example to folder <' + resultFolder + '>.')
|
||||
BuildEmbeddable (rootFolder, resultFolder)
|
||||
return 0
|
||||
|
||||
sys.exit (Main ())
|
||||
|
||||
@ -5,9 +5,6 @@ import re
|
||||
currentPath = os.path.dirname (os.path.abspath (__file__))
|
||||
os.chdir (currentPath)
|
||||
|
||||
configFilePath = 'jshintconfig.json'
|
||||
sourcesFolderName = '../website/include'
|
||||
|
||||
def PrintInfo (message):
|
||||
print ('Info: ' + message)
|
||||
|
||||
@ -15,14 +12,21 @@ def PrintError (error):
|
||||
print ('Error: ' + error)
|
||||
|
||||
def JSHintFolder (folderPath):
|
||||
configFilePath = 'jshintconfig.json'
|
||||
result = os.system ('jshint --config ' + configFilePath + ' ' + folderPath)
|
||||
if result != 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
def Main ():
|
||||
sourcesPath = os.path.abspath (sourcesFolderName)
|
||||
|
||||
sourcesPath = os.path.abspath ('../website/include')
|
||||
PrintInfo ('JSHint folder <' + sourcesPath + '>.')
|
||||
succeeded = JSHintFolder (sourcesPath)
|
||||
if not succeeded:
|
||||
PrintError ('Found JSHint errors.');
|
||||
return 1
|
||||
|
||||
sourcesPath = os.path.abspath ('../embeddable/include')
|
||||
PrintInfo ('JSHint folder <' + sourcesPath + '>.')
|
||||
succeeded = JSHintFolder (sourcesPath)
|
||||
if not succeeded:
|
||||
|
||||
@ -13,7 +13,8 @@ ImporterViewer.prototype.Init = function (canvasName)
|
||||
};
|
||||
|
||||
this.viewer = new JSM.ThreeViewer ();
|
||||
if (!this.viewer.Start (canvasName, viewerSettings)) {
|
||||
var canvas = document.getElementById (canvasName);
|
||||
if (!this.viewer.Start (canvas, viewerSettings)) {
|
||||
return false;
|
||||
}
|
||||
this.viewer.SetClearColor (0xdddddd);
|
||||
|
||||
@ -10,8 +10,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="include/importer.css">
|
||||
<link rel="stylesheet" type="text/css" href="include/floatingdialog.css">
|
||||
|
||||
<script type="text/javascript" src="../frameworks/three.min.js"></script>
|
||||
<script type="text/javascript" src="../frameworks/jsmodeler.js"></script>
|
||||
<script type="text/javascript" src="../jsmodeler/three.min.js"></script>
|
||||
<script type="text/javascript" src="../jsmodeler/jsmodeler.js"></script>
|
||||
|
||||
<script type="text/javascript" src="include/floatingdialog.js"></script>
|
||||
<script type="text/javascript" src="include/importerviewer.js"></script>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user