@inweb/viewer-visualize 25.9.8 → 25.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/dist/viewer-visualize.js +252 -163
  3. package/dist/viewer-visualize.js.map +1 -1
  4. package/dist/viewer-visualize.min.js +1 -1
  5. package/dist/viewer-visualize.module.js +211 -89
  6. package/dist/viewer-visualize.module.js.map +1 -1
  7. package/lib/Viewer/Commands/index.d.ts +1 -1
  8. package/lib/Viewer/Draggers/Actions/PanAction.d.ts +2 -2
  9. package/lib/Viewer/Draggers/Actions/ZoomAction.d.ts +1 -1
  10. package/lib/Viewer/Draggers/Common/OdBaseDragger.d.ts +1 -1
  11. package/lib/Viewer/Draggers/MeasureLineDragger/index.d.ts +4 -0
  12. package/lib/Viewer/Draggers/OdOrbitDragger.d.ts +1 -1
  13. package/lib/Viewer/Draggers/OdPanDragger.d.ts +2 -2
  14. package/lib/Viewer/Draggers/OdZoomDragger.d.ts +5 -2
  15. package/lib/Viewer/Draggers/OdZoomWindowDragger/index.d.ts +1 -1
  16. package/lib/Viewer/Draggers/OrbitAroundBuildingDragger.d.ts +1 -1
  17. package/lib/Viewer/Viewer.d.ts +25 -67
  18. package/package.json +6 -6
  19. package/src/Viewer/Commands/{Unselect.ts → ClearSelected.ts} +4 -3
  20. package/src/Viewer/Commands/Explode.ts +1 -1
  21. package/src/Viewer/Commands/HideSelected.ts +2 -1
  22. package/src/Viewer/Commands/IsolateSelected.ts +1 -1
  23. package/src/Viewer/Commands/ResetView.ts +1 -1
  24. package/src/Viewer/Commands/ShowAll.ts +1 -1
  25. package/src/Viewer/Commands/index.ts +1 -1
  26. package/src/Viewer/Draggers/Actions/PanAction.ts +8 -8
  27. package/src/Viewer/Draggers/Actions/ZoomAction.ts +3 -1
  28. package/src/Viewer/Draggers/Common/GestureManager.ts +3 -3
  29. package/src/Viewer/Draggers/Common/OdBaseDragger.ts +3 -3
  30. package/src/Viewer/Draggers/MeasureLineDragger/MeasureLineItem.ts +6 -1
  31. package/src/Viewer/Draggers/MeasureLineDragger/index.ts +81 -3
  32. package/src/Viewer/Draggers/OdOrbitDragger.ts +1 -1
  33. package/src/Viewer/Draggers/OdPanDragger.ts +4 -4
  34. package/src/Viewer/Draggers/OdZoomDragger.ts +13 -4
  35. package/src/Viewer/Draggers/OdZoomWheelDragger.ts +3 -1
  36. package/src/Viewer/Draggers/OdZoomWindowDragger/index.ts +1 -1
  37. package/src/Viewer/Draggers/OrbitAroundBuildingDragger.ts +1 -1
  38. package/src/Viewer/Markup/Visualize/VisualizeMarkup.ts +1 -0
  39. package/src/Viewer/Viewer.ts +61 -77
  40. /package/lib/{ConvetMath.d.ts → ConvertMath.d.ts} +0 -0
  41. /package/lib/Viewer/Commands/{Unselect.d.ts → ClearSelected.d.ts} +0 -0
  42. /package/src/{ConvetMath.ts → ConvertMath.ts} +0 -0
@@ -1,5 +1,6 @@
1
1
  import "./ApplyModelTransform";
2
2
  import "./ClearMarkup";
3
+ import "./ClearSelected";
3
4
  import "./ClearSlices";
4
5
  import "./CreatePreview";
5
6
  import "./Explode";
@@ -16,7 +17,6 @@ import "./SetDefaultViewPosition";
16
17
  import "./SetMarkupColor";
17
18
  import "./SetSelected";
18
19
  import "./ShowAll";
19
- import "./Unselect";
20
20
  import "./ZoomToExtents";
