UNPKG

@polygonjs/polygonjs

Version:

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

101 lines (100 loc) 3.5 kB
"use strict"; import { stringMatchMask } from "../String"; import { coreTypeIsNaN } from "../Type"; import { CorePath } from "./CorePath"; import { coreObjectInstanceFactory } from "./CoreObjectFactory"; export function filterObjectsFromCoreGroup(coreGroup, options, coreObjects) { return filterCoreObjects(options.group, coreObjects || coreGroup.allCoreObjects()).map( (o) => o.object(), options.invert ); } export function filterCoreObjectsFromCoreGroup(coreGroup, options, coreObjects) { return filterCoreObjects(options.group, coreObjects || coreGroup.allCoreObjects()); } export function filterThreejsCoreObjectsFromCoreGroup(coreGroup, options, coreObjects) { return filterCoreObjects(options.group, coreObjects || coreGroup.threejsCoreObjects()); } export function isInGroup(unSanitizedGroupString, coreObject) { const group = unSanitizedGroupString.trim(); if (group.length == 0) { return true; } if (coreObject.object.name == group) { return true; } if (stringMatchMask(coreObject.name(), group)) { return true; } const elements = group.split("="); const attribNameWithPrefix = elements[0]; if (attribNameWithPrefix[0] == "@") { const attribName = attribNameWithPrefix.substring(1); const expectedAttribValue = elements[1]; const currentAttribValue = coreObject.attribValue(attribName); return expectedAttribValue == currentAttribValue; } return false; } function filterCoreObjects(groupString, coreObjects) { groupString = groupString.trim(); if (groupString == "") { return coreObjects; } const index = parseInt(groupString); if (!coreTypeIsNaN(index)) { const coreObject = coreObjects[index]; if (coreObject) { return [coreObject]; } else { return []; } } const selectedCoreObjects = []; for (const rootObject of coreObjects) { let added = false; const object = rootObject.object(); if (object) { const objectsInMask = CorePath.objectsByMask(groupString, object); for (const objectInMask of objectsInMask) { const parent = objectInMask.parent; const index2 = parent ? parent.children.indexOf(objectInMask) : 0; const coreObject = coreObjectInstanceFactory(objectInMask, index2); selectedCoreObjects.push(coreObject); added = true; } const _isInGroup = isInGroup(groupString, rootObject); if (_isInGroup && !added) { selectedCoreObjects.push(rootObject); } } } return selectedCoreObjects; } export function filterThreejsObjects(coreGroup, options) { return filterObjectsFromCoreGroup(coreGroup, options, coreGroup.threejsCoreObjects()); } export function filterThreejsOrQuadObjects(coreGroup, options) { return filterObjectsFromCoreGroup(coreGroup, options, coreGroup.threejsOrQuadCoreObjects()); } export function filterObjectsWithGroup(coreGroup, options) { return filterObjectsFromCoreGroup(coreGroup, { group: options.group }); } export function filterThreejsObjectsWithGroup(coreGroup, options) { return filterThreejsObjects(coreGroup, { group: options.group }); } export function filterThreejsOrQuadObjectsWithGroup(coreGroup, options) { return filterThreejsOrQuadObjects(coreGroup, { group: options.group }); } export class CoreMask { } CoreMask.filterObjects = filterObjectsFromCoreGroup; CoreMask.filterCoreObjects = filterCoreObjectsFromCoreGroup; CoreMask.filterThreejsObjects = filterThreejsObjects; CoreMask.isInGroup = isInGroup;