UNPKG

@three3d/tools

Version:

@three3d/tools 提供了 ThreeJS 常用的工具库

236 lines 5.97 kB
import type { Curve, Vector } from "three"; import { Vector3 } from "three"; /** * 获取曲线的累积段长度的列表。 * @param curve - 曲线 * @param divisions - 要将曲线划分为的分段数;默认是 `curve.arcLengthDivisions` * @returns */ export declare function getCurveULengths<T extends Vector>(curve: Curve<T>, divisions?: number): { lengths: number[]; length: number; }; /** * 获取u列表对应的曲线累积长度列表。 * @param curve - 曲线 * @param ts - t 列表 * @param isU - 是否将 ts 列表中的 t 作为 u 来使用 * @returns */ export declare function getLengthsOfTs<T extends Vector>(curve: Curve<T>, ts: number[], isU?: boolean): { lengths: number[]; length: number; }; /** * 采样选项 */ export interface SampleOptions { /** * 采样长度 * @remarks * 多长的弧长长度会生成一个采样点 * * `sampleNum` 和 `sampleLength` 只需要其一;优先使用 `sampleLength` * * @defaultValue 1 */ sampleLength?: number; /** * 采样个数 * @remarks * 生成多少个采样点; * * `sampleNum` 和 `sampleLength` 只需要其一;优先使用 `sampleLength` */ sampleNum?: number; } /** * 获取采样数(整数) * @remarks * 优先使用 `sampleLength` 选项; * @param options - 采样选项 * @param length - 曲线总长度 * @returns */ export declare function getSampleNum(options: SampleOptions, length: number): number; /** * 获取曲线的分段和长度 * @param options * @returns */ export declare function getCurveDivisionLength(options: SampleOptions & { curve: Curve<Vector3>; }): { length: number; division: number; }; export declare enum DirectionSide { /** * 前面 */ back = "back", /** * 后面 */ front = "front" } /** * getCurvePointAwayFrom 的选项 */ export interface GetCurvePointAwayFromOptions<T extends Vector> { /** * 曲线 */ curve: Curve<T>; /** * 距离 * @remarks * 与 fromU 相隔的距离 */ distance: number; /** * 起点 * * @defaultValue 0 */ fromU?: number; /** * 曲线的长度 * @remarks * 用于节约计算,不传时,会自动从 curve 上获取 */ length?: number; /** * 查找的方向 */ side?: DirectionSide; /** * 距离容差 * @remarks * 在容差范围呢视为等距 */ tolerance?: number; } interface GetCurvePointAwayFrom_Result<T extends Vector> { /** * 是否成功找到符合条件的点 */ succeed: boolean; /** * 最后查找到的点的u */ u: number; /** * 最后查找到的点 */ point: T; /** * 最后查找到的点的距离 */ distance: number; } /** * 获取曲线上与指定位置(fromU)相距一定距离的点 * @param options - 选项 * @returns */ export declare function getCurvePointAwayFrom<T extends Vector>(options: GetCurvePointAwayFromOptions<T>): GetCurvePointAwayFrom_Result<T>; /** * getCurvePointAwayFromOrigin 的选项 */ export interface GetCurvePointAwayFromOriginOptions<T extends Vector> extends Omit<GetCurvePointAwayFromOptions<T>, "side"> { origin: T; } export declare function getCurvePointAwayFromOrigin<T extends Vector>(options: GetCurvePointAwayFromOriginOptions<T>): { u: number; point: T; } | null; /** * FrenetFrame列表 * @remarks * 各个列表的长度相等 */ export interface FrenetFrames { /** * 切线列表;为z轴 */ tangents: Vector3[]; /** * 法线列表;作为x轴 */ normals: Vector3[]; /** * 副法线列表;作为y轴 */ binormals: Vector3[]; } export interface FrenetFrameLocations { /** * u或t的列表 */ uts: number[]; /** * 点列表 */ points: Vector3[]; /** * 长度信息 */ lengths: number[]; } export type FrenetFramesInfo = FrenetFrames & FrenetFrameLocations; export type UT_FrenetFrames = FrenetFrames & Pick<FrenetFrameLocations, "uts">; export type UT_Point_FrenetFrames = FrenetFrames & Pick<FrenetFrameLocations, "uts" | "points">; export type Point_Length_FrenetFrames = FrenetFrames & Pick<FrenetFrameLocations, "points" | "lengths">; /** * 通过等分t的方式计算曲线的 FrenetFrames * @param curve * @param division * @param up * @returns */ export declare function computeCurveFrenetFramesByT(curve: Curve<Vector3>, division: number, up: Vector3): UT_Point_FrenetFrames; /** * 通过等分u的方式计算曲线的 FrenetFrames * @param curve * @param division * @param up * @returns */ export declare function computeCurveFrenetFramesByU(curve: Curve<Vector3>, division: number, up: Vector3, closed?: Boolean): UT_Point_FrenetFrames; /** * 通过固定up方向的方式计算曲线的 FrenetFrames * @param curve * @param division * @param up * @param useU - 是否使用分分u的方式; * @returns */ export declare function computeCurveFrenetFramesByFixUp(curve: Curve<Vector3>, division: number, up: Vector3, useU?: boolean): UT_Point_FrenetFrames; export interface ComputeCurveFrenetFramesOptions { /** * 是否使用等分u的方式 */ useU?: boolean; /** * 是否固定 up;保证up不变 */ fixUp?: boolean; /** * 是否墨盒曲线 * @remarks * 只有在 useU 为 true 且 fixUp 为 false 的情况下才有效 * @defaultValue 曲线的 autoClose 属性值 */ closed?: Boolean; } /**计算曲线的 FrenetFrames * @param curve * @param division * @param up * @param options * @returns */ export declare function computeCurveFrenetFrames(curve: Curve<Vector3>, division: number, up: Vector3, options?: ComputeCurveFrenetFramesOptions): UT_Point_FrenetFrames; export {}; //# sourceMappingURL=curve.d.ts.map