@takram/three-geospatial 0.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/build/index.cjs +43 -0
- package/build/index.js +932 -0
- package/build/r3f.cjs +1 -0
- package/build/r3f.js +38 -0
- package/build/shared.cjs +1 -0
- package/build/shared.js +198 -0
- package/package.json +42 -0
- package/src/ArrayBufferLoader.ts +35 -0
- package/src/DataLoader.ts +114 -0
- package/src/Ellipsoid.ts +128 -0
- package/src/EllipsoidGeometry.ts +107 -0
- package/src/Geodetic.ts +160 -0
- package/src/PointOfView.ts +169 -0
- package/src/Rectangle.ts +97 -0
- package/src/TileCoordinate.test.ts +38 -0
- package/src/TileCoordinate.ts +112 -0
- package/src/TilingScheme.test.ts +63 -0
- package/src/TilingScheme.ts +76 -0
- package/src/TypedArrayLoader.ts +53 -0
- package/src/assertions.ts +13 -0
- package/src/bufferGeometry.ts +62 -0
- package/src/helpers/projectOnEllipsoidSurface.ts +72 -0
- package/src/index.ts +25 -0
- package/src/math.ts +41 -0
- package/src/r3f/EastNorthUpFrame.tsx +52 -0
- package/src/r3f/EllipsoidMesh.tsx +36 -0
- package/src/r3f/index.ts +2 -0
- package/src/shaders/depth.glsl +15 -0
- package/src/shaders/packing.glsl +20 -0
- package/src/shaders/transform.glsl +12 -0
- package/src/typedArray.ts +76 -0
- package/src/types.ts +54 -0
- package/types/ArrayBufferLoader.d.ts +5 -0
- package/types/DataLoader.d.ts +67 -0
- package/types/Ellipsoid.d.ts +18 -0
- package/types/EllipsoidGeometry.d.ts +13 -0
- package/types/Geodetic.d.ts +37 -0
- package/types/PointOfView.d.ts +20 -0
- package/types/Rectangle.d.ts +27 -0
- package/types/TileCoordinate.d.ts +21 -0
- package/types/TilingScheme.d.ts +21 -0
- package/types/TypedArrayLoader.d.ts +16 -0
- package/types/assertions.d.ts +4 -0
- package/types/bufferGeometry.d.ts +5 -0
- package/types/helpers/projectOnEllipsoidSurface.d.ts +6 -0
- package/types/index.d.ts +18 -0
- package/types/math.d.ts +13 -0
- package/types/r3f/EastNorthUpFrame.d.ts +15 -0
- package/types/r3f/EllipsoidMesh.d.ts +13 -0
- package/types/r3f/index.d.ts +2 -0
- package/types/typedArray.d.ts +10 -0
- package/types/types.d.ts +22 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
import { Callable } from './types';
|
2
|
+
import { Float32ArrayLoader, Int16ArrayLoader, Uint16ArrayLoader, TypedArrayLoader } from './TypedArrayLoader';
|
3
|
+
import { Class } from 'type-fest';
|
4
|
+
import { Data3DTexture, DataTexture, Loader, Texture, TypedArray } from 'three';
|
5
|
+
|
6
|
+
export interface ImageSize {
|
7
|
+
width: number;
|
8
|
+
height: number;
|
9
|
+
depth?: number;
|
10
|
+
}
|
11
|
+
export type DataTextureParameters = Omit<Partial<{
|
12
|
+
[K in keyof Texture as Texture[K] extends Callable ? never : K]: Texture[K];
|
13
|
+
}>, 'image'>;
|
14
|
+
export declare abstract class DataLoader<T extends DataTexture | Data3DTexture, U extends TypedArray> extends Loader<T> {
|
15
|
+
abstract readonly Texture: Class<T>;
|
16
|
+
abstract readonly TypedArrayLoader: Class<TypedArrayLoader<U>>;
|
17
|
+
readonly parameters?: DataTextureParameters;
|
18
|
+
load(url: string, onLoad: (data: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
|
19
|
+
}
|
20
|
+
export declare class Int16Data2DLoader extends DataLoader<DataTexture, Int16Array> {
|
21
|
+
readonly Texture: typeof DataTexture;
|
22
|
+
readonly TypedArrayLoader: typeof Int16ArrayLoader;
|
23
|
+
readonly parameters: {
|
24
|
+
type: 1015;
|
25
|
+
format: 1023;
|
26
|
+
wrapS: 1001;
|
27
|
+
wrapT: 1001;
|
28
|
+
minFilter: 1006;
|
29
|
+
magFilter: 1006;
|
30
|
+
};
|
31
|
+
}
|
32
|
+
export declare class Uint16Data2DLoader extends DataLoader<DataTexture, Uint16Array> {
|
33
|
+
readonly Texture: typeof DataTexture;
|
34
|
+
readonly TypedArrayLoader: typeof Uint16ArrayLoader;
|
35
|
+
readonly parameters: {
|
36
|
+
type: 1015;
|
37
|
+
format: 1023;
|
38
|
+
wrapS: 1001;
|
39
|
+
wrapT: 1001;
|
40
|
+
minFilter: 1006;
|
41
|
+
magFilter: 1006;
|
42
|
+
};
|
43
|
+
}
|
44
|
+
export declare class Float32Data2DLoader extends DataLoader<DataTexture, Float32Array> {
|
45
|
+
readonly Texture: typeof DataTexture;
|
46
|
+
readonly TypedArrayLoader: typeof Float32ArrayLoader;
|
47
|
+
readonly parameters: {
|
48
|
+
type: 1015;
|
49
|
+
format: 1023;
|
50
|
+
wrapS: 1001;
|
51
|
+
wrapT: 1001;
|
52
|
+
minFilter: 1006;
|
53
|
+
magFilter: 1006;
|
54
|
+
};
|
55
|
+
}
|
56
|
+
export declare class Float32Data3DLoader extends DataLoader<Data3DTexture, Float32Array> {
|
57
|
+
readonly Texture: typeof Data3DTexture;
|
58
|
+
readonly TypedArrayLoader: typeof Float32ArrayLoader;
|
59
|
+
readonly parameters: {
|
60
|
+
type: 1015;
|
61
|
+
format: 1023;
|
62
|
+
wrapS: 1001;
|
63
|
+
wrapT: 1001;
|
64
|
+
minFilter: 1006;
|
65
|
+
magFilter: 1006;
|
66
|
+
};
|
67
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { ProjectOnEllipsoidSurfaceOptions } from './helpers/projectOnEllipsoidSurface';
|
2
|
+
import { Matrix4, Vector3, Ray } from 'three';
|
3
|
+
|
4
|
+
export declare class Ellipsoid {
|
5
|
+
static readonly WGS84: Ellipsoid;
|
6
|
+
readonly radii: Vector3;
|
7
|
+
constructor(x: number, y: number, z: number);
|
8
|
+
get minimumRadius(): number;
|
9
|
+
get maximumRadius(): number;
|
10
|
+
reciprocalRadii(result?: Vector3): Vector3;
|
11
|
+
reciprocalRadiiSquared(result?: Vector3): Vector3;
|
12
|
+
projectOnSurface(position: Vector3, result?: Vector3, options?: ProjectOnEllipsoidSurfaceOptions): Vector3 | undefined;
|
13
|
+
getSurfaceNormal(position: Vector3, result?: Vector3): Vector3;
|
14
|
+
getEastNorthUpVectors(position: Vector3, east?: Vector3, north?: Vector3, up?: Vector3): void;
|
15
|
+
getEastNorthUpFrame(position: Vector3, result?: Matrix4): Matrix4;
|
16
|
+
getIntersection(ray: Ray, result?: Vector3): Vector3 | undefined;
|
17
|
+
getOsculatingSphereCenter(surfacePosition: Vector3, radius: number, result?: Vector3): Vector3;
|
18
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { BufferGeometry, Vector3 } from 'three';
|
2
|
+
|
3
|
+
export interface EllipsoidGeometryParameters {
|
4
|
+
radii: Vector3;
|
5
|
+
longitudeSegments?: number;
|
6
|
+
latitudeSegments?: number;
|
7
|
+
}
|
8
|
+
export declare class EllipsoidGeometry extends BufferGeometry {
|
9
|
+
readonly type = "EllipsoidGeometry";
|
10
|
+
parameters: EllipsoidGeometryParameters;
|
11
|
+
constructor(radii?: Vector3, longitudeSegments?: number, latitudeSegments?: number);
|
12
|
+
copy(source: EllipsoidGeometry): this;
|
13
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { ProjectOnEllipsoidSurfaceOptions } from './helpers/projectOnEllipsoidSurface';
|
2
|
+
import { Ellipsoid } from './Ellipsoid';
|
3
|
+
import { Vector3 } from 'three';
|
4
|
+
|
5
|
+
export type GeodeticTuple = [number, number, number];
|
6
|
+
export interface GeodeticLike {
|
7
|
+
readonly longitude: number;
|
8
|
+
readonly latitude: number;
|
9
|
+
readonly height: number;
|
10
|
+
}
|
11
|
+
export declare class Geodetic {
|
12
|
+
longitude: number;
|
13
|
+
latitude: number;
|
14
|
+
height: number;
|
15
|
+
static readonly MIN_LONGITUDE: number;
|
16
|
+
static readonly MAX_LONGITUDE: number;
|
17
|
+
static readonly MIN_LATITUDE: number;
|
18
|
+
static readonly MAX_LATITUDE: number;
|
19
|
+
constructor(longitude?: number, latitude?: number, height?: number);
|
20
|
+
set(longitude: number, latitude: number, height?: number): this;
|
21
|
+
clone(): Geodetic;
|
22
|
+
copy(other: GeodeticLike): this;
|
23
|
+
equals(other: GeodeticLike): boolean;
|
24
|
+
setLongitude(value: number): this;
|
25
|
+
setLatitude(value: number): this;
|
26
|
+
setHeight(value: number): this;
|
27
|
+
normalize(): this;
|
28
|
+
setFromECEF(position: Vector3, options?: ProjectOnEllipsoidSurfaceOptions & {
|
29
|
+
ellipsoid?: Ellipsoid;
|
30
|
+
}): this;
|
31
|
+
toECEF(result?: Vector3, options?: {
|
32
|
+
ellipsoid?: Ellipsoid;
|
33
|
+
}): Vector3;
|
34
|
+
fromArray(array: readonly number[], offset?: number): this;
|
35
|
+
toArray(array?: number[], offset?: number): number[];
|
36
|
+
[Symbol.iterator](): Generator<number>;
|
37
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { Ellipsoid } from './Ellipsoid';
|
2
|
+
import { Quaternion, Vector3, Camera } from 'three';
|
3
|
+
|
4
|
+
export declare class PointOfView {
|
5
|
+
private _distance;
|
6
|
+
heading: number;
|
7
|
+
private _pitch;
|
8
|
+
roll: number;
|
9
|
+
constructor(distance?: number, heading?: number, pitch?: number, roll?: number);
|
10
|
+
get distance(): number;
|
11
|
+
set distance(value: number);
|
12
|
+
get pitch(): number;
|
13
|
+
set pitch(value: number);
|
14
|
+
set(distance: number, heading: number, pitch: number, roll?: number): this;
|
15
|
+
clone(): PointOfView;
|
16
|
+
copy(other: PointOfView): this;
|
17
|
+
equals(other: PointOfView): boolean;
|
18
|
+
decompose(target: Vector3, eye: Vector3, quaternion: Quaternion, up?: Vector3, ellipsoid?: Ellipsoid): void;
|
19
|
+
setFromCamera(camera: Camera, ellipsoid?: Ellipsoid): this | undefined;
|
20
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { Geodetic } from './Geodetic';
|
2
|
+
|
3
|
+
export type RectangleTuple = [number, number, number, number];
|
4
|
+
export interface RectangleLike {
|
5
|
+
readonly west: number;
|
6
|
+
readonly south: number;
|
7
|
+
readonly east: number;
|
8
|
+
readonly north: number;
|
9
|
+
}
|
10
|
+
export declare class Rectangle {
|
11
|
+
west: number;
|
12
|
+
south: number;
|
13
|
+
east: number;
|
14
|
+
north: number;
|
15
|
+
static readonly MAX: Rectangle;
|
16
|
+
constructor(west?: number, south?: number, east?: number, north?: number);
|
17
|
+
get width(): number;
|
18
|
+
get height(): number;
|
19
|
+
set(west: number, south: number, east: number, north: number): this;
|
20
|
+
clone(): Rectangle;
|
21
|
+
copy(other: RectangleLike): this;
|
22
|
+
equals(other: RectangleLike): boolean;
|
23
|
+
at(x: number, y: number, result?: Geodetic): Geodetic;
|
24
|
+
fromArray(array: readonly number[], offset?: number): this;
|
25
|
+
toArray(array?: number[], offset?: number): number[];
|
26
|
+
[Symbol.iterator](): Generator<number>;
|
27
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
export type TileCoordinateTuple = [number, number, number];
|
2
|
+
export interface TileCoordinateLike {
|
3
|
+
readonly x: number;
|
4
|
+
readonly y: number;
|
5
|
+
readonly z: number;
|
6
|
+
}
|
7
|
+
export declare class TileCoordinate {
|
8
|
+
x: number;
|
9
|
+
y: number;
|
10
|
+
z: number;
|
11
|
+
constructor(x?: number, y?: number, z?: number);
|
12
|
+
set(x: number, y: number, z?: number): this;
|
13
|
+
clone(): TileCoordinate;
|
14
|
+
copy(other: TileCoordinateLike): this;
|
15
|
+
equals(other: TileCoordinateLike): boolean;
|
16
|
+
getParent(result?: TileCoordinate): TileCoordinate;
|
17
|
+
traverseChildren(depth: number, result?: TileCoordinate): Generator<TileCoordinate>;
|
18
|
+
fromArray(array: readonly number[], offset?: number): this;
|
19
|
+
toArray(array?: number[], offset?: number): number[];
|
20
|
+
[Symbol.iterator](): Generator<number>;
|
21
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { TileCoordinate, TileCoordinateLike } from './TileCoordinate';
|
2
|
+
import { Rectangle, RectangleLike } from './Rectangle';
|
3
|
+
import { GeodeticLike } from './Geodetic';
|
4
|
+
import { Vector2 } from 'three';
|
5
|
+
|
6
|
+
export interface TilingSchemeLike {
|
7
|
+
readonly width: number;
|
8
|
+
readonly height: number;
|
9
|
+
readonly rectangle: RectangleLike;
|
10
|
+
}
|
11
|
+
export declare class TilingScheme {
|
12
|
+
width: number;
|
13
|
+
height: number;
|
14
|
+
rectangle: Rectangle;
|
15
|
+
constructor(width?: number, height?: number, rectangle?: Rectangle);
|
16
|
+
clone(): TilingScheme;
|
17
|
+
copy(other: TilingSchemeLike): this;
|
18
|
+
getSize(z: number, result?: Vector2): Vector2;
|
19
|
+
getTile(geodetic: GeodeticLike, z: number, result?: TileCoordinate): TileCoordinate;
|
20
|
+
getRectangle(tile: TileCoordinateLike, result?: Rectangle): Rectangle;
|
21
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { parseFloat32Array, parseInt16Array, parseUint16Array } from './typedArray';
|
2
|
+
import { Loader, TypedArray } from 'three';
|
3
|
+
|
4
|
+
export declare abstract class TypedArrayLoader<T extends TypedArray> extends Loader<T> {
|
5
|
+
abstract parseTypedArray(buffer: ArrayBuffer): T;
|
6
|
+
load(url: string, onLoad: (data: T) => void, onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
|
7
|
+
}
|
8
|
+
export declare class Int16ArrayLoader extends TypedArrayLoader<Int16Array> {
|
9
|
+
readonly parseTypedArray: typeof parseInt16Array;
|
10
|
+
}
|
11
|
+
export declare class Uint16ArrayLoader extends TypedArrayLoader<Uint16Array> {
|
12
|
+
readonly parseTypedArray: typeof parseUint16Array;
|
13
|
+
}
|
14
|
+
export declare class Float32ArrayLoader extends TypedArrayLoader<Float32Array> {
|
15
|
+
readonly parseTypedArray: typeof parseFloat32Array;
|
16
|
+
}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
export declare function assertType<T>(value: unknown): asserts value is T;
|
2
|
+
export declare function isNotNullish<T>(value: T | null | undefined): value is T;
|
3
|
+
export declare function isNotUndefined<T>(value: T | undefined): value is T;
|
4
|
+
export declare function isNotFalse<T>(value: T | false): value is T;
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { BufferGeometry } from 'three';
|
2
|
+
|
3
|
+
export type BufferGeometryLike = Pick<BufferGeometry, 'attributes' | 'index' | 'boundingBox' | 'boundingSphere'>;
|
4
|
+
export declare function toBufferGeometryLike(geometry: BufferGeometry): [BufferGeometryLike, ArrayBuffer[]];
|
5
|
+
export declare function fromBufferGeometryLike(input: BufferGeometryLike, result?: BufferGeometry<import('three').NormalBufferAttributes>): BufferGeometry;
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { Vector3 } from 'three';
|
2
|
+
|
3
|
+
export interface ProjectOnEllipsoidSurfaceOptions {
|
4
|
+
centerTolerance?: number;
|
5
|
+
}
|
6
|
+
export declare function projectOnEllipsoidSurface(position: Vector3, reciprocalRadiiSquared: Vector3, result?: Vector3, options?: ProjectOnEllipsoidSurfaceOptions): Vector3 | undefined;
|
package/types/index.d.ts
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
export declare const depthShader: string;
|
2
|
+
export declare const packingShader: string;
|
3
|
+
export declare const transformShader: string;
|
4
|
+
export * from './ArrayBufferLoader';
|
5
|
+
export * from './assertions';
|
6
|
+
export * from './bufferGeometry';
|
7
|
+
export * from './DataLoader';
|
8
|
+
export * from './Ellipsoid';
|
9
|
+
export * from './EllipsoidGeometry';
|
10
|
+
export * from './Geodetic';
|
11
|
+
export * from './math';
|
12
|
+
export * from './PointOfView';
|
13
|
+
export * from './Rectangle';
|
14
|
+
export * from './TileCoordinate';
|
15
|
+
export * from './TilingScheme';
|
16
|
+
export * from './typedArray';
|
17
|
+
export * from './TypedArrayLoader';
|
18
|
+
export * from './types';
|
package/types/math.d.ts
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
export declare const clamp: typeof import('three/src/math/MathUtils.js').clamp;
|
2
|
+
export declare const euclideanModulo: typeof import('three/src/math/MathUtils.js').euclideanModulo;
|
3
|
+
export declare const inverseLerp: typeof import('three/src/math/MathUtils.js').inverseLerp;
|
4
|
+
export declare const lerp: typeof import('three/src/math/MathUtils.js').lerp;
|
5
|
+
export declare const radians: typeof import('three/src/math/MathUtils.js').degToRad;
|
6
|
+
export declare const degrees: typeof import('three/src/math/MathUtils.js').radToDeg;
|
7
|
+
export declare const isPowerOfTwo: typeof import('three/src/math/MathUtils.js').isPowerOfTwo;
|
8
|
+
export declare const ceilPowerOfTwo: typeof import('three/src/math/MathUtils.js').ceilPowerOfTwo;
|
9
|
+
export declare const floorPowerOfTwo: typeof import('three/src/math/MathUtils.js').floorPowerOfTwo;
|
10
|
+
export declare const normalize: typeof import('three/src/math/MathUtils.js').normalize;
|
11
|
+
export declare function smoothstep(min: number, max: number, x: number): number;
|
12
|
+
export declare function saturate(x: number): number;
|
13
|
+
export declare function closeTo(a: number, b: number, relativeEpsilon: number, absoluteEpsilon?: number): boolean;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { GeodeticLike } from '../Geodetic';
|
2
|
+
import { Ellipsoid } from '../Ellipsoid';
|
3
|
+
import { SetOptional } from 'type-fest';
|
4
|
+
import { Group } from 'three';
|
5
|
+
import { ReactNode } from 'react';
|
6
|
+
|
7
|
+
declare class EastNorthUpFrameGroup extends Group {
|
8
|
+
set(longitude: number, latitude: number, height: number, ellipsoid?: Ellipsoid): void;
|
9
|
+
}
|
10
|
+
export interface EastNorthUpFrameProps extends SetOptional<GeodeticLike, 'height'> {
|
11
|
+
ellipsoid?: Ellipsoid;
|
12
|
+
children?: ReactNode;
|
13
|
+
}
|
14
|
+
export declare const EastNorthUpFrame: import('react').ForwardRefExoticComponent<EastNorthUpFrameProps & import('react').RefAttributes<EastNorthUpFrameGroup>>;
|
15
|
+
export {};
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { EllipsoidGeometry } from '../EllipsoidGeometry';
|
2
|
+
import { Mesh } from 'three';
|
3
|
+
import { BufferGeometryNode, MeshProps } from '@react-three/fiber';
|
4
|
+
|
5
|
+
declare module '@react-three/fiber' {
|
6
|
+
interface ThreeElements {
|
7
|
+
ellipsoidGeometry: BufferGeometryNode<EllipsoidGeometry, typeof EllipsoidGeometry>;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
export interface EllipsoidMeshProps extends Omit<MeshProps, 'args'> {
|
11
|
+
args?: ConstructorParameters<typeof EllipsoidGeometry>;
|
12
|
+
}
|
13
|
+
export declare const EllipsoidMesh: import('react').ForwardRefExoticComponent<Omit<EllipsoidMeshProps, "ref"> & import('react').RefAttributes<Mesh<import('three').BufferGeometry<import('three').NormalBufferAttributes>, import('three').Material | import('three').Material[], import('three').Object3DEventMap>>>;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
export type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
|
2
|
+
export type TypedArrayConstructor = Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor;
|
3
|
+
type GetValue = keyof {
|
4
|
+
[K in keyof DataView as DataView[K] extends (byteOffset: number) => number ? K : never]: DataView[K];
|
5
|
+
};
|
6
|
+
export declare function parseTypedArray<T extends TypedArrayConstructor, K extends GetValue>(buffer: ArrayBuffer, TypedArray: T, getValue: K, littleEndian?: boolean): InstanceType<T>;
|
7
|
+
export declare function parseInt16Array(buffer: ArrayBuffer, littleEndian?: boolean): Int16Array;
|
8
|
+
export declare function parseUint16Array(buffer: ArrayBuffer, littleEndian?: boolean): Uint16Array;
|
9
|
+
export declare function parseFloat32Array(buffer: ArrayBuffer, littleEndian?: boolean): Float32Array;
|
10
|
+
export {};
|
package/types/types.d.ts
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
import { ReadonlyTuple } from 'type-fest';
|
2
|
+
import { Matrix2, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
|
3
|
+
|
4
|
+
export type Callable = (...args: any) => any;
|
5
|
+
export type ReadonlyTuple2<T = number> = ReadonlyTuple<T, 2>;
|
6
|
+
export type ReadonlyTuple3<T = number> = ReadonlyTuple<T, 3>;
|
7
|
+
export type ReadonlyTuple4<T = number> = ReadonlyTuple<T, 4>;
|
8
|
+
type BuildTupleHelper<Element, Length extends number, Rest extends Element[]> = Rest['length'] extends Length ? [...Rest] : BuildTupleHelper<Element, Length, [Element, ...Rest]>;
|
9
|
+
export type Tuple<T, Length extends number> = number extends Length ? readonly T[] : BuildTupleHelper<T, Length, []>;
|
10
|
+
export type Tuple2<T = number> = BuildTupleHelper<T, 2, []>;
|
11
|
+
export type Tuple3<T = number> = BuildTupleHelper<T, 3, []>;
|
12
|
+
export type Tuple4<T = number> = BuildTupleHelper<T, 4, []>;
|
13
|
+
type ReadonlyThreeInstance<T> = Readonly<{
|
14
|
+
[K in keyof T as T[K] extends Callable ? ReturnType<T[K]> extends T ? K extends 'clone' ? K : never : K : K]: T[K];
|
15
|
+
}>;
|
16
|
+
export type ReadonlyVector2 = ReadonlyThreeInstance<Vector2>;
|
17
|
+
export type ReadonlyVector3 = ReadonlyThreeInstance<Vector3>;
|
18
|
+
export type ReadonlyVector4 = ReadonlyThreeInstance<Vector4>;
|
19
|
+
export type ReadonlyMatrix2 = ReadonlyThreeInstance<Matrix2>;
|
20
|
+
export type ReadonlyMatrix3 = ReadonlyThreeInstance<Matrix3>;
|
21
|
+
export type ReadonlyMatrix4 = ReadonlyThreeInstance<Matrix4>;
|
22
|
+
export {};
|