21
21
  import "./ZoomToObjects";
22
22
  import "./ZoomToSelected";
@@ -10,8 +10,8 @@ export declare class PanAction {
10
10
  private _getViewParams;
11
11
  private _setViewParams;
12
12
  constructor(m_module: any, subject: Viewer, beginInteractivity: () => void, endInteractivity: () => void, getViewParams: () => ViewParams, setViewParams: (params: ViewParams) => void);
13
- beginAction(x: number, y: number): void;
14
- action(x: number, y: number): void;
13
+ beginAction(x: number, y: number, absoluteX: number, absoluteY: number): void;
14
+ action(x: number, y: number, absoluteX: number, absoluteY: number): void;
15
15
  endAction(): void;
16
16
  private screenToWorld;
17
17
  }
@@ -3,5 +3,5 @@ export declare class ZoomAction {
3
3
  private _m_module;
4
4
  private _subject;
5
5
  constructor(m_module: any, subject: Viewer);
6
- action(x: number, y: number, zoomFactor: number): void;
6
+ action(x: number, y: number, zoomFactor: number, absoluteX: number, absoluteY: number): void;
7
7
  }
@@ -23,7 +23,7 @@ export declare class OdBaseDragger extends OdaGeAction {
23
23
  protected dblclick(ev: MouseEvent): void;
24
24
  protected start(x: number, y: number, absoluteX?: number, absoluteY?: number): void;
25
25
  protected drag(x: number, y: number, absoluteX?: number, absoluteY?: number): void;
26
- protected end(x: number, y: number): void;
26
+ protected end(x: number, y: number, absoluteX?: number, absoluteY?: number): void;
27
27
  protected beginInteractivity: () => void;
28
28
  protected endInteractivity: () => void;
29
29
  protected getActiveMarkupEntity(entityName: string): any;
@@ -10,6 +10,8 @@ export declare class MeasureLineDragger extends OdBaseDragger {
10
10
  protected items: MeasureLineItem[];
11
11
  protected m_overlayElement: HTMLElement;
12
12
  protected previewMeasureLine: MeasureLineItem;
13
+ protected conversionFactor: number;
14
+ protected oldRulerUnit: string;
13
15
  constructor(subject: Viewer);
14
16
  initialize(): void;
15
17
  dispose(): void;
@@ -21,4 +23,6 @@ export declare class MeasureLineDragger extends OdBaseDragger {
21
23
  end(): void;
22
24
  createNewMeasureIfNeed(): void;
23
25
  createMeasureLine(): MeasureLineItem;
26
+ optionsChange(event: any): void;
27
+ getKUnitByName(unitName: string): any;
24
28
  }
@@ -9,6 +9,6 @@ export declare class OdOrbitDragger extends OdBaseDragger {
9
9
  constructor(subject: Viewer);
10
10
  start(x: number, y: number): void;
11
11
  setDefaultViewParams(): void;
12
- drag(x: number, y: number, dltX: number, dltY: number): void;
12
+ drag(x: number, y: number): void;
13
13
  end(): void;
14
14
  }
@@ -5,7 +5,7 @@ export declare class OdPanDragger extends OdBaseDragger {
5
5
  private _panAction;
6
6
  protected m_start: Point3d;
7
7
  constructor(subject: Viewer);
8
- start(x: number, y: number): void;
9
- drag(x: number, y: number, dltX: number, dltY: number): void;
8
+ start(x: number, y: number, absoluteX: number, absoluteY: number): void;
9
+ drag(x: number, y: number, absoluteX: number, absoluteY: number): void;
10
10
  end(x: number, y: number): void;
11
11
  }
@@ -4,8 +4,11 @@ export declare class OdZoomDragger extends OdBaseDragger {
4
4
  private _zoomAction;
5
5
  protected pressX: number;
6
6
  protected pressY: number;
7
+ protected absoluteX: number;
8
+ protected absoluteY: number;
9
+ protected prevY: number;
7
10
  constructor(subject: Viewer);
8
- start(x: number, y: number): void;
9
- drag(x: number, y: number, dltX: number, dltY: number): void;
11
+ start(x: number, y: number, absoluteX?: number, absoluteY?: number): void;
12
+ drag(x: number, y: number): void;
10
13
  end(): void;
11
14
  }
@@ -8,6 +8,6 @@ export declare class OdZoomWindowDragger extends OdBaseDragger {
8
8
  protected m_maxY: number;
9
9
  constructor(subject: Viewer);
10
10
  start(x: number, y: number): void;
11
- drag(x: number, y: number, dltX: number, dltY: number): void;
11
+ drag(x: number, y: number): void;
12
12
  end(x: number, y: number): void;
13
13
  }
@@ -12,7 +12,7 @@ export declare class OrbitAroundBuildingDragger extends OdBaseDragger {
12
12
  constructor(viewer: Viewer);
13
13
  start(x: number, y: number): void;
14
14
  setDefaultViewParams(): void;
15
- drag(x: number, y: number, dltX: number, dltY: number): void;
15
+ drag(x: number, y: number): void;
16
16
  end(): void;
17
17
  getCenter(): any;
18
18
  }
@@ -82,6 +82,7 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
82
82
  *
83
83
  * Fires:
84
84
  *
85
+ * - {@link InitializeEvent | initialize}
85
86
  * - {@link InitializeProgressEvent | initializeprogress}
86
87
  *
87
88
  * @param canvas -
@@ -91,10 +92,6 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
91
92
  * of the `VisualizeJS` library.
92
93
  */
93
94
  initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent) => void): Promise<this>;
