@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
55 lines (54 loc) • 1.76 kB
JavaScript
;
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);
}
}