UNPKG

@polygonjs/polygonjs

Version:

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

66 lines (61 loc) 1.89 kB
import {Object3D} from 'three'; import {NamedFunction2, ObjectNamedFunction0, ObjectNamedFunction1} from './_Base'; import {removeFromParent, addToParent} from '../poly/PolyOnObjectsAddRemoveHooksController'; import {dummyReadRefVal} from './_Param'; import {getOrCreateNodeRef} from '../../core/reactivity/NodeReactivity'; import {NodeContext} from '../poly/NodeContext'; import {BaseSopNodeType} from '../nodes/sop/_Base'; export class getGeometryNodeObjects extends NamedFunction2<[BaseSopNodeType, Object3D[]]> { static override type() { return 'getGeometryNodeObjects'; } public override async = true; async func(node: BaseSopNodeType, objects: Object3D[]): Promise<void> { dummyReadRefVal(getOrCreateNodeRef(node.path()).value); dummyReadRefVal(this.scene.timeController.timeUniform().value); if (node && node.context() == NodeContext.SOP) { const geometryNode = node as BaseSopNodeType; const container = await geometryNode.compute(); const nodeObjects = container.coreContent()?.threejsObjects() || []; objects.length = 0; for (let object of nodeObjects) { objects.push(object); } } } } export class createObject extends ObjectNamedFunction1<[Object3D | undefined]> { static override type() { return 'createObject'; } func(parent: Object3D, child: Object3D | undefined): void { if (child) { addToParent(this.scene, parent, child); } } } export class createObjects extends ObjectNamedFunction1<[Object3D[]]> { static override type() { return 'createObjects'; } func(parent: Object3D, children: Object3D[]): void { for (let child of children) { if (child) { addToParent(this.scene, parent, child); } } } } // // // // // export class objectDelete extends ObjectNamedFunction0 { static override type() { return 'objectDelete'; } func(object3D: Object3D): void { removeFromParent(this.scene, object3D); } }