UNPKG

@polygonjs/polygonjs

Version:

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

88 lines (87 loc) 2.32 kB
"use strict"; import { CorePrimitive } from "../../entities/primitive/CorePrimitive"; import { primitivesCountFromObject } from "../../entities/primitive/CorePrimitiveUtils"; import { ThreejsVertex } from "./ThreejsVertex"; import { attributeNumericValues } from "../../entities/utils/Common"; import { ThreejsCoreObject } from "./ThreejsCoreObject"; const target = { attributeAdded: false, values: [] }; export class ThreejsPrimitive extends CorePrimitive { constructor(object, index) { super(object, index); this._updateGeometry(); } setIndex(index, object) { this._index = index; if (object) { this._object = object; this._updateGeometry(); } return this; } _updateGeometry() { const geometry = this._object.geometry; if (geometry) { this._geometry = geometry; } } geometry() { return this._geometry; } static addAttribute(object, attribName, attribute) { const attributes = this.attributes(object); if (!attributes) { return; } attributes[attribName] = attribute; } static addNumericAttribute(object, attribName, size = 1, defaultValue = 0) { const primitivesCount = this.entitiesCount(object); target.values = new Array(primitivesCount * size); attributeNumericValues(object, primitivesCountFromObject, size, defaultValue, target); const attribute = { isString: false, array: target.values, itemSize: size }; this.addAttribute(object, attribName, attribute); } static attributes(object) { const geometry = object.geometry; if (!geometry) { return; } if (!geometry.userData.primAttributes) { geometry.userData.primAttributes = {}; } return geometry.userData.primAttributes; } // // // RELATED ENTITIES // // static stride() { return 3; } static relatedVertexIds(object, primitiveIndex, target2) { const geometry = object.geometry; if (!geometry) { target2.length = 0; return; } const stride = this.stride(); target2.length = stride; for (let i = 0; i < stride; i++) { target2[i] = primitiveIndex * stride + i; } } static relatedVertexClass(object) { return ThreejsVertex; } static relatedObjectClass(object) { return ThreejsCoreObject; } }