mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-06 16:33:15 +01:00
70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
import * as SceneGraph from 'scene/sceneGraph';
|
|
import {createTransparentPhongMaterial} from 'scene/materials';
|
|
import {createMesh} from 'scene/objects/mesh';
|
|
|
|
|
|
export function createPreviewer(sceneGeometryCreator, services, initialParams) {
|
|
const previewGroup = SceneGraph.createGroup();
|
|
SceneGraph.addToGroup(services.cadScene.workGroup, previewGroup);
|
|
|
|
let previewObject = null;
|
|
function destroyPreviewObject() {
|
|
if (previewObject === null) {
|
|
return;
|
|
}
|
|
previewGroup.remove(previewObject);
|
|
previewObject.geometry.dispose();
|
|
previewObject = null;
|
|
}
|
|
|
|
function update(params) {
|
|
destroyPreviewObject();
|
|
const geometry = sceneGeometryCreator(params, services);
|
|
if (!geometry) {
|
|
services.viewer.requestRender();
|
|
return;
|
|
}
|
|
previewObject = createMesh(geometry, IMAGINARY_SURFACE_MATERIAL);
|
|
previewGroup.add(previewObject);
|
|
}
|
|
|
|
function dispose() {
|
|
destroyPreviewObject();
|
|
SceneGraph.removeFromGroup(services.cadScene.workGroup, previewGroup);
|
|
}
|
|
|
|
update(initialParams);
|
|
return {update, dispose};
|
|
}
|
|
|
|
|
|
//
|
|
// function sketchBasedNurbsPreviewCreator(params) {
|
|
// const face = app.findFace(params.face);
|
|
// if (!face) return null;
|
|
// const needSketchRead = !this.sketch || params.face != this.face;
|
|
// if (needSketchRead) {
|
|
// this.sketch = ReadSketchFromFace(app, face);
|
|
// this.face = params.face;
|
|
// }
|
|
// const nurbses = this.createNurbses(app, params, this.sketch, face);
|
|
// const geom = new THREE.Geometry();
|
|
//
|
|
// for (let nurbs of nurbses) {
|
|
// const off = geom.vertices.length;
|
|
// const tess = nurbs.tessellate({maxDepth: 3});
|
|
// const points = [];
|
|
// tess.points.forEach(p => geom.vertices.push(new THREE.Vector3().fromArray(p)));
|
|
// for (let faceIndices of tess.faces) {
|
|
// let normales = faceIndices.map(function(x) {
|
|
// var vn = tess.normals[x];
|
|
// return new THREE.Vector3( vn[0], vn[1], vn[2] );
|
|
// });
|
|
// const face = new THREE.Face3(faceIndices[0] + off, faceIndices[1] + off, faceIndices[2] + off, normales);
|
|
// geom.faces.push(face);
|
|
// }
|
|
// }
|
|
// return new THREE.Mesh(geom, IMAGINARY_SURFACE_MATERIAL);
|
|
// }
|
|
|
|
export const IMAGINARY_SURFACE_MATERIAL = createTransparentPhongMaterial(0xFA8072, 0.5);
|