UNPKG

@polygonjs/polygonjs

Version:

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

104 lines (103 loc) 3.21 kB
"use strict"; import { arrayPushItems } from "../../../ArrayUtils"; import { stringToIndices } from "../../../String"; import { AttribType } from "../../Constant"; import { corePrimitiveClassFactory, corePrimitiveInstanceFactory } from "../../CoreObjectFactory"; const _indices = []; const _tmpPrimitives = []; export function primitives(coreGroup, target) { const allObjects = coreGroup.allObjects(); target.length = 0; for (const object of allObjects) { primitivesFromObject(object, _tmpPrimitives); arrayPushItems(_tmpPrimitives, target); } return target; } export function primitiveAttribNamesFromCoreGroup(coreGroup) { const firstObject = coreGroup.allObjects()[0]; if (firstObject) { return primitiveAttributeNames(firstObject); } else { return []; } } export function primitiveAttribSizesFromCoreGroup(coreGroup) { const firstObject = coreGroup.allObjects()[0]; if (firstObject) { return primitiveAttributeSizes(firstObject); } else { return {}; } } export function primitiveAttribTypesFromCoreGroup(coreGroup) { const firstObject = coreGroup.allObjects()[0]; if (firstObject) { return primitiveAttributeTypes(firstObject); } else { return {}; } } export function primitivesCountFromObject(object) { const primitiveClass = corePrimitiveClassFactory(object); return primitiveClass.entitiesCount(object); } export function primitivesFromObject(object, target) { const primitiveClass = corePrimitiveClassFactory(object); const primitivesCount = primitiveClass.entitiesCount(object); target.length = primitivesCount; for (let i = 0; i < primitivesCount; i++) { target[i] = corePrimitiveInstanceFactory(object, i); } return target; } export function primitivesFromObjectFromGroup(object, group, target) { if (group) { stringToIndices(group, _indices); primitivesFromObject(object, _tmpPrimitives); target.length = 0; for (const index of _indices) { const primitive = _tmpPrimitives[index]; if (primitive) { target.push(primitive); } } return target; } else { return primitivesFromObject(object, target); } } export function primitiveAttributeNames(object) { const primitiveClass = corePrimitiveClassFactory(object); const attributes = primitiveClass.attributes(object); if (!attributes) { return []; } return Object.keys(attributes); } export function primitiveAttributeSizes(object) { const primitiveClass = corePrimitiveClassFactory(object); const attributes = primitiveClass.attributes(object); if (!attributes) { return {}; } const attribNames = Object.keys(attributes); const h = {}; for (const attribName of attribNames) { h[attribName] = attributes[attribName].itemSize; } return h; } export function primitiveAttributeTypes(object) { const primitiveClass = corePrimitiveClassFactory(object); const attributes = primitiveClass.attributes(object); if (!attributes) { return {}; } const attribNames = Object.keys(attributes); const h = {}; for (const attribName of attribNames) { h[attribName] = attributes[attribName].isString == true ? AttribType.STRING : AttribType.NUMERIC; } return h; }