@inweb/viewer-core 27.6.1 → 27.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/viewer-core.js +49 -19
- package/dist/viewer-core.js.map +1 -1
- package/dist/viewer-core.module.js +49 -19
- package/dist/viewer-core.module.js.map +1 -1
- package/package.json +3 -3
- package/src/options/Options.ts +38 -26
package/dist/viewer-core.js
CHANGED
|
@@ -430,16 +430,28 @@
|
|
|
430
430
|
return this._data.enableStreamingMode;
|
|
431
431
|
}
|
|
432
432
|
set enableStreamingMode(value) {
|
|
433
|
-
this.
|
|
434
|
-
|
|
433
|
+
this.beginUpdate();
|
|
434
|
+
try {
|
|
435
|
+
this.setProperty("enableStreamingMode", value);
|
|
436
|
+
this.setProperty("enablePartialMode", this.enablePartialMode && this.enableStreamingMode);
|
|
437
|
+
}
|
|
438
|
+
finally {
|
|
439
|
+
this.endUpdate();
|
|
440
|
+
}
|
|
435
441
|
}
|
|
436
442
|
get enablePartialMode() {
|
|
437
443
|
return this._data.enablePartialMode;
|
|
438
444
|
}
|
|
439
445
|
set enablePartialMode(value) {
|
|
440
|
-
this.
|
|
441
|
-
|
|
442
|
-
|
|
446
|
+
this.beginUpdate();
|
|
447
|
+
try {
|
|
448
|
+
this.setProperty("enablePartialMode", value);
|
|
449
|
+
this.setProperty("enableStreamingMode", this.enableStreamingMode || this.enablePartialMode);
|
|
450
|
+
this.setProperty("sceneGraph", this.sceneGraph && !this.enablePartialMode);
|
|
451
|
+
}
|
|
452
|
+
finally {
|
|
453
|
+
this.endUpdate();
|
|
454
|
+
}
|
|
443
455
|
}
|
|
444
456
|
get memoryLimit() {
|
|
445
457
|
return this._data.memoryLimit;
|
|
@@ -454,12 +466,18 @@
|
|
|
454
466
|
if (this._updateCount === 0) {
|
|
455
467
|
console.warn("Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead");
|
|
456
468
|
}
|
|
457
|
-
this.
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
469
|
+
this.beginUpdate();
|
|
470
|
+
try {
|
|
471
|
+
this.setProperty("cuttingPlaneFillColor", value, isLegacyRGB(value));
|
|
472
|
+
this.setProperty("sectionFillColor", {
|
|
473
|
+
r: this._data.cuttingPlaneFillColor.red,
|
|
474
|
+
g: this._data.cuttingPlaneFillColor.green,
|
|
475
|
+
b: this._data.cuttingPlaneFillColor.blue,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
finally {
|
|
479
|
+
this.endUpdate();
|
|
480
|
+
}
|
|
463
481
|
}
|
|
464
482
|
get enableSectionFill() {
|
|
465
483
|
return this._data.enableSectionFill;
|
|
@@ -471,12 +489,18 @@
|
|
|
471
489
|
return this._data.sectionFillColor;
|
|
472
490
|
}
|
|
473
491
|
set sectionFillColor(value) {
|
|
474
|
-
this.
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
492
|
+
this.beginUpdate();
|
|
493
|
+
try {
|
|
494
|
+
this.setProperty("sectionFillColor", value, isColorRGB(value));
|
|
495
|
+
this.setProperty("cuttingPlaneFillColor", {
|
|
496
|
+
red: this._data.sectionFillColor.r,
|
|
497
|
+
green: this._data.sectionFillColor.g,
|
|
498
|
+
blue: this._data.sectionFillColor.b,
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
finally {
|
|
502
|
+
this.endUpdate();
|
|
503
|
+
}
|
|
480
504
|
}
|
|
481
505
|
get sectionUseObjectColor() {
|
|
482
506
|
return this._data.sectionUseObjectColor;
|
|
@@ -566,8 +590,14 @@
|
|
|
566
590
|
return this._data.sceneGraph;
|
|
567
591
|
}
|
|
568
592
|
set sceneGraph(value) {
|
|
569
|
-
this.
|
|
570
|
-
|
|
593
|
+
this.beginUpdate();
|
|
594
|
+
try {
|
|
595
|
+
this.setProperty("sceneGraph", value);
|
|
596
|
+
this.setProperty("enablePartialMode", this.enablePartialMode && !this.sceneGraph);
|
|
597
|
+
}
|
|
598
|
+
finally {
|
|
599
|
+
this.endUpdate();
|
|
600
|
+
}
|
|
571
601
|
}
|
|
572
602
|
get edgeModel() {
|
|
573
603
|
return Boolean(this._data.edgeModel);
|
package/dist/viewer-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-core.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","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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.cancel();\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 yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\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 \"\";\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 = 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-2026, 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-2026 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 Open Cloud 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} may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode: boolean;\n\n /**\n * Enable partial streaming to be able open large drawing.\n *\n * In partial streaming, the viewer keeps only visible objects in memory and loads other objects when\n * 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 * Deprecated since `27.5`. Use {@link sectionFillColor} instead.\n *\n * @deprecated\n */\n cuttingPlaneFillColor: RGB;\n\n /**\n * Show solid fill on section caps.\n *\n * When disabled, neither the fill nor the hatch is drawn (the outline, if enabled, is still shown).\n *\n * @defaultValue true\n */\n enableSectionFill: boolean;\n\n /**\n * Section cap fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n sectionFillColor: { r: number; g: number; b: number };\n\n /**\n * Use the intersected object's color for the section cap fill.\n *\n * When enabled, each section cap is filled with a color derived from the intersected object and\n * `sectionFillColor` is ignored. The outline color is not affected.\n *\n * @defaultValue false\n */\n sectionUseObjectColor: boolean;\n\n /**\n * Overlay a hatch pattern on top of the section fill.\n *\n * @defaultValue true\n */\n enableSectionHatch: boolean;\n\n /**\n * Hatch line color used on top of the section fill.\n *\n * @defaultValue { red: 0x4b, green: 0x4c, blue: 0x35 }\n */\n sectionHatchColor: { r: number; g: number; b: number };\n\n /**\n * Distance between hatch lines, in screen-space pixels.\n *\n * Larger values produce sparser hatching.\n *\n * @defaultValue 8\n */\n sectionHatchScale: number;\n\n /**\n * Draw the outline contour along the section boundary.\n *\n * @defaultValue true\n */\n enableSectionOutline: boolean;\n\n /**\n * Color of the section outline contour.\n *\n * @defaultValue { red: 0, green: 0, blue: 0 }\n */\n sectionOutlineColor: { r: number; g: number; b: number };\n\n /**\n * Width of the section outline contour, in pixels.\n *\n * @defaultValue 2\n */\n sectionOutlineWidth: number;\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} 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 * Preferred viewer for newely uploaded files. Can be one of:\n *\n * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.\n * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.\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`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - 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: \"Default\" | \"Auto\" | number;\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 * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality: number;\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 enableSectionFill: true,\n sectionFillColor: { r: 0xff, g: 0x98, b: 0x00 },\n sectionUseObjectColor: false,\n enableSectionHatch: true,\n sectionHatchColor: { r: 0, g: 0, b: 0 },\n sectionHatchScale: 8,\n enableSectionOutline: true,\n sectionOutlineColor: { r: 0, g: 0, b: 0 },\n sectionOutlineWidth: 2,\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 snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nfunction isColorRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { r?: unknown }).r === \"number\" &&\n typeof (value as { g?: unknown }).g === \"number\" &&\n typeof (value as { b?: unknown }).b === \"number\"\n );\n}\n\nfunction isLegacyRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { red?: unknown }).red === \"number\" &&\n typeof (value as { green?: unknown }).green === \"number\" &&\n typeof (value as { blue?: unknown }).blue === \"number\"\n );\n}\n\nexport class Options implements IOptions {\n protected _emitter?: IEventEmitter;\n protected _data: IOptions;\n protected _defaults: IOptions;\n protected _updateCount = 0;\n\n constructor(emitter?: IEventEmitter) {\n this._emitter = emitter;\n this._data = Options.defaults();\n this._defaults = Options.defaults();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n change(): void {\n if (this._emitter !== undefined && this._updateCount === 0) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n beginUpdate(): void {\n this._updateCount++;\n }\n\n endUpdate(): void {\n this._updateCount--;\n this.change();\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) this.data = JSON.parse(item);\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[], defaults: IOptions = this._defaults): void {\n if (Array.isArray(fields)) {\n const resetData: Partial<IOptions> = {};\n for (const field of fields) {\n if (field in defaults) resetData[field] = defaults[field];\n }\n this.data = resetData;\n } else {\n this.data = defaults;\n }\n }\n\n setProperty<K extends keyof IOptions>(\n key: K,\n value: IOptions[K] = this._defaults[key],\n accept: boolean = this.isValidValue(key, value)\n ): void {\n if (!accept) {\n console.warn(`Options.${key}: Invalid value`, value);\n return;\n }\n if (this._data[key] !== value) {\n this._data[key] = value;\n this.change();\n }\n }\n\n isValidValue(key: keyof IOptions, value: unknown): boolean {\n return typeof value === typeof this._defaults[key];\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: Partial<IOptions>) {\n this.beginUpdate();\n try {\n for (const key of Object.keys(value)) {\n if (key in this._defaults) this[key] = value[key];\n else this._data[key] = value[key];\n }\n // partial streaming first\n if (\"enablePartialMode\" in value) {\n this.enablePartialMode = (value as IOptions).enablePartialMode;\n }\n // sectionFillColor since 27.5\n if (\"sectionFillColor\" in value) {\n this.sectionFillColor = (value as IOptions).sectionFillColor;\n }\n } finally {\n this.endUpdate();\n }\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this.setProperty(\"showWCS\", value);\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this.setProperty(\"cameraAnimation\", value);\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this.setProperty(\"antialiasing\", value, typeof value === \"boolean\" || typeof value === \"string\");\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this.setProperty(\"groundShadow\", value);\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this.setProperty(\"shadows\", value);\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this.setProperty(\"cameraAxisXSpeed\", value);\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.setProperty(\"cameraAxisYSpeed\", value);\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this.setProperty(\"ambientOcclusion\", value);\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this.setProperty(\"enableStreamingMode\", value);\n // partial streaming is only used if streaming is enabled\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && this.enableStreamingMode);\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this.setProperty(\"enablePartialMode\", value);\n // partial streaming requires streaming enabled and disables scene graph\n this.setProperty(\"enableStreamingMode\", this.enableStreamingMode || this.enablePartialMode);\n this.setProperty(\"sceneGraph\", this.sceneGraph && !this.enablePartialMode);\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this.setProperty(\"memoryLimit\", value);\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n if (this._updateCount === 0) {\n console.warn(\n \"Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead\"\n );\n }\n this.setProperty(\"cuttingPlaneFillColor\", value, isLegacyRGB(value));\n // kept in sync with sectionFillColor (deprecated since 27.5)\n this.setProperty(\n \"sectionFillColor\",\n {\n r: this._data.cuttingPlaneFillColor.red,\n g: this._data.cuttingPlaneFillColor.green,\n b: this._data.cuttingPlaneFillColor.blue,\n },\n true\n );\n }\n\n get enableSectionFill(): boolean {\n return this._data.enableSectionFill;\n }\n\n set enableSectionFill(value: boolean) {\n this.setProperty(\"enableSectionFill\", value);\n }\n\n get sectionFillColor(): { r: number; g: number; b: number } {\n return this._data.sectionFillColor;\n }\n\n set sectionFillColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionFillColor\", value, isColorRGB(value));\n // kept in sync with cuttingPlaneFillColor (deprecated since 27.5)\n this.setProperty(\n \"cuttingPlaneFillColor\",\n {\n red: this._data.sectionFillColor.r,\n green: this._data.sectionFillColor.g,\n blue: this._data.sectionFillColor.b,\n },\n true\n );\n }\n\n get sectionUseObjectColor(): boolean {\n return this._data.sectionUseObjectColor;\n }\n\n set sectionUseObjectColor(value: boolean) {\n this.setProperty(\"sectionUseObjectColor\", value);\n }\n\n get enableSectionHatch(): boolean {\n return this._data.enableSectionHatch;\n }\n\n set enableSectionHatch(value: boolean) {\n this.setProperty(\"enableSectionHatch\", value);\n }\n\n get sectionHatchColor(): { r: number; g: number; b: number } {\n return this._data.sectionHatchColor;\n }\n\n set sectionHatchColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionHatchColor\", value, isColorRGB(value));\n }\n\n get sectionHatchScale(): number {\n return this._data.sectionHatchScale;\n }\n\n set sectionHatchScale(value: number) {\n this.setProperty(\"sectionHatchScale\", value);\n }\n\n get enableSectionOutline(): boolean {\n return this._data.enableSectionOutline;\n }\n\n set enableSectionOutline(value: boolean) {\n this.setProperty(\"enableSectionOutline\", value);\n }\n\n get sectionOutlineColor(): { r: number; g: number; b: number } {\n return this._data.sectionOutlineColor;\n }\n\n set sectionOutlineColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionOutlineColor\", value, isColorRGB(value));\n }\n\n get sectionOutlineWidth(): number {\n return this._data.sectionOutlineWidth;\n }\n\n set sectionOutlineWidth(value: number) {\n this.setProperty(\"sectionOutlineWidth\", value);\n }\n\n get edgesColor(): { r: number; g: number; b: number } {\n return this._data.edgesColor;\n }\n\n set edgesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"edgesColor\", value, isColorRGB(value));\n }\n\n get facesColor(): { r: number; g: number; b: number } {\n return this._data.facesColor;\n }\n\n set facesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"facesColor\", value, isColorRGB(value));\n }\n\n get edgesVisibility(): boolean {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value: boolean) {\n this.setProperty(\"edgesVisibility\", value);\n }\n\n get edgesOverlap(): boolean {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value: boolean) {\n this.setProperty(\"edgesOverlap\", value);\n }\n\n get facesOverlap(): boolean {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value: boolean) {\n this.setProperty(\"facesOverlap\", value);\n }\n\n get facesTransparancy(): number {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value: number) {\n this.setProperty(\"facesTransparancy\", value);\n }\n\n get enableCustomHighlight(): boolean {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value: boolean) {\n this.setProperty(\"enableCustomHighlight\", value);\n }\n\n get sceneGraph(): boolean {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value: boolean) {\n this.setProperty(\"sceneGraph\", value);\n // scene graph and partial streaming are mutually exclusive\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && !this.sceneGraph);\n }\n\n get edgeModel(): boolean {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value: boolean) {\n this.setProperty(\"edgeModel\", value);\n }\n\n get reverseZoomWheel(): boolean {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this.setProperty(\"reverseZoomWheel\", value);\n }\n\n get enableZoomWheel(): boolean {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this.setProperty(\"enableZoomWheel\", value);\n }\n\n get enableGestures(): boolean {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this.setProperty(\"enableGestures\", value);\n }\n\n get geometryType(): string {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this.setProperty(\"geometryType\", value);\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this.setProperty(\"rulerUnit\", value);\n }\n\n get rulerPrecision(): \"Default\" | \"Auto\" | number {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: \"Default\" | \"Auto\" | number) {\n this.setProperty(\"rulerPrecision\", value, typeof value === \"number\" || value === \"Default\" || value === \"Auto\");\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode;\n }\n\n set cameraMode(value: CameraMode) {\n this.setProperty(\"cameraMode\", value, value === \"perspective\" || value === \"orthographic\");\n }\n\n get snapshotMimeType(): string {\n return this._data.snapshotMimeType;\n }\n\n set snapshotMimeType(value: string) {\n this.setProperty(\"snapshotMimeType\", value);\n }\n\n get snapshotQuality(): number {\n return this._data.snapshotQuality;\n }\n\n set snapshotQuality(value: number) {\n this.setProperty(\"snapshotQuality\", value);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n optimizedGeometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewer-core.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","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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.cancel();\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 yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\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 \"\";\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 = 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-2026, 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-2026 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 Open Cloud 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} may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode: boolean;\n\n /**\n * Enable partial streaming to be able open large drawing.\n *\n * In partial streaming, the viewer keeps only visible objects in memory and loads other objects when\n * 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 * Deprecated since `27.5`. Use {@link sectionFillColor} instead.\n *\n * @deprecated\n */\n cuttingPlaneFillColor: RGB;\n\n /**\n * Show solid fill on section caps.\n *\n * When disabled, neither the fill nor the hatch is drawn (the outline, if enabled, is still shown).\n *\n * @defaultValue true\n */\n enableSectionFill: boolean;\n\n /**\n * Section cap fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n sectionFillColor: { r: number; g: number; b: number };\n\n /**\n * Use the intersected object's color for the section cap fill.\n *\n * When enabled, each section cap is filled with a color derived from the intersected object and\n * `sectionFillColor` is ignored. The outline color is not affected.\n *\n * @defaultValue false\n */\n sectionUseObjectColor: boolean;\n\n /**\n * Overlay a hatch pattern on top of the section fill.\n *\n * @defaultValue true\n */\n enableSectionHatch: boolean;\n\n /**\n * Hatch line color used on top of the section fill.\n *\n * @defaultValue { red: 0x4b, green: 0x4c, blue: 0x35 }\n */\n sectionHatchColor: { r: number; g: number; b: number };\n\n /**\n * Distance between hatch lines, in screen-space pixels.\n *\n * Larger values produce sparser hatching.\n *\n * @defaultValue 8\n */\n sectionHatchScale: number;\n\n /**\n * Draw the outline contour along the section boundary.\n *\n * @defaultValue true\n */\n enableSectionOutline: boolean;\n\n /**\n * Color of the section outline contour.\n *\n * @defaultValue { red: 0, green: 0, blue: 0 }\n */\n sectionOutlineColor: { r: number; g: number; b: number };\n\n /**\n * Width of the section outline contour, in pixels.\n *\n * @defaultValue 2\n */\n sectionOutlineWidth: number;\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} 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 * Preferred viewer for newely uploaded files. Can be one of:\n *\n * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.\n * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.\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`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - 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: \"Default\" | \"Auto\" | number;\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 * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality: number;\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 enableSectionFill: true,\n sectionFillColor: { r: 0xff, g: 0x98, b: 0x00 },\n sectionUseObjectColor: false,\n enableSectionHatch: true,\n sectionHatchColor: { r: 0, g: 0, b: 0 },\n sectionHatchScale: 8,\n enableSectionOutline: true,\n sectionOutlineColor: { r: 0, g: 0, b: 0 },\n sectionOutlineWidth: 2,\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 snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nfunction isColorRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { r?: unknown }).r === \"number\" &&\n typeof (value as { g?: unknown }).g === \"number\" &&\n typeof (value as { b?: unknown }).b === \"number\"\n );\n}\n\nfunction isLegacyRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { red?: unknown }).red === \"number\" &&\n typeof (value as { green?: unknown }).green === \"number\" &&\n typeof (value as { blue?: unknown }).blue === \"number\"\n );\n}\n\nexport class Options implements IOptions {\n protected _emitter?: IEventEmitter;\n protected _data: IOptions;\n protected _defaults: IOptions;\n protected _updateCount = 0;\n\n constructor(emitter?: IEventEmitter) {\n this._emitter = emitter;\n this._data = Options.defaults();\n this._defaults = Options.defaults();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n change(): void {\n if (this._emitter !== undefined && this._updateCount === 0) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n beginUpdate(): void {\n this._updateCount++;\n }\n\n endUpdate(): void {\n this._updateCount--;\n this.change();\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) this.data = JSON.parse(item);\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[], defaults: IOptions = this._defaults): void {\n if (Array.isArray(fields)) {\n const resetData: Partial<IOptions> = {};\n for (const field of fields) {\n if (field in defaults) resetData[field] = defaults[field];\n }\n this.data = resetData;\n } else {\n this.data = defaults;\n }\n }\n\n setProperty<K extends keyof IOptions>(\n key: K,\n value: IOptions[K] = this._defaults[key],\n accept: boolean = this.isValidValue(key, value)\n ): void {\n if (!accept) {\n console.warn(`Options.${key}: Invalid value`, value);\n return;\n }\n if (this._data[key] !== value) {\n this._data[key] = value;\n this.change();\n }\n }\n\n isValidValue(key: keyof IOptions, value: unknown): boolean {\n return typeof value === typeof this._defaults[key];\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: Partial<IOptions>) {\n this.beginUpdate();\n try {\n for (const key of Object.keys(value)) {\n if (key in this._defaults) this[key] = value[key];\n else this._data[key] = value[key];\n }\n // partial streaming first\n if (\"enablePartialMode\" in value) {\n this.enablePartialMode = (value as IOptions).enablePartialMode;\n }\n // sectionFillColor since 27.5\n if (\"sectionFillColor\" in value) {\n this.sectionFillColor = (value as IOptions).sectionFillColor;\n }\n } finally {\n this.endUpdate();\n }\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this.setProperty(\"showWCS\", value);\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this.setProperty(\"cameraAnimation\", value);\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this.setProperty(\"antialiasing\", value, typeof value === \"boolean\" || typeof value === \"string\");\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this.setProperty(\"groundShadow\", value);\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this.setProperty(\"shadows\", value);\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this.setProperty(\"cameraAxisXSpeed\", value);\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.setProperty(\"cameraAxisYSpeed\", value);\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this.setProperty(\"ambientOcclusion\", value);\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this.beginUpdate();\n try {\n this.setProperty(\"enableStreamingMode\", value);\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && this.enableStreamingMode);\n } finally {\n this.endUpdate();\n }\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this.beginUpdate();\n try {\n this.setProperty(\"enablePartialMode\", value);\n this.setProperty(\"enableStreamingMode\", this.enableStreamingMode || this.enablePartialMode);\n this.setProperty(\"sceneGraph\", this.sceneGraph && !this.enablePartialMode);\n } finally {\n this.endUpdate();\n }\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this.setProperty(\"memoryLimit\", value);\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n if (this._updateCount === 0) {\n console.warn(\n \"Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead\"\n );\n }\n this.beginUpdate();\n try {\n this.setProperty(\"cuttingPlaneFillColor\", value, isLegacyRGB(value));\n this.setProperty(\"sectionFillColor\", {\n r: this._data.cuttingPlaneFillColor.red,\n g: this._data.cuttingPlaneFillColor.green,\n b: this._data.cuttingPlaneFillColor.blue,\n });\n } finally {\n this.endUpdate();\n }\n }\n\n get enableSectionFill(): boolean {\n return this._data.enableSectionFill;\n }\n\n set enableSectionFill(value: boolean) {\n this.setProperty(\"enableSectionFill\", value);\n }\n\n get sectionFillColor(): { r: number; g: number; b: number } {\n return this._data.sectionFillColor;\n }\n\n set sectionFillColor(value: { r: number; g: number; b: number }) {\n this.beginUpdate();\n try {\n this.setProperty(\"sectionFillColor\", value, isColorRGB(value));\n this.setProperty(\"cuttingPlaneFillColor\", {\n red: this._data.sectionFillColor.r,\n green: this._data.sectionFillColor.g,\n blue: this._data.sectionFillColor.b,\n });\n } finally {\n this.endUpdate();\n }\n }\n\n get sectionUseObjectColor(): boolean {\n return this._data.sectionUseObjectColor;\n }\n\n set sectionUseObjectColor(value: boolean) {\n this.setProperty(\"sectionUseObjectColor\", value);\n }\n\n get enableSectionHatch(): boolean {\n return this._data.enableSectionHatch;\n }\n\n set enableSectionHatch(value: boolean) {\n this.setProperty(\"enableSectionHatch\", value);\n }\n\n get sectionHatchColor(): { r: number; g: number; b: number } {\n return this._data.sectionHatchColor;\n }\n\n set sectionHatchColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionHatchColor\", value, isColorRGB(value));\n }\n\n get sectionHatchScale(): number {\n return this._data.sectionHatchScale;\n }\n\n set sectionHatchScale(value: number) {\n this.setProperty(\"sectionHatchScale\", value);\n }\n\n get enableSectionOutline(): boolean {\n return this._data.enableSectionOutline;\n }\n\n set enableSectionOutline(value: boolean) {\n this.setProperty(\"enableSectionOutline\", value);\n }\n\n get sectionOutlineColor(): { r: number; g: number; b: number } {\n return this._data.sectionOutlineColor;\n }\n\n set sectionOutlineColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionOutlineColor\", value, isColorRGB(value));\n }\n\n get sectionOutlineWidth(): number {\n return this._data.sectionOutlineWidth;\n }\n\n set sectionOutlineWidth(value: number) {\n this.setProperty(\"sectionOutlineWidth\", value);\n }\n\n get edgesColor(): { r: number; g: number; b: number } {\n return this._data.edgesColor;\n }\n\n set edgesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"edgesColor\", value, isColorRGB(value));\n }\n\n get facesColor(): { r: number; g: number; b: number } {\n return this._data.facesColor;\n }\n\n set facesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"facesColor\", value, isColorRGB(value));\n }\n\n get edgesVisibility(): boolean {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value: boolean) {\n this.setProperty(\"edgesVisibility\", value);\n }\n\n get edgesOverlap(): boolean {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value: boolean) {\n this.setProperty(\"edgesOverlap\", value);\n }\n\n get facesOverlap(): boolean {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value: boolean) {\n this.setProperty(\"facesOverlap\", value);\n }\n\n get facesTransparancy(): number {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value: number) {\n this.setProperty(\"facesTransparancy\", value);\n }\n\n get enableCustomHighlight(): boolean {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value: boolean) {\n this.setProperty(\"enableCustomHighlight\", value);\n }\n\n get sceneGraph(): boolean {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value: boolean) {\n this.beginUpdate();\n try {\n this.setProperty(\"sceneGraph\", value);\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && !this.sceneGraph);\n } finally {\n this.endUpdate();\n }\n }\n\n get edgeModel(): boolean {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value: boolean) {\n this.setProperty(\"edgeModel\", value);\n }\n\n get reverseZoomWheel(): boolean {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this.setProperty(\"reverseZoomWheel\", value);\n }\n\n get enableZoomWheel(): boolean {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this.setProperty(\"enableZoomWheel\", value);\n }\n\n get enableGestures(): boolean {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this.setProperty(\"enableGestures\", value);\n }\n\n get geometryType(): string {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this.setProperty(\"geometryType\", value);\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this.setProperty(\"rulerUnit\", value);\n }\n\n get rulerPrecision(): \"Default\" | \"Auto\" | number {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: \"Default\" | \"Auto\" | number) {\n this.setProperty(\"rulerPrecision\", value, typeof value === \"number\" || value === \"Default\" || value === \"Auto\");\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode;\n }\n\n set cameraMode(value: CameraMode) {\n this.setProperty(\"cameraMode\", value, value === \"perspective\" || value === \"orthographic\");\n }\n\n get snapshotMimeType(): string {\n return this._data.snapshotMimeType;\n }\n\n set snapshotMimeType(value: string) {\n this.setProperty(\"snapshotMimeType\", value);\n }\n\n get snapshotQuality(): number {\n return this._data.snapshotQuality;\n }\n\n set snapshotQuality(value: number) {\n this.setProperty(\"snapshotQuality\", value);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n optimizedGeometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -424,16 +424,28 @@ class Options {
|
|
|
424
424
|
return this._data.enableStreamingMode;
|
|
425
425
|
}
|
|
426
426
|
set enableStreamingMode(value) {
|
|
427
|
-
this.
|
|
428
|
-
|
|
427
|
+
this.beginUpdate();
|
|
428
|
+
try {
|
|
429
|
+
this.setProperty("enableStreamingMode", value);
|
|
430
|
+
this.setProperty("enablePartialMode", this.enablePartialMode && this.enableStreamingMode);
|
|
431
|
+
}
|
|
432
|
+
finally {
|
|
433
|
+
this.endUpdate();
|
|
434
|
+
}
|
|
429
435
|
}
|
|
430
436
|
get enablePartialMode() {
|
|
431
437
|
return this._data.enablePartialMode;
|
|
432
438
|
}
|
|
433
439
|
set enablePartialMode(value) {
|
|
434
|
-
this.
|
|
435
|
-
|
|
436
|
-
|
|
440
|
+
this.beginUpdate();
|
|
441
|
+
try {
|
|
442
|
+
this.setProperty("enablePartialMode", value);
|
|
443
|
+
this.setProperty("enableStreamingMode", this.enableStreamingMode || this.enablePartialMode);
|
|
444
|
+
this.setProperty("sceneGraph", this.sceneGraph && !this.enablePartialMode);
|
|
445
|
+
}
|
|
446
|
+
finally {
|
|
447
|
+
this.endUpdate();
|
|
448
|
+
}
|
|
437
449
|
}
|
|
438
450
|
get memoryLimit() {
|
|
439
451
|
return this._data.memoryLimit;
|
|
@@ -448,12 +460,18 @@ class Options {
|
|
|
448
460
|
if (this._updateCount === 0) {
|
|
449
461
|
console.warn("Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead");
|
|
450
462
|
}
|
|
451
|
-
this.
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
463
|
+
this.beginUpdate();
|
|
464
|
+
try {
|
|
465
|
+
this.setProperty("cuttingPlaneFillColor", value, isLegacyRGB(value));
|
|
466
|
+
this.setProperty("sectionFillColor", {
|
|
467
|
+
r: this._data.cuttingPlaneFillColor.red,
|
|
468
|
+
g: this._data.cuttingPlaneFillColor.green,
|
|
469
|
+
b: this._data.cuttingPlaneFillColor.blue,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
finally {
|
|
473
|
+
this.endUpdate();
|
|
474
|
+
}
|
|
457
475
|
}
|
|
458
476
|
get enableSectionFill() {
|
|
459
477
|
return this._data.enableSectionFill;
|
|
@@ -465,12 +483,18 @@ class Options {
|
|
|
465
483
|
return this._data.sectionFillColor;
|
|
466
484
|
}
|
|
467
485
|
set sectionFillColor(value) {
|
|
468
|
-
this.
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
486
|
+
this.beginUpdate();
|
|
487
|
+
try {
|
|
488
|
+
this.setProperty("sectionFillColor", value, isColorRGB(value));
|
|
489
|
+
this.setProperty("cuttingPlaneFillColor", {
|
|
490
|
+
red: this._data.sectionFillColor.r,
|
|
491
|
+
green: this._data.sectionFillColor.g,
|
|
492
|
+
blue: this._data.sectionFillColor.b,
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
finally {
|
|
496
|
+
this.endUpdate();
|
|
497
|
+
}
|
|
474
498
|
}
|
|
475
499
|
get sectionUseObjectColor() {
|
|
476
500
|
return this._data.sectionUseObjectColor;
|
|
@@ -560,8 +584,14 @@ class Options {
|
|
|
560
584
|
return this._data.sceneGraph;
|
|
561
585
|
}
|
|
562
586
|
set sceneGraph(value) {
|
|
563
|
-
this.
|
|
564
|
-
|
|
587
|
+
this.beginUpdate();
|
|
588
|
+
try {
|
|
589
|
+
this.setProperty("sceneGraph", value);
|
|
590
|
+
this.setProperty("enablePartialMode", this.enablePartialMode && !this.sceneGraph);
|
|
591
|
+
}
|
|
592
|
+
finally {
|
|
593
|
+
this.endUpdate();
|
|
594
|
+
}
|
|
565
595
|
}
|
|
566
596
|
get edgeModel() {
|
|
567
597
|
return Boolean(this._data.edgeModel);
|
|
@@ -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","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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.cancel();\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 yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\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 \"\";\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 = 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-2026, 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-2026 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 Open Cloud 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} may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode: boolean;\n\n /**\n * Enable partial streaming to be able open large drawing.\n *\n * In partial streaming, the viewer keeps only visible objects in memory and loads other objects when\n * 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 * Deprecated since `27.5`. Use {@link sectionFillColor} instead.\n *\n * @deprecated\n */\n cuttingPlaneFillColor: RGB;\n\n /**\n * Show solid fill on section caps.\n *\n * When disabled, neither the fill nor the hatch is drawn (the outline, if enabled, is still shown).\n *\n * @defaultValue true\n */\n enableSectionFill: boolean;\n\n /**\n * Section cap fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n sectionFillColor: { r: number; g: number; b: number };\n\n /**\n * Use the intersected object's color for the section cap fill.\n *\n * When enabled, each section cap is filled with a color derived from the intersected object and\n * `sectionFillColor` is ignored. The outline color is not affected.\n *\n * @defaultValue false\n */\n sectionUseObjectColor: boolean;\n\n /**\n * Overlay a hatch pattern on top of the section fill.\n *\n * @defaultValue true\n */\n enableSectionHatch: boolean;\n\n /**\n * Hatch line color used on top of the section fill.\n *\n * @defaultValue { red: 0x4b, green: 0x4c, blue: 0x35 }\n */\n sectionHatchColor: { r: number; g: number; b: number };\n\n /**\n * Distance between hatch lines, in screen-space pixels.\n *\n * Larger values produce sparser hatching.\n *\n * @defaultValue 8\n */\n sectionHatchScale: number;\n\n /**\n * Draw the outline contour along the section boundary.\n *\n * @defaultValue true\n */\n enableSectionOutline: boolean;\n\n /**\n * Color of the section outline contour.\n *\n * @defaultValue { red: 0, green: 0, blue: 0 }\n */\n sectionOutlineColor: { r: number; g: number; b: number };\n\n /**\n * Width of the section outline contour, in pixels.\n *\n * @defaultValue 2\n */\n sectionOutlineWidth: number;\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} 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 * Preferred viewer for newely uploaded files. Can be one of:\n *\n * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.\n * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.\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`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - 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: \"Default\" | \"Auto\" | number;\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 * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality: number;\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 enableSectionFill: true,\n sectionFillColor: { r: 0xff, g: 0x98, b: 0x00 },\n sectionUseObjectColor: false,\n enableSectionHatch: true,\n sectionHatchColor: { r: 0, g: 0, b: 0 },\n sectionHatchScale: 8,\n enableSectionOutline: true,\n sectionOutlineColor: { r: 0, g: 0, b: 0 },\n sectionOutlineWidth: 2,\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 snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nfunction isColorRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { r?: unknown }).r === \"number\" &&\n typeof (value as { g?: unknown }).g === \"number\" &&\n typeof (value as { b?: unknown }).b === \"number\"\n );\n}\n\nfunction isLegacyRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { red?: unknown }).red === \"number\" &&\n typeof (value as { green?: unknown }).green === \"number\" &&\n typeof (value as { blue?: unknown }).blue === \"number\"\n );\n}\n\nexport class Options implements IOptions {\n protected _emitter?: IEventEmitter;\n protected _data: IOptions;\n protected _defaults: IOptions;\n protected _updateCount = 0;\n\n constructor(emitter?: IEventEmitter) {\n this._emitter = emitter;\n this._data = Options.defaults();\n this._defaults = Options.defaults();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n change(): void {\n if (this._emitter !== undefined && this._updateCount === 0) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n beginUpdate(): void {\n this._updateCount++;\n }\n\n endUpdate(): void {\n this._updateCount--;\n this.change();\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) this.data = JSON.parse(item);\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[], defaults: IOptions = this._defaults): void {\n if (Array.isArray(fields)) {\n const resetData: Partial<IOptions> = {};\n for (const field of fields) {\n if (field in defaults) resetData[field] = defaults[field];\n }\n this.data = resetData;\n } else {\n this.data = defaults;\n }\n }\n\n setProperty<K extends keyof IOptions>(\n key: K,\n value: IOptions[K] = this._defaults[key],\n accept: boolean = this.isValidValue(key, value)\n ): void {\n if (!accept) {\n console.warn(`Options.${key}: Invalid value`, value);\n return;\n }\n if (this._data[key] !== value) {\n this._data[key] = value;\n this.change();\n }\n }\n\n isValidValue(key: keyof IOptions, value: unknown): boolean {\n return typeof value === typeof this._defaults[key];\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: Partial<IOptions>) {\n this.beginUpdate();\n try {\n for (const key of Object.keys(value)) {\n if (key in this._defaults) this[key] = value[key];\n else this._data[key] = value[key];\n }\n // partial streaming first\n if (\"enablePartialMode\" in value) {\n this.enablePartialMode = (value as IOptions).enablePartialMode;\n }\n // sectionFillColor since 27.5\n if (\"sectionFillColor\" in value) {\n this.sectionFillColor = (value as IOptions).sectionFillColor;\n }\n } finally {\n this.endUpdate();\n }\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this.setProperty(\"showWCS\", value);\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this.setProperty(\"cameraAnimation\", value);\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this.setProperty(\"antialiasing\", value, typeof value === \"boolean\" || typeof value === \"string\");\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this.setProperty(\"groundShadow\", value);\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this.setProperty(\"shadows\", value);\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this.setProperty(\"cameraAxisXSpeed\", value);\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.setProperty(\"cameraAxisYSpeed\", value);\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this.setProperty(\"ambientOcclusion\", value);\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this.setProperty(\"enableStreamingMode\", value);\n // partial streaming is only used if streaming is enabled\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && this.enableStreamingMode);\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this.setProperty(\"enablePartialMode\", value);\n // partial streaming requires streaming enabled and disables scene graph\n this.setProperty(\"enableStreamingMode\", this.enableStreamingMode || this.enablePartialMode);\n this.setProperty(\"sceneGraph\", this.sceneGraph && !this.enablePartialMode);\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this.setProperty(\"memoryLimit\", value);\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n if (this._updateCount === 0) {\n console.warn(\n \"Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead\"\n );\n }\n this.setProperty(\"cuttingPlaneFillColor\", value, isLegacyRGB(value));\n // kept in sync with sectionFillColor (deprecated since 27.5)\n this.setProperty(\n \"sectionFillColor\",\n {\n r: this._data.cuttingPlaneFillColor.red,\n g: this._data.cuttingPlaneFillColor.green,\n b: this._data.cuttingPlaneFillColor.blue,\n },\n true\n );\n }\n\n get enableSectionFill(): boolean {\n return this._data.enableSectionFill;\n }\n\n set enableSectionFill(value: boolean) {\n this.setProperty(\"enableSectionFill\", value);\n }\n\n get sectionFillColor(): { r: number; g: number; b: number } {\n return this._data.sectionFillColor;\n }\n\n set sectionFillColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionFillColor\", value, isColorRGB(value));\n // kept in sync with cuttingPlaneFillColor (deprecated since 27.5)\n this.setProperty(\n \"cuttingPlaneFillColor\",\n {\n red: this._data.sectionFillColor.r,\n green: this._data.sectionFillColor.g,\n blue: this._data.sectionFillColor.b,\n },\n true\n );\n }\n\n get sectionUseObjectColor(): boolean {\n return this._data.sectionUseObjectColor;\n }\n\n set sectionUseObjectColor(value: boolean) {\n this.setProperty(\"sectionUseObjectColor\", value);\n }\n\n get enableSectionHatch(): boolean {\n return this._data.enableSectionHatch;\n }\n\n set enableSectionHatch(value: boolean) {\n this.setProperty(\"enableSectionHatch\", value);\n }\n\n get sectionHatchColor(): { r: number; g: number; b: number } {\n return this._data.sectionHatchColor;\n }\n\n set sectionHatchColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionHatchColor\", value, isColorRGB(value));\n }\n\n get sectionHatchScale(): number {\n return this._data.sectionHatchScale;\n }\n\n set sectionHatchScale(value: number) {\n this.setProperty(\"sectionHatchScale\", value);\n }\n\n get enableSectionOutline(): boolean {\n return this._data.enableSectionOutline;\n }\n\n set enableSectionOutline(value: boolean) {\n this.setProperty(\"enableSectionOutline\", value);\n }\n\n get sectionOutlineColor(): { r: number; g: number; b: number } {\n return this._data.sectionOutlineColor;\n }\n\n set sectionOutlineColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionOutlineColor\", value, isColorRGB(value));\n }\n\n get sectionOutlineWidth(): number {\n return this._data.sectionOutlineWidth;\n }\n\n set sectionOutlineWidth(value: number) {\n this.setProperty(\"sectionOutlineWidth\", value);\n }\n\n get edgesColor(): { r: number; g: number; b: number } {\n return this._data.edgesColor;\n }\n\n set edgesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"edgesColor\", value, isColorRGB(value));\n }\n\n get facesColor(): { r: number; g: number; b: number } {\n return this._data.facesColor;\n }\n\n set facesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"facesColor\", value, isColorRGB(value));\n }\n\n get edgesVisibility(): boolean {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value: boolean) {\n this.setProperty(\"edgesVisibility\", value);\n }\n\n get edgesOverlap(): boolean {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value: boolean) {\n this.setProperty(\"edgesOverlap\", value);\n }\n\n get facesOverlap(): boolean {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value: boolean) {\n this.setProperty(\"facesOverlap\", value);\n }\n\n get facesTransparancy(): number {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value: number) {\n this.setProperty(\"facesTransparancy\", value);\n }\n\n get enableCustomHighlight(): boolean {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value: boolean) {\n this.setProperty(\"enableCustomHighlight\", value);\n }\n\n get sceneGraph(): boolean {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value: boolean) {\n this.setProperty(\"sceneGraph\", value);\n // scene graph and partial streaming are mutually exclusive\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && !this.sceneGraph);\n }\n\n get edgeModel(): boolean {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value: boolean) {\n this.setProperty(\"edgeModel\", value);\n }\n\n get reverseZoomWheel(): boolean {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this.setProperty(\"reverseZoomWheel\", value);\n }\n\n get enableZoomWheel(): boolean {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this.setProperty(\"enableZoomWheel\", value);\n }\n\n get enableGestures(): boolean {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this.setProperty(\"enableGestures\", value);\n }\n\n get geometryType(): string {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this.setProperty(\"geometryType\", value);\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this.setProperty(\"rulerUnit\", value);\n }\n\n get rulerPrecision(): \"Default\" | \"Auto\" | number {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: \"Default\" | \"Auto\" | number) {\n this.setProperty(\"rulerPrecision\", value, typeof value === \"number\" || value === \"Default\" || value === \"Auto\");\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode;\n }\n\n set cameraMode(value: CameraMode) {\n this.setProperty(\"cameraMode\", value, value === \"perspective\" || value === \"orthographic\");\n }\n\n get snapshotMimeType(): string {\n return this._data.snapshotMimeType;\n }\n\n set snapshotMimeType(value: string) {\n this.setProperty(\"snapshotMimeType\", value);\n }\n\n get snapshotQuality(): number {\n return this._data.snapshotQuality;\n }\n\n set snapshotQuality(value: number) {\n this.setProperty(\"snapshotQuality\", value);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n optimizedGeometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\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","../src/viewer/Info.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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-2026, 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-2026 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.cancel();\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 yield(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\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 \"\";\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 = 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-2026, 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-2026 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 Open Cloud 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} may be enabled as well.\n *\n * @defaultValue true\n */\n enableStreamingMode: boolean;\n\n /**\n * Enable partial streaming to be able open large drawing.\n *\n * In partial streaming, the viewer keeps only visible objects in memory and loads other objects when\n * 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 * Deprecated since `27.5`. Use {@link sectionFillColor} instead.\n *\n * @deprecated\n */\n cuttingPlaneFillColor: RGB;\n\n /**\n * Show solid fill on section caps.\n *\n * When disabled, neither the fill nor the hatch is drawn (the outline, if enabled, is still shown).\n *\n * @defaultValue true\n */\n enableSectionFill: boolean;\n\n /**\n * Section cap fill color.\n *\n * @defaultValue { red: 0xff, green: 0x98, blue: 0x00 }\n */\n sectionFillColor: { r: number; g: number; b: number };\n\n /**\n * Use the intersected object's color for the section cap fill.\n *\n * When enabled, each section cap is filled with a color derived from the intersected object and\n * `sectionFillColor` is ignored. The outline color is not affected.\n *\n * @defaultValue false\n */\n sectionUseObjectColor: boolean;\n\n /**\n * Overlay a hatch pattern on top of the section fill.\n *\n * @defaultValue true\n */\n enableSectionHatch: boolean;\n\n /**\n * Hatch line color used on top of the section fill.\n *\n * @defaultValue { red: 0x4b, green: 0x4c, blue: 0x35 }\n */\n sectionHatchColor: { r: number; g: number; b: number };\n\n /**\n * Distance between hatch lines, in screen-space pixels.\n *\n * Larger values produce sparser hatching.\n *\n * @defaultValue 8\n */\n sectionHatchScale: number;\n\n /**\n * Draw the outline contour along the section boundary.\n *\n * @defaultValue true\n */\n enableSectionOutline: boolean;\n\n /**\n * Color of the section outline contour.\n *\n * @defaultValue { red: 0, green: 0, blue: 0 }\n */\n sectionOutlineColor: { r: number; g: number; b: number };\n\n /**\n * Width of the section outline contour, in pixels.\n *\n * @defaultValue 2\n */\n sectionOutlineWidth: number;\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} 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 * Preferred viewer for newely uploaded files. Can be one of:\n *\n * - `vsfx` - `VSFX` (default), for opening a file in `VisualizeJS` viewer.\n * - `gltf` - `glTF`, for opening a file in `Three.js` viewer.\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`, `mm` - Metric: 0.001 m\n * - `Centimeters`, `cm` - Metric: 0.01 m\n * - `Meters`, `m` - Metric: 1 m (base unit)\n * - `Kilometers`, `km` - Metric: 1000 m\n * - `Micrometers`, `µm` - Metric: 0.000001 m\n * - `Inches`, `in` - Imperial: 0.0254 m\n * - `Feet`, `ft` - Imperial: 0.3048 m\n * - `Yards`, `yd` - Imperial: 0.9144 m\n * - `Miles`, `mi` - Imperial: 1609.344 m\n * - `Mils`, `mil` - Imperial: 0.0000254 m\n * - `MicroInches`, `µin` - 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: \"Default\" | \"Auto\" | number;\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 * Default MIME type for snapshot images.\n *\n * Supported formats:\n *\n * - `image/png` - PNG format with lossless compression (recommended for quality)\n * - `image/jpeg` - JPEG format with lossy compression (smaller file size)\n * - `image/webp` - WebP format (modern browsers only)\n *\n * @defaultValue \"image/jpeg\"\n */\n snapshotMimeType: string;\n\n /**\n * Default quality level for snapshot images when using lossy formats (JPEG, WebP).\n *\n * A number between 0 and 1, where:\n *\n * - `0` - Lowest quality, smallest file size\n * - `1` - Highest quality, largest file size\n * - `0.25` - Good balance between quality and size (recommended)\n *\n * This parameter is ignored for lossless formats like PNG.\n *\n * @defaultValue 0.25\n */\n snapshotQuality: number;\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 enableSectionFill: true,\n sectionFillColor: { r: 0xff, g: 0x98, b: 0x00 },\n sectionUseObjectColor: false,\n enableSectionHatch: true,\n sectionHatchColor: { r: 0, g: 0, b: 0 },\n sectionHatchScale: 8,\n enableSectionOutline: true,\n sectionOutlineColor: { r: 0, g: 0, b: 0 },\n sectionOutlineWidth: 2,\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 snapshotMimeType: \"image/jpeg\",\n snapshotQuality: 0.25,\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { CameraMode, defaultOptions, IOptions, RGB } from \"./IOptions\";\n\nfunction isColorRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { r?: unknown }).r === \"number\" &&\n typeof (value as { g?: unknown }).g === \"number\" &&\n typeof (value as { b?: unknown }).b === \"number\"\n );\n}\n\nfunction isLegacyRGB(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { red?: unknown }).red === \"number\" &&\n typeof (value as { green?: unknown }).green === \"number\" &&\n typeof (value as { blue?: unknown }).blue === \"number\"\n );\n}\n\nexport class Options implements IOptions {\n protected _emitter?: IEventEmitter;\n protected _data: IOptions;\n protected _defaults: IOptions;\n protected _updateCount = 0;\n\n constructor(emitter?: IEventEmitter) {\n this._emitter = emitter;\n this._data = Options.defaults();\n this._defaults = Options.defaults();\n this.loadFromStorage();\n }\n\n static defaults(): IOptions {\n return defaultOptions();\n }\n\n change(): void {\n if (this._emitter !== undefined && this._updateCount === 0) {\n this.saveToStorage();\n this._emitter.emit({ type: \"optionschange\", data: this });\n }\n }\n\n beginUpdate(): void {\n this._updateCount++;\n }\n\n endUpdate(): void {\n this._updateCount--;\n this.change();\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) this.data = JSON.parse(item);\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[], defaults: IOptions = this._defaults): void {\n if (Array.isArray(fields)) {\n const resetData: Partial<IOptions> = {};\n for (const field of fields) {\n if (field in defaults) resetData[field] = defaults[field];\n }\n this.data = resetData;\n } else {\n this.data = defaults;\n }\n }\n\n setProperty<K extends keyof IOptions>(\n key: K,\n value: IOptions[K] = this._defaults[key],\n accept: boolean = this.isValidValue(key, value)\n ): void {\n if (!accept) {\n console.warn(`Options.${key}: Invalid value`, value);\n return;\n }\n if (this._data[key] !== value) {\n this._data[key] = value;\n this.change();\n }\n }\n\n isValidValue(key: keyof IOptions, value: unknown): boolean {\n return typeof value === typeof this._defaults[key];\n }\n\n get data(): IOptions {\n return this._data;\n }\n\n set data(value: Partial<IOptions>) {\n this.beginUpdate();\n try {\n for (const key of Object.keys(value)) {\n if (key in this._defaults) this[key] = value[key];\n else this._data[key] = value[key];\n }\n // partial streaming first\n if (\"enablePartialMode\" in value) {\n this.enablePartialMode = (value as IOptions).enablePartialMode;\n }\n // sectionFillColor since 27.5\n if (\"sectionFillColor\" in value) {\n this.sectionFillColor = (value as IOptions).sectionFillColor;\n }\n } finally {\n this.endUpdate();\n }\n }\n\n get showWCS(): boolean {\n return this._data.showWCS;\n }\n\n set showWCS(value: boolean) {\n this.setProperty(\"showWCS\", value);\n }\n\n get cameraAnimation(): boolean {\n return this._data.cameraAnimation;\n }\n\n set cameraAnimation(value: boolean) {\n this.setProperty(\"cameraAnimation\", value);\n }\n\n get antialiasing(): boolean | string {\n return this._data.antialiasing;\n }\n\n set antialiasing(value: boolean | string) {\n this.setProperty(\"antialiasing\", value, typeof value === \"boolean\" || typeof value === \"string\");\n }\n\n get groundShadow(): boolean {\n return this._data.groundShadow;\n }\n\n set groundShadow(value: boolean) {\n this.setProperty(\"groundShadow\", value);\n }\n\n get shadows(): boolean {\n return this._data.shadows;\n }\n\n set shadows(value: boolean) {\n this.setProperty(\"shadows\", value);\n }\n\n get cameraAxisXSpeed(): number {\n return this._data.cameraAxisXSpeed;\n }\n\n set cameraAxisXSpeed(value: number) {\n this.setProperty(\"cameraAxisXSpeed\", value);\n }\n\n get cameraAxisYSpeed(): number {\n return this._data.cameraAxisYSpeed;\n }\n\n set cameraAxisYSpeed(value: number) {\n this.setProperty(\"cameraAxisYSpeed\", value);\n }\n\n get ambientOcclusion(): boolean {\n return this._data.ambientOcclusion;\n }\n\n set ambientOcclusion(value: boolean) {\n this.setProperty(\"ambientOcclusion\", value);\n }\n\n get enableStreamingMode(): boolean {\n return this._data.enableStreamingMode;\n }\n\n set enableStreamingMode(value: boolean) {\n this.beginUpdate();\n try {\n this.setProperty(\"enableStreamingMode\", value);\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && this.enableStreamingMode);\n } finally {\n this.endUpdate();\n }\n }\n\n get enablePartialMode(): boolean {\n return this._data.enablePartialMode;\n }\n\n set enablePartialMode(value: boolean) {\n this.beginUpdate();\n try {\n this.setProperty(\"enablePartialMode\", value);\n this.setProperty(\"enableStreamingMode\", this.enableStreamingMode || this.enablePartialMode);\n this.setProperty(\"sceneGraph\", this.sceneGraph && !this.enablePartialMode);\n } finally {\n this.endUpdate();\n }\n }\n\n get memoryLimit(): number {\n return this._data.memoryLimit;\n }\n\n set memoryLimit(value: number) {\n this.setProperty(\"memoryLimit\", value);\n }\n\n get cuttingPlaneFillColor(): RGB {\n return this._data.cuttingPlaneFillColor;\n }\n\n set cuttingPlaneFillColor(value: RGB) {\n if (this._updateCount === 0) {\n console.warn(\n \"Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead\"\n );\n }\n this.beginUpdate();\n try {\n this.setProperty(\"cuttingPlaneFillColor\", value, isLegacyRGB(value));\n this.setProperty(\"sectionFillColor\", {\n r: this._data.cuttingPlaneFillColor.red,\n g: this._data.cuttingPlaneFillColor.green,\n b: this._data.cuttingPlaneFillColor.blue,\n });\n } finally {\n this.endUpdate();\n }\n }\n\n get enableSectionFill(): boolean {\n return this._data.enableSectionFill;\n }\n\n set enableSectionFill(value: boolean) {\n this.setProperty(\"enableSectionFill\", value);\n }\n\n get sectionFillColor(): { r: number; g: number; b: number } {\n return this._data.sectionFillColor;\n }\n\n set sectionFillColor(value: { r: number; g: number; b: number }) {\n this.beginUpdate();\n try {\n this.setProperty(\"sectionFillColor\", value, isColorRGB(value));\n this.setProperty(\"cuttingPlaneFillColor\", {\n red: this._data.sectionFillColor.r,\n green: this._data.sectionFillColor.g,\n blue: this._data.sectionFillColor.b,\n });\n } finally {\n this.endUpdate();\n }\n }\n\n get sectionUseObjectColor(): boolean {\n return this._data.sectionUseObjectColor;\n }\n\n set sectionUseObjectColor(value: boolean) {\n this.setProperty(\"sectionUseObjectColor\", value);\n }\n\n get enableSectionHatch(): boolean {\n return this._data.enableSectionHatch;\n }\n\n set enableSectionHatch(value: boolean) {\n this.setProperty(\"enableSectionHatch\", value);\n }\n\n get sectionHatchColor(): { r: number; g: number; b: number } {\n return this._data.sectionHatchColor;\n }\n\n set sectionHatchColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionHatchColor\", value, isColorRGB(value));\n }\n\n get sectionHatchScale(): number {\n return this._data.sectionHatchScale;\n }\n\n set sectionHatchScale(value: number) {\n this.setProperty(\"sectionHatchScale\", value);\n }\n\n get enableSectionOutline(): boolean {\n return this._data.enableSectionOutline;\n }\n\n set enableSectionOutline(value: boolean) {\n this.setProperty(\"enableSectionOutline\", value);\n }\n\n get sectionOutlineColor(): { r: number; g: number; b: number } {\n return this._data.sectionOutlineColor;\n }\n\n set sectionOutlineColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"sectionOutlineColor\", value, isColorRGB(value));\n }\n\n get sectionOutlineWidth(): number {\n return this._data.sectionOutlineWidth;\n }\n\n set sectionOutlineWidth(value: number) {\n this.setProperty(\"sectionOutlineWidth\", value);\n }\n\n get edgesColor(): { r: number; g: number; b: number } {\n return this._data.edgesColor;\n }\n\n set edgesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"edgesColor\", value, isColorRGB(value));\n }\n\n get facesColor(): { r: number; g: number; b: number } {\n return this._data.facesColor;\n }\n\n set facesColor(value: { r: number; g: number; b: number }) {\n this.setProperty(\"facesColor\", value, isColorRGB(value));\n }\n\n get edgesVisibility(): boolean {\n return this._data.edgesVisibility;\n }\n\n set edgesVisibility(value: boolean) {\n this.setProperty(\"edgesVisibility\", value);\n }\n\n get edgesOverlap(): boolean {\n return this._data.edgesOverlap;\n }\n\n set edgesOverlap(value: boolean) {\n this.setProperty(\"edgesOverlap\", value);\n }\n\n get facesOverlap(): boolean {\n return this._data.facesOverlap;\n }\n\n set facesOverlap(value: boolean) {\n this.setProperty(\"facesOverlap\", value);\n }\n\n get facesTransparancy(): number {\n return this._data.facesTransparancy;\n }\n\n set facesTransparancy(value: number) {\n this.setProperty(\"facesTransparancy\", value);\n }\n\n get enableCustomHighlight(): boolean {\n return this._data.enableCustomHighlight;\n }\n\n set enableCustomHighlight(value: boolean) {\n this.setProperty(\"enableCustomHighlight\", value);\n }\n\n get sceneGraph(): boolean {\n return this._data.sceneGraph;\n }\n\n set sceneGraph(value: boolean) {\n this.beginUpdate();\n try {\n this.setProperty(\"sceneGraph\", value);\n this.setProperty(\"enablePartialMode\", this.enablePartialMode && !this.sceneGraph);\n } finally {\n this.endUpdate();\n }\n }\n\n get edgeModel(): boolean {\n return Boolean(this._data.edgeModel);\n }\n\n set edgeModel(value: boolean) {\n this.setProperty(\"edgeModel\", value);\n }\n\n get reverseZoomWheel(): boolean {\n return this._data.reverseZoomWheel;\n }\n\n set reverseZoomWheel(value: boolean) {\n this.setProperty(\"reverseZoomWheel\", value);\n }\n\n get enableZoomWheel(): boolean {\n return this._data.enableZoomWheel;\n }\n\n set enableZoomWheel(value: boolean) {\n this.setProperty(\"enableZoomWheel\", value);\n }\n\n get enableGestures(): boolean {\n return this._data.enableGestures;\n }\n\n set enableGestures(value: boolean) {\n this.setProperty(\"enableGestures\", value);\n }\n\n get geometryType(): string {\n return this._data.geometryType;\n }\n\n set geometryType(value: string) {\n this.setProperty(\"geometryType\", value);\n }\n\n get rulerUnit(): string {\n return this._data.rulerUnit;\n }\n\n set rulerUnit(value: string) {\n this.setProperty(\"rulerUnit\", value);\n }\n\n get rulerPrecision(): \"Default\" | \"Auto\" | number {\n return this._data.rulerPrecision;\n }\n\n set rulerPrecision(value: \"Default\" | \"Auto\" | number) {\n this.setProperty(\"rulerPrecision\", value, typeof value === \"number\" || value === \"Default\" || value === \"Auto\");\n }\n\n get cameraMode(): CameraMode {\n return this._data.cameraMode;\n }\n\n set cameraMode(value: CameraMode) {\n this.setProperty(\"cameraMode\", value, value === \"perspective\" || value === \"orthographic\");\n }\n\n get snapshotMimeType(): string {\n return this._data.snapshotMimeType;\n }\n\n set snapshotMimeType(value: string) {\n this.setProperty(\"snapshotMimeType\", value);\n }\n\n get snapshotQuality(): number {\n return this._data.snapshotQuality;\n }\n\n set snapshotQuality(value: number) {\n this.setProperty(\"snapshotQuality\", value);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2026, 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-2026 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 { IInfo, IMemoryInfo, IPerformanceInfo, IRenderInfo, ISceneInfo, ISystemInfo } from \"./IInfo\";\n\nexport class Info implements IInfo {\n public performance: IPerformanceInfo; // animate\n public render: IRenderInfo; // render\n public scene: ISceneInfo; // databasechunk\n public optimizedScene: ISceneInfo; // databasechunk\n public memory: IMemoryInfo; // databasechunk\n public system: ISystemInfo; // initialize, options, resize\n\n constructor() {\n this.performance = {\n fps: 0,\n frameTime: 0,\n timeToFirstRender: 0,\n loadTime: 0,\n };\n\n this.render = {\n viewport: { width: 0, height: 0 },\n antialiasing: \"\",\n drawCalls: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n };\n\n this.scene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.optimizedScene = {\n objects: 0,\n triangles: 0,\n points: 0,\n lines: 0,\n edges: 0,\n };\n\n this.memory = {\n geometries: 0,\n geometryBytes: 0,\n optimizedGeometryBytes: 0,\n textures: 0,\n textureBytes: 0,\n materials: 0,\n totalEstimatedGpuBytes: 0,\n usedJSHeapSize: 0,\n };\n\n this.system = {\n webglRenderer: \"\",\n webglVendor: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inweb/viewer-core",
|
|
3
|
-
"version": "27.6.
|
|
3
|
+
"version": "27.6.2",
|
|
4
4
|
"description": "3D CAD and BIM data Viewer core",
|
|
5
5
|
"homepage": "https://cloud.opendesign.com/docs/index.html",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"test": "karma start karma.conf.js"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@inweb/client": "~27.6.
|
|
30
|
-
"@inweb/eventemitter2": "~27.6.
|
|
29
|
+
"@inweb/client": "~27.6.2",
|
|
30
|
+
"@inweb/eventemitter2": "~27.6.2"
|
|
31
31
|
}
|
|
32
32
|
}
|
package/src/options/Options.ts
CHANGED
|
@@ -225,9 +225,13 @@ export class Options implements IOptions {
|
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
set enableStreamingMode(value: boolean) {
|
|
228
|
-
this.
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
this.beginUpdate();
|
|
229
|
+
try {
|
|
230
|
+
this.setProperty("enableStreamingMode", value);
|
|
231
|
+
this.setProperty("enablePartialMode", this.enablePartialMode && this.enableStreamingMode);
|
|
232
|
+
} finally {
|
|
233
|
+
this.endUpdate();
|
|
234
|
+
}
|
|
231
235
|
}
|
|
232
236
|
|
|
233
237
|
get enablePartialMode(): boolean {
|
|
@@ -235,10 +239,14 @@ export class Options implements IOptions {
|
|
|
235
239
|
}
|
|
236
240
|
|
|
237
241
|
set enablePartialMode(value: boolean) {
|
|
238
|
-
this.
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
+
this.beginUpdate();
|
|
243
|
+
try {
|
|
244
|
+
this.setProperty("enablePartialMode", value);
|
|
245
|
+
this.setProperty("enableStreamingMode", this.enableStreamingMode || this.enablePartialMode);
|
|
246
|
+
this.setProperty("sceneGraph", this.sceneGraph && !this.enablePartialMode);
|
|
247
|
+
} finally {
|
|
248
|
+
this.endUpdate();
|
|
249
|
+
}
|
|
242
250
|
}
|
|
243
251
|
|
|
244
252
|
get memoryLimit(): number {
|
|
@@ -259,17 +267,17 @@ export class Options implements IOptions {
|
|
|
259
267
|
"Options.cuttingPlaneFillColor has been deprecated since 27.5 and will be removed in a future release, use sectionFillColor instead"
|
|
260
268
|
);
|
|
261
269
|
}
|
|
262
|
-
this.
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
"sectionFillColor",
|
|
266
|
-
{
|
|
270
|
+
this.beginUpdate();
|
|
271
|
+
try {
|
|
272
|
+
this.setProperty("cuttingPlaneFillColor", value, isLegacyRGB(value));
|
|
273
|
+
this.setProperty("sectionFillColor", {
|
|
267
274
|
r: this._data.cuttingPlaneFillColor.red,
|
|
268
275
|
g: this._data.cuttingPlaneFillColor.green,
|
|
269
276
|
b: this._data.cuttingPlaneFillColor.blue,
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
|
|
277
|
+
});
|
|
278
|
+
} finally {
|
|
279
|
+
this.endUpdate();
|
|
280
|
+
}
|
|
273
281
|
}
|
|
274
282
|
|
|
275
283
|
get enableSectionFill(): boolean {
|
|
@@ -285,17 +293,17 @@ export class Options implements IOptions {
|
|
|
285
293
|
}
|
|
286
294
|
|
|
287
295
|
set sectionFillColor(value: { r: number; g: number; b: number }) {
|
|
288
|
-
this.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
"cuttingPlaneFillColor",
|
|
292
|
-
{
|
|
296
|
+
this.beginUpdate();
|
|
297
|
+
try {
|
|
298
|
+
this.setProperty("sectionFillColor", value, isColorRGB(value));
|
|
299
|
+
this.setProperty("cuttingPlaneFillColor", {
|
|
293
300
|
red: this._data.sectionFillColor.r,
|
|
294
301
|
green: this._data.sectionFillColor.g,
|
|
295
302
|
blue: this._data.sectionFillColor.b,
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
303
|
+
});
|
|
304
|
+
} finally {
|
|
305
|
+
this.endUpdate();
|
|
306
|
+
}
|
|
299
307
|
}
|
|
300
308
|
|
|
301
309
|
get sectionUseObjectColor(): boolean {
|
|
@@ -415,9 +423,13 @@ export class Options implements IOptions {
|
|
|
415
423
|
}
|
|
416
424
|
|
|
417
425
|
set sceneGraph(value: boolean) {
|
|
418
|
-
this.
|
|
419
|
-
|
|
420
|
-
|
|
426
|
+
this.beginUpdate();
|
|
427
|
+
try {
|
|
428
|
+
this.setProperty("sceneGraph", value);
|
|
429
|
+
this.setProperty("enablePartialMode", this.enablePartialMode && !this.sceneGraph);
|
|
430
|
+
} finally {
|
|
431
|
+
this.endUpdate();
|
|
432
|
+
}
|
|
421
433
|
}
|
|
422
434
|
|
|
423
435
|
get edgeModel(): boolean {
|