mirror of
https://github.com/CNCKitchen/stlTexturizer.git
synced 2026-04-07 22:11:32 +00:00
initial commit
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import * as THREE from 'three';
|
||||
import { STLExporter } from 'three/addons/exporters/STLExporter.js';
|
||||
|
||||
const exporter = new STLExporter();
|
||||
|
||||
/**
|
||||
* Export a BufferGeometry as a binary STL file download.
|
||||
*
|
||||
* @param {THREE.BufferGeometry} geometry
|
||||
* @param {string} [filename]
|
||||
*/
|
||||
export function exportSTL(geometry, filename = 'textured.stl') {
|
||||
// The geometry was rotated -90° around X on load to convert Z-up → Y-up for the viewer.
|
||||
// Undo that rotation before export so the STL lands back in the original Z-up orientation
|
||||
// that 3D-print slicers expect.
|
||||
const exportGeom = geometry.clone();
|
||||
exportGeom.applyMatrix4(new THREE.Matrix4().makeRotationX(Math.PI / 2));
|
||||
|
||||
const mesh = new THREE.Mesh(exportGeom, new THREE.MeshBasicMaterial());
|
||||
const result = exporter.parse(mesh, { binary: true });
|
||||
exportGeom.dispose();
|
||||
|
||||
// result is an ArrayBuffer in binary mode
|
||||
const blob = new Blob([result], { type: 'application/octet-stream' });
|
||||
const url = URL.createObjectURL(blob);
|
||||
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
a.style.display = 'none';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
|
||||
// Revoke after a short delay so the download has time to start
|
||||
setTimeout(() => URL.revokeObjectURL(url), 10000);
|
||||
}
|
||||
Reference in New Issue
Block a user