UNPKG

@polygonjs/polygonjs

Version:

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

52 lines (46 loc) 1.66 kB
import {BaseSopOperation} from './_Base'; import {CoreGroup} from '../../../core/geometry/Group'; import {InputCloneMode} from '../../../engine/poly/InputCloneMode'; import {DefaultOperationParams} from '../../../core/operations/_Base'; import {isInGroup} from '../../../core/geometry/Mask'; import {SopType} from '../../poly/registers/nodes/types/Sop'; import {ObjectContent, CoreObjectType} from '../../../core/geometry/ObjectContent'; interface DeleteByNameSopParams extends DefaultOperationParams { group: string; invert: boolean; } export class DeleteByNameSopOperation extends BaseSopOperation { static override readonly DEFAULT_PARAMS: DeleteByNameSopParams = { group: '', invert: false, }; static override readonly INPUT_CLONED_STATE = InputCloneMode.FROM_NODE; static override type(): Readonly<SopType.DELETE_BY_NAME> { return SopType.DELETE_BY_NAME; } override cook(inputCoreGroups: CoreGroup[], params: DeleteByNameSopParams) { const coreGroup = inputCoreGroups[0]; const coreObjects = coreGroup.allCoreObjects(); const newObjects: ObjectContent<CoreObjectType>[] = []; const masks = params.group.split(' '); for (const coreObject of coreObjects) { let _toDelete = false; for (const mask of masks) { const _inGroup = isInGroup(mask, coreObject); if ((_inGroup && !params.invert) || (!_inGroup && params.invert)) { _toDelete = true; } } // if (params.invert) { // _inAnyGroup = !_inAnyGroup; // } if (!_toDelete) { const object = coreObject.object(); if (object) { newObjects.push(object); } } } return this.createCoreGroupFromObjects(newObjects); } }