UNPKG

@polygonjs/polygonjs

Version:

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

128 lines (127 loc) 3.79 kB
"use strict"; import { TypedSopNode } from "./_Base"; import { ShearSopOperation, SHEAR_MODES, ShearMode, SHEAR_CENTER_MODES, ShearCenterMode } from "../../operations/sop/Shear"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { SopType } from "../../poly/registers/nodes/types/Sop"; const DEFAULT = ShearSopOperation.DEFAULT_PARAMS; class ShearSopParamConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param mode */ this.mode = ParamConfig.INTEGER(DEFAULT.mode, { menu: { entries: SHEAR_MODES.map((name, value) => { return { name, value }; }) } }); /** @param matrixMode XY */ this.xy = ParamConfig.FLOAT(DEFAULT.xy, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.MATRIX) } }); /** @param matrixMode XZ */ this.xz = ParamConfig.FLOAT(DEFAULT.xz, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.MATRIX) } }); /** @param matrixMode YX */ this.yx = ParamConfig.FLOAT(DEFAULT.yx, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.MATRIX) } }); /** @param matrixMode YZ */ this.yz = ParamConfig.FLOAT(DEFAULT.yz, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.MATRIX) } }); /** @param matrixMode ZX */ this.zx = ParamConfig.FLOAT(DEFAULT.zx, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.MATRIX) } }); /** @param matrixMode ZY */ this.zy = ParamConfig.FLOAT(DEFAULT.zy, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.MATRIX) } }); /** @param centerMode defines how the center of the shear in axis mode is computed */ this.centerMode = ParamConfig.INTEGER(DEFAULT.centerMode, { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.AXIS) }, menu: { entries: SHEAR_CENTER_MODES.map((name, value) => { return { name, value }; }) } }); /** @param centerOffset */ this.centerOffset = ParamConfig.VECTOR3(DEFAULT.centerOffset.toArray(), { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.AXIS), centerMode: SHEAR_CENTER_MODES.indexOf(ShearCenterMode.BBOX_CENTER_OFFSET) } }); /** @param center */ this.center = ParamConfig.VECTOR3(DEFAULT.center.toArray(), { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.AXIS), centerMode: SHEAR_CENTER_MODES.indexOf(ShearCenterMode.CUSTOM) } }); /** @param PlaneAxis */ this.planeAxis = ParamConfig.VECTOR3(DEFAULT.planeAxis.toArray(), { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.AXIS) } }); /** @param axis */ this.axis = ParamConfig.VECTOR3(DEFAULT.axis.toArray(), { visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.AXIS) } }); /** @param axisAmount */ this.axisAmount = ParamConfig.FLOAT(DEFAULT.axisAmount, { range: [-1, 1], visibleIf: { mode: SHEAR_MODES.indexOf(ShearMode.AXIS) } }); } } const ParamsConfig = new ShearSopParamConfig(); export class ShearSopNode extends TypedSopNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return SopType.SHEAR; } initializeNode() { this.io.inputs.setCount(1); this.io.inputs.initInputsClonedState(ShearSopOperation.INPUT_CLONED_STATE); } setMode(mode) { this.p.mode.set(SHEAR_MODES.indexOf(mode)); } cook(input_contents) { this._operation = this._operation || new ShearSopOperation(this.scene(), this.states, this); const core_group = this._operation.cook(input_contents, this.pv); this.setCoreGroup(core_group); } }