UNPKG

@polygonjs/polygonjs

Version:

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

111 lines (104 loc) 3.43 kB
import {Object3D, Material, Matrix4, Box3, Sphere} from 'three'; import {ObjectContent, CoreObjectType, ObjectGeometryMap, objectContentCopyProperties} from '../../ObjectContent'; import {isArray} from '../../../Type'; import {TetGeometry} from './TetGeometry'; import {TetTesselationParams} from './TetCommon'; import {tetToOuterMesh} from './toObject3D/tetToOuterMesh'; import {tetToTetMesh} from './toObject3D/tetToTetMesh'; import {tetToLines} from './toObject3D/tetToLines'; import {tetSharedFacesToLines} from './toObject3D/tetToSharedFacesToLine'; import {tetToPoints} from './toObject3D/tetToPoints'; import {tetToCenter} from './toObject3D/tetToCenter'; import {tetToSphere} from './toObject3D/tetToSphere'; export class TetObject implements ObjectContent<CoreObjectType.TET> { public visible = true; get geometry() { return this._geometry as ObjectGeometryMap[CoreObjectType.TET]; } get type() { return CoreObjectType.TET; } parent = null; children = []; userData = {}; name = ''; castShadow = true; receiveShadow = true; renderOrder = 0; frustumCulled = true; matrixAutoUpdate = false; material: Material | undefined; constructor(private _geometry: TetGeometry) {} setGeometry(geometry: TetGeometry) { this._geometry = geometry; } tetGeometry() { return this.geometry! as TetGeometry; } dispose() {} applyMatrix4(matrix: Matrix4) { this.geometry.applyMatrix4(matrix); } add(...object: ObjectContent<CoreObjectType>[]) {} remove(...object: ObjectContent<CoreObjectType>[]) {} dispatchEvent(event: {type: string}) {} traverse(callback: (object: TetObject) => any) { callback(this); } clone(): TetObject { const geometry = this._geometry.clone(); const clone = new TetObject(geometry); objectContentCopyProperties(this, clone); return clone; } toObject3D(tesselationParams: TetTesselationParams): Object3D | Object3D[] | undefined { const object = TetObject.toObject3D(this, tesselationParams); if (object) { if (isArray(object)) { for (const element of object) { objectContentCopyProperties(this, element); } } else { objectContentCopyProperties(this, object); } } return object; } static toObject3D( tetObject: TetObject, tesselationParams: TetTesselationParams ): Object3D | Object3D[] | undefined { const objects: Object3D[] = []; if (tesselationParams.displayOuterMesh) { objects.push(tetToOuterMesh(tetObject.tetGeometry(), tesselationParams)); } if (tesselationParams.displayTetMesh) { objects.push(tetToTetMesh(tetObject.tetGeometry(), tesselationParams)); } if (tesselationParams.displayLines) { objects.push(tetToLines(tetObject.tetGeometry(), tesselationParams)); } if (tesselationParams.displaySharedFaces) { objects.push(tetSharedFacesToLines(tetObject.tetGeometry(), tesselationParams)); } if (tesselationParams.displayPoints) { objects.push(tetToPoints(tetObject.tetGeometry(), tesselationParams)); } if (tesselationParams.displayCenter) { objects.push(tetToCenter(tetObject.tetGeometry(), tesselationParams)); } if (tesselationParams.displaySphere) { const spheres = tetToSphere(tetObject.tetGeometry(), tesselationParams); if (spheres) { objects.push(spheres); } } return objects; } boundingBox(target: Box3): void { this.geometry.boundingBox(target); } boundingSphere(target: Sphere): void { this.geometry.boundingSphere(target); } }