UNPKG

@three3d/tools

Version:

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

77 lines 3.39 kB
import { Vector4, Vector3, Vector2 } from "three"; import type { ArrayItemType, IVector, IVector2, IVector3, IVector4 } from "type-tls"; export type { IVector, IVector2, IVector3, IVector4, AxisName, Axis4Name } from "type-tls"; export { Axis, Axis4 } from "type-tls"; /** * 获取 IVector 对应的 Vector 类 * @param vec * @returns */ export declare function getVectorClass<IVec extends IVector>(vec: IVec): [IVectorToVectorClass<IVec>, number]; /** * 向量接口类型转向量类型 */ export type IVectorToVector<V extends IVector> = V extends IVector4 ? Vector4 : (V extends IVector3 ? Vector3 : Vector2); /** * 向量类型转向量接口类型 */ export type VectorToIVector<V extends VectorInstance> = V extends Vector4 ? IVector4 : (V extends Vector3 ? IVector3 : IVector2); /** * IVector 类型转为 Vector 类型 * @param ivector * @returns */ export declare function ivectorToVector<V extends IVector>(ivector: V): IVectorToVector<V>; /** * 如果 V 是 IVector 类型,则转为对应的 Vector 类型,否则,保持不变 */ export type FormatIVectorMemberToVector<V> = V extends IVector4 ? Vector4 : (V extends IVector3 ? Vector3 : (V extends IVector2 ? Vector2 : V)); /** * 将对象所有属性为 IVector 类型的值转为 Vector 类型的值 * 将对象所有属性为 IVector[] 类型的值转为 Vector[] 类型的值 */ export type IVectorMembersToVectors<T> = { [P in keyof T]: ArrayItemType<T[P]> extends never ? FormatIVectorMemberToVector<T[P]> : FormatIVectorMemberToVector<ArrayItemType<T[P]>>[]; }; /** * 如果 V 是 Vector 类型,则转为对应的 IVector 类型,否则,保持不变 */ type FormatVectorMemberToIVector<V> = V extends Vector4 ? IVector4 : (V extends Vector3 ? IVector3 : (V extends Vector2 ? IVector2 : V)); /** * 将对象所有属性为 Vector 类型的值转为 IVector 类型的值 * 将对象所有属性为 Vector[] 类型的值转为 IVector[] 类型的值 */ export type VectorMembersToIVectors<T> = { [P in keyof T]: ArrayItemType<T[P]> extends never ? FormatVectorMemberToIVector<T[P]> : FormatVectorMemberToIVector<ArrayItemType<T[P]>>[]; }; /** * 深度拷贝并转换所有的 IVector 成员及其子成员为 Vector * @remarks * 本函数返回的类型没做递归处理,其实函数会对所有成员及子孙成员进行处理 * * @param target * @param recursive 是否对对象成员的成员进行递归转换 * @param level 递归的层级,从0开始;这个是程序递归时自己传的,用户不需要传递 * @returns */ export declare function ivectorMemberToVector<T>(target: T, recursive?: boolean, level?: number): IVectorMembersToVectors<T>; /** * 向量接口类型转向量类类型 */ export type IVectorToVectorClass<V extends IVector> = V extends IVector4 ? typeof Vector4 : (V extends IVector3 ? typeof Vector3 : typeof Vector2); /** * 向量 * @remarks * 与 Vector 的区别是: * - Vector 只描述的基本的方法,不够全面 */ export type VectorInstance = Vector4 | Vector3 | Vector2; /** * 向量的类类型 */ export type VectorClass = typeof Vector4 | typeof Vector3 | typeof Vector2; /** * 将 VectorClass 类型 转为 Vector 类型 */ export type VectorClassToInstance<VC extends VectorClass> = VC extends typeof Vector4 ? Vector4 : (VC extends typeof Vector3 ? Vector3 : Vector2); //# sourceMappingURL=vector.d.ts.map