UNPKG

@polygonjs/polygonjs

Version:

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

161 lines (160 loc) 4.52 kB
"use strict"; import { AttribClass } from "./Constant"; import { TypeAssert } from "../../engine/poly/Assert"; const _relatedPointIds = []; const _relatedVertexIds = []; const _relatedPrimitiveIds = []; export class CoreEntity { constructor(content, index) { this._index = 0; if (index != null) { this._index = index; } } index() { return this._index; } setIndex(index) { this._index = index; return this; } } export class CoreEntityWithObject extends CoreEntity { constructor(object, index) { super(object, index); this._object = object; } object() { return this._object; } static relatedPrimitiveIds(object, index, target, traversedRelatedEntityData) { target.length = 0; } static relatedVertexIds(object, index, target, traversedRelatedEntityData) { target.length = 0; } static relatedPointIds(object, index, target, traversedRelatedEntityData) { target.length = 0; } relatedPrimitiveIds(target, traversedRelatedEntityData) { this.constructor.relatedPrimitiveIds( this._object, this._index, target, traversedRelatedEntityData ); } relatedVertexIds(target, traversedRelatedEntityData) { this.constructor.relatedVertexIds( this._object, this._index, target, traversedRelatedEntityData ); } relatedPointIds(target, traversedRelatedEntityData) { this.constructor.relatedPointIds( this._object, this._index, target, traversedRelatedEntityData ); } static relatedPointClass(object) { return this.constructor; } static relatedVertexClass(object) { return this.constructor; } static relatedPrimitiveClass(object) { return this.constructor; } static relatedObjectClass(object) { return this.constructor; } static relatedEntityClass(object, entityClass) { switch (entityClass) { case AttribClass.POINT: { return this.relatedPointClass(object); } case AttribClass.VERTEX: { return this.relatedVertexClass(object); } case AttribClass.PRIMITIVE: { return this.relatedPrimitiveClass(object); } case AttribClass.OBJECT: { return this.relatedObjectClass(object); } } TypeAssert.unreachable(entityClass); } // static relatedPoints(object, entityIndex, target, traversedRelatedEntityData) { this.relatedPointIds(object, entityIndex, _relatedPointIds, traversedRelatedEntityData); target.length = _relatedPointIds.length; let i = 0; const entityClass = this.relatedPointClass(object); for (const id of _relatedPointIds) { target[i] = new entityClass(object, id); i++; } } static relatedVertices(object, entityIndex, target, traversedRelatedEntityData) { this.relatedVertexIds(object, entityIndex, _relatedVertexIds, traversedRelatedEntityData); target.length = _relatedVertexIds.length; let i = 0; const entityClass = this.relatedVertexClass(object); for (const id of _relatedVertexIds) { target[i] = new entityClass(object, id); i++; } } static relatedPrimitives(object, entityIndex, target, traversedRelatedEntityData) { this.relatedPrimitiveIds(object, entityIndex, _relatedPrimitiveIds, traversedRelatedEntityData); target.length = _relatedPrimitiveIds.length; let i = 0; const entityClass = this.relatedPrimitiveClass(object); for (const id of _relatedPrimitiveIds) { target[i] = new entityClass(object, id); i++; } } static relatedObjects(object, entityIndex, target, traversedRelatedEntityData) { target.length = 1; const entityClass = this.relatedObjectClass(object); target[0] = new entityClass(object); } relatedPoints(target, traversedRelatedEntityData) { this.constructor.relatedPoints( this._object, this._index, target, traversedRelatedEntityData ); } relatedVertices(target, traversedRelatedEntityData) { this.constructor.relatedVertices( this._object, this._index, target, traversedRelatedEntityData ); } relatedPrimitives(target, traversedRelatedEntityData) { this.constructor.relatedPrimitives( this._object, this._index, target, traversedRelatedEntityData ); } relatedObjects(target, traversedRelatedEntityData) { this.constructor.relatedObjects( this._object, this._index, target, traversedRelatedEntityData ); } }