@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
39 lines (38 loc) • 1.47 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { InputCloneMode } from "../../../engine/poly/InputCloneMode";
import { AttribClass, ATTRIBUTE_CLASSES } from "../../../core/geometry/Constant";
import { ENTITY_CLASS_FACTORY } from "../../../core/geometry/CoreObjectFactory";
import { filterObjectsFromCoreGroup } from "../../../core/geometry/Mask";
export class AttribDeleteSopOperation extends BaseSopOperation {
static type() {
return "attribDelete";
}
cook(inputCoreGroups, params) {
const coreGroup = inputCoreGroups[0];
const objects = filterObjectsFromCoreGroup(coreGroup, params);
const attribClass = ATTRIBUTE_CLASSES[params.class];
const factory = ENTITY_CLASS_FACTORY[attribClass];
if (factory) {
for (const object of objects) {
const entityClass = factory(object);
const attribNames = entityClass.attributeNamesMatchingMask(object, params.name);
for (const attribName of attribNames) {
entityClass.deleteAttribute(object, attribName);
}
}
} else {
const attribNames = coreGroup.attributeNamesMatchingMask(params.name);
for (const attribName of attribNames) {
coreGroup.deleteAttribute(attribName);
}
}
return coreGroup;
}
}
AttribDeleteSopOperation.DEFAULT_PARAMS = {
group: "",
class: ATTRIBUTE_CLASSES.indexOf(AttribClass.POINT),
name: ""
};
AttribDeleteSopOperation.INPUT_CLONED_STATE = InputCloneMode.FROM_NODE;