import { BufferGeometry } from "../core/BufferGeometry.js"; import { Curve } from "../extras/core/Curve.js"; import { Vector3 } from "../math/Vector3.js"; /** * Creates a tube that extrudes along a 3d curve. * @example * ```typescript * class CustomSinCurve extends THREE.Curve { * constructor(scale = 1) { * super(); * this.scale = scale; * } * getPoint(t, optionalTarget = new THREE.Vector3()) { * const tx = t * 3 - 1.5; * const ty = Math.sin(2 * Math.PI * t); * const tz = 0; * return optionalTarget.set(tx, ty, tz).multiplyScalar(this.scale); * } * } * const path = new CustomSinCurve(10); * const geometry = new THREE.TubeGeometry(path, 20, 2, 8, false); * const material = new THREE.MeshBasicMaterial({ * color: 0x00ff00 * }); * const mesh = new THREE.Mesh(geometry, material); * scene.add(mesh); * ``` * @see {@link https://threejs.org/docs/index.html#api/en/geometries/TubeGeometry | Official Documentation} * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/TubeGeometry.js | Source} */ export class TubeGeometry extends BufferGeometry { /** * Create a new instance of {@link TubeGeometry} * @param path A 3D path that inherits from the {@link THREE.Curve | Curve} base class. * Default {@link THREE.QuadraticBezierCurve3 | new THREE.QuadraticBezierCurve3(new Vector3(-1, -1, 0 ), new Vector3(-1, 1, 0), new Vector3(1, 1, 0))}. * @param tubularSegments The number of segments that make up the tube. Expects a `Integer`. Default `64`. * @param radius The radius of the tube. Expects a `Float`. Default `1`. * @param radialSegments The number of segments that make up the cross-section. Expects a `Integer`. Default `8`. * @param closed Is the tube open or closed. Default `false`. */ constructor( path?: Curve, tubularSegments?: number, radius?: number, radialSegments?: number, closed?: boolean, ); /** * A Read-only _string_ to check if `this` object type. * @remarks Sub-classes will update this value. * @defaultValue `TubeGeometry` */ override readonly type: string | "TubeGeometry"; /** * An object with a property for each of the constructor parameters. * @remarks Any modification after instantiation does not change the geometry. */ readonly parameters: { readonly path: Curve; readonly tubularSegments: number; readonly radius: number; readonly radialSegments: number; readonly closed: boolean; }; /** * An array of {@link THREE.Vector3 | Vector3} tangents */ tangents: Vector3[]; /** * An array of {@link THREE.Vector3 | Vector3} normals */ normals: Vector3[]; /** * An array of {@link THREE.Vector3 | Vector3} binormals */ binormals: Vector3[]; /** @internal */ static fromJSON(data: {}): TubeGeometry; }