UNPKG

@polygonjs/polygonjs

Version:

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

101 lines (100 loc) 4.12 kB
"use strict"; import { COMPONENT_NAMES, vectorByAttribSize } from "./Common"; import { AttribType } from "../../../../../core/geometry/Constant"; import { TypeAssert } from "../../../../poly/Assert"; import { CoreMask } from "../../../../../core/geometry/Mask"; import { defaultAttribValue } from "../../../../operations/sop/utils/attribCreate/Common"; export async function addObjectAttributeWithExpression(attribType, coreGroup, params, pv) { const coreObjects = CoreMask.filterCoreObjects(coreGroup, pv, coreGroup.allCoreObjects()); const attribName = pv.name; const allCoreObjects = coreGroup.allCoreObjects(); const defaultValue = defaultAttribValue(pv); if (defaultValue != null) { for (const coreObject of allCoreObjects) { if (!coreObject.hasAttribute(attribName)) { coreObject.setAttribValue(attribName, defaultValue); } } } switch (attribType) { case AttribType.NUMERIC: await _addNumericAttributeToObject(coreObjects, params, pv); return; case AttribType.STRING: await _addStringAttributeToObject(coreObjects, params, pv); return; } TypeAssert.unreachable(attribType); } async function _addNumericAttributeToObject(coreObjects, params, pv) { var _a; const param = [params.value1, params.value2, params.value3, params.value4][pv.size - 1]; const attribName = pv.name; if (param.hasExpression()) { if (pv.size == 1) { if (param.expressionController) { if ((_a = param.expressionController) == null ? void 0 : _a.entitiesDependent()) { await param.expressionController.computeExpressionForObjects(coreObjects, (coreObject, value) => { coreObject.setAttribValue(attribName, value); }); } else { for (const coreObject of coreObjects) { coreObject.setAttribValue(attribName, param.value); } } } } else { const vparam = [params.value2, params.value3, params.value4][pv.size - 2]; const components = vparam.components; const valuesByCoreObjectIndex = /* @__PURE__ */ new Map(); const initVector = vectorByAttribSize(pv.size); if (initVector) { for (const coreObject of coreObjects) { valuesByCoreObjectIndex.set(coreObject.index(), initVector.clone()); } for (let componentIndex = 0; componentIndex < components.length; componentIndex++) { const component_param = components[componentIndex]; const component_name = COMPONENT_NAMES[componentIndex]; if (component_param.hasExpression() && component_param.expressionController && component_param.expressionController.entitiesDependent()) { await component_param.expressionController.computeExpressionForObjects( coreObjects, (coreObject, value) => { const vector = valuesByCoreObjectIndex.get(coreObject.index()); vector[component_name] = value; } ); } else { for (const coreObject of coreObjects) { const vector = valuesByCoreObjectIndex.get(coreObject.index()); vector[component_name] = component_param.value; } } } for (let i = 0; i < coreObjects.length; i++) { const coreObject = coreObjects[i]; const value = valuesByCoreObjectIndex.get(coreObject.index()); if (value != null) { coreObject.setAttribValue(attribName, value); } } } } } else { } } async function _addStringAttributeToObject(coreObjects, params, pv) { const param = params.string; const attribName = pv.name; if (param.hasExpression() && param.expressionController) { if (param.expressionController.entitiesDependent()) { await param.expressionController.computeExpressionForObjects(coreObjects, (coreObject, value) => { coreObject.setAttribValue(attribName, value); }); } else { for (const coreObject of coreObjects) { coreObject.setAttribValue(attribName, param.value); } } } else { } }