jsketcher/web/app/cad/preview/scenePreviewer.js
2022-08-15 23:47:20 -07:00

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);