mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-17 14:04:29 +01:00
53 lines
No EOL
1.5 KiB
JavaScript
53 lines
No EOL
1.5 KiB
JavaScript
import {BoxGeometry, Matrix4, Mesh} from 'three';
|
|
import {IMAGINARY_SURFACE_MATERIAL} from '../../preview/scenePreviewer';
|
|
import CSys from 'math/csys';
|
|
import * as SceneGraph from 'scene/sceneGraph';
|
|
|
|
export default function primitivePreviewer(createThreePrimitiveGeometry, paramsToScales, shift) {
|
|
return function previewer(ctx, initialParams) {
|
|
|
|
let geometry = createThreePrimitiveGeometry();
|
|
let mesh = new Mesh(geometry, IMAGINARY_SURFACE_MATERIAL);
|
|
mesh.matrixAutoUpdate = false;
|
|
SceneGraph.addToGroup(ctx.services.cadScene.workGroup, mesh);
|
|
|
|
let auxMatrix = new Matrix4();
|
|
|
|
function update(params) {
|
|
let mDatum = params.datum && ctx.services.cadRegistry.findDatum(params.datum);
|
|
let cs = mDatum ? mDatum.csys : CSys.ORIGIN;
|
|
let o = cs.origin;
|
|
|
|
let {dx, dy, dz} = paramsToScales(params);
|
|
mesh.matrix.set(
|
|
dx*cs.x.x, dy*cs.y.x, dz*cs.z.x, o.x,
|
|
dx*cs.x.y, dy*cs.y.y, dz*cs.z.y, o.y,
|
|
dx*cs.x.z, dy*cs.y.z, dz*cs.z.z, o.z,
|
|
0, 0, 0, 1
|
|
);
|
|
|
|
if (shift) {
|
|
auxMatrix.set(
|
|
1, 0, 0, shift[0],
|
|
0, 1, 0, shift[1],
|
|
0, 0, 1, shift[2],
|
|
0, 0, 0, 1
|
|
);
|
|
mesh.matrix.multiplyMatrices(mesh.matrix, auxMatrix);
|
|
}
|
|
|
|
mesh.matrixWorldNeedsUpdate = true
|
|
}
|
|
|
|
function dispose() {
|
|
SceneGraph.removeFromGroup(ctx.services.cadScene.workGroup, mesh);
|
|
geometry.dispose();
|
|
}
|
|
|
|
update(initialParams);
|
|
|
|
return {
|
|
update, dispose
|
|
}
|
|
}
|
|
} |