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