UNPKG

@polygonjs/polygonjs

Version:

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

56 lines (51 loc) 1.77 kB
import {Matrix4, Box3, Sphere, Vector3} from 'three'; import {SDFObject} from './SDFObject'; import {BaseCoreObject} from '../../entities/object/BaseCoreObject'; import {CoreObjectType, MergeCompactOptions} from '../../ObjectContent'; import {TransformTargetType} from '../../../Transform'; import {ObjectTransformMode, ObjectTransformSpace} from '../../../TransformSpace'; import {SDFLoaderSync} from './SDFLoaderSync'; import {SDFGeometry} from './SDFCommon'; const _box = new Box3(); export class SDFCoreObject extends BaseCoreObject<CoreObjectType.SDF> { protected override _object: SDFObject; constructor(_object: SDFObject, index: number) { super(_object, index); this._object = _object; } static override position(object: SDFObject, target: Vector3) { object.boundingBox(_box); _box.getCenter(target); } override boundingBox(target: Box3) { this._object.boundingBox(target); } override boundingSphere(target: Sphere) { this._object.boundingSphere(target); } static override applyMatrix( object: SDFObject, matrix: Matrix4, transformTargetType: TransformTargetType, transformSpace: ObjectTransformSpace, transformMode: ObjectTransformMode ) { object.applyMatrix4(matrix); } static override mergeCompact(options: MergeCompactOptions) { const manifold = SDFLoaderSync.manifold(); const {objects, mergedObjects} = options; const sdfObjects = objects as SDFObject[]; let previousGeometry: SDFGeometry | undefined; for (const object of sdfObjects) { if (previousGeometry) { previousGeometry = manifold.Manifold.union(previousGeometry, object.SDFGeometry()); } else { previousGeometry = object.SDFGeometry(); } } if (previousGeometry) { mergedObjects.push(new SDFObject(previousGeometry)); } } }