bytev-charts-beta
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
124 lines (105 loc) • 4.38 kB
JavaScript
import "core-js/modules/es.array-buffer.constructor.js";
import "core-js/modules/es.array-buffer.slice.js";
import "core-js/modules/es.object.to-string.js";
import "core-js/modules/es.data-view.js";
console.warn("THREE.STLExporter: As part of the transition to ES6 Modules, the files in 'examples/js' were deprecated in May 2020 (r117) and will be deleted in December 2020 (r124). You can find more information about developing using ES6 Modules in https://threejs.org/docs/#manual/en/introduction/Installation.");
/**
* Usage:
* var exporter = new THREE.STLExporter();
*
* // second argument is a list of options
* var data = exporter.parse( mesh, { binary: true } );
*
*/
THREE.STLExporter = function () {};
THREE.STLExporter.prototype = {
constructor: THREE.STLExporter,
parse: function () {
var vector = new THREE.Vector3();
var normalMatrixWorld = new THREE.Matrix3();
return function parse(scene, options) {
if (options === undefined) options = {};
var binary = options.binary !== undefined ? options.binary : false; //
var objects = [];
var triangles = 0;
scene.traverse(function (object) {
if (object.isMesh) {
var geometry = object.geometry;
if (geometry.isBufferGeometry) {
geometry = new THREE.Geometry().fromBufferGeometry(geometry);
}
if (geometry.isGeometry) {
triangles += geometry.faces.length;
objects.push({
geometry: geometry,
matrixWorld: object.matrixWorld
});
}
}
});
if (binary) {
var offset = 80; // skip header
var bufferLength = triangles * 2 + triangles * 3 * 4 * 4 + 80 + 4;
var arrayBuffer = new ArrayBuffer(bufferLength);
var output = new DataView(arrayBuffer);
output.setUint32(offset, triangles, true);
offset += 4;
for (var i = 0, il = objects.length; i < il; i++) {
var object = objects[i];
var vertices = object.geometry.vertices;
var faces = object.geometry.faces;
var matrixWorld = object.matrixWorld;
normalMatrixWorld.getNormalMatrix(matrixWorld);
for (var j = 0, jl = faces.length; j < jl; j++) {
var face = faces[j];
vector.copy(face.normal).applyMatrix3(normalMatrixWorld).normalize();
output.setFloat32(offset, vector.x, true);
offset += 4; // normal
output.setFloat32(offset, vector.y, true);
offset += 4;
output.setFloat32(offset, vector.z, true);
offset += 4;
var indices = [face.a, face.b, face.c];
for (var k = 0; k < 3; k++) {
vector.copy(vertices[indices[k]]).applyMatrix4(matrixWorld);
output.setFloat32(offset, vector.x, true);
offset += 4; // vertices
output.setFloat32(offset, vector.y, true);
offset += 4;
output.setFloat32(offset, vector.z, true);
offset += 4;
}
output.setUint16(offset, 0, true);
offset += 2; // attribute byte count
}
}
return output;
} else {
var output = '';
output += 'solid exported\n';
for (var i = 0, il = objects.length; i < il; i++) {
var object = objects[i];
var vertices = object.geometry.vertices;
var faces = object.geometry.faces;
var matrixWorld = object.matrixWorld;
normalMatrixWorld.getNormalMatrix(matrixWorld);
for (var j = 0, jl = faces.length; j < jl; j++) {
var face = faces[j];
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 k = 0; k < 3; k++) {
vector.copy(vertices[indices[k]]).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;
}
};
}()
};