UNPKG

@polygonjs/polygonjs

Version:

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

105 lines (104 loc) 3.4 kB
"use strict"; 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); }