94
- /**
95
- * Unloads an open file, clears the canvas and markups, and releases resources allocated by
96
- * this viewer instance. Call this method before release the `Viewer` instance.
97
- */
98
95
  dispose(): this;
99
96
  /**
100
97
  * Returns `true` if `VisualizeJS` module has been loaded and initialized.
@@ -181,25 +178,8 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
181
178
  * @param dragger - Dragger class.
182
179
  */
183
180
  registerDragger(name: string, dragger: typeof Dragger): void;
184
- /**
185
- * Returns the active dragger instance, or `null` if there is no active dragger.
186
- */
187
181
  activeDragger(): IDragger | null;
188
- /**
189
- * Changes the active dragger. Viewer must be initialized before enable dragger or exception is thrown.
190
- *
191
- * Fires:
192
- *
193
- * - {@link ChangeActiveDraggerEvent | changeactivedragger}
194
- *
195
- * @param name - Dragger name. Can be one of the {@link draggers} list.
196
- * @returns Returns the new active dragger instance or `null` if there is no dragger with the
197
- * given name.
198
- */
199
- setActiveDragger(name: string): IDragger | null;
200
- /**
201
- * Resets the state of the active dragger.
202
- */
182
+ setActiveDragger(name?: string): IDragger | null;
203
183
  resetActiveDragger(): void;
204
184
  /**
205
185
  * Removes all cutting planes.
@@ -213,9 +193,6 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
213
193
  * Creates an overlay view. Overlay view is used to draw cutting planes and `Visualize` markups.
214
194
  */
215
195
  syncOverlay(): any;
216
- /**
217
- * Returns `true` if current opened model is 3D model.
218
- */
219
196
  is3D(): boolean;
