@inweb/viewer-core 26.10.5 → 26.11.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-core.module.js","sources":["../src/commands/Commands.ts","../src/draggers/Dragger.ts","../src/draggers/Draggers.ts","../src/components/Component.ts","../src/components/Components.ts","../src/loaders/Loader.ts","../src/loaders/Loaders.ts","../src/options/IOptions.ts","../src/options/Options.ts","../src/viewer/CanvasEvents.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IViewer } from \"../viewer/IViewer\";\nimport { ICommand, ICommandHandler, ICommandDescription, ICommandsRegistry } from \"./ICommands\";\n\nclass CommandsRegistry implements ICommandsRegistry {\n private readonly _commands = new Map<string, ICommand>();\n\n registerCommand(id: string, handler: ICommandHandler, description?: ICommandDescription, thisArg?: any): void {\n this._commands.set(id, { id, handler, thisArg, description });\n }\n\n registerCommandAlias(id: string, alias: string): void {\n this.registerCommand(alias, (viewer: IViewer, ...args) => this.executeCommand(id, viewer, ...args));\n }\n\n getCommand(id: string): ICommand | undefined {\n return this._commands.get(id);\n }\n\n getCommands(): Map<string, ICommand> {\n const map = new Map<string, ICommand>();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n executeCommand(id: string, viewer: IViewer, ...args: any[]): any {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n\n const { handler, thisArg } = command;\n const result = handler.apply(thisArg, [viewer, ...args]);\n\n viewer?.emit({ type: \"command\", data: id, args });\n\n return result;\n }\n}\n\nconst _commandsRegistry = new Map<string, CommandsRegistry>();\n\nfunction commandsRegistry(viewerType = \"\"): ICommandsRegistry {\n let result = _commandsRegistry.get(viewerType);\n if (!result) {\n result = new CommandsRegistry();\n _commandsRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { commandsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IDragger } from \"./IDraggers\";\n\nexport class Dragger implements IDragger {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IDragger, IDraggerProvider, IDraggersRegistry } from \"./IDraggers\";\n\nclass DraggersRegistry implements IDraggersRegistry {\n private readonly _providers = new Map<string, IDraggerProvider>();\n\n registerDragger(name: string, provider: IDraggerProvider): void {\n this._providers.set(name, provider);\n }\n\n registerDraggerAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerDragger(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getDraggers(): Map<string, IDraggerProvider> {\n const map = new Map<string, IDraggerProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createDragger(name: string, viewer: IViewer): IDragger | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const dragger = provider(viewer);\n dragger.name = name;\n\n return dragger;\n }\n}\n\nconst _draggersRegistry = new Map<string, DraggersRegistry>();\n\nfunction draggersRegistry(viewerType = \"\"): IDraggersRegistry {\n let result = _draggersRegistry.get(viewerType);\n if (!result) {\n result = new DraggersRegistry();\n _draggersRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { draggersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IComponent } from \"./IComponents\";\n\nexport class Component implements IComponent {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IComponent, IComponentProvider, IComponentsRegistry } from \"./IComponents\";\n\nclass Components implements IComponentsRegistry {\n private readonly _providers = new Map<string, IComponentProvider>();\n\n registerComponent(name: string, provider: IComponentProvider): void {\n this._providers.set(name, provider);\n }\n\n registerComponentAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerComponent(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getComponents(): Map<string, IComponentProvider> {\n const map = new Map<string, IComponentProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createComponent(name: string, viewer: IViewer): IComponent | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const component = provider(viewer);\n component.name = name;\n\n return component;\n }\n}\n\nconst _components = new Map<string, Components>();\n\nfunction componentsRegistry(viewerType = \"\"): IComponentsRegistry {\n let result = _components.get(viewerType);\n if (!result) {\n result = new Components();\n _components.set(viewerType, result);\n }\n return result;\n}\n\nexport { componentsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { FileSource, ILoader, LoadParams } from \"./ILoader\";\n\nexport class Loader implements ILoader {\n public name = \"\";\n public abortController: AbortController = new AbortController();\n\n dispose(): void {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n isSupport(file: FileSource, format?: string): boolean {\n return false;\n }\n\n load(file: FileSource, format?: string, params?: LoadParams): Promise<this> {\n return Promise.resolve(this);\n }\n\n cancel(): void {\n this.abortController.abort();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { FileSource, ILoader, ILoaderProvider, ILoadersRegistry } from \"./ILoader\";\n\nclass Loaders implements ILoadersRegistry {\n private readonly _providers = new Map<string, ILoaderProvider>();\n\n registerLoader(name: string, provider: ILoaderProvider): void {\n this._providers.set(name, provider);\n }\n\n getLoader(name: string): ILoaderProvider | undefined {\n return this._providers.get(name);\n }\n\n getLoaders(): Map<string, ILoaderProvider> {\n const map = new Map<string, ILoaderProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createLoader(viewer: IViewer, file: FileSource, format?: string): ILoader | null {\n let result: ILoader = null;\n this._providers.forEach((provider, key) => {\n const loader = provider(viewer);\n if (loader.isSupport(file, format)) {\n result = loader;\n result.name = key;\n }\n });\n return result;\n }\n}\n\nconst _loaders = new Map<string, Loaders>();\n\nfunction loadersRegistry(viewerType = \"\"): ILoadersRegistry {\n let result = _loaders.get(viewerType);\n if (!result) {\n result = new Loaders();\n _loaders.set(viewerType, result);\n }\n return result;\n}\n\nexport { loadersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport type CameraMode = \"perspective\" | \"orthographic\";\n\nexport interface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n/**\n * Viewer options interface.\n */\nexport interface IOptions {\n /**\n * Show the world coordinate system axes in the bottom-left corner of the viewer.\n *\n * @defaultValue true\n */\n showWCS?: boolean;\n\n /**\n * Enable camera animation.\n *\n * @defaultValue true\n */\n cameraAnimation?: boolean;\n\n /**\n * Enable anti-aliasing. Can be one of:\n *\n * - `false` - Disable anti-aliasing.\n * - `true` - Enable anti-aliasing using MSAA.\n * - `fxaa` - Enable Fast Approximate anti-aliasing (FXAA).\n * - `smaa` - Enable Subpixel Morphological anti-aliasing (SMAA).\n * - `msaa` - Enable Multisample anti-aliasing (MSAA), if the underlying WebGL context supports it.\n *\n * @defaultValue true\n */\n antialiasing?: boolean | string;\n\n /**\n * Show ground shadows below the model.\n *\n * @defaultValue false\n */\n groundShadow?: boolean;\n\n /**\n * Enable ambient shadows.\n *\n * @defaultValue false\n */\n shadows?: boolean;\n\n /**\n * Camera speed on X axis.\n *\n * @defaultValue 4\n */\n cameraAxisXSpeed?: number;\n\n /**\n * Camera speed on Y axis.\n *\n * @defaultValue 1\n */\n cameraAxisYSpeed?: number;\n\n /**\n * Enable ambient occlusion.\n *\n * @defaultValue false\n */\n ambientOcclusion?: boolean;\n\n /**\n * Enable streaming of drawings from the server.\n *\n * If streaming is disabled, the file/assembly will be loaded in one go. The viewer will only update\n * once the loading is complete, which may take a while.\n *\n * If streaming is enabled, {@link enablePartialMode | partial streaming} mode may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode?: boolean;\n\n /**\n * Enable partial streaming mode to be able open large drawing.\n *\n * In partial streaming mode, the viewer keeps only visible objects in memory and loads other objects\n * when the camera changes.\n *\n * Only used if {@link enableStreamingMode | streaming} is enabled. If partial streaming is enabled,\n * then {@link sceneGraph | scene graph} will be disabled.\n *\n * @defaultValue false\n */\n enablePartialMode?: boolean;\n\n /**\n * The size of the memory buffer for graphics data, in bytes.\n *\n * @defaultValue 3294967296\n */\n memoryLimit?: number;\n\n /**\n * Cutting planes fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n cuttingPlaneFillColor?: RGB;\n\n /**\n * Edges highlight color.\n */\n edgesColor?: { r: number; g: number; b: number };\n\n /**\n * Faces highlight color.\n */\n facesColor?: { r: number; g: number; b: number };\n\n /**\n * Show highlighted edges.\n */\n edgesVisibility?: boolean;\n\n /**\n * Show highlighted edges over drawing.\n */\n edgesOverlap?: boolean;\n\n /**\n * Show highlighted faces over drawing.\n */\n facesOverlap?: boolean;\n\n /**\n * Highlighted faces transparency value, from 0 to 255.\n */\n facesTransparancy?: number;\n\n /**\n * Enable custom highlight settings.\n */\n enableCustomHighlight?: boolean;\n\n /**\n * Enable scene graph.\n *\n * Scene graph increases perfomance improvement, but consumes memory. If scene graph is enabled, then\n * {@link enablePartialMode | partial streaming} mode will be disabled.\n */\n sceneGraph: boolean;\n\n /**\n * Show the edges of the model:\n *\n * - `false` - No model edges are displayed. Usefull for less memory consumption.\n * - `true` - Display isolines.\n */\n edgeModel: boolean;\n\n /**\n * Reverse the mouse wheel direction for zooming:\n *\n * - `false` - Moving the wheel up zooms in, moving down zooms out.\n * - `true` - Moving the wheel up zooms out, moving down zooms in.\n */\n reverseZoomWheel: boolean;\n\n /**\n * Enable mouse wheel zooming.\n */\n enableZoomWheel: boolean;\n\n /**\n * Enable touch gestures.\n *\n * This option will be ignored when {@link enableZoomWheel | mouse wheel zooming} is disabled, since\n * gestures contains touch zoom.\n */\n enableGestures: boolean;\n\n /**\n * Deprecated since `25.8`.\n */\n geometryType?: string;\n\n /**\n * Ruler unit.\n *\n * Available values: Default, Millimeters, Centimeters, Meters, Feet, Inches, Yards, Kilometers, Miles,\n * Micrometers, MicroInches\n *\n * @defaultValue \"Default\"\n */\n rulerUnit: string;\n\n /**\n * Camera projection mode:\n *\n * - `perspective` - Perspective camera with field of view.\n * - `orthographic` - Orthographic camera with parallel projection.\n *\n * @defaultValue \"perspective\"\n */\n cameraMode?: CameraMode;\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset.\n */\n resetToDefaults?: (fields?: string[]) => void;\n}\n\nexport function defaultOptions(): IOptions {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: { red: 0xff, green: 0x98, blue: 0x00 },\n edgesColor: { r: 0xff, g: 0x98, b: 0x00 },\n facesColor: { r: 0xff, g: 0x98, b: 0x00 },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\",\n rulerUnit: \"Default\",\n cameraMode: \"perspective\",\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nexport class Options implements IOptions {\n protected _emitter?: EventEmitter2;\n protected _data: IOptions;\n\n constructor(emitter?: EventEmitter2) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n notifierChangeEvent(): void {\n console.warn(\n \"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\"\n );\n this.change();\n }\n\n change(): void {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n saveToStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n\n loadFromStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = { ...data };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset. Specify `undefined` to reset all.\n */\n resetToDefaults(fields?: string[]): void {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }, {});\n this.data = { ...this.data, ...resetData };\n } else {\n this.data = { ...this.data, ...Options.defaults() };\n }\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: IOptions) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = { ...Options.defaults(), ...this._data, ...value, enablePartialMode, sceneGraph };\n this.change();\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this._data.showWCS = value;\n this.change();\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this._data.cameraAnimation = value;\n this.change();\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this._data.antialiasing = value;\n this.change();\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this._data.groundShadow = value;\n this.change();\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this._data.shadows = value;\n this.change();\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this._data.memoryLimit = value;\n this.change();\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n\n get edgesColor() {\n return this._data.edgesColor;\n }\n\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n\n get facesColor() {\n return this._data.facesColor;\n }\n\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n\n get enableGestures() {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this._data.enableGestures = !!value;\n this.change();\n }\n\n get geometryType() {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this._data.geometryType = value;\n this.change();\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this._data.rulerUnit = value;\n this.change();\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode || \"perspective\";\n }\n\n set cameraMode(value: CameraMode) {\n this._data.cameraMode = value;\n this.change();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport const CanvasEvents = [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseup\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerup\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n];\n\nexport const CANVAS_EVENTS = CanvasEvents;\n\n/**\n * Canvas Events.\n *\n * @event\n */\nexport interface CanvasEventMap {\n /**\n * Event that fires on mouse click.\n */\n click: MouseEvent;\n\n /**\n * Event that fires when the user attempts to open a context menu.\n */\n contextmenu: PointerEvent;\n\n /**\n * Event that fires on mouse double click.\n */\n dblclick: MouseEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n mousedown: MouseEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n mouseleave: MouseEvent;\n\n /**\n * Event that fires on mouse move.\n */\n mousemove: MouseEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n mouseup: MouseEvent;\n\n /**\n * Event is fired when the browser determines that there are unlikely to be any more pointer events.\n */\n pointercancel: PointerEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n pointerdown: PointerEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n pointerleave: PointerEvent;\n\n /**\n * Event that fires on mouse move.\n */\n pointermove: PointerEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n pointerup: PointerEvent;\n\n /**\n * Event that fires touch is canceled.\n */\n touchcancel: TouchEvent;\n\n /**\n * Event that fires touch is ended.\n */\n touchend: TouchEvent;\n\n /**\n * Event that fires touch is moving.\n */\n touchmove: TouchEvent;\n\n /**\n * Event that fires when touch is started.\n */\n touchstart: TouchEvent;\n\n /**\n * Event that fires when mouse wheel is moving.\n */\n wheel: MouseEvent;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewer-core.module.js","sources":["../src/commands/Commands.ts","../src/draggers/Dragger.ts","../src/draggers/Draggers.ts","../src/components/Component.ts","../src/components/Components.ts","../src/loaders/Loader.ts","../src/loaders/Loaders.ts","../src/options/IOptions.ts","../src/options/Options.ts","../src/viewer/CanvasEvents.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IViewer } from \"../viewer/IViewer\";\nimport { ICommand, ICommandHandler, ICommandDescription, ICommandsRegistry } from \"./ICommands\";\n\nclass CommandsRegistry implements ICommandsRegistry {\n private readonly _commands = new Map<string, ICommand>();\n\n registerCommand(id: string, handler: ICommandHandler, description?: ICommandDescription, thisArg?: any): void {\n this._commands.set(id, { id, handler, thisArg, description });\n }\n\n registerCommandAlias(id: string, alias: string): void {\n this.registerCommand(alias, (viewer: IViewer, ...args) => this.executeCommand(id, viewer, ...args));\n }\n\n getCommand(id: string): ICommand | undefined {\n return this._commands.get(id);\n }\n\n getCommands(): Map<string, ICommand> {\n const map = new Map<string, ICommand>();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n executeCommand(id: string, viewer: IViewer, ...args: any[]): any {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n\n const { handler, thisArg } = command;\n const result = handler.apply(thisArg, [viewer, ...args]);\n\n viewer?.emit({ type: \"command\", data: id, args });\n\n return result;\n }\n}\n\nconst _commandsRegistry = new Map<string, CommandsRegistry>();\n\nfunction commandsRegistry(viewerType = \"\"): ICommandsRegistry {\n let result = _commandsRegistry.get(viewerType);\n if (!result) {\n result = new CommandsRegistry();\n _commandsRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { commandsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IDragger } from \"./IDraggers\";\n\nexport class Dragger implements IDragger {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IDragger, IDraggerProvider, IDraggersRegistry } from \"./IDraggers\";\n\nclass DraggersRegistry implements IDraggersRegistry {\n private readonly _providers = new Map<string, IDraggerProvider>();\n\n registerDragger(name: string, provider: IDraggerProvider): void {\n this._providers.set(name, provider);\n }\n\n registerDraggerAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerDragger(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getDraggers(): Map<string, IDraggerProvider> {\n const map = new Map<string, IDraggerProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createDragger(name: string, viewer: IViewer): IDragger | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const dragger = provider(viewer);\n dragger.name = name;\n\n return dragger;\n }\n}\n\nconst _draggersRegistry = new Map<string, DraggersRegistry>();\n\nfunction draggersRegistry(viewerType = \"\"): IDraggersRegistry {\n let result = _draggersRegistry.get(viewerType);\n if (!result) {\n result = new DraggersRegistry();\n _draggersRegistry.set(viewerType, result);\n }\n return result;\n}\n\nexport { draggersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport type { IComponent } from \"./IComponents\";\n\nexport class Component implements IComponent {\n name = \"\";\n\n constructor(viewer: IViewer) {}\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { IComponent, IComponentProvider, IComponentsRegistry } from \"./IComponents\";\n\nclass Components implements IComponentsRegistry {\n private readonly _providers = new Map<string, IComponentProvider>();\n\n registerComponent(name: string, provider: IComponentProvider): void {\n this._providers.set(name, provider);\n }\n\n registerComponentAlias(name: string, alias: string): void {\n const provider = this._providers.get(name);\n if (provider) this.registerComponent(alias, (viewer: IViewer) => provider(viewer));\n }\n\n getComponents(): Map<string, IComponentProvider> {\n const map = new Map<string, IComponentProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createComponent(name: string, viewer: IViewer): IComponent | null {\n const provider = this._providers.get(name);\n if (!provider) return null;\n\n const component = provider(viewer);\n component.name = name;\n\n return component;\n }\n}\n\nconst _components = new Map<string, Components>();\n\nfunction componentsRegistry(viewerType = \"\"): IComponentsRegistry {\n let result = _components.get(viewerType);\n if (!result) {\n result = new Components();\n _components.set(viewerType, result);\n }\n return result;\n}\n\nexport { componentsRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { FileSource, ILoader, LoadParams } from \"./ILoader\";\n\nexport class Loader implements ILoader {\n public name = \"\";\n public abortController: AbortController = new AbortController();\n\n dispose(): void {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n isSupport(file: FileSource, format?: string): boolean {\n return false;\n }\n\n load(file: FileSource, format?: string, params?: LoadParams): Promise<this> {\n return Promise.resolve(this);\n }\n\n cancel(): void {\n this.abortController.abort();\n }\n\n extractFileName(file: FileSource): string {\n const regex = /[^/\\\\?#:]+(?=\\?|#|$)/;\n\n if (typeof file === \"string\") return (file.match(regex) || [])[0];\n else if (file instanceof globalThis.File) return (file.name.match(regex) || [])[0];\n\n return undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport type { IViewer } from \"../viewer/IViewer\";\nimport { FileSource, ILoader, ILoaderProvider, ILoadersRegistry } from \"./ILoader\";\n\nclass Loaders implements ILoadersRegistry {\n private readonly _providers = new Map<string, ILoaderProvider>();\n\n registerLoader(name: string, provider: ILoaderProvider): void {\n this._providers.set(name, provider);\n }\n\n getLoader(name: string): ILoaderProvider | undefined {\n return this._providers.get(name);\n }\n\n getLoaders(): Map<string, ILoaderProvider> {\n const map = new Map<string, ILoaderProvider>();\n this._providers.forEach((value, key) => map.set(key, value));\n return map;\n }\n\n createLoader(viewer: IViewer, file: FileSource, format?: string): ILoader | null {\n let result: ILoader = null;\n this._providers.forEach((provider, key) => {\n const loader = provider(viewer);\n if (loader.isSupport(file, format)) {\n result = loader;\n result.name = key;\n }\n });\n return result;\n }\n}\n\nconst _loaders = new Map<string, Loaders>();\n\nfunction loadersRegistry(viewerType = \"\"): ILoadersRegistry {\n let result = _loaders.get(viewerType);\n if (!result) {\n result = new Loaders();\n _loaders.set(viewerType, result);\n }\n return result;\n}\n\nexport { loadersRegistry };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport type CameraMode = \"perspective\" | \"orthographic\";\n\nexport interface RGB {\n red: number;\n green: number;\n blue: number;\n}\n\n/**\n * Viewer options interface.\n */\nexport interface IOptions {\n /**\n * Show the world coordinate system axes in the bottom-left corner of the viewer.\n *\n * @defaultValue true\n */\n showWCS?: boolean;\n\n /**\n * Enable camera animation.\n *\n * @defaultValue true\n */\n cameraAnimation?: boolean;\n\n /**\n * Enable anti-aliasing. Can be one of:\n *\n * - `false` - Disable anti-aliasing.\n * - `true` - Enable anti-aliasing using MSAA.\n * - `fxaa` - Enable Fast Approximate anti-aliasing (FXAA).\n * - `smaa` - Enable Subpixel Morphological anti-aliasing (SMAA).\n * - `msaa` - Enable Multisample anti-aliasing (MSAA), if the underlying WebGL context supports it.\n *\n * @defaultValue true\n */\n antialiasing?: boolean | string;\n\n /**\n * Show ground shadows below the model.\n *\n * @defaultValue false\n */\n groundShadow?: boolean;\n\n /**\n * Enable ambient shadows.\n *\n * @defaultValue false\n */\n shadows?: boolean;\n\n /**\n * Camera speed on X axis.\n *\n * @defaultValue 4\n */\n cameraAxisXSpeed?: number;\n\n /**\n * Camera speed on Y axis.\n *\n * @defaultValue 1\n */\n cameraAxisYSpeed?: number;\n\n /**\n * Enable ambient occlusion.\n *\n * @defaultValue false\n */\n ambientOcclusion?: boolean;\n\n /**\n * Enable streaming of drawings from the server.\n *\n * If streaming is disabled, the file/assembly will be loaded in one go. The viewer will only update\n * once the loading is complete, which may take a while.\n *\n * If streaming is enabled, {@link enablePartialMode | partial streaming} mode may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode?: boolean;\n\n /**\n * Enable partial streaming mode to be able open large drawing.\n *\n * In partial streaming mode, the viewer keeps only visible objects in memory and loads other objects\n * when the camera changes.\n *\n * Only used if {@link enableStreamingMode | streaming} is enabled. If partial streaming is enabled,\n * then {@link sceneGraph | scene graph} will be disabled.\n *\n * @defaultValue false\n */\n enablePartialMode?: boolean;\n\n /**\n * The size of the memory buffer for graphics data, in bytes.\n *\n * @defaultValue 3294967296\n */\n memoryLimit?: number;\n\n /**\n * Cutting planes fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n cuttingPlaneFillColor?: RGB;\n\n /**\n * Edges highlight color.\n */\n edgesColor?: { r: number; g: number; b: number };\n\n /**\n * Faces highlight color.\n */\n facesColor?: { r: number; g: number; b: number };\n\n /**\n * Show highlighted edges.\n */\n edgesVisibility?: boolean;\n\n /**\n * Show highlighted edges over drawing.\n */\n edgesOverlap?: boolean;\n\n /**\n * Show highlighted faces over drawing.\n */\n facesOverlap?: boolean;\n\n /**\n * Highlighted faces transparency value, from 0 to 255.\n */\n facesTransparancy?: number;\n\n /**\n * Enable custom highlight settings.\n */\n enableCustomHighlight?: boolean;\n\n /**\n * Enable scene graph.\n *\n * Scene graph increases perfomance improvement, but consumes memory. If scene graph is enabled, then\n * {@link enablePartialMode | partial streaming} mode will be disabled.\n */\n sceneGraph: boolean;\n\n /**\n * Show the edges of the model:\n *\n * - `false` - No model edges are displayed. Usefull for less memory consumption.\n * - `true` - Display isolines.\n */\n edgeModel: boolean;\n\n /**\n * Reverse the mouse wheel direction for zooming:\n *\n * - `false` - Moving the wheel up zooms in, moving down zooms out.\n * - `true` - Moving the wheel up zooms out, moving down zooms in.\n */\n reverseZoomWheel: boolean;\n\n /**\n * Enable mouse wheel zooming.\n */\n enableZoomWheel: boolean;\n\n /**\n * Enable touch gestures.\n *\n * This option will be ignored when {@link enableZoomWheel | mouse wheel zooming} is disabled, since\n * gestures contains touch zoom.\n */\n enableGestures: boolean;\n\n /**\n * Deprecated since `25.8`.\n */\n geometryType?: string;\n\n /**\n * Unit of measurement for the ruler tool (distance measurements).\n *\n * When set to `Default`, the ruler uses the file's native units. Otherwise, distances are\n * automatically converted to the specified unit.\n *\n * Available values:\n *\n * - `Default` - Use file's native units (recommended)\n * - `Millimeters` - Metric: 0.001 m\n * - `Centimeters` - Metric: 0.01 m\n * - `Meters` - Metric: 1 m (base unit)\n * - `Kilometers` - Metric: 1000 m\n * - `Micrometers` - Metric: 0.000001 m\n * - `Inches` - Imperial: 0.0254 m\n * - `Feet` - Imperial: 0.3048 m\n * - `Yards` - Imperial: 0.9144 m\n * - `Miles` - Imperial: 1609.344 m\n * - `Mils` - Imperial: 0.0000254 m\n * - `MicroInches` - Imperial: 0.0000000254 m\n *\n * @defaultValue \"Default\"\n */\n rulerUnit?: string;\n\n /**\n * Number of decimal places to display in ruler measurements.\n *\n * Controls the precision of distance values shown by the ruler tool. Higher values provide more\n * precision but may clutter the display with unnecessary digits.\n *\n * Available values:\n *\n * - `Default` - Use file's native units precision, if supported, otherwise use 2 digits.\n * - `Auto` - Automatically choose precision based on distance value.\n * - `0`...`10` - Use specified number of decimal places (range 0-10, inclusive).\n *\n * @defaultValue 2\n */\n rulerPrecision?: any;\n\n /**\n * Camera projection mode:\n *\n * - `perspective` - Perspective camera with field of view.\n * - `orthographic` - Orthographic camera with parallel projection.\n *\n * @defaultValue \"perspective\"\n */\n cameraMode?: CameraMode;\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset.\n */\n resetToDefaults?: (fields?: string[]) => void;\n}\n\nexport function defaultOptions(): IOptions {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: { red: 0xff, green: 0x98, blue: 0x00 },\n edgesColor: { r: 0xff, g: 0x98, b: 0x00 },\n facesColor: { r: 0xff, g: 0x98, b: 0x00 },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\",\n rulerUnit: \"Default\",\n rulerPrecision: 2,\n cameraMode: \"perspective\",\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nexport class Options implements IOptions {\n protected _emitter?: EventEmitter2;\n protected _data: IOptions;\n\n constructor(emitter?: EventEmitter2) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n notifierChangeEvent(): void {\n console.warn(\n \"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\"\n );\n this.change();\n }\n\n change(): void {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n saveToStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n\n loadFromStorage(): void {\n if (typeof window !== \"undefined\")\n try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = { ...data };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n\n /**\n * Resets options to default values.\n *\n * @param fields - Name of fields to be reset. Specify `undefined` to reset all.\n */\n resetToDefaults(fields?: string[]): void {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }, {});\n this.data = { ...this.data, ...resetData };\n } else {\n this.data = { ...this.data, ...Options.defaults() };\n }\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: IOptions) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = { ...Options.defaults(), ...this._data, ...value, enablePartialMode, sceneGraph };\n this.change();\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this._data.showWCS = value;\n this.change();\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this._data.cameraAnimation = value;\n this.change();\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this._data.antialiasing = value;\n this.change();\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this._data.groundShadow = value;\n this.change();\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this._data.shadows = value;\n this.change();\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this._data.memoryLimit = value;\n this.change();\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n\n get edgesColor() {\n return this._data.edgesColor;\n }\n\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n\n get facesColor() {\n return this._data.facesColor;\n }\n\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n\n get enableGestures() {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this._data.enableGestures = !!value;\n this.change();\n }\n\n get geometryType() {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this._data.geometryType = value;\n this.change();\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this._data.rulerUnit = value;\n this.change();\n }\n\n get rulerPrecision(): any {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: any) {\n this._data.rulerPrecision = value;\n this.change();\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode || \"perspective\";\n }\n\n set cameraMode(value: CameraMode) {\n this._data.cameraMode = value;\n this.change();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport const CanvasEvents = [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseup\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerup\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n];\n\nexport const CANVAS_EVENTS = CanvasEvents;\n\n/**\n * Canvas Events.\n *\n * @event\n */\nexport interface CanvasEventMap {\n /**\n * Event that fires on mouse click.\n */\n click: MouseEvent;\n\n /**\n * Event that fires when the user attempts to open a context menu.\n */\n contextmenu: PointerEvent;\n\n /**\n * Event that fires on mouse double click.\n */\n dblclick: MouseEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n mousedown: MouseEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n mouseleave: MouseEvent;\n\n /**\n * Event that fires on mouse move.\n */\n mousemove: MouseEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n mouseup: MouseEvent;\n\n /**\n * Event is fired when the browser determines that there are unlikely to be any more pointer events.\n */\n pointercancel: PointerEvent;\n\n /**\n * Event that fires on mouse button is down.\n */\n pointerdown: PointerEvent;\n\n /**\n * Event that fires on mouse leave.\n */\n pointerleave: PointerEvent;\n\n /**\n * Event that fires on mouse move.\n */\n pointermove: PointerEvent;\n\n /**\n * Event that fires on mouse button is up.\n */\n pointerup: PointerEvent;\n\n /**\n * Event that fires touch is canceled.\n */\n touchcancel: TouchEvent;\n\n /**\n * Event that fires touch is ended.\n */\n touchend: TouchEvent;\n\n /**\n * Event that fires touch is moving.\n */\n touchmove: TouchEvent;\n\n /**\n * Event that fires when touch is started.\n */\n touchstart: TouchEvent;\n\n /**\n * Event that fires when mouse wheel is moving.\n */\n wheel: MouseEvent;\n}\n"],"names":[],"mappings":"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"}
@@ -4,12 +4,13 @@ import { IViewer } from "../viewer/IViewer";
4
4
  */
