UNPKG

@polygonjs/polygonjs

Version:

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

52 lines (50 loc) 2.08 kB
import {BaseSopOperation} from './_Base'; import {CoreGroup} from '../../../core/geometry/Group'; import {InputCloneMode} from '../../../engine/poly/InputCloneMode'; import {DefaultOperationParams} from '../../../core/operations/_Base'; import {AttribClass, ATTRIBUTE_CLASSES} from '../../../core/geometry/Constant'; import {ENTITY_CLASS_FACTORY} from '../../../core/geometry/CoreObjectFactory'; import {filterObjectsFromCoreGroup} from '../../../core/geometry/Mask'; interface AttribRenameSopParams extends DefaultOperationParams { group: string; class: number; oldName: string; newName: string; } const SPLIT_REGEX = /[ ,]+/g; export class AttribRenameSopOperation extends BaseSopOperation { static override readonly DEFAULT_PARAMS: AttribRenameSopParams = { group: '', class: ATTRIBUTE_CLASSES.indexOf(AttribClass.POINT), oldName: '', newName: '', }; static override readonly INPUT_CLONED_STATE = InputCloneMode.FROM_NODE; static override type(): Readonly<'attribRename'> { return 'attribRename'; } override cook(inputCoreGroups: CoreGroup[], params: AttribRenameSopParams) { const coreGroup = inputCoreGroups[0]; const objects = filterObjectsFromCoreGroup(coreGroup, params); const attribClass = ATTRIBUTE_CLASSES[params.class]; const factory = ENTITY_CLASS_FACTORY[attribClass]; const newAttribNames = params.newName.split(SPLIT_REGEX); if (factory) { for (const object of objects) { const entityClass = factory(object); const oldAttribNames = entityClass.attributeNamesMatchingMask(object, params.oldName); const minCount = Math.min(oldAttribNames.length, newAttribNames.length); for (let i = 0; i < minCount; i++) { entityClass.renameAttribute(object, oldAttribNames[i], newAttribNames[i]); } } } else { const oldAttribNames = coreGroup.attributeNamesMatchingMask(params.oldName); const minCount = Math.min(oldAttribNames.length, newAttribNames.length); for (let i = 0; i < minCount; i++) { coreGroup.renameAttribute(oldAttribNames[i], newAttribNames[i]); } } return coreGroup; } }