three-render-objects.d.ts 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { WebGLRendererParameters, Renderer, Object3D, WebGLRenderer, Scene, Camera, Intersection } from 'three';
  2. import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
  3. interface ConfigOptions {
  4. controlType?: 'trackball' | 'orbit' | 'fly';
  5. rendererConfig?: WebGLRendererParameters;
  6. extraRenderers?: Renderer[];
  7. waitForLoadComplete?: boolean;
  8. }
  9. type Accessor<In, Out> = Out | string | ((obj: In) => Out);
  10. type Obj3DAccessor<T> = Accessor<Object3D, T>;
  11. type Coords = { x: number; y: number; z: number; };
  12. type Obj3DCompFn = (a: Object3D, b: Object3D) => number;
  13. interface ThreeRenderObjectsGenericInstance<ChainableInstance> {
  14. (element: HTMLElement): ChainableInstance;
  15. resetProps(): ChainableInstance;
  16. // Data input
  17. objects(): Object3D[];
  18. objects(objs: Object3D[]): ChainableInstance;
  19. // Container layout
  20. width(): number;
  21. width(width: number): ChainableInstance;
  22. height(): number;
  23. height(height: number): ChainableInstance;
  24. skyRadius(): number;
  25. skyRadius(glUnits: number): ChainableInstance;
  26. backgroundColor(): string;
  27. backgroundColor(color: string): ChainableInstance;
  28. backgroundImageUrl(): string | null;
  29. backgroundImageUrl(url: string | null): ChainableInstance;
  30. onBackgroundImageLoaded(callback: () => void): ChainableInstance;
  31. showNavInfo(): boolean;
  32. showNavInfo(enabled: boolean): ChainableInstance;
  33. // Render control
  34. tick(): ChainableInstance;
  35. cameraPosition(): Coords;
  36. cameraPosition(position: Partial<Coords>, lookAt?: Coords, transitionMs?: number): ChainableInstance;
  37. zoomToFit(durationMs?: number, padding?: number, objFilter?: (obj: Object3D) => boolean): ChainableInstance;
  38. fitToBbox(bbox: { x: [number, number], y: [number, number], z: [number, number] }, durationMs?: number, padding?: number): ChainableInstance;
  39. postProcessingComposer(): EffectComposer;
  40. renderer(): WebGLRenderer;
  41. scene(): Scene;
  42. camera(): Camera;
  43. controls(): object;
  44. // Interaction
  45. onClick(callback: (obj: object | null, event: MouseEvent, intersectionPoint: { x: number, y: number, z: number }) => void): ChainableInstance;
  46. onRightClick(callback: (obj: object | null, event: MouseEvent, intersectionPoint: { x: number, y: number, z: number }) => void): ChainableInstance;
  47. onHover(callback: (obj: object | null, previousObj: object | null) => void): ChainableInstance;
  48. hoverOrderComparator(): Obj3DCompFn;
  49. hoverOrderComparator(compFn: Obj3DCompFn): ChainableInstance;
  50. hoverFilter(): (obj: Object3D) => boolean;
  51. hoverFilter(filterFn: (obj: Object3D) => boolean): ChainableInstance;
  52. lineHoverPrecision(): number;
  53. lineHoverPrecision(precision: number): ChainableInstance;
  54. tooltipContent(): Obj3DAccessor<string>;
  55. tooltipContent(contentAccessor: Obj3DAccessor<string>): ChainableInstance;
  56. enablePointerInteraction(): boolean;
  57. enablePointerInteraction(enable: boolean): ChainableInstance;
  58. hoverDuringDrag(): boolean;
  59. hoverDuringDrag(enabled: boolean): ChainableInstance;
  60. clickAfterDrag(): boolean;
  61. clickAfterDrag(enabled: boolean): ChainableInstance;
  62. getPointerPos(): { x: number, y: number };
  63. // Utility
  64. getBbox(objFilter?: (obj: Object3D) => boolean): { x: [number, number], y: [number, number], z: [number, number] };
  65. getScreenCoords(x: number, y: number, z: number): { x: number, y: number; };
  66. getSceneCoords(x: number, y: number, distance: number): { x: number, y: number, z: number };
  67. intersectingObjects(x: number, y: number): Intersection[];
  68. }
  69. type ThreeRenderObjectsInstance = ThreeRenderObjectsGenericInstance<ThreeRenderObjectsInstance>;
  70. declare function ThreeRenderObjects(configOptions?: ConfigOptions): ThreeRenderObjectsInstance;
  71. export default ThreeRenderObjects;
  72. export { ConfigOptions, ThreeRenderObjectsGenericInstance, ThreeRenderObjectsInstance };