UNPKG

whs

Version:

Super-fast 3D framework for Web Applications & Games. Based on Three.js

135 lines (124 loc) 2.89 kB
import { Mesh, TorusKnotBufferGeometry, TorusKnotGeometry } from 'three'; import {MeshComponent} from '../../core/MeshComponent'; /** * @class Torusknot * @category components/meshes * @description Torusknot class makes a torusknot figure. It's like a crooked donut, very crooked. * @classDesc * <iframe src="https://threejs.org/docs/scenes/geometry-browser.html#TorusKnotGeometry"></iframe> * @param {Object} [params] - The params. * @extends module:core.MeshComponent * @memberof module:components/meshes * @example <caption>Creating a Torusknot, and adding it to app</caption> * new Torusknot({ * geometry: { * radius:5, * tube: 2 * }, * * material: new THREE.MeshBasicMaterial({ * color: 0xffffff * }), * * pos: { * y: 100 * } * }).addTo(app); */ class Torusknot extends MeshComponent { /** * Default values for parameters * @member {Object} module:components/meshes.Torusknot#defaults * @static * @default <pre> * { * geometry: { * radius: 100, * tube: 40, * radialSegments: 64, * tubularSegments: 8, * p: 2, * q: 3 * } * } * </pre> */ static defaults = { ...MeshComponent.defaults, geometry: { radius: 100, tube: 40, radialSegments: 64, tubularSegments: 8, p: 2, q: 3 } }; /** * Instructions * @member {Object} module:components/meshes.Torusknot#instructions * @static * @default <pre> * { * geometry: [ * 'radius', * 'tube', * 'radialSegments', * 'tubularSegments', * 'p', * 'q' * ] * } * </pre> */ static instructions = { ...MeshComponent.instructions, geometry: [ 'radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q' ] }; constructor(params = {}) { super(params, Torusknot.defaults, Torusknot.instructions); if (params.build) { this.build(params); super.wrap(); } } /** * @method build * @description Build lifecycle creates a mesh using input params. * @param {Object} params Component parameters. * @return {THREE.Mesh} Built mesh * @memberof module:components/meshes.Torusknot */ build(params = this.params) { const {geometry, material} = this.applyBridge({ geometry: this.buildGeometry(params), material: params.material }); return this.applyBridge({mesh: new Mesh(geometry, material)}).mesh; } buildGeometry(params = {}) { const GConstruct = params.buffer ? TorusKnotBufferGeometry : TorusKnotGeometry; return new GConstruct( params.geometry.radius, params.geometry.tube, params.geometry.radialSegments, params.geometry.tubularSegments, params.geometry.p, params.geometry.q ); } } export { Torusknot };