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