UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

82 lines (71 loc) 3.08 kB
// import {BaseSopOperation} from './_Base'; // import {CoreGroup} from '../../../core/geometry/Group'; // import {DefaultOperationParams} from '../../../core/operations/_Base'; // // import {bunnyMesh} from '../../../core/softBody/Bunny'; // import {Object3D, Mesh} from 'three'; // import {tetrahedralize,TET_CREATION_STAGES} from '../../../core/geometry/modules/tet/utils/tetrahedralize'; // import {ObjectType} from '../../../core/geometry/Constant'; // import {MeshWithBVHGeometry,ThreeMeshBVHHelper} from '../../../core/geometry/bvh/ThreeMeshBVHHelper'; // import {logBlueBg} from '../../../core/logger/Console'; // // import { BufferGeometryWithBVH } from '../../../core/geometry/bvh/three-mesh-bvh'; // // function _makeBunny() { // // const geometry = new BufferGeometry(); // // const pos = new Float32Array(bunnyMesh.verts); // // geometry.setAttribute('position', new BufferAttribute(pos, 3)); // // geometry.setIndex(bunnyMesh.tetSurfaceTriIds); // // geometry.computeVertexNormals(); // // return geometry; // // } // interface TetrahedralizeSopParams extends DefaultOperationParams { // resolution: number; // minQualityExp: number; // // oneFacePerTet: boolean; // // tetScale: number; // stage: number; // subStage: number; // // removeOutsideTets: boolean; // } // export class TetrahedralizeSopOperation extends BaseSopOperation { // static override readonly DEFAULT_PARAMS: TetrahedralizeSopParams = { // resolution: 10, // minQualityExp: -3, // // oneFacePerTet: true, // // tetScale: 0.8, // stage: 0, // subStage: 0, // // removeOutsideTets: false, // }; // static override type(): Readonly<'tetrahedralize'> { // return 'tetrahedralize'; // } // override cook(inputCoreGroups: CoreGroup[], params: TetrahedralizeSopParams) { // const coreGroup = inputCoreGroups[0]; // const objects = coreGroup.threejsObjectsWithGeo() as Mesh[]; // const newObjects: Object3D[] = []; // const stage = TET_CREATION_STAGES[params.stage]; // logBlueBg(`****************** tetrahedralize START (${stage})`); // for (let object of objects) { // // const geometry = _makeBunny(); // // const object = this.createObject(geometry, ObjectType.MESH); // this._tetrahedralize(object ,params) // } // logBlueBg(`****************** tetrahedralize END (${stage})`); // return this.createCoreGroupFromObjects(newObjects); // } // private _tetrahedralize(mesh: Mesh, params: TetrahedralizeSopParams) { // ThreeMeshBVHHelper.assignDefaultBVHIfNone(mesh); // const tetGeometry = tetrahedralize({ // mesh:mesh as MeshWithBVHGeometry, // // resolution: params.resolution, // minQuality: Math.pow(10.0, params.minQualityExp), // // oneFacePerTet: params.oneFacePerTet, // // scale: params.tetScale, // // // stage: TET_CREATION_STAGES[stage], // subStage: params.subStage, // // removeOutsideTets: params.removeOutsideTets, // }); // const objectType = params.stage == 0 ? ObjectType.POINTS : ObjectType.MESH; // newObjects.push(this.createObject(tetGeometry, objectType)); // } // }