5
5
  export interface ICommandService {
6
6
  /**
7
- * Executes the command denoted by the given command ID.
7
+ * Executes the command denoted by the given command ID. If the command is not found, tries to set
8
+ * active dragger with the specified name.
8
9
  *
9
- * @param id - ID of the command to execute.
10
+ * @param id - Command ID or dragger name.
10
11
  * @param args - Parameters passed to the command handler function.
11
- * @returns Returns the result of the command handler function. Returns `undefined` when the command
12
- * doesn't exists.
12
+ * @returns Returns the result of the command handler function or new active dragger instance. Returns
13
+ * `undefined` if neither the command nor the dragger exists.
13
14
  */
14
15
  executeCommand(id: string, ...args: any[]): any;
15
16
  }
package/lib/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export * from "./components/IComponents";
9
9
  export * from "./loaders/ILoader";
10
10
  export * from "./loaders/Loader";
11
11
  export * from "./loaders/Loaders";
12
+ export * from "./models/IModel";
12
13
  export * from "./options/IOptions";
13
14
  export * from "./options/Options";
14
15
  export * from "./options/OptionsEvents";
@@ -4,7 +4,7 @@ import type { IViewer } from "../viewer/IViewer";
4
4
  * Defines the file source to load into the viewer:
5
5
  *
