UNPKG

@polygonjs/polygonjs

Version:

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

127 lines (115 loc) 4.22 kB
import {Object3D} from 'three'; import {Material} from 'three'; import {BufferGeometry} from 'three'; import {TypedNode} from '../_Base'; import {ObjectByObjectType} from '../../../core/geometry/Constant'; import {CoreGroup} from '../../../core/geometry/Group'; import {ObjectType} from '../../../core/geometry/Constant'; import {NodeContext} from '../../poly/NodeContext'; import {NodeParamsConfig} from '../utils/params/ParamsConfig'; import {FlagsControllerDBO} from '../utils/FlagsController'; import {BaseSopOperation} from '../../operations/sop/_Base'; import {CoreObjectType, ObjectContent} from '../../../core/geometry/ObjectContent'; // class ParamLessNetworkSopParamsConfig extends NodeParamsConfig {} // export class BaseNetworkSopNode<K extends NodeParamsConfig> extends TypedNode<NodeContext.SOP, K> { // static node_context(): NodeContext { // return NodeContext.SOP; // } // // initializeBaseNode() { // // this.children_controller?.init({dependent: false}); // // } // cook() { // this.cookController.end_cook(); // } // } // export class ParamLessBaseNetworkSopNode extends BaseNetworkSopNode<ParamLessNetworkSopParamsConfig> {} /** * * * BaseSopNode is the base class for all nodes that process geometries. This inherits from [TypedNode](/docs/api/TypedNode). * */ export class TypedSopNode<K extends NodeParamsConfig> extends TypedNode<NodeContext.SOP, K> { static override context(): NodeContext { return NodeContext.SOP; } public override readonly flags: FlagsControllerDBO = new FlagsControllerDBO(this); override dataType(): string { return CoreObjectType.THREEJS; } override initializeBaseNode() { this.flags.display.set(false); this.flags.display.onUpdate(() => { if (!this.flags.display.active()) { return; } const parent = this.parent(); if (!(parent && parent.displayNodeController)) { return; } parent.displayNodeController.setDisplayNode(this); }); this.io.outputs.setHasOneOutput(); } // // ALL OBJECTS // // // THREEJS OBJECTS // setCoreGroup(coreGroup: CoreGroup) { this._setContainer(coreGroup /*, MESSAGE.FROM_SET_CORE_GROUP*/); } setObject(object: ObjectContent<CoreObjectType>) { this._setContainerObjects([object] /*, MESSAGE.FROM_SET_OBJECT*/); } setObjects(objects: ObjectContent<CoreObjectType>[]) { this._setContainerObjects(objects /*, MESSAGE.FROM_SET_OBJECTS*/); } setGeometry(geometry: BufferGeometry, type: ObjectType = ObjectType.MESH) { const object = this.createObject(geometry, type); this._setContainerObjects(object ? [object] : [] /*, MESSAGE.FROM_SET_GEOMETRY*/); } setGeometries(geometries: BufferGeometry[], type: ObjectType = ObjectType.MESH) { const objects: Object3D[] = []; for (const geometry of geometries) { const object = this.createObject(geometry, type); if (object) { objects.push(object); } } this._setContainerObjects(objects /*, MESSAGE.FROM_SET_GEOMETRIES*/); } // protected _setContainerAllObjects(objects: Object3D[] /*, message: MESSAGE*/) { // const coreGroup = this.containerController.container().coreContent() || new CoreGroup(); // coreGroup.setAllObjects(objects); // this._setContainer(coreGroup); // } protected _setContainerObjects(objects: ObjectContent<CoreObjectType>[] /*, message: MESSAGE*/) { const coreGroup = this.containerController.container().coreContent() || new CoreGroup(); coreGroup.setAllObjects(objects); this._setContainer(coreGroup); } static createObject<OT extends ObjectType>( geometry: BufferGeometry, type: OT, material?: Material ): ObjectByObjectType[OT] { return BaseSopOperation.createObject(geometry, type, material); } createObject<OT extends ObjectType>( geometry: BufferGeometry, type: OT, material?: Material ): ObjectByObjectType[OT] { return TypedSopNode.createObject(geometry, type, material); } static createIndexIfNone(geometry: BufferGeometry) { BaseSopOperation.createIndexIfNone(geometry); } protected _createIndexIfNone(geometry: BufferGeometry) { TypedSopNode.createIndexIfNone(geometry); } } export type BaseSopNodeType = TypedSopNode<NodeParamsConfig>; export class BaseSopNodeClass extends TypedSopNode<NodeParamsConfig> {}