@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
161 lines (160 loc) • 4.52 kB
JavaScript
"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
);
}
}