UNPKG

@polygonjs/polygonjs

Version:

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

55 lines (54 loc) 1.76 kB
"use strict"; import { CoreGroup } from "../../../core/geometry/Group"; import { BaseOperation } from "../_Base"; import { NodeContext } from "../../../engine/poly/NodeContext"; import { ObjectType, objectConstructorByObjectType, DEFAULT_MATERIALS } from "../../../core/geometry/Constant"; import { CoreGeometryIndexBuilder } from "../../../core/geometry/util/IndexBuilder"; export class BaseSopOperation extends BaseOperation { static context() { return NodeContext.SOP; } cook(inputCoreGroups, params) { } // // // UTILS // // createCoreGroupFromObjects(objects) { const coreGroup = new CoreGroup(); coreGroup.setAllObjects(objects); return coreGroup; } createCoreGroupFromGeometry(geometry, type = ObjectType.MESH) { const object = BaseSopOperation.createObject(geometry, type); return this.createCoreGroupFromObjects(object ? [object] : []); } createObject(geometry, type, material) { return BaseSopOperation.createObject(geometry, type, material); } static createObject(geometry, type, material) { this.createIndexIfNone(geometry); const objectConstructor = objectConstructorByObjectType(type) || objectConstructorByObjectType(ObjectType.MESH); material = material || DEFAULT_MATERIALS[type]; const object = new objectConstructor(geometry, material); this.applyObjectDefault(object); return object; } static applyObjectDefault(object) { object.castShadow = true; object.receiveShadow = true; object.frustumCulled = false; object.matrixAutoUpdate = false; } createIndexIfNone(geometry) { BaseSopOperation.createIndexIfNone(geometry); } static createIndexIfNone(geometry) { CoreGeometryIndexBuilder.createIndexIfNone(geometry); } }