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