import { Vector3, Object3D, Vector2, Euler, Quaternion, Color, Camera } from "three"; type ParseEventObj = { userData: Object|String callback: Function; tag: String; priority: Number; } type Number2 = [Number, Number]; type Number3 = [Number, Number, Number]; type XYObject = { x: Number; y: Number; }; type XYZObject = { x: Number; y: Number; z: Number; }; type EulerLike = { x: Number; y: Number; z: Number; order: 'XYZ'|'YZX'|'ZXY'|'XZY'|'YXZ'|'ZYX'; }; type PositionRotationScale = { position: Vector3; rotation: EulerLike; scale: Vector3 } export const R3DTools: { isArray(val: any): Boolean; isObject(val: any): Boolean; isString(val: any): Boolean; isNumber(val: any): Boolean; isFunction(val: any): Boolean; isRegExp(val: any): Boolean; isArguments(val: any): Boolean; isArrayLike(val: any): Boolean; isBoolean(val: any): Boolean; isFloat(val: any): Boolean; isDom(val: any): Boolean; isNull(val: any): Boolean; isNil(val: any): Boolean; isUndefined(val: any): Boolean; isBlank(val: any): Boolean; isEmpty(val: any): Boolean; isEmptyObj(val: any): Boolean; isEmptyArray(val: any): Boolean; isEqual(valA: any, valB: any): Boolean; canUseDom: Boolean; merge(target: Object, source: Object, overwrite: Boolean): Object; hasSameProperties(o1: Object, o2: Object): Boolean; parseValue(o: any, defaultValue: any): any; uglifyUrl(url: String): String; /** * 转化为 flat Tree 数据,当没有 children 或者 children 为空时,则不设置 children * [key, title, children, object] * @param {Object} source { key, title, childrenKey } * @param {Object} options 配置参数 * @param {Array} excludeTypes 需要排除的 types 项 如: ['Camera', 'Scene', 'Light'] `excludeTypes.includes(source.type) 则无需划归到tree中` */ toFlatTreeData(source: Object, options?: Object, excludeTypes: String[]): Array; /** * 转化为 Tree 数据,当没有 children 或者 children 为空时,则不设置 children * [key, title, children, object] * @param source * @param options 配置参数 * @param excludeTypes 需要排除的 types 项 如: ['Camera', 'Scene', 'Light'] `excludeTypes.includes(source.type) 则无需划归到tree中` */ toTreeData(source: Object, options?: Object, excludeTypes: String[]): Objet; isScene(args: Object): Boolean; log(...args: any[]): void; trimLeft(str: String, targetStr: String): String; trimRight(str: String, targetStr: String): String; trimBoth(str: String, targetStr: String): String; toLowerCase(str: String): String; transEventType(type: String): String; sorting(key: String): Function; confirmURL(url: String): String; callFunction(cb: Function, object: Object, ev: Event): any; parseArrayArgument(names: String | String[], params: Object, argName: String): any[]; parseEvent(userData: Object|String, callback: Function, tag: String, priority: Number): ParseEventObj; getArrayArgumentValue(params: Object, name: String, datas: any[], index: Number): void; /** * 获取在世界坐标系下的前方朝向 * @param obj */ getObjForward(obj: Object3D): Vector3; /** * 获取在世界坐标系下的上方朝向 * @param obj */ getObjUp(obj: Object3D): Vector3; parseOffset(offset = 0): Number2; parseNumber3(value: Number3 | Vector3 | XYZObject | String, defaultValue: Number3): Number3; parseVector2(value: Vector2|Number2|XYObject|String, defaultValue: Vector2): Vector2; parseVector3(value: Vector3|Number3|XYZObject|String, defaultValue: Vector3): Vector3; /** * 针对 Scale 解析数据,唯一不同在于只设置一项时,其余项需要设置为1 * @param value * @param defaultValue * @example { y: 3 } -> new THREE.Vector3(1, 3, 1); */ parseScale3(value: Vector3|Number3|XYZObject|String, defaultValue: Vector3): Vector3; parseEuler(value: Euler|EulerLike): Euler; parseQuaternion(value: any): Quaternion; parseAngles(value: Quaternion|Euler): any[]; parseColor(value: any, defaultValue: any): Color; parseSize(param: Object|Number|Array): Number2; vectorToStr(vetcor: Vector3): String; coordToStr(vetcor: Vector2): String; formatVector3(vector: Vector3, num = 4): XYZObject; /** * 获取 model 名称 * @param modelPath * @example * getModelName('aaa.jpg'); // aaa * getModelName('1/2/aaa.jpg'); // aaa * getModelName('/aaa.jpg'); // aaa * getModelName('//bb\\aa\\/\a\\//aaa.jpg'); // aaa * getModelName('mmm'); // mmm * getModelName('.mmm'); // '' */ getModelName(modelPath: String): String; /** * 从自身的坐标系坐标位置转换成世界坐标位置 * @param obj * @param localPos */ selfToWorld(obj: Object3D, localPos: Number3|Vector3): Number3; toMatrixElementsArray(matrix: Object): Object; elementsArrayToMatrix(matrix: Object, elements: Object): void; getBoxCenterSize(object: Object3D): Object; /** * 判断两个数相等 (约等于) * @param v1 * @param v2 */ aboutEqual(v1: Number, v2: Number): Boolean; getLength(points: Array): Number; setUniqueName(obj3d: Object3D, name: String): void; /** * 扩展对象属性 * @param obj 目标对象 * @param prop 属性集合 */ extendAttr(obj: Object, prop: Object): void; /** * 是否在视野, 判断对象是否在可视区内 * @param camera * @param vector3 */ isInview(camera: Camera, vector3: Vector3): Boolean; isEventKey(event: Event, keyCode: Number): Boolean; /** * 设置 position、rotation、scale * @param options { position, rotation, scale } * @param tarObj */ setPositionRotationScale(options: PositionRotationScale, tarObj: Object3D): void; }