6
6
  * - `File`, `Assembly` or `Model` instance from the Open Cloud Server
7
- * - File `URL` string
7
+ * - `URL` string
8
8
  * - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string
9
9
  * - {@link https://developer.mozilla.org/docs/Web/API/File | Web API File} object
10
10
  * - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}
@@ -6,4 +6,5 @@ export declare class Loader implements ILoader {
6
6
  isSupport(file: FileSource, format?: string): boolean;
7
7
  load(file: FileSource, format?: string, params?: LoadParams): Promise<this>;
8
8
  cancel(): void;
9
+ extractFileName(file: FileSource): string;
9
10
  }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Model interface.
3
+ */
4
+ export interface IModel {
5
+ /**
6
+ * Unique model ID, used as a model prefix when selecting objects in assemblies (multi-model scenes).
7
+ * Can be:
8
+ *
9
+ * - `file ID` - when loading a file from Open Cloud Server.
10
+ * - `assembly ID` - when loading an assembly from Open Cloud Server.
11
+ * - `model ID` - when loading a model of the file/assembly from Open Cloud Server.
12
+ * - `file name` - when loading from local File or URL.
13
+ * - `user defined` - when loading from ArrayBuffer or Data URL.
14
+ */
15
+ id: string;
16
+ /**
17
+ * Disposes the model and releases allocated resources.
18
+ */
19
+ dispose(): void;
20
+ }
@@ -170,14 +170,44 @@ export interface IOptions {
170
170
  */
171
171
  geometryType?: string;
172
172
  /**
173
- * Ruler unit.
174
- *
175
- * Available values: Default, Millimeters, Centimeters, Meters, Feet, Inches, Yards, Kilometers, Miles,
176
- * Micrometers, MicroInches
173
+ * Unit of measurement for the ruler tool (distance measurements).
174
+ *
175
+ * When set to `Default`, the ruler uses the file's native units. Otherwise, distances are
176
+ * automatically converted to the specified unit.
177
+ *
178
+ * Available values:
179
+ *
180
+ * - `Default` - Use file's native units (recommended)
181
+ * - `Millimeters` - Metric: 0.001 m
182
+ * - `Centimeters` - Metric: 0.01 m
183
+ * - `Meters` - Metric: 1 m (base unit)
184
+ * - `Kilometers` - Metric: 1000 m
185
+ * - `Micrometers` - Metric: 0.000001 m
186
+ * - `Inches` - Imperial: 0.0254 m
187
+ * - `Feet` - Imperial: 0.3048 m
188
+ * - `Yards` - Imperial: 0.9144 m
189
+ * - `Miles` - Imperial: 1609.344 m
190
+ * - `Mils` - Imperial: 0.0000254 m
191
+ * - `MicroInches` - Imperial: 0.0000000254 m
177
192
  *
178
193
  * @defaultValue "Default"
179
194
  */
180
- rulerUnit: string;
195
+ rulerUnit?: string;
196
+ /**
197
+ * Number of decimal places to display in ruler measurements.
198
+ *
199
+ * Controls the precision of distance values shown by the ruler tool. Higher values provide more
200
+ * precision but may clutter the display with unnecessary digits.
201
+ *
202
+ * Available values:
203
+ *
204
+ * - `Default` - Use file's native units precision, if supported, otherwise use 2 digits.
205
+ * - `Auto` - Automatically choose precision based on distance value.
206
+ * - `0`...`10` - Use specified number of decimal places (range 0-10, inclusive).
207
+ *
208
+ * @defaultValue 2
209
+ */
210
+ rulerPrecision?: any;
181
211
  /**
182
212
  * Camera projection mode:
183
213
  *
@@ -85,6 +85,8 @@ export declare class Options implements IOptions {
85
85
  set geometryType(value: string);
86
86
  get rulerUnit(): string;
87
87
  set rulerUnit(value: string);
88
+ get rulerPrecision(): any;
89
+ set rulerPrecision(value: any);
88
90
  get cameraMode(): CameraMode;
89
91
  set cameraMode(value: CameraMode);
90
92
  }
@@ -4,7 +4,8 @@ import { ICommandService } from "../commands/ICommands";
4
4
  import { IOptions } from "../options/IOptions";
5
5
  import { IDragger } from "../draggers/IDraggers";
6
6
  import { IComponent } from "../components/IComponents";
7
- import { FileSource } from "../loaders/ILoader";
7
+ import { FileSource, ILoader } from "../loaders/ILoader";
8
+ import { IModel } from "../models/IModel";
8
9
  import { IViewpoint } from "./IViewpoint";
9
10
  /**
10
11
  * Viewer core interface.
@@ -50,6 +51,14 @@ export interface IViewer extends IEventEmitter, ICommandService {
50
51
  * - wheel
51
52
  */
52
53
  canvasEvents: string[];
54
+ /**
55
+ * List of active loaders used to load models into the viewer.
56
+ */
57
+ loaders: ILoader[];
58
+ /**
59
+ * List of models loaded into the viewer.
60
+ */
61
+ models: IModel[];
53
62
  /**
54
63
  * List of names of available draggers.
55
64
  *
@@ -134,14 +143,16 @@ export interface IViewer extends IEventEmitter, ICommandService {
134
143
  * thrown.
135
144
  *
136
145
  * For URLs, the file extension is used to determine the file format. For a `ArrayBuffer` and `Data
137
- * URL`, a file format must be specified using `params.format` parameter (see below). If no appropriate
138
- * loader is found for the specified format, an exception will be thrown.
146
+ * URL`, a file format must be specified using `params.format` parameter. If no appropriate loader is
147
+ * found for the specified format, an exception will be thrown.
139
148
  *
140
149
  * If there was an active dragger before opening the file, it will be deactivated. After opening the
141
150
  * file, you must manually activate the required dragger.
142
151
  *
143
152
  * Fires:
144
153
  *
154
+ * - {@link CancelEvent | cancel}
155
+ * - {@link ClearEvent | clear}
145
156
  * - {@link OpenEvent | open}
146
157
  * - {@link GeometryStartEvent | geometrystart}
147
158
  * - {@link GeometryProgressEvent | geometryprogress}
@@ -150,23 +161,26 @@ export interface IViewer extends IEventEmitter, ICommandService {
150
161
  * - {@link GeometryEndEvent | geometryend}
151
162
  * - {@link GeometryErrorEvent | geometryerror}
152
163
  *
153
- * @param file - File to load. Can be one of:
164
+ * @param file - File to load. Can be:
154
165
  *
155
166
  * - `File`, `Assembly` or `Model` instance from the Open Cloud Server
156
- * - File `URL` string
167
+ * - `URL` string
157
168
  * - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string
158
169
  * - {@link https://developer.mozilla.org/docs/Web/API/File | Web API File} object
159
170
  * - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}
160
171
  * object
161
172
  *
162
173
  * @param params - Loading parameters.
163
- * @param params.format - File format string. Required when loading a file as `ArrayBuffer` or `Data *
164
- * URL`.
165
- * @param params.mode - File opening mode. Viewer specific. Can be one of:
174
+ * @param params.format - File format. Required when loading a file as `ArrayBuffer` or `Data URL`.
175
+ * @param params.mode - File opening mode. Can be one of:
166
176
  *
167
- * - `open` - Unloads an open file and opens a new one. This is default mode.
168
- * - `append` - Appends a file to an already open file. This mode is not supported for all formats.
177
+ * - `file` - Single file mode. Unloads an open file and opens a new one. This is default mode.
178
+ * - `assembly` - Assembly mode. Appends a file to an already open file (). This mode is not supported
179
+ * for all viewers.
169
180
  *
181
+ * @param params.modelId - Unique model ID in the assembly (multi-model scene). Used as a model prefix
182
+ * when selecting objects (see {@link getSelected2}). Must not contain the ":" (colon). Required when
183
+ * loading a file as `ArrayBuffer` or `Data URL`.
170
184
  * @param params.requestHeader - The
171
185
  * {@link https://developer.mozilla.org/docs/Glossary/Request_header | request header} used in HTTP
172
186
  * request.
@@ -178,6 +192,7 @@ export interface IViewer extends IEventEmitter, ICommandService {
178
192
  open(file: FileSource, params: {
179
193
  format?: string;
180
194
  mode?: string;
195
+ modelId?: string;
181
196
  requestHeader?: HeadersInit;
182
197
  withCredentials?: boolean;
183
198
  }): Promise<this>;
@@ -214,19 +229,41 @@ export interface IViewer extends IEventEmitter, ICommandService {
214
229
  */
215
230
  clearSlices(): void;
216
231
  /**
217
- * Returns a list of original handles for the selected objects.
232
+ * Returns a list of original handles for the selected objects. To avoid handle collisions in
233
+ * assemblies (multi-model scenes), use {@link getSelected2} instead.
234
+ *
235
+ * @returns The list of original object handles.
218
236
  */
219
237
  getSelected(): string[];
220
238
  /**
221
- * Selects the objects by original handles.
239
+ * Returns a list of original handles for the selected objects in assemblies (multi-model scenes).
240
+ *
241
+ * @returns The list of original object handles with model prefix in format "model:handle".
242
+ */
243
+ getSelected2(): string[];
244
+ /**
245
+ * Selects the objects by original handles. To avoid handle collisions in assemblies (multi-model
246
+ * scenes), use {@link setSelected2} instead.
222
247
  *
223
248
  * Fires:
224
249
  *
225
250
  * - {@link SelectEvent | select}
251
+ * - {@link Select2Event | select2}
226
252
  *
227
253
  * @param handles - The list of original handles.
228
254
  */
229
255
  setSelected(handles?: string[]): void;
256
+ /**
257
+ * Selects the objects by original handles in assemblies (multi-model scenes).
258
+ *
259
+ * Fires:
260
+ *
261
+ * - {@link SelectEvent | select}
262
+ * - {@link Select2Event | select2}
263
+ *
264
+ * @param handles - The list of original handles with model prefix in format "model:handle".
265
+ */
266
+ setSelected2(handles?: string[]): void;
230
267
  /**
231
268
  * Unselects all objects.
232
269
  *
@@ -302,6 +339,8 @@ export interface IViewer extends IEventEmitter, ICommandService {
302
339
  resetActiveDragger(): void;
303
340
  /**
304
341
  * Returns the component reference, or `null` if there is no component with the specified name.
342
+ *
343
+ * @param name - Component name. Can be one of the {@link components} list.
305
344
  */
306
345
  getComponent(name: string): IComponent | null;
307
346
  /**