@shapediver/viewer.rendering-engine.camera-engine 1.15.5 → 2.0.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 (81) hide show
  1. package/dist/implementation/CameraEngine.d.ts +15 -12
  2. package/dist/implementation/CameraEngine.d.ts.map +1 -1
  3. package/dist/implementation/CameraEngine.js +53 -40
  4. package/dist/implementation/CameraEngine.js.map +1 -1
  5. package/dist/implementation/camera/AbstractCamera.d.ts +23 -46
  6. package/dist/implementation/camera/AbstractCamera.d.ts.map +1 -1
  7. package/dist/implementation/camera/AbstractCamera.js +11 -6
  8. package/dist/implementation/camera/AbstractCamera.js.map +1 -1
  9. package/dist/implementation/camera/OrthographicCamera.d.ts +10 -5
  10. package/dist/implementation/camera/OrthographicCamera.d.ts.map +1 -1
  11. package/dist/implementation/camera/OrthographicCamera.js +29 -15
  12. package/dist/implementation/camera/OrthographicCamera.js.map +1 -1
  13. package/dist/implementation/camera/PerspectiveCamera.d.ts +10 -4
  14. package/dist/implementation/camera/PerspectiveCamera.d.ts.map +1 -1
  15. package/dist/implementation/camera/PerspectiveCamera.js +27 -15
  16. package/dist/implementation/camera/PerspectiveCamera.js.map +1 -1
  17. package/dist/implementation/controls/AbstractCameraControls.d.ts +6 -12
  18. package/dist/implementation/controls/AbstractCameraControls.d.ts.map +1 -1
  19. package/dist/implementation/controls/AbstractCameraControls.js +5 -5
  20. package/dist/implementation/controls/AbstractCameraControls.js.map +1 -1
  21. package/dist/implementation/controls/OrthographicCameraControls.d.ts +2 -2
  22. package/dist/implementation/controls/OrthographicCameraControls.d.ts.map +1 -1
  23. package/dist/implementation/controls/OrthographicCameraControls.js +3 -4
  24. package/dist/implementation/controls/OrthographicCameraControls.js.map +1 -1
  25. package/dist/implementation/controls/PerspectiveCameraControls.d.ts +2 -2
  26. package/dist/implementation/controls/PerspectiveCameraControls.d.ts.map +1 -1
  27. package/dist/implementation/controls/PerspectiveCameraControls.js +3 -4
  28. package/dist/implementation/controls/PerspectiveCameraControls.js.map +1 -1
  29. package/dist/implementation/interpolation/CameraInterpolationManager.d.ts +2 -8
  30. package/dist/implementation/interpolation/CameraInterpolationManager.d.ts.map +1 -1
  31. package/dist/implementation/interpolation/CameraInterpolationManager.js +0 -1
  32. package/dist/implementation/interpolation/CameraInterpolationManager.js.map +1 -1
  33. package/dist/index.d.ts +3 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +2 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/interfaces/ICameraEngine.d.ts +4 -3
  38. package/dist/interfaces/ICameraEngine.d.ts.map +1 -1
  39. package/dist/interfaces/ICameraEngine.js +6 -6
  40. package/dist/interfaces/ICameraEngine.js.map +1 -1
  41. package/dist/interfaces/camera/ICamera.d.ts +37 -33
  42. package/dist/interfaces/camera/ICamera.d.ts.map +1 -1
  43. package/dist/interfaces/camera/IOrthographicCamera.d.ts +1 -0
  44. package/dist/interfaces/camera/IOrthographicCamera.d.ts.map +1 -1
  45. package/dist/interfaces/camera/IPerspectiveCamera.d.ts +1 -0
  46. package/dist/interfaces/camera/IPerspectiveCamera.d.ts.map +1 -1
  47. package/dist/interfaces/controls/ICameraControls.d.ts +29 -0
  48. package/dist/interfaces/controls/ICameraControls.d.ts.map +1 -1
  49. package/dist/interfaces/controls/ICameraControlsUsage.d.ts +2 -9
  50. package/dist/interfaces/controls/ICameraControlsUsage.d.ts.map +1 -1
  51. package/package.json +15 -12
  52. package/src/implementation/CameraEngine.ts +324 -0
  53. package/src/implementation/camera/AbstractCamera.ts +314 -0
  54. package/src/implementation/camera/OrthographicCamera.ts +276 -0
  55. package/src/implementation/camera/PerspectiveCamera.ts +250 -0
  56. package/src/implementation/controls/AbstractCameraControls.ts +329 -0
  57. package/src/implementation/controls/OrthographicCameraControls.ts +131 -0
  58. package/src/implementation/controls/PerspectiveCameraControls.ts +263 -0
  59. package/src/implementation/controls/orthographic/CameraControlsEventDistribution.ts +205 -0
  60. package/src/implementation/controls/orthographic/CameraControlsLogic.ts +279 -0
  61. package/src/implementation/controls/perspective/CameraControlsEventDistribution.ts +221 -0
  62. package/src/implementation/controls/perspective/CameraControlsLogic.ts +478 -0
  63. package/src/implementation/interpolation/CameraInterpolationManager.ts +154 -0
  64. package/src/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.ts +86 -0
  65. package/src/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.ts +42 -0
  66. package/src/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.ts +63 -0
  67. package/src/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.ts +43 -0
  68. package/src/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.ts +67 -0
  69. package/src/index.ts +31 -0
  70. package/src/interfaces/ICameraEngine.ts +19 -0
  71. package/src/interfaces/camera/ICamera.ts +77 -0
  72. package/src/interfaces/camera/IOrthographicCamera.ts +18 -0
  73. package/src/interfaces/camera/IPerspectiveCamera.ts +10 -0
  74. package/src/interfaces/controls/ICameraControls.ts +37 -0
  75. package/src/interfaces/controls/ICameraControlsEventDistribution.ts +8 -0
  76. package/src/interfaces/controls/ICameraControlsLogic.ts +8 -0
  77. package/src/interfaces/controls/ICameraControlsUsage.ts +30 -0
  78. package/src/interfaces/controls/IOrthographicCameraControls.ts +13 -0
  79. package/src/interfaces/controls/IPerspectiveCameraControls.ts +25 -0
  80. package/src/interfaces/interpolation/ICameraInterpolation.ts +5 -0
  81. package/tsconfig.json +17 -0
