@three3d/tools
Version:
@three3d/tools 提供了 ThreeJS 常用的工具库
175 lines • 4.52 kB
TypeScript
import { Vector3, CurvePath, LineCurve3, LineCurve, Line3 } from "three";
import type { Vector, BufferAttribute, InterleavedBufferAttribute, Vector2 } from "three";
/**
* 获取每个点对应的长度
* @param positionAttribute
* @returns
*/
export declare function getLengthsOfPositionAttribute(positionAttribute: BufferAttribute | InterleavedBufferAttribute): {
lengths: number[];
length: number;
};
/**
* 获取每个点对应的长度
* @param points
* @returns
*/
export declare function getLengthsOfPoints(points: Vector3[]): {
lengths: number[];
length: number;
};
/**
* 获取折线的信息
* @param points
* @returns
*/
export declare function getLinesInfo(points: Vector3[]): {
lines: Line3[];
lengths: number[];
length: number;
};
/**
* 通过顶点列表创建其所围成的折线的线段列表
* @param points
* @returns
*/
export declare function createLines(points: Vector3[]): Line3[];
/**
* 获取点的投影线
* @remarks
* 投影线是点在线段上的垂足落在线段内的线
*
* @param point
* @param lines
* @returns
*/
export declare function getProjectionLines(point: Vector3, lines: Line3[]): {
lines: Line3[];
indexs: number[];
};
/**
* 点与一组线之间的最近信息
*/
export interface ClosestDistanceInfoOfPointToLines {
/**
* 最近的线
*/
line: Line3;
/**
* 最近线的索引
*/
index: number;
/**
* 最近的线段距离
*/
clampDist: number;
/**
* 距离最近的线段上的点
*/
clampPoint: Vector3;
/**
* 最近的点在其所在线上的 t 值
*/
t: number;
/**
* 线段上最近的点在其所在线段上的 t 的值
*/
clampT: number;
}
/**
* 获取最近的点相关的信息
* @param point
* @param lines
* @returns
*/
export declare function getClosestDistanceInfoOfPointToLines(point: Vector3, lines: Line3[]): ClosestDistanceInfoOfPointToLines;
export interface DistanceInfoOfPointToLines {
/**
* 根据点与线的距离进行排序后的索引
*/
distSortIndexs: number[];
/**
* 点到各个线段的距离
*/
clampDists: number[];
/**
* 点到各个线段上最近的点
*/
clampPoints: Vector3[];
/**
* 点到各个线上最近的点的 t 的值
*/
ts: number[];
/**
* 点到各个线段上最近的点的 t 的值
*/
clampTs: number[];
}
/**
* 获取点到所有线的距离信息
* @param point
* @param lines
* @returns
*/
export declare function getDistanceInfoOfPointToLines(point: Vector3, lines: Line3[]): DistanceInfoOfPointToLines;
/**
* 创建折线曲线
* @param points - 折线的顶点列表
* @returns
*/
export declare function createPolylineCurve<V extends Vector>(points: V[]): CurvePath<V>;
/**
* 2维和3维的LineCurve实例的类型
*/
export type LineCurveInstance<Vec extends Vector3 | Vector2> = Vec extends Vector3 ? LineCurve3 : LineCurve;
/**
* 2维和3维的LineCurve类的类型
*/
export type LineCurveClass<Vec extends Vector3 | Vector2> = Vec extends Vector3 ? typeof LineCurve3 : typeof LineCurve;
/**
* 创建 LineCurve
* @remarks
* 会根据入参自动判断是二维曲线,还是三维曲线
* @param start
* @param end
* @returns
*/
export declare function createLineCurve<Vec extends Vector3 | Vector2>(start: Vec, end: Vec): LineCurveInstance<Vec>;
/**
* 通过顶点列表创建其所围成的折线的线段列表
* @param points
* @returns
*/
export declare function createLineCurves<Vec extends Vector3 | Vector2>(points: Vec[]): LineCurveInstance<Vec>[];
/**
* 通过固定up方向的方式计算折线的的 FrenetFrames
* @remarks
* 最后一个顶点的 tangent,normal,binormal 与前一个顶点的相同
* @param points
* @param up
* @returns
*/
export declare function computePolylineFrenetFramesByFixUp(points: Vector3[], up: Vector3): {
tangents: Vector3[];
normals: Vector3[];
binormals: Vector3[];
lengths: number[];
length: number;
lines: Line3[];
};
/**
* 计算折线的的 FrenetFrames
* @remarks
* 最后一个顶点的 tangent,normal,binormal 与前一个顶点的相同
* @param points
* @param up
* @returns
*/
export declare function computePolylineFrenetFrames(points: Vector3[], up: Vector3): {
tangents: Vector3[];
normals: Vector3[];
binormals: Vector3[];
lengths: number[];
length: number;
};
//# sourceMappingURL=polyline.d.ts.map