From 028182dd607c8bb723ca14f35f415682688f6b31 Mon Sep 17 00:00:00 2001 From: kovacsv Date: Wed, 19 Dec 2018 18:01:44 +0100 Subject: [PATCH] Add off file support. --- README.md | 1 + jsmodeler/jsmodeler.ext.three.js | 2 +- jsmodeler/jsmodeler.js | 18 +++++++++++------- website/include/importerapp.js | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index a758520..9840d4a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Supported file formats: - 3ds (with textures) - obj, mtl (with textures) - stl (ascii and binary) + - off Website ------- diff --git a/jsmodeler/jsmodeler.ext.three.js b/jsmodeler/jsmodeler.ext.three.js index 7d84647..21975bf 100644 --- a/jsmodeler/jsmodeler.ext.three.js +++ b/jsmodeler/jsmodeler.ext.three.js @@ -20,7 +20,7 @@ JSM.ThreeViewer.prototype.AddMesh=function(a){this.scene.add(a);this.DrawIfNeede JSM.ThreeViewer.prototype.VertexCount=function(){var a=0,b=this;this.scene.traverse(function(e){b.IsRelevantObject(e)&&(a+=e.geometry.vertices.length)});return a};JSM.ThreeViewer.prototype.FaceCount=function(){var a=0;this.scene.traverse(function(b){b instanceof THREE.Mesh&&(a+=b.geometry.faces.length)});return a};JSM.ThreeViewer.prototype.GetMesh=function(a){var b=null,e=0,d;for(d=0;dc;c++)b[c 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;le.length;l++)if(m=a[l].trim(),0!==m.length&&(m=m.split(/\s+/),0!==m.length&&"vertex"==m[0]))if(4>m.length)break;else m=[parseFloat(m[1]),parseFloat(m[2]),parseFloat(m[3])],e.push(m);l+=1;if(3!=e.length)return-1; if(void 0!==b.onFace&&null!==b.onFace)b.onFace(e[0],e[1],e[2],d);return l}return c+1}if(void 0===b||null===b)b={};for(var d=0,e=a.split("\n");db)return!1;a=new JSM.BinaryReader(a,!0);a.Skip(80);a=a.ReadUnsignedInteger32();return b!=50*a+84?!1:!0}; 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=(new JSM.Vector(d[0],d[1],d[2])).Normalize();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=(new JSM.Vector(d[0],d[1],d[2])).Normalize();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.isFile=this.descriptors=null}; +e.AddVertex(c[0],c[1],c[2]);d=(new JSM.Vector(d[0],d[1],d[2])).Normalize();d=e.AddNormal(d.x,d.y,d.z);e.AddTriangle(a,b,c,d,d,d)}});c.Finalize();return JSM.ConvertTriangleModelToJsonData(c)}; +JSM.ReadOffFile=function(a,b){if(void 0===b||null===b)b={};var c={offHeaderFound:!1,infoFound:!1,vertexCount:0,faceCount:0,readVertices:0,readFaces:0},d=a.split("\n"),e,f;for(e=0;e=h+1)){for(var k=[],l=void 0,m=void 0,l=1;lWelcome to Online 3D Viewer!', '
Here you can view your local 3D models online. You have three ways to open a file. Use the open button above to select files, simply drag and drop files to this browser window, or define the url of the files as location hash.
', - '
Supported formats: 3ds, obj, stl.
', + '
Supported formats: 3ds, obj, stl, off.
', '
Powered by Three.js and JSModeler.
', '
', ].join (''); @@ -491,7 +491,7 @@ ImporterApp.prototype.ProcessFiles = function (fileList, isUrl) processorFunc (userFiles, { onError : function () { - myThis.GenerateError ('No readable file found. You can open 3ds, obj and stl files.'); + myThis.GenerateError ('No readable file found. You can open 3ds, obj, stl, and off files.'); myThis.SetReadyForTest (); return; },