@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
42 lines (41 loc) • 1.44 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { InputCloneMode } from "../../../engine/poly/InputCloneMode";
import { isBooleanTrue } from "../../../core/Type";
export class SetChildrenSopOperation extends BaseSopOperation {
static type() {
return "setChildren";
}
cook(inputCoreGroups, params) {
var _a;
const parentCoreGroup = inputCoreGroups[0];
const childrenCoreGroup = inputCoreGroups[1];
if (!childrenCoreGroup) {
(_a = this.states) == null ? void 0 : _a.error.set("input 1 is invalid");
return this.createCoreGroupFromObjects([]);
}
const parentObjects = parentCoreGroup.threejsObjects();
const childrenObjects = childrenCoreGroup.threejsObjects();
let i = 0;
if (isBooleanTrue(params.clearExistingChildren)) {
for (const parentObject of parentObjects) {
let child;
while (child = parentObject.children[0]) {
parentObject.remove(child);
}
}
}
for (const childObject of childrenObjects) {
const parentObject = parentObjects[i] || parentObjects[parentObjects.length - 1];
if (childObject) {
parentObject.add(childObject);
}
i++;
}
return this.createCoreGroupFromObjects(parentObjects);
}
}
SetChildrenSopOperation.DEFAULT_PARAMS = {
clearExistingChildren: true
};
SetChildrenSopOperation.INPUT_CLONED_STATE = [InputCloneMode.FROM_NODE, InputCloneMode.FROM_NODE];