@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
105 lines (104 loc) • 3.4 kB
JavaScript
;
import { isArray } from "../../../Type";
import {
registerFactoryFunctions
} from "../../CoreObjectFactory";
import { TetCoreObject } from "./TetCoreObject";
import { isTetObject } from "./TetCoreType";
import { TetPoint } from "./TetPoint";
import { TetVertex } from "./TetVertex";
import { TetPrimitive } from "./TetPrimitive";
const TET_TESSELATION_PARAMS = {
scale: 1,
displayOuterMesh: true,
displayTetMesh: false,
displayLines: false,
displaySharedFaces: false,
displayPoints: false,
displayCenter: false,
displaySphere: false
};
function updateTetTesselationParams(params) {
TET_TESSELATION_PARAMS.scale = params.TetScale;
TET_TESSELATION_PARAMS.displayOuterMesh = params.TetDisplayOuterMesh;
TET_TESSELATION_PARAMS.displayTetMesh = params.TetDisplayTetMesh;
TET_TESSELATION_PARAMS.displayLines = params.TetDisplayLines;
TET_TESSELATION_PARAMS.displaySharedFaces = params.TetDisplaySharedFaces;
TET_TESSELATION_PARAMS.displayCenter = params.TetDisplayCenter;
TET_TESSELATION_PARAMS.displayPoints = params.TetDisplayPoints;
TET_TESSELATION_PARAMS.displayCenter = params.TetDisplayCenter;
TET_TESSELATION_PARAMS.displaySphere = params.TetDisplaySphere;
}
const onAddSpecializedChildren = (displayNode, coreGroup, newObjects, params) => {
let newObjectsAreDifferent = false;
const newTetObjects = coreGroup.tetObjects();
if (newTetObjects && newTetObjects.length != 0) {
updateTetTesselationParams(params);
for (const tetObject of newTetObjects) {
const newObject3D = tetObject.toObject3D(TET_TESSELATION_PARAMS);
if (newObject3D) {
newObjectsAreDifferent = true;
if (isArray(newObject3D)) {
newObjects.push(...newObject3D);
} else {
newObjects.push(newObject3D);
}
}
}
}
return newObjectsAreDifferent;
};
export function onTetModuleRegister(poly) {
const pointClassFactory = (object) => {
if (isTetObject(object)) {
return TetPoint;
}
};
const pointInstanceFactory = (object, index = 0) => {
if (isTetObject(object)) {
return new TetPoint(object, index);
}
};
const vertexClassFactory = (object) => {
if (isTetObject(object)) {
return TetVertex;
}
};
const vertexInstanceFactory = (object, index = 0) => {
if (isTetObject(object)) {
return new TetVertex(object, index);
}
};
const primitiveClassFactory = (object) => {
if (isTetObject(object)) {
return TetPrimitive;
}
};
const primitiveInstanceFactory = (object, index = 0) => {
if (isTetObject(object)) {
return new TetPrimitive(object, index);
}
};
const objectClassFactory = (object) => {
if (isTetObject(object)) {
return TetCoreObject;
}
};
const objectInstanceFactory = (object, index = 0) => {
if (isTetObject(object)) {
return new TetCoreObject(object, index);
}
};
const factoryFunctions = {
pointClass: pointClassFactory,
pointInstance: pointInstanceFactory,
vertexClass: vertexClassFactory,
vertexInstance: vertexInstanceFactory,
primitiveClass: primitiveClassFactory,
primitiveInstance: primitiveInstanceFactory,
objectClass: objectClassFactory,
objectInstance: objectInstanceFactory
};
registerFactoryFunctions(factoryFunctions);
poly.specializedChildren.registerHook("TET", onAddSpecializedChildren);
}