UNPKG

@inweb/viewer-core

Version:

3D CAD and BIM data Viewer core

274 lines (273 loc) 8.34 kB
import { IEventEmitter } from "@inweb/eventemitter2"; import { Assembly, Client, File, Model } from "@inweb/client"; import { ICommandService } from "../commands/ICommands"; import { IOptions } from "../options/IOptions"; import { IDragger } from "../draggers/IDraggers"; import { IComponent } from "../components/IComponents"; import { IViewpoint } from "./IViewpoint"; /** * Viewer core interface. */ export interface IViewer extends IEventEmitter, ICommandService { /** * The `Client` instance that is used to load model reference files from the Open Cloud Server. */ client: Client | undefined; /** * Viewer options. */ options: IOptions; /** * {@link https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement | HTMLCanvasElement} for the * viewer used to operate on. Defined only while the viewer is initialized. */ canvas: HTMLCanvasElement | undefined; /** * List of canvas events, such as mouse events or * {@link https://developer.mozilla.org/docs/Web/API/Pointer_events#event_types_and_global_event_handlers | pointer events} * or {@link https://developer.mozilla.org/docs/Web/API/TouchEvent#touch_event_types | touch events} * that the viewer should listen and redirect to the draggers and components. * * By default, the following events are redirected: * * - click * - contextmenu * - dblclick * - mousedown * - mouseleave * - mousemove * - mouseup * - pointercancel * - pointerdown * - pointerleave * - pointermove * - pointerup * - touchcancel * - touchend * - touchmove * - touchstart * - wheel */ canvasEvents: string[]; /** * List of names of available draggers. * * The following draggers are available by default: * * - `Pan` * - `Orbit` * - `Zoom` * - `MeasureLine` * - `CuttingPlaneXAxis` * - `CuttingPlaneYAxis` * - `CuttingPlaneZAxis` * - `Walk` * * For a quick reference on how to implement your own dragger, see {@link IDragger}. */ draggers: string[]; /** * List of names of available components. */ components: string[]; /** * Initializes the viewer it with the specified canvas. Call {@link dispose | dispose()} to release * allocated resources. * * Fires: * * - {@link InitializeEvent | initialize} * - {@link InitializeProgressEvent | initializeprogress} * * @param canvas - * {@link https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement | HTMLCanvasElement} for the * viewer used to operate on. * @param onProgress - A callback function that handles events measuring progress of viewer * initialization. */ initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent) => void): Promise<this>; /** * Unloads an open file, clears the canvas and markups, and releases resources allocated by this viewer * instance. Call this method before release the `Viewer` instance. */ dispose(): this; /** * Returns `true` if viewer has been initialized. */ isInitialized(): boolean; /** * Updates the viewer. * * Fires: * * - {@link UpdateEvent | update} * * @param force - If `true` updates the viewer immidietly. Otherwise updates on next animation frame. * Default is `false`. */ update(force?: boolean): void; /** * Loads a file from Open Cloud Server into the viewer. * * The file geometry data on the server must be converted into a format siutable for the viewer. * * This method requires a `Client` instance to be specified to load model reference files from the Open * Cloud Server. * * If there was an active dragger before opening the file, it will be deactivated. After opening the * file, you must manually activate the required dragger. * * Fires: * * - {@link OpenEvent | open} * - {@link GeometryStartEvent | geometrystart} * - {@link GeometryProgressEvent | geometryprogress} * - {@link DatabaseChunkEvent | databasechunk} * - {@link GeometryChunkEvent | geometrychunk} * - {@link GeometryEndEvent | geometryend} * - {@link GeometryErrorEvent | geometryerror} * * @param file - File, assembly or specific model to load. If a `File` instance with multiple models is * specified, the default model will be loaded. If there is no default model, first availiable model * will be loaded. */ open(file: Model | File | Assembly): Promise<this>; /** * Cancels asynchronous file loading started by {@link open | open()}. * * Fires: * * - {@link CancelEvent | calcel} */ cancel(): this; /** * Unloads an open file, clears the canvas and markups, deactivates the active dragger. * * Fires: * * - {@link ClearEvent | clear} */ clear(): this; /** * Returns `true` if current opened model is 3D model. */ is3D(): boolean; /** * Creates an overlay view. Overlay view is used to draw cutting planes and markups. */ syncOverlay(): void; /** * Clears the overlay view. */ clearOverlay(): void; /** * Removes all cutting planes. */ clearSlices(): void; /** * Returns a list of original handles for the selected objects. */ getSelected(): string[]; /** * Selects the objects by original handles. * * Fires: * * - {@link SelectEvent | select} * * @param handles - The list of original handles. */ setSelected(handles?: string[]): void; /** * Unselects all objects. * * Fires: * * - {@link SelectEvent | select} */ clearSelected(): void; /** * Makes the selected objects invisible. * * Fires: * * - {@link HideEvent | hide} * - {@link SelectEvent | select} */ hideSelected(): void; /** * Hides all objects except selected. * * Fires: * * - {@link IsolateEvent | isolate} */ isolateSelected(): void; /** * Makes all objects visible. * * Fires: * * - {@link ShowAllEvent | showall} */ showAll(): void; /** * Breaks the model into its component objects. To collect objects back use index `0`. * * Fires: * * - {@link ExplodeEvent | explode} * * @param index - Explode index. Range is 0 to 100. */ explode(index: number): void; /** * Collect model objects back. Alias to {@link explode | explode(0)}. * * Fires: * * - {@link ExplodeEvent | explode} */ collect(): void; /** * Returns the active dragger reference, or `null` if there is no active dragger. */ activeDragger(): IDragger | null; /** * Changes the active dragger. The viewer must be initialized before activating the dragger, otherwise * an exception will be thrown. * * Fires: * * - {@link ChangeActiveDraggerEvent | changeactivedragger} * * @param name - Dragger name. Can be one of the {@link draggers} list or an ampty string to deactivate * the current dragger. * @returns Returns the new active dragger reference or `null` if there is no dragger with the given * name. */ setActiveDragger(name: string): IDragger | null; /** * Resets the state of the active dragger. */ resetActiveDragger(): void; /** * Returns the component reference, or `null` if there is no component with the specified name. */ getComponent(name: string): IComponent | null; /** * Sets the viewer state to the specified viewpoint. * * To get a list of available viewpoints from the server for a specific file, use the * `File.getViewpoints()`. * * @param viewpoint - Viewpoint data. */ drawViewpoint(viewpoint: IViewpoint): void; /** * Saves the viewer state at the viewpoint. * * To save a viewpoint to the server for a specific file, use the `File.saveViewpoint()`. */ createViewpoint(): IViewpoint; }