@three3d/tools
Version:
@three3d/tools 提供了 ThreeJS 常用的工具库
77 lines • 3.39 kB
TypeScript
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