UNPKG

polygonjs-engine

Version:

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

46 lines (41 loc) 1.42 kB
import {BaseSopOperation} from './_Base'; import {DefaultOperationParams} from '../_Base'; import {CoreGroup} from '../../geometry/Group'; import {TorusKnotBufferGeometry} from 'three/src/geometries/TorusKnotBufferGeometry'; import {Vector3} from 'three/src/math/Vector3'; import {InputCloneMode} from '../../../engine/poly/InputCloneMode'; interface TorusKnotSopParams extends DefaultOperationParams { radius: number; radiusTube: number; segmentsRadial: number; segmentsTube: number; p: number; q: number; center: Vector3; } export class TorusKnotSopOperation extends BaseSopOperation { static readonly DEFAULT_PARAMS: TorusKnotSopParams = { radius: 1, radiusTube: 1, segmentsRadial: 64, segmentsTube: 8, p: 2, q: 3, center: new Vector3(0, 0, 0), }; static readonly INPUT_CLONED_STATE = InputCloneMode.FROM_NODE; static type(): Readonly<'torusKnot'> { return 'torusKnot'; } cook(input_contents: CoreGroup[], params: TorusKnotSopParams) { const radius = params.radius; const radiusTube = params.radiusTube; const segmentsRadial = params.segmentsRadial; const segmentsTube = params.segmentsTube; const p = params.p; const q = params.q; const geometry = new TorusKnotBufferGeometry(radius, radiusTube, segmentsRadial, segmentsTube, p, q); geometry.translate(params.center.x, params.center.y, params.center.z); return this.create_core_group_from_geometry(geometry); } }