SaiDAV-StlSaver/herosaver.min.js

2 lines
7.2 KiB
JavaScript
Raw Normal View History

2019-01-14 17:42:57 +01:00
function init(){if(typeof THREE=="undefined"&&typeof require!="undefined")var THREE=require("three");RK.STLExporter=function(){};RK.STLExporter.prototype={constructor:THREE.STLExporter,parse:function(){var vector=new THREE.Vector3;var normalMatrixWorld=new THREE.Matrix3;return function(scenes){console.log(scenes);var output="";output+="solid exported\n";for(var scene_nr in scenes){scenes[scene_nr].traverse(function(object){if(object instanceof RK.Mesh){if(object.visible==false)return;var geometry=object.geometry;var matrixWorld=object.matrixWorld;var skeleton=object.skeleton;var mesh=object;if(geometry instanceof RK.BufferGeometry){var oldgeometry=geometry.clone();geometry=(new RK.Geometry).fromBufferGeometry(geometry);var skinIndex=oldgeometry.getAttribute("skinIndex");var skinWeight=oldgeometry.getAttribute("skinWeight");var morphTarget=oldgeometry.getAttribute("morphTarget0");var mtcount=0;while(typeof morphTarget!=="undefined"){mtcount++;morphTarget=oldgeometry.getAttribute("morphTarget"+mtcount)}if(typeof skinIndex!=="undefined"){geometry.skinIndices=[];geometry.skinWeights=[];geometry.morphTargets=[];for(var j=0;j<mtcount;j++){geometry.morphTargets[j]={};geometry.morphTargets[j].vertices=[]}for(var i=0;i<geometry.vertices.length;i++){geometry.skinIndices.push((new THREE.Vector4).fromBufferAttribute(skinIndex,i));geometry.skinWeights.push((new THREE.Vector4).fromBufferAttribute(skinWeight,i));for(var j=0;j<mtcount;j++){geometry.morphTargets[j].vertices.push((new THREE.Vector3).fromBufferAttribute(oldgeometry.getAttribute("morphTarget"+j)))}}}}if(geometry instanceof RK.Geometry){var vertices=geometry.vertices;var faces=geometry.faces;normalMatrixWorld.getNormalMatrix(matrixWorld);if(typeof faces!="undefined"){for(var i=0,l=faces.length;i<l;i++){var face=faces[i];vector.copy(face.normal).applyMatrix3(normalMatrixWorld).normalize();output+="\tfacet normal "+vector.x+" "+vector.y+" "+vector.z+"\n";output+="\t\touter loop\n";var indices=[face.a,face.b,face.c];for(var j=0;j<3;j++){var vertexIndex=indices[j];if(typeof geometry.skinIndices!=="undefined"&&geometry.skinIndices.length==0){vector.copy(vertices[vertexIndex]).applyMatrix4(matrixWorld);output+="\t\t\tvertex "+vector.x+" "+vector.y+" "+vector.z+"\n"}else{vector.copy(vertices[vertexIndex]);var boneIndices=[geometry.skinIndices[vertexIndex].x,geometry.skinIndices[vertexIndex].y,geometry.skinIndices[vertexIndex].z,geometry.skinIndices[vertexIndex].w];var weights=[geometry.skinWeights[vertexIndex].x,geometry.skinWeights[vertexIndex].y,geometry.skinWeights[vertexIndex].z,geometry.skinWeights[vertexIndex].w];var inverses=[skeleton.boneInverses[boneIndices[0]],skeleton.boneInverses[boneIndices[1]],skeleton.boneInverses[boneIndices[2]],skeleton.boneInverses[boneIndices[3]]];var skinMatrices=[skeleton.bones[boneIndices[0]].matrixWorld,skeleton.bones[boneIndices[1]].matrixWorld,skeleton.bones[boneIndices[2]].matrixWorld,skeleton.bones[boneIndices[3]].matrixWorld];if(geometry.morphTargets!=="undefined"){var morphMatricesX=[];var morphMatricesY=[];var morphMatricesZ=[];var morphMatricesInfluence=[];for(var mt=0;mt<geometry.morphTargets.length;mt++){morphMatricesX[mt]=geometry.morphTargets[mt].vertices[vertexIndex].x;morphMatricesY[mt]=geometry.morphTargets[mt].vertices[vertexIndex].y;morphMatricesZ[mt]=geometry.morphTargets[mt].vertices[vertexIndex].z;morphMatricesInfluence[mt]=mesh.morphTargetInfluences[mt]}}var finalVector=new THREE.Vector4;if(mesh.geometry.morphTargets!=="undefined"){var morphVector=new THREE.Vector4(vector.x,vector.y,vector.z);for(var mt=0;mt<geometry.morphTargets.length;mt++){morphVector.lerp(new THREE.Vector4(morphMatricesX[mt],morphMatricesY[mt],morphMatricesZ[mt],1),morphMatricesInfluence[mt])}}for(var k=0;k<4;k++){var tempVector=new THREE.Vector4(vector.x,vector.y,vector.z);tempVector.multiplyScalar(weights[k]);tempVector.applyMatrix4(inverses[k]).applyMatrix4(skinMatrices[k]);finalVector.add(tempVector)}output+="\t\t\tvertex "+finalVector.x+" "+finalVector.y+" "+finalVector.z+"\n"}}output+="\t\tendloop\n";output+="\tendfacet\n"}}}}})}output+="endsol