@@ -0,0 +1,329 @@
1
+ import { mat4, vec3 } from 'gl-matrix'
2
+ import { EventEngine, EVENTTYPE } from '@shapediver/viewer.shared.services'
3
+ import { container } from 'tsyringe'
4
+
5
+ import { CAMERA_TYPE } from '../../interfaces/ICameraEngine'
6
+ import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera'
7
+ import { ICameraControlsUsage } from '../../interfaces/controls/ICameraControlsUsage'
8
+ import { CameraInterpolationManager } from '../interpolation/CameraInterpolationManager'
9
+ import { ICameraControlsEventDistribution } from '../../interfaces/controls/ICameraControlsEventDistribution'
10
+ import { ICameraControlsLogic } from '../../interfaces/controls/ICameraControlsLogic'
11
+
12
+ export class AbstractCameraControls implements ICameraControlsUsage {
13
+ // #region Properties (11)
14
+
15
+ private readonly _cameraInterpolationManager: CameraInterpolationManager;
16
+ private readonly _eventEngine: EventEngine = <EventEngine>container.resolve(EventEngine);
17
+
18
+ private _canvas?: HTMLCanvasElement;
19
+ private _manualInteraction: boolean = false;
20
+ private _manualInteractionTransformations: {
21
+ position: {
22
+ matrix?: mat4,
23
+ vector?: vec3
24
+ }[],
25
+ target: {
26
+ matrix?: mat4,
27
+ vector?: vec3
28
+ }[],
29
+ };
30
+ private _moving: boolean = false;
31
+ private _movingDuration: number = 0;
32
+ private _nonmanualInteraction: boolean = false;
33
+ private _nonmanualInteractionTransformations: {
34
+ position: {
35
+ matrix?: mat4,
36
+ vector?: vec3
37
+ }[],
38
+ target: {
39
+ matrix?: mat4,
40
+ vector?: vec3
41
+ }[],
42
+ };
43
+ private _position: vec3 = vec3.create();
44
+ private _target: vec3 = vec3.create();
45
+ private _viewportId?: string;
46
+
47
+ protected _cameraControlsEventDistribution!: ICameraControlsEventDistribution;
48
+ protected _cameraLogic!: ICameraControlsLogic;
49
+
50
+ // #endregion Properties (11)
51
+
52
+ // #region Constructors (1)
53
+
54
+ constructor(
55
+ private _camera: ICamera,
56
+ private _enabled: boolean,
57
+ type: CAMERA_TYPE
58
+ ) {
59
+ this._cameraInterpolationManager = new CameraInterpolationManager(this._camera, this);
60
+ this._manualInteractionTransformations = { position: [], target: [] };
61
+ this._nonmanualInteractionTransformations = { position: [], target: [] };
62
+ }
63
+
64
+ // #endregion Constructors (1)
65
+
66
+ // #region Public Accessors (9)
67
+
68
+ public assignViewer(viewportId: string, canvas: HTMLCanvasElement) {
69
+ this._canvas = canvas;
70
+ this._viewportId = viewportId;
71
+ }
72
+
73
+ public get cameraControlsEventDistribution(): ICameraControlsEventDistribution {
74
+ return this._cameraControlsEventDistribution;
75
+ }
76
+
77
+ public get canvas(): HTMLCanvasElement | undefined {
78
+ return this._canvas;
79
+ }
80
+
81
+ public set canvas(value: HTMLCanvasElement | undefined) {
82
+ this._canvas = value;
83
+ }
84
+
85
+ public get enabled(): boolean {
86
+ return this._enabled;
87
+ }
88
+
89
+ public set enabled(value: boolean) {
90
+ if (!value) {
91
+ this._manualInteraction = false;
92
+ this._manualInteractionTransformations = { position: [], target: [] };
93
+ this._nonmanualInteraction = false;
94
+ this._nonmanualInteractionTransformations = { position: [], target: [] };
95
+
96
+ this._cameraControlsEventDistribution.reset();
97
+ this._cameraLogic.reset();
98
+ }
99
+ this._enabled = value;
100
+ }
101
+
102
+ public get camera(): ICamera {
103
+ return this._camera;
104
+ }
105
+
106
+ public set camera(value: ICamera) {
107
+ this._camera = value;
108
+ }
109
+
110
+ public get position(): vec3 {
111
+ return this._position;
112
+ }
113
+
114
+ public set position(value: vec3) {
115
+ this._position = value;
116
+ }
117
+
118
+ public get target(): vec3 {
119
+ return this._target;
120
+ }
121
+
122
+ public set target(value: vec3) {
123
+ this._target = value;
124
+ }
125
+
126
+ // #endregion Public Accessors (9)
127
+
128
+ // #region Public Methods (10)
129
+
130
+ public animate(path: { position: vec3, target: vec3 }[], options: ICameraOptions): Promise<boolean> {
131
+ if(options && options.duration === 0) {
132
+ this._position = path[path.length-1].position;
133
+ this._target = path[path.length-1].target;
134
+ return new Promise<boolean>(resolve => resolve(true));
135
+ }
136
+
137
+ this._manualInteraction = false;
138
+ this._manualInteractionTransformations = { position: [], target: [] };
139
+ return this._cameraInterpolationManager.interpolate(path, options);
140
+ }
141
+
142
+ public applyPositionVector(vector: vec3, manualInteraction?: boolean | undefined): void {
143
+ if (this._manualInteraction || manualInteraction) {
144
+ this._manualInteraction = true;
145
+ this._manualInteractionTransformations.position.push({vector});
146
+ } else {
147
+ this._nonmanualInteraction = true;
148
+ this._nonmanualInteractionTransformations.position.push({vector});
149
+ }
150
+ }
151
+
152
+ public applyTargetVector(vector: vec3, manualInteraction?: boolean | undefined): void {
153
+ if (this._manualInteraction || manualInteraction) {
154
+ this._manualInteraction = true;
155
+ this._manualInteractionTransformations.target.push({vector});
156
+ } else {
157
+ this._nonmanualInteraction = true;
158
+ this._nonmanualInteractionTransformations.target.push({vector});
159
+ }
160
+ }
161
+
162
+ public applyPositionMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void {
163
+ if (this._manualInteraction || manualInteraction) {
164
+ this._manualInteraction = true;
165
+ this._manualInteractionTransformations.position.push({matrix});
166
+ } else {
167
+ this._nonmanualInteraction = true;
168
+ this._nonmanualInteractionTransformations.position.push({matrix});
169
+ }
170
+ }
171
+
172
+ public applyTargetMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void {
173
+ if (this._manualInteraction || manualInteraction) {
174
+ this._manualInteraction = true;
175
+ this._manualInteractionTransformations.target.push({matrix});
176
+ } else {
177
+ this._nonmanualInteraction = true;
178
+ this._nonmanualInteractionTransformations.target.push({matrix});
179
+ }
180
+ }
181
+
182
+ public applyUpMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void {
183
+ // https://shapediver.atlassian.net/browse/SS-2949
184
+ throw new Error("Method not implemented.");
185
+ }
186
+
187
+ public getPositionWithManualUpdates(): vec3 {
188
+ let position = vec3.clone(this._position);
189
+ if (this._manualInteraction) {
190
+ for (let i = this._manualInteractionTransformations.position.length - 1; i >= 0; i--) {
191
+ if(this._manualInteractionTransformations.position[i].matrix) {
192
+ position = vec3.transformMat4(position, position, this._manualInteractionTransformations.position[i].matrix!);
193
+ } else {
194
+ position = vec3.add(position, position, this._manualInteractionTransformations.position[i].vector!);
195
+ }
196
+ }
197
+ }
198
+ return position;
199
+ }
200
+
201
+ public getTargetWithManualUpdates(): vec3 {
202
+ let target = vec3.clone(this._target);
203
+ if (this._manualInteraction) {
204
+ for (let i = this._manualInteractionTransformations.target.length - 1; i >= 0; i--) {
205
+ if(this._manualInteractionTransformations.target[i].matrix) {
206
+ target = vec3.transformMat4(target, target, this._manualInteractionTransformations.target[i].matrix!);
207
+ } else {
208
+ target = vec3.add(target, target, this._manualInteractionTransformations.target[i].vector!);
209
+ }
210
+ }
211
+ }
212
+ return target;
213
+ }
214
+
215
+ public getPositionWithUpdates(): vec3 {
216
+ return this.getPosition();
217
+ }
218
+
219
+ public getTargetWithUpdates(): vec3 {
220
+ return this.getTarget();
221
+ }
222
+
223
+ public isMoving(): boolean {
224
+ return this._manualInteraction || this._nonmanualInteraction;
225
+ }
226
+
227
+ public isWithinRestrictions(position: vec3, target: vec3): boolean {
228
+ return this._cameraLogic.isWithinRestrictions(position, target);
229
+ }
230
+
231
+ public reset(): void {
232
+ this._cameraControlsEventDistribution.reset();
233
+ this._cameraLogic.reset();
234
+ }
235
+
236
+ public update(time: number): { position: vec3, target: vec3 } {
237
+ if (!this._enabled)
238
+ return { position: vec3.clone(this._position), target: vec3.clone(this._target) };
239
+
240
+ // reset all values
241
+ if(this._manualInteraction === true && this._cameraInterpolationManager.active())
242
+ this._cameraInterpolationManager.stop()
243
+
244
+ let { position, target } = this._cameraLogic.restrict(this.getPosition(), this.getTarget());
245
+ this._position = vec3.clone(position);
246
+ this._target = vec3.clone(target);
247
+
248
+ this._manualInteraction = false;
249
+ this._manualInteractionTransformations = { position: [], target: [] };
250
+ this._nonmanualInteraction = this._cameraInterpolationManager.active();
251
+ this._nonmanualInteractionTransformations = { position: [], target: [] };
252
+
253
+ this._cameraLogic.update(time, this._nonmanualInteraction);
254
+
255
+ const oldMovement = this._moving;
256
+ const cameraDefinition = {
257
+ position: vec3.clone(this._position),
258
+ target: vec3.clone(this._target)
259
+ };
260
+
261
+ this._movingDuration += time;
262
+ this._moving = (this._manualInteraction || this._nonmanualInteraction);
263
+
264
+ switch(true) {
265
+ case oldMovement !== this._moving && this._moving === true:
266
+ this._eventEngine.emitEvent(EVENTTYPE.CAMERA.CAMERA_START, { viewportId: this._viewportId, cameraId: this.camera.id });
267
+ break;
268
+ case oldMovement !== this._moving && this._moving === false:
269
+ this._eventEngine.emitEvent(EVENTTYPE.CAMERA.CAMERA_END, { viewportId: this._viewportId, cameraId: this.camera.id });
270
+ break;
271
+ default:
272
+ this._eventEngine.emitEvent(EVENTTYPE.CAMERA.CAMERA_MOVE, { viewportId: this._viewportId, cameraId: this.camera.id });
273
+ }
274
+
275
+ if (!this._moving) this._movingDuration = 0;
276
+
277
+ return cameraDefinition;
278
+ }
279
+
280
+ // #endregion Public Methods (10)
281
+
282
+ // #region Private Methods (2)
283
+
284
+ private getPosition(): vec3 {
285
+ let position = vec3.clone(this._position);
286
+ if (this._manualInteraction) {
287
+ for (let i = this._manualInteractionTransformations.position.length - 1; i >= 0; i--) {
288
+ if(this._manualInteractionTransformations.position[i].matrix) {
289
+ position = vec3.transformMat4(position, position, this._manualInteractionTransformations.position[i].matrix!);
290
+ } else {
291
+ position = vec3.add(position, position, this._manualInteractionTransformations.position[i].vector!);
292
+ }
293
+ }
294
+ } else if (this._nonmanualInteraction) {
295
+ for (let i = this._nonmanualInteractionTransformations.position.length - 1; i >= 0; i--) {
296
+ if(this._nonmanualInteractionTransformations.position[i].matrix) {
297
+ position = vec3.transformMat4(position, position, this._nonmanualInteractionTransformations.position[i].matrix!);
298
+ } else {
299
+ position = vec3.add(position, position, this._nonmanualInteractionTransformations.position[i].vector!);
300
+ }
301
+ }
302
+ }
303
+ return position;
304
+ }
305
+
306
+ private getTarget(): vec3 {
307
+ let target = vec3.clone(this._target);
308
+ if (this._manualInteraction) {
309
+ for (let i = this._manualInteractionTransformations.target.length - 1; i >= 0; i--) {
310
+ if(this._manualInteractionTransformations.target[i].matrix) {
311
+ target = vec3.transformMat4(target, target, this._manualInteractionTransformations.target[i].matrix!);
312
+ } else {
313
+ target = vec3.add(target, target, this._manualInteractionTransformations.target[i].vector!);
314
+ }
315
+ }
316
+ } else if (this._nonmanualInteraction) {
317
+ for (let i = this._nonmanualInteractionTransformations.target.length - 1; i >= 0; i--) {
318
+ if(this._nonmanualInteractionTransformations.target[i].matrix) {
319
+ target = vec3.transformMat4(target, target, this._nonmanualInteractionTransformations.target[i].matrix!);
320
+ } else {
321
+ target = vec3.add(target, target, this._nonmanualInteractionTransformations.target[i].vector!);
322
+ }
323
+ }
324
+ }
325
+ return target;
326
+ }
327
+
328
+ // #endregion Private Methods (2)
329
+ }
@@ -0,0 +1,131 @@
1
+ import { IOrthographicControlsSettingsV3 } from '@shapediver/viewer.settings'
2
+ import { SettingsEngine, StateEngine } from '@shapediver/viewer.shared.services'
3
+ import { container } from 'tsyringe'
4
+
5
+ import { CAMERA_TYPE, ICamera } from '../..'
6
+ import { IOrthographicCameraControls } from '../../interfaces/controls/IOrthographicCameraControls'
7
+ import { AbstractCameraControls } from './AbstractCameraControls'
8
+ import {
9
+ CameraControlsEventDistribution as OrthographicCameraControlsEventDistribution,
10
+ } from './orthographic/CameraControlsEventDistribution'
11
+ import { CameraControlsLogic as OrthographicCameraControlsLogic } from './orthographic/CameraControlsLogic'
12
+
13
+ export class OrthographicCameraControls extends AbstractCameraControls implements IOrthographicCameraControls {
14
+ // #region Properties (9)
15
+
16
+ private _damping: number = 0.1;
17
+ private _enableKeyPan: boolean = false;
18
+ private _enablePan: boolean = true;
19
+ private _enableZoom: boolean = true;
20
+ private _input: { keys: { up: number, down: number, left: number, right: number }, mouse: { rotate: number, zoom: number, pan: number }, touch: { rotate: number, zoom: number, pan: number } } = { keys: { up: 38, down: 40, left: 37, right: 39 }, mouse: { rotate: 0, zoom: 1, pan: 2 }, touch: { rotate: 1, zoom: 2, pan: 3 }, };
21
+ private _keyPanSpeed: number = 0.5;
22
+ private _movementSmoothness: number = 0.5;
23
+ private _panSpeed: number = 0.5;
24
+ private _zoomSpeed: number = 0.5;
25
+
26
+ private readonly _stateEngine: StateEngine = <StateEngine>container.resolve(StateEngine);
27
+
28
+ // #endregion Properties (9)
29
+
30
+ // #region Constructors (1)
31
+
32
+ constructor(camera: ICamera, enabled: boolean) {
33
+ super(camera, enabled, CAMERA_TYPE.ORTHOGRAPHIC);
34
+ this._cameraLogic = new OrthographicCameraControlsLogic(this);
35
+ this._cameraControlsEventDistribution = new OrthographicCameraControlsEventDistribution(this, <OrthographicCameraControlsLogic>this._cameraLogic);
36
+ }
37
+
38
+ public applySettings(settingsEngine: SettingsEngine) {
39
+ const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
40
+ if(!cameraSetting) return;
41
+ this.reset();
42
+ const controlsSettings = <IOrthographicControlsSettingsV3>cameraSetting.controls;
43
+ this.damping = controlsSettings.damping;
44
+ this.enableKeyPan = controlsSettings.enableKeyPan;
45
+ this.enablePan = controlsSettings.enablePan;
46
+ this.enableZoom = controlsSettings.enableZoom;
47
+ this.input = controlsSettings.input;
48
+ this.keyPanSpeed = controlsSettings.keyPanSpeed;
49
+ this.movementSmoothness = controlsSettings.movementSmoothness;
50
+ this.panSpeed = controlsSettings.panSpeed;
51
+ this.zoomSpeed = controlsSettings.zoomSpeed;
52
+ }
53
+
54
+ // #endregion Constructors (1)
55
+
56
+ // #region Public Accessors (18)
57
+
58
+ public get damping(): number {
59
+ return this._damping;
60
+ }
61
+
62
+ public set damping(value: number) {
63
+ this._damping = value;
64
+ }
65
+
66
+ public get enableKeyPan(): boolean {
67
+ return this._enableKeyPan;
68
+ }
69
+
70
+ public set enableKeyPan(value: boolean) {
71
+ this._enableKeyPan = value;
72
+ }
73
+
74
+ public get enablePan(): boolean {
75
+ return this._enablePan;
76
+ }
77
+
78
+ public set enablePan(value: boolean) {
79
+ this._enablePan = value;
80
+ }
81
+
82
+ public get enableZoom(): boolean {
83
+ return this._enableZoom;
84
+ }
85
+
86
+ public set enableZoom(value: boolean) {
87
+ this._enableZoom = value;
88
+ }
89
+
90
+ public get input(): { keys: { up: number, down: number, left: number, right: number }, mouse: { rotate: number, zoom: number, pan: number }, touch: { rotate: number, zoom: number, pan: number } } {
91
+ return this._input;
92
+ }
93
+
94
+ public set input(value: { keys: { up: number, down: number, left: number, right: number }, mouse: { rotate: number, zoom: number, pan: number }, touch: { rotate: number, zoom: number, pan: number } }) {
95
+ this._input = value;
96
+ }
97
+
98
+ public get keyPanSpeed(): number {
99
+ return this._keyPanSpeed;
100
+ }
101
+
102
+ public set keyPanSpeed(value: number) {
103
+ this._keyPanSpeed = value;
104
+ }
105
+
106
+ public get movementSmoothness(): number {
107
+ return this._movementSmoothness;
108
+ }
109
+
110
+ public set movementSmoothness(value: number) {
111
+ this._movementSmoothness = value;
112
+ }
113
+
114
+ public get panSpeed(): number {
115
+ return this._panSpeed;
116
+ }
117
+
118
+ public set panSpeed(value: number) {
119
+ this._panSpeed = value;
120
+ }
121
+
122
+ public get zoomSpeed(): number {
123
+ return this._zoomSpeed;
124
+ }
125
+
126
+ public set zoomSpeed(value: number) {
127
+ this._zoomSpeed = value;
128
+ }
129
+
130
+ // #endregion Public Accessors (18)
131
+ }