UNPKG

@polygonjs/polygonjs

Version:

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

88 lines (76 loc) 3.12 kB
// /** // * TBD // * // * // */ // import {TetSopNode} from './_BaseTet'; // import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; // import {CoreGroup} from '../../../core/geometry/Group'; // import {SopType} from '../../poly/registers/nodes/types/Sop'; // import {Vector3} from 'three'; // import {CoreObject} from '../../../core/geometry/modules/three/ThreejsObject'; // import {TetObject} from '../../../core/geometry/modules/tet/TetObject'; // import {findTetContainingPosition} from '../../../core/geometry/modules/tet/utils/findTetContainingPosition'; // import {TetNeighbourDataWithSource} from '../../../core/geometry/modules/tet/TetCommon'; // import {tetCenter} from '../../../core/geometry/modules/tet/utils/tetCenter'; // const _pos = new Vector3(); // const _rayOrigin = new Vector3(); // const sharedFacesNeighbourData: Set<TetNeighbourDataWithSource> = new Set(); // class TetSplitSopParamsConfig extends NodeParamsConfig { // pointsCount = ParamConfig.INTEGER(-1, { // range: [-1, 100], // rangeLocked: [true, false], // }); // } // const ParamsConfig = new TetSplitSopParamsConfig(); // export class TetSplitSopNode extends TetSopNode<TetSplitSopParamsConfig> { // override paramsConfig = ParamsConfig; // static override type() { // return SopType.TET_SPLIT; // } // protected override initializeNode() { // this.io.inputs.setCount(2); // } // override cook(inputCoreGroups: CoreGroup[]) { // const tetObjects = inputCoreGroups[0].tetObjects() || []; // const threejsObjects = inputCoreGroups[1].threejsObjects(); // let i = 0; // for (const tetObject of tetObjects) { // const threejsObject = threejsObjects[i]; // const points = CoreObject.points(threejsObject); // for (let point of points) { // point.getPosition(_pos); // this._splitTetObject(tetObject, _pos); // } // i++; // } // this.setTetObjects(tetObjects); // } // private _splitTetObject(tetObject: TetObject, position: Vector3) { // const tetGeometry = tetObject.geometry; // console.log('_splitTetObject', position.toArray()); // // 1. find tetrahedron containing the point // const firstId = tetObject.geometry.firstTetId(); // if (firstId == null) { // return; // } // tetCenter(tetGeometry, firstId, _rayOrigin); // console.log({_rayOrigin}); // const tetId = findTetContainingPosition(tetGeometry, position, _rayOrigin, firstId); // console.log({tetId}); // // 2. remove tetrahedron // if (tetId == null) { // return; // } // tetGeometry.removeTets([tetId], sharedFacesNeighbourData); // // 3. replace with new tetrahedrons // const pointId = tetGeometry.addPoint(position.x, position.y, position.z); // sharedFacesNeighbourData.forEach((neighbourDataWithSource) => { // // const pointIndices = TET_FACE_POINT_INDICES[neighbourDataWithSource.faceIndex]; // const id0 = neighbourDataWithSource.pointIds[0]; // const id1 = neighbourDataWithSource.pointIds[1]; // const id2 = neighbourDataWithSource.pointIds[2]; // tetGeometry.addTetrahedron(pointId, id0, id1, id2); // }); // } // }