@orca-fe/x-map
Version:
80 lines (79 loc) • 2.84 kB
TypeScript
import { AxesHelper, Color, DirectionalLight, GridHelper, Matrix4, Object3D, PerspectiveCamera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three';
import ResizeObserver from 'resize-observer-polyfill';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
import { EventEmitter } from 'events';
import IMap from '../core/IMap';
import { Mat4 } from '../defs';
export interface SimpleSceneOptions {
axesAndGround?: boolean;
ambientLightColor?: Color | string | number;
ambientLightIntensity?: number;
rendererOptions?: Omit<WebGLRendererParameters, 'canvas'>;
cameraPosition?: [number, number, number];
cameraLookAt?: [number, number, number];
autoResize?: boolean;
background?: Scene['background'];
orbitControl?: false | [number, number];
camera?: PerspectiveCamera;
preventDefaultRender?: boolean;
rayCaster?: boolean;
map?: IMap;
}
export interface LightOptions {
direction?: [number, number, number];
color?: Color | string | number;
intensity?: number;
}
export default class SimpleThree extends EventEmitter {
dom: HTMLDivElement;
renderer: WebGLRenderer;
scene: Scene;
rayCasterObjects: Set<Object3D<import("three").Event>>;
camera: PerspectiveCamera;
options: SimpleSceneOptions;
observer?: ResizeObserver;
control?: OrbitControls;
preventDefaultRender?: boolean;
map?: IMap;
protected mousedown: boolean;
domSize: [number, number];
resizeTime: number;
autoResize: boolean;
constructor(dom: HTMLDivElement, options?: SimpleSceneOptions);
computeSize(): void;
handleWindowMouseup: () => void;
protected handleWindowResize: () => void;
protected disposed: boolean;
dispose(): void;
/**
* 添加平行光
* @param options 平行光选项
* @returns
*/
addDirectionalLight(options?: LightOptions): DirectionalLight;
axes?: AxesHelper;
/**
* 添加坐标轴方向
* @param size 长度
*/
addAxes(size?: number): AxesHelper;
removeAxes(): void;
grid?: GridHelper;
/**
* 添加大地网格
* @param size 网格大小
* @param divisions 网格拆分数量
* @param color1 横向网格线颜色
* @param color2 纵向网格线颜色
*/
addGrid(size?: number, divisions?: number, color1?: Color | string | number, color2?: Color | string | number): GridHelper;
removeGrid(): void;
cameraProjectionMatrix?: Matrix4;
cameraViewMatrix?: Matrix4;
updateMatrix(matrix: [Mat4, Mat4] | Matrix4, render?: boolean): void;
protected animationKey?: number;
animate(callback?: () => unknown): void;
stop(): void;
render(clear?: boolean): void;
resize(): void;
}