@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
101 lines (100 loc) • 3.5 kB
JavaScript
;
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;