@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
88 lines (76 loc) • 3.12 kB
text/typescript
// /**
// * 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);
// });
// }
// }