mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-12-25 20:33:50 +01:00
75 lines
1.4 KiB
JavaScript
75 lines
1.4 KiB
JavaScript
|
/**
|
||
|
* @author kovacsv / http://kovacsv.hu/
|
||
|
* @author mrdoob / http://mrdoob.com/
|
||
|
*/
|
||
|
|
||
|
THREE.STLExporter = function () {};
|
||
|
|
||
|
THREE.STLExporter.prototype = {
|
||
|
|
||
|
constructor: THREE.STLExporter,
|
||
|
|
||
|
parse: ( function () {
|
||
|
|
||
|
var vector = new THREE.Vector3();
|
||
|
var normalMatrixWorld = new THREE.Matrix3();
|
||
|
|
||
|
return function ( scene ) {
|
||
|
|
||
|
var output = '';
|
||
|
|
||
|
output += 'solid exported\n';
|
||
|
|
||
|
scene.traverse( function ( object ) {
|
||
|
|
||
|
if ( object instanceof THREE.Mesh ) {
|
||
|
|
||
|
var geometry = object.geometry;
|
||
|
var matrixWorld = object.matrixWorld;
|
||
|
|
||
|
if ( geometry instanceof THREE.Geometry ) {
|
||
|
|
||
|
var vertices = geometry.vertices;
|
||
|
var faces = geometry.faces;
|
||
|
|
||
|
normalMatrixWorld.getNormalMatrix( matrixWorld );
|
||
|
|
||
|
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 ++ ) {
|
||
|
|
||
|
vector.copy( vertices[ indices[ j ] ] ).applyMatrix4( matrixWorld );
|
||
|
|
||
|
output += '\t\t\tvertex ' + vector.x + ' ' + vector.y + ' ' + vector.z + '\n';
|
||
|
|
||
|
}
|
||
|
|
||
|
output += '\t\tendloop\n';
|
||
|
output += '\tendfacet\n';
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
} );
|
||
|
|
||
|
output += 'endsolid exported\n';
|
||
|
|
||
|
return output;
|
||
|
|
||
|
};
|
||
|
|
||
|
}() )
|
||
|
|
||
|
};
|