mirror of
https://github.com/Theaninova/Bampy.git
synced 2026-01-06 16:52:48 +00:00
stuff
This commit is contained in:
@@ -101,9 +101,9 @@
|
||||
{@const visible = showSlices >= i / $layers.length}
|
||||
{@const color = new Color(0, i / $layers.length, 0.2)}
|
||||
{#if type === LayerType.Line}
|
||||
<T.LineSegments {geometry} {visible}>
|
||||
<T.Line {geometry} {visible}>
|
||||
<T.LineBasicMaterial {color} />
|
||||
</T.LineSegments>
|
||||
</T.Line>
|
||||
{:else if type === LayerType.Surface}
|
||||
<T.Mesh {geometry} {visible}>
|
||||
<T.MeshMatcapMaterial {color} side={DoubleSide} />
|
||||
|
||||
27
src/lib/slicer/newFile.ts
Normal file
27
src/lib/slicer/newFile.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { BufferGeometry, BufferGeometryLoader, Float32BufferAttribute } from 'three';
|
||||
import { type WorkerEvent } from './worker-data';
|
||||
import init, { slice } from 'bampy';
|
||||
|
||||
addEventListener('message', async (event: MessageEvent<WorkerEvent>) => {
|
||||
if (event.data.type === 'slice') {
|
||||
const geometry = new BufferGeometryLoader().parse(event.data.data.stl);
|
||||
if (geometry.index !== null) {
|
||||
geometry.toNonIndexed();
|
||||
}
|
||||
await init();
|
||||
const result = slice({
|
||||
positions: geometry.attributes.position.array as Float32Array,
|
||||
layerHeight: event.data.data.layerHeight,
|
||||
maxAngle: event.data.data.maxNonPlanarAngle
|
||||
});
|
||||
for (const layer of result.rings) {
|
||||
const geometry = new BufferGeometry();
|
||||
geometry.setAttribute('position', new Float32BufferAttribute(layer, 3));
|
||||
|
||||
self.postMessage({
|
||||
type: 'layer',
|
||||
data: { type: LayerType.Line, geometry: layerGeometry.toJSON() }
|
||||
} satisfies LayerMessage);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1,5 +1,11 @@
|
||||
import { BufferGeometryLoader } from 'three';
|
||||
import { type SliceArguments, type ProgressMessage, type WorkerEvent } from './worker-data';
|
||||
import { BufferGeometry, BufferGeometryLoader, Float32BufferAttribute } from 'three';
|
||||
import {
|
||||
type SliceArguments,
|
||||
type ProgressMessage,
|
||||
type WorkerEvent,
|
||||
type LayerMessage,
|
||||
LayerType
|
||||
} from './worker-data';
|
||||
import init, { slice } from 'bampy';
|
||||
|
||||
addEventListener('message', async (event: MessageEvent<WorkerEvent>) => {
|
||||
@@ -9,11 +15,20 @@ addEventListener('message', async (event: MessageEvent<WorkerEvent>) => {
|
||||
geometry.toNonIndexed();
|
||||
}
|
||||
await init();
|
||||
slice(
|
||||
geometry.attributes.position.array as Float32Array,
|
||||
event.data.data.layerHeight,
|
||||
event.data.data.maxNonPlanarAngle
|
||||
);
|
||||
const result = slice({
|
||||
positions: geometry.attributes.position.array as Float32Array,
|
||||
layerHeight: event.data.data.layerHeight,
|
||||
maxAngle: event.data.data.maxNonPlanarAngle
|
||||
});
|
||||
for (const layer of result.rings) {
|
||||
const geometry = new BufferGeometry();
|
||||
geometry.setAttribute('position', new Float32BufferAttribute(layer, 3));
|
||||
|
||||
self.postMessage({
|
||||
type: 'layer',
|
||||
data: { type: LayerType.Line, geometry: geometry.toJSON() }
|
||||
} satisfies LayerMessage);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user