UNPKG

@polygonjs/polygonjs

Version:

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

45 lines (40 loc) 1.4 kB
import {BaseSopOperation} from './_Base'; import {CoreGroup} from '../../../core/geometry/Group'; import {Vector3, TorusKnotGeometry} from 'three'; import {InputCloneMode} from '../../../engine/poly/InputCloneMode'; import {DefaultOperationParams} from '../../../core/operations/_Base'; interface TorusKnotSopParams extends DefaultOperationParams { radius: number; radiusTube: number; segmentsRadial: number; segmentsTube: number; p: number; q: number; center: Vector3; } export class TorusKnotSopOperation extends BaseSopOperation { static override readonly DEFAULT_PARAMS: TorusKnotSopParams = { radius: 1, radiusTube: 0.25, segmentsRadial: 128, segmentsTube: 8, p: 2, q: 3, center: new Vector3(0, 0, 0), }; static override readonly INPUT_CLONED_STATE = InputCloneMode.FROM_NODE; static override type(): Readonly<'torusKnot'> { return 'torusKnot'; } override 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 TorusKnotGeometry(radius, radiusTube, segmentsRadial, segmentsTube, p, q); geometry.translate(params.center.x, params.center.y, params.center.z); return this.createCoreGroupFromGeometry(geometry); } }