@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
53 lines (52 loc) • 1.64 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { Vector3, CylinderGeometry } from "three";
import { rotateGeometry } from "../../../core/Transform";
import { InputCloneMode } from "../../../engine/poly/InputCloneMode";
import { isBooleanTrue } from "../../../core/Type";
const DEFAULT_UP = new Vector3(0, 1, 0);
export class TubeSopOperation extends BaseSopOperation {
static type() {
return "tube";
}
cook(inputCoreGroups, params) {
const radiusTop = params.singleRadius ? params.radius : params.radiusTop;
const radiusBottom = params.singleRadius ? params.radius : params.radiusBottom;
const geometry = isBooleanTrue(params.open) ? new CylinderGeometry(
radiusTop,
radiusBottom,
params.height,
params.segmentsRadial,
params.segmentsHeight,
!isBooleanTrue(params.cap),
params.thetaStart,
params.thetaLength
) : new CylinderGeometry(
radiusTop,
radiusBottom,
params.height,
params.segmentsRadial,
params.segmentsHeight,
!isBooleanTrue(params.cap)
);
rotateGeometry(geometry, DEFAULT_UP, params.direction);
geometry.translate(params.center.x, params.center.y, params.center.z);
return this.createCoreGroupFromGeometry(geometry);
}
}
TubeSopOperation.DEFAULT_PARAMS = {
singleRadius: true,
radius: 1,
radiusTop: 1,
radiusBottom: 1,
height: 1,
segmentsRadial: 12,
segmentsHeight: 1,
cap: true,
center: new Vector3(0, 0, 0),
direction: new Vector3(0, 0, 1),
open: false,
thetaStart: 0,
thetaLength: Math.PI
};
TubeSopOperation.INPUT_CLONED_STATE = InputCloneMode.NEVER;