220
197
  screenToWorld(position: {
221
198
  x: number;
@@ -238,20 +215,14 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
238
215
  y: number;
239
216
  z: number;
240
217
  };
241
- /**
242
- * Returns a list of original handles for the selected objects.
243
- */
244
218
  getSelected(): string[];
245
- /**
246
- * Selects the model objects by original handles that are obtained using `File.searchProperties()`.
247
- *
248
- * Fires:
249
- *
250
- * - {@link SelectEvent | select}
251
- *
252
- * @param handles - The list of original handles.
253
- */
254
219
  setSelected(handles?: string[]): void;
220
+ clearSelected(): void;
221
+ hideSelected(): void;
222
+ isolateSelected(): void;
223
+ showAll(): void;
224
+ explode(index?: number): void;
225
+ collect(): void;
255
226
  loadReferences(model: Model | File | Assembly): Promise<this>;
256
227
  applyModelTransformMatrix(model: Model | Assembly): void;
257
228
  applySceneGraphSettings(options?: IOptions): void;
@@ -260,6 +231,9 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
260
231
  *
261
232
  * The file geometry data on the server must be converted to `VSFX` format.
262
233
  *
234
+ * To open a large file, enable {@link IOptions.enablePartialMode | partial streaming} mode
235
+ * before opening (see example below).
236
+ *
263
237
  * This method requires a `Client` instance to be specified when creating the viewer to load
264
238
  * model reference files from the Open Cloud Server. For a standalone viewer instance use
265
239
  * {@link openVsfFile | openVsfFile()} or {@link openVsfxFile | openVsfxFile()}.
@@ -274,6 +248,11 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
274
248
  * - {@link GeometryEndEvent | geometryend}
275
249
  * - {@link GeometryErrorEvent | geometryerror}
276
250
  *
251
+ * @example <caption>Using partial streaming mode to open a large file from a server.</caption>
252
+ * viewer.options.enableStreamingMode = true;
253
+ * viewer.options.enablePartialMode = true;
254
+ * await viewer.open(file);
255
+ *
277
256
  * @param file - File, assembly or specific model to load. If a `File` instance with multiple
278
257
  * models is specified, the default model will be loaded. If there is no default model,
279
258
  * first availiable model will be loaded.
@@ -283,7 +262,7 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
283
262
  * Loads a `VSF` file into the viewer.
284
263
  *
285
264
  * This method does not support {@link IOptions.enableStreamingMode | streaming} or
286
- * {@link IOptions.enablePartialMode | partial load} mode.
265
+ * {@link IOptions.enablePartialMode | partial streaming} mode.
287
266
  *
288
267
  * Fires:
289
268
  *
@@ -301,7 +280,7 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
301
280
  * Loads a `VSFX` file into the viewer.
302
281
  *
303
282
  * This method does not support {@link IOptions.enableStreamingMode | streaming} or
304
- * {@link IOptions.enablePartialMode | partial load} mode.
283
+ * {@link IOptions.enablePartialMode | partial streaming} mode.
305
284
  *
306
285
  * Fires:
307
286
  *
@@ -315,16 +294,10 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
315
294
  * @param buffer - Binary data buffer to load.
316
295
  */
317
296
  openVsfxFile(buffer: Uint8Array | ArrayBuffer): this;
318
- /**
319
- * Cancels asynchronous file loading started by {@link open | open()}.
320
- */
321
297
  cancel(): this;
322
- /**
323
- * Unloads an open file and clears the canvas and markups.
324
- */
325
298
  clear(): this;
326
299
  /**
327
- * Returns the color of new markup objects.
300
+ * Deprecated since `25.11`. Use {@link IMarkup.getMarkupColor | markup.getMarkupColor()} instead.
328
301
  */
329
302
  getMarkupColor(): {
330
303
  r: number;
@@ -332,31 +305,16 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
332
305
  b: number;
333
306
  };
334
307
  /**
335
- * Sets the color of new markup objects.
336
- *
337
- * Fires:
338
- *
339
- * - {@link ChangeMarkupColorEvent | changemarkupcolor}
340
- *
341
- * @param r - The `red` component of the color, as a number between 0 and 255.
342
- * @param g - The `green` component of the color, as a number between 0 and 255.
343
- * @param b - The `blue` component of the color, as a number between 0 and 255.
308
+ * Deprecated since `25.11`. Use {@link IMarkup.setMarkupColor | markup.setMarkupColor()} instead.
344
309
  */
345
310
  setMarkupColor(r?: number, g?: number, b?: number): void;
346
311
  /**
347
- * Colors all markup objects with the specified color.
348
- *
349
- * @param r - The `red` component of the color, as a number between 0 and 255.
350
- * @param g - The `green` component of the color, as a number between 0 and 255.
351
- * @param b - The `blue` component of the color, as a number between 0 and 255.
312
+ * Deprecated since `25.11`. Use {@link IMarkup.colorizeAllMarkup | markup.colorizeAllMarkup()} instead.
352
313
  */
353
314
  colorizeAllMarkup(r?: number, g?: number, b?: number): void;
354
315
  /**
355
- * Colors the selected markup objects with the specified color.
356
- *
357
- * @param r - `Red` part of color.
358
- * @param g - `Green` part of color.
359
- * @param b - `Blue` part of color.
316
+ * Deprecated since `25.11`. Use
317
+ * {@link IMarkup.colorizeSelectedMarkups | markup.colorizeSelectedMarkups()} instead.
360
318
  */
361
319
  colorizeSelectedMarkups(r?: number, g?: number, b?: number): void;
362
320
  /**
@@ -388,11 +346,12 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
388
346
  * Executes the command denoted by the given command. If the command is not found, tries to
389
347
  * set active dragger with the specified name.
390
348
  *
391
- * The following commands are registered by default:
349
+ * The following commands are available by default:
392
350
  *
393
351
  * - `applyModelTransform`
394
352
  * - `autoTransformAllModelsToCentralPoint`
395
353
  * - `clearMarkup`
354
+ * - `clearSelected`
396
355
  * - `clearSlices`
397
356
  * - `createPreview`
398
357
  * - `explode`
@@ -409,7 +368,6 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
409
368
  * - `setMarkupColor`
410
369
  * - `setSelected`
411
370
  * - `showAll`
412
- * - `unselect`
413
371
  * - `zoomToExtents`
414
372
  * - `zoomToObjects`
415
373
  * - `zoomToSelected`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inweb/viewer-visualize",
3
- "version": "25.9.8",
3
+ "version": "25.11.0",
4
4
  "description": "3D viewer powered by VisualizeJS",
5
5
  "homepage": "https://cloud.opendesign.com/docs/index.html",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -29,10 +29,10 @@
29
29
  "docs": "typedoc"
30
30
  },
31
31
  "dependencies": {
32
- "@inweb/client": "~25.9.8",
33
- "@inweb/eventemitter2": "~25.9.8",
34
- "@inweb/markup": "~25.9.8",
35
- "@inweb/viewer-core": "~25.9.8"
32
+ "@inweb/client": "~25.11.0",
33
+ "@inweb/eventemitter2": "~25.11.0",
34
+ "@inweb/markup": "~25.11.0",
35
+ "@inweb/viewer-core": "~25.11.0"
36
36
  },
37
- "visualizeJS": "https://opencloud.azureedge.net/libs/visualizejs/master/Visualize.js"
37
+ "visualizeJS": "https://public-fhemb7e3embacwec.z02.azurefd.net/libs/visualizejs/master/Visualize.js"
38
38
  }
@@ -24,14 +24,15 @@
24
24
  import { commands } from "@inweb/viewer-core";
25
25
  import { Viewer } from "../Viewer";
26
26
 
27
- function unselect(viewer: Viewer): void {
27
+ function clearSelected(viewer: Viewer): void {
28
28
  if (!viewer.visualizeJs) return;
29
29
 
30
30
  const visViewer = viewer.visViewer();
31
31
  visViewer.unselect();
32
32
 
33
33
  viewer.update();
34
- viewer.emitEvent({ type: "select", data: visViewer.getSelected(), handles: [] });
34
+ viewer.emitEvent({ type: "select", data: undefined, handles: [] });
35
35
  }
36
36
 
37
- commands("VisualizeJS").registerCommand("unselect", unselect);
37
+ commands("VisualizeJS").registerCommand("clearSelected", clearSelected);
38
+ commands("VisualizeJS").registerCommandAlias("clearSelected", "unselect");
@@ -31,7 +31,7 @@ function explode(viewer: Viewer, index = 0): void {
31
31
  visViewer.explode(index);
32
32
 
33
33
  viewer.update();
34
- viewer.emit({ type: "explode", data: index });
34
+ viewer.emitEvent({ type: "explode", data: index });
35
35
  }
36
36
 
37
37
  commands("VisualizeJS").registerCommand("explode", explode);
@@ -31,7 +31,8 @@ function hideSelected(viewer: Viewer): void {
31
31
  visViewer.hideSelectedObjects(false);
32
32
 
33
33
  viewer.update();
34
- viewer.emit({ type: "hide" });
34
+ viewer.emitEvent({ type: "hide" });
35
+ viewer.emitEvent({ type: "select", data: undefined, handles: [] });
35
36
  }
36
37
 
37
38
  commands("VisualizeJS").registerCommand("hideSelected", hideSelected);
@@ -31,7 +31,7 @@ function isolateSelected(viewer: Viewer): void {
31
31
  visViewer.isolateSelectedObjects(false);
32
32
 
33
33
  viewer.update();
34
- viewer.emit({ type: "isolate" });
34
+ viewer.emitEvent({ type: "isolate" });
35
35
  }
36
36
 
37
37
  commands("VisualizeJS").registerCommand("isolateSelected", isolateSelected);
@@ -31,7 +31,7 @@ function resetView(viewer: Viewer): void {
31
31
  viewer.executeCommand("clearSlices");
32
32
  viewer.executeCommand("clearOverlay");
33
33
  viewer.executeCommand("setMarkupColor");
34
- viewer.executeCommand("unselect");
34
+ viewer.executeCommand("clearSelected");
35
35
  viewer.executeCommand("showAll");
36
36
  viewer.executeCommand("explode", 0);
37
37
  viewer.executeCommand("zoomToExtents", true);
@@ -31,7 +31,7 @@ function showAll(viewer: Viewer): void {
31
31
  visViewer.unisolateSelectedObjects(false);
32
32
 
33
33
  viewer.update();
34
- viewer.emit({ type: "showall" });
34
+ viewer.emitEvent({ type: "showall" });
35
35
  }
36
36
 
37
37
  commands("VisualizeJS").registerCommand("showAll", showAll);
@@ -23,6 +23,7 @@
23
23
 
24
24
  import "./ApplyModelTransform";
25
25
  import "./ClearMarkup";
26
+ import "./ClearSelected";
26
27
  import "./ClearSlices";
27
28
  import "./CreatePreview";
28
29
  import "./Explode";
@@ -39,7 +40,6 @@ import "./SetDefaultViewPosition";
39
40
  import "./SetMarkupColor";
40
41
  import "./SetSelected";
41
42
  import "./ShowAll";
42
- import "./Unselect";
43
43
  import "./ZoomToExtents";
44
44
  import "./ZoomToObjects";
45
45
  import "./ZoomToSelected";
@@ -51,13 +51,13 @@ export class PanAction {
51
51
  this._setViewParams = setViewParams;
52
52
  }
53
53
 
54
- public beginAction(x: number, y: number) {
54
+ public beginAction(x: number, y: number, absoluteX: number, absoluteY: number) {
55
55
  this._m_start = this.screenToWorld(x, y);
56
- this._deltaScreenPosition = { x, y };
56
+ this._deltaScreenPosition = { x: absoluteX, y: absoluteY };
57
57
  this._beginInteractivity();
58
58
  }
59
59
 
60
- public action(x: number, y: number) {
60
+ public action(x: number, y: number, absoluteX: number, absoluteY: number) {
61
61
  const { Vector3d } = this._m_module;
62
62
  const params = this._getViewParams();
63
63
  const pt = this.screenToWorld(x, y);
@@ -83,13 +83,13 @@ export class PanAction {
83
83
  this._subject.activeDragger()?.updatePreview();
84
84
  this._subject.emitEvent({
85
85
  type: "pan",
86
- x,
87
- y,
88
- dX: x - this._deltaScreenPosition.x,
89
- dY: y - this._deltaScreenPosition.y,
86
+ x: absoluteX,
87
+ y: absoluteY,
88
+ dX: absoluteX - this._deltaScreenPosition.x,
89
+ dY: absoluteY - this._deltaScreenPosition.y,
90
90
  });
91
91
 
92
- this._deltaScreenPosition = { x, y };
92
+ this._deltaScreenPosition = { x: absoluteX, y: absoluteY };
93
93
  }
94
94
 
95
95
  public endAction() {
@@ -32,7 +32,7 @@ export class ZoomAction {
32
32
  this._subject = subject;
33
33
  }
34
34
 
35
- public action(x: number, y: number, zoomFactor: number) {
35
+ public action(x: number, y: number, zoomFactor: number, absoluteX: number, absoluteY: number) {
36
36
  const viewer = this._m_module.getViewer();
37
37
  viewer.zoomAt(zoomFactor, x, y);
38
38
 
@@ -41,6 +41,8 @@ export class ZoomAction {
41
41
  this._subject.emitEvent({
42
42
  type: "zoomat",
43
43
  data: zoomFactor,
44
+ x: absoluteX,
45
+ y: absoluteY,
44
46
  });
45
47
  }
46
48
  }
@@ -167,7 +167,7 @@ export class GestureManager extends OdBaseDragger {
167
167
  const zoomSpeed = (currentDistance - previousDistance) / 700;
168
168
  const zoomFactor = 1 + zoomSpeed;
169
169
  const middlePoint = this.getMiddlePoint(this._currentEvents);
170
- this._zoomAction.action(middlePoint.x, middlePoint.y, zoomFactor);
170
+ this._zoomAction.action(middlePoint.x, middlePoint.y, zoomFactor, middlePoint.x, middlePoint.y);
171
171
  this.subject.update();
172
172
  }
173
173
 
@@ -177,10 +177,10 @@ export class GestureManager extends OdBaseDragger {
177
177
  this._lastGestureAction = GestureAction.Pan;
178
178
  OdBaseDragger.isGestureActive = true;
179
179
 
180
- this._panAction.beginAction(currentPoint.x, currentPoint.y);
180
+ this._panAction.beginAction(currentPoint.x, currentPoint.y, currentPoint.x, currentPoint.y);
181
181
  }
182
182
 
183
- this._panAction.action(currentPoint.x, currentPoint.y);
183
+ this._panAction.action(currentPoint.x, currentPoint.y, currentPoint.x, currentPoint.y);
184
184
  this.subject.update();
185
185
  }
186
186
 
@@ -96,7 +96,7 @@ export class OdBaseDragger extends OdaGeAction {
96
96
  (ev.target as HTMLElement).releasePointerCapture(ev.pointerId);
97
97
 
98
98
  const relCoord = this.relativeCoords(ev);
99
- this.end(relCoord.x, relCoord.y);
99
+ this.end(relCoord.x, relCoord.y, ev.clientX, ev.clientY);
100
100
  this.isDragging = false;
101
101
  this.subject.update();
102
102
  }
@@ -115,7 +115,7 @@ export class OdBaseDragger extends OdaGeAction {
115
115
  }
116
116
 
117
117
  const relCoord = this.relativeCoords(ev);
118
- this.drag(relCoord.x, relCoord.y, ev.movementX, ev.movementY);
118
+ this.drag(relCoord.x, relCoord.y, ev.clientX, ev.clientY);
119
119
  if (this.isDragging) {
120
120
  this.subject.update();
121
121
  }
@@ -177,7 +177,7 @@ export class OdBaseDragger extends OdaGeAction {
177
177
 
178
178
  protected drag(x: number, y: number, absoluteX = 0, absoluteY = 0): void {}
179
179
 
180
- protected end(x: number, y: number): void {}
180
+ protected end(x: number, y: number, absoluteX = 0, absoluteY = 0): void {}
181
181
 
182
182
  protected beginInteractivity = () => {
183
183
  const viewer = this.getViewer();
@@ -186,7 +186,12 @@ export class MeasureLineItem {
186
186
  }
187
187
 
188
188
  getDistance(): number {
189
- return utils.getDistance(this.startPoint, this.endPoint, this.moduleInstance) / this.scale;
189
+ let distance = utils.getDistance(this.startPoint, this.endPoint, this.moduleInstance);
190
+ if (Math.abs(this.scale - 1.0) > 10e-5) {
191
+ distance = (distance / this.scale).toFixed(2);
192
+ }
193
+
194
+ return distance;
190
195
  }
191
196
 
192
197
  setStartPoint(gePoint: number[]): void {