UNPKG

@polygonjs/polygonjs

Version:

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

53 lines (52 loc) 1.64 kB
"use strict"; 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;