Socket
Socket
Sign inDemoInstall

@shapediver/viewer.rendering-engine.camera-engine

Package Overview
Dependencies
Maintainers
5
Versions
203
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@shapediver/viewer.rendering-engine.camera-engine - npm Package Compare versions

Comparing version 2.12.8 to 3.0.0

dist/implementation/controls/CameraControlsEventDistribution.d.ts

12

dist/implementation/camera/AbstractCamera.d.ts

@@ -1,9 +0,9 @@

import { vec2, vec3 } from 'gl-matrix';
import { EventEngine, SettingsEngine, StateEngine } from '@shapediver/viewer.shared.services';
import { AbstractTreeNodeData, ITreeNode } from '@shapediver/viewer.shared.node-tree';
import { Box, IBox } from '@shapediver/viewer.shared.math';
import { AbstractTreeNodeData, ITreeNode } from '@shapediver/viewer.shared.node-tree';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { vec2, vec3 } from 'gl-matrix';
import { EventEngine, SettingsEngine, StateEngine } from '@shapediver/viewer.shared.services';
export declare abstract class AbstractCamera extends AbstractTreeNodeData implements ICamera {

@@ -33,2 +33,4 @@ #private;

set defaultTarget(value: vec3);
get domEventListenerToken(): string | undefined;
set domEventListenerToken(value: string | undefined);
get enableCameraControls(): boolean;

@@ -35,0 +37,0 @@ set enableCameraControls(value: boolean);

@@ -45,12 +45,12 @@ "use strict";

};
var _AbstractCamera_active, _AbstractCamera_autoAdjust, _AbstractCamera_cameraMovementDuration, _AbstractCamera_defaultPosition, _AbstractCamera_defaultTarget, _AbstractCamera_enableCameraControls, _AbstractCamera_far, _AbstractCamera_name, _AbstractCamera_near, _AbstractCamera_node, _AbstractCamera_order, _AbstractCamera_revertAtMouseUp, _AbstractCamera_revertAtMouseUpDuration, _AbstractCamera_sceneRotation, _AbstractCamera_useNodeData, _AbstractCamera_zoomExtentsFactor;
var _AbstractCamera_active, _AbstractCamera_autoAdjust, _AbstractCamera_cameraMovementDuration, _AbstractCamera_defaultPosition, _AbstractCamera_defaultTarget, _AbstractCamera_domEventListenerToken, _AbstractCamera_enableCameraControls, _AbstractCamera_far, _AbstractCamera_name, _AbstractCamera_near, _AbstractCamera_node, _AbstractCamera_order, _AbstractCamera_revertAtMouseUp, _AbstractCamera_revertAtMouseUpDuration, _AbstractCamera_sceneRotation, _AbstractCamera_useNodeData, _AbstractCamera_zoomExtentsFactor;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractCamera = void 0;
const detectIt = __importStar(require("detect-it"));
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
const viewer_shared_math_1 = require("@shapediver/viewer.shared.math");
const gl_matrix_1 = require("gl-matrix");
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const viewer_shared_math_1 = require("@shapediver/viewer.shared.math");
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
class AbstractCamera extends viewer_shared_node_tree_1.AbstractTreeNodeData {
// #endregion Properties (23)
// #endregion Properties (24)
// #region Constructors (1)

@@ -61,3 +61,3 @@ constructor(_id, _type, version) {

this._type = _type;
// #region Properties (23)
// #region Properties (24)
_AbstractCamera_active.set(this, false);

@@ -68,2 +68,3 @@ _AbstractCamera_autoAdjust.set(this, false);

_AbstractCamera_defaultTarget.set(this, gl_matrix_1.vec3.create());
_AbstractCamera_domEventListenerToken.set(this, void 0);
_AbstractCamera_enableCameraControls.set(this, true);

@@ -87,3 +88,3 @@ _AbstractCamera_far.set(this, 1000);

// #endregion Constructors (1)
// #region Public Accessors (41)
// #region Public Getters And Setters (43)
get active() {

@@ -125,2 +126,8 @@ return __classPrivateFieldGet(this, _AbstractCamera_active, "f");

}
get domEventListenerToken() {
return __classPrivateFieldGet(this, _AbstractCamera_domEventListenerToken, "f");
}
set domEventListenerToken(value) {
__classPrivateFieldSet(this, _AbstractCamera_domEventListenerToken, value, "f");
}
get enableCameraControls() {

@@ -215,3 +222,3 @@ return __classPrivateFieldGet(this, _AbstractCamera_enableCameraControls, "f");

}
// #endregion Public Accessors (41)
// #endregion Public Getters And Setters (43)
// #region Public Methods (5)

@@ -304,3 +311,3 @@ animate(path, options) {

exports.AbstractCamera = AbstractCamera;
_AbstractCamera_active = new WeakMap(), _AbstractCamera_autoAdjust = new WeakMap(), _AbstractCamera_cameraMovementDuration = new WeakMap(), _AbstractCamera_defaultPosition = new WeakMap(), _AbstractCamera_defaultTarget = new WeakMap(), _AbstractCamera_enableCameraControls = new WeakMap(), _AbstractCamera_far = new WeakMap(), _AbstractCamera_name = new WeakMap(), _AbstractCamera_near = new WeakMap(), _AbstractCamera_node = new WeakMap(), _AbstractCamera_order = new WeakMap(), _AbstractCamera_revertAtMouseUp = new WeakMap(), _AbstractCamera_revertAtMouseUpDuration = new WeakMap(), _AbstractCamera_sceneRotation = new WeakMap(), _AbstractCamera_useNodeData = new WeakMap(), _AbstractCamera_zoomExtentsFactor = new WeakMap();
_AbstractCamera_active = new WeakMap(), _AbstractCamera_autoAdjust = new WeakMap(), _AbstractCamera_cameraMovementDuration = new WeakMap(), _AbstractCamera_defaultPosition = new WeakMap(), _AbstractCamera_defaultTarget = new WeakMap(), _AbstractCamera_domEventListenerToken = new WeakMap(), _AbstractCamera_enableCameraControls = new WeakMap(), _AbstractCamera_far = new WeakMap(), _AbstractCamera_name = new WeakMap(), _AbstractCamera_near = new WeakMap(), _AbstractCamera_node = new WeakMap(), _AbstractCamera_order = new WeakMap(), _AbstractCamera_revertAtMouseUp = new WeakMap(), _AbstractCamera_revertAtMouseUpDuration = new WeakMap(), _AbstractCamera_sceneRotation = new WeakMap(), _AbstractCamera_useNodeData = new WeakMap(), _AbstractCamera_zoomExtentsFactor = new WeakMap();
//# sourceMappingURL=AbstractCamera.js.map

@@ -1,16 +0,16 @@

import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { vec2, vec3 } from 'gl-matrix';
import { AbstractCamera } from './AbstractCamera';
import { Box } from '@shapediver/viewer.shared.math';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from '../../interfaces/camera/IOrthographicCamera';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { AbstractCamera } from './AbstractCamera';
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from '../../interfaces/camera/IOrthographicCamera';
import { IOrthographicCameraControls } from '../../interfaces/controls/IOrthographicCameraControls';
import { vec2, vec3 } from 'gl-matrix';
import { SettingsEngine } from '@shapediver/viewer.shared.services';
export declare class OrthographicCamera extends AbstractCamera implements IOrthographicCamera {
#private;
protected _controls: IOrthographicCameraControls;
protected _controls: ICameraControls;
constructor(id: string, version?: string);
get bottom(): number;
set bottom(value: number);
get controls(): IOrthographicCameraControls;
set controls(value: IOrthographicCameraControls);
get controls(): ICameraControls;
set controls(value: ICameraControls);
get direction(): ORTHOGRAPHIC_CAMERA_DIRECTION;

@@ -26,8 +26,4 @@ set direction(value: ORTHOGRAPHIC_CAMERA_DIRECTION);

set up(value: vec3);
get threeJsObject(): {
[key: string]: THREE.OrthographicCamera;
};
applySettings(settingsEngine: SettingsEngine): void;
assignViewer(renderingEngine: IRenderingEngine): void;
clone(): IOrthographicCamera;
calculateZoomTo(zoomTarget?: Box, startingPosition?: vec3, startingTarget?: vec3): {

@@ -37,5 +33,6 @@ position: vec3;

};
clone(): IOrthographicCamera;
project(pos: vec3): vec2;
unproject(pos: vec3, position?: vec3, target?: vec3): vec3;
unproject(pos: vec3): vec3;
}
//# sourceMappingURL=OrthographicCamera.d.ts.map

@@ -22,34 +22,32 @@ "use strict";

};
var _OrthographicCamera_converter, _OrthographicCamera_logger, _OrthographicCamera_tree, _OrthographicCamera_domEventListenerToken, _OrthographicCamera_domEventEngine, _OrthographicCamera_bottom, _OrthographicCamera_direction, _OrthographicCamera_left, _OrthographicCamera_right, _OrthographicCamera_top, _OrthographicCamera_threeJsObject, _OrthographicCamera_up;
var _OrthographicCamera_converter, _OrthographicCamera_logger, _OrthographicCamera_tree, _OrthographicCamera_bottom, _OrthographicCamera_direction, _OrthographicCamera_domEventEngine, _OrthographicCamera_left, _OrthographicCamera_right, _OrthographicCamera_top, _OrthographicCamera_up;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrthographicCamera = void 0;
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const AbstractCamera_1 = require("./AbstractCamera");
const ICameraEngine_1 = require("../../interfaces/ICameraEngine");
const IOrthographicCamera_1 = require("../../interfaces/camera/IOrthographicCamera");
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
const gl_matrix_1 = require("gl-matrix");
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
const ICameraEngine_1 = require("../../interfaces/ICameraEngine");
const AbstractCamera_1 = require("./AbstractCamera");
const OrthographicCameraControls_1 = require("../controls/OrthographicCameraControls");
const IOrthographicCamera_1 = require("../../interfaces/camera/IOrthographicCamera");
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
class OrthographicCamera extends AbstractCamera_1.AbstractCamera {
// #endregion Properties (7)
// #endregion Properties (11)
// #region Constructors (1)
constructor(id, version) {
super(id, ICameraEngine_1.CAMERA_TYPE.ORTHOGRAPHIC, version);
// #region Properties (7)
// #region Properties (11)
_OrthographicCamera_converter.set(this, viewer_shared_services_1.Converter.instance);
_OrthographicCamera_logger.set(this, viewer_shared_services_1.Logger.instance);
_OrthographicCamera_tree.set(this, viewer_shared_node_tree_1.Tree.instance);
_OrthographicCamera_domEventListenerToken.set(this, void 0);
_OrthographicCamera_bottom.set(this, -100);
_OrthographicCamera_direction.set(this, IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.CUSTOM);
_OrthographicCamera_domEventEngine.set(this, void 0);
_OrthographicCamera_bottom.set(this, -100);
_OrthographicCamera_direction.set(this, IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.TOP);
_OrthographicCamera_left.set(this, -100);
_OrthographicCamera_right.set(this, 100);
_OrthographicCamera_top.set(this, 100);
_OrthographicCamera_threeJsObject.set(this, {});
_OrthographicCamera_up.set(this, gl_matrix_1.vec3.fromValues(0, 1, 0));
_OrthographicCamera_up.set(this, gl_matrix_1.vec3.fromValues(0, 0, 1));
this._controls = new OrthographicCameraControls_1.OrthographicCameraControls(this, true);
}
// #endregion Constructors (1)
// #region Public Accessors (12)
// #region Public Getters And Setters (14)
get bottom() {

@@ -79,4 +77,2 @@ return __classPrivateFieldGet(this, _OrthographicCamera_bottom, "f");

case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.RIGHT:
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
break;
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:

@@ -86,4 +82,2 @@ this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);

case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BACK:
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
break;
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:

@@ -93,3 +87,3 @@ this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);

default:
this.up = gl_matrix_1.vec3.fromValues(0, -1, 0);
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
}

@@ -128,6 +122,3 @@ if (changedDirection) {

}
get threeJsObject() {
return __classPrivateFieldGet(this, _OrthographicCamera_threeJsObject, "f");
}
// #endregion Public Accessors (12)
// #endregion Public Getters And Setters (14)
// #region Public Methods (6)

@@ -143,5 +134,6 @@ applySettings(settingsEngine) {

this.revertAtMouseUpDuration = cameraSetting.revertAtMouseUpDuration;
this.sceneRotation = gl_matrix_1.vec2.fromValues(cameraSetting.sceneRotation.x, cameraSetting.sceneRotation.y);
this.zoomExtentsFactor = cameraSetting.zoomExtentsFactor;
let position = __classPrivateFieldGet(this, _OrthographicCamera_converter, "f").toVec3(cameraSetting.position);
let target = __classPrivateFieldGet(this, _OrthographicCamera_converter, "f").toVec3(cameraSetting.target);
const position = __classPrivateFieldGet(this, _OrthographicCamera_converter, "f").toVec3(cameraSetting.position);
const target = __classPrivateFieldGet(this, _OrthographicCamera_converter, "f").toVec3(cameraSetting.target);
this.defaultPosition = gl_matrix_1.vec3.clone(position);

@@ -154,3 +146,3 @@ this.defaultTarget = gl_matrix_1.vec3.clone(target);

if (this._viewportId) {
this._stateEngine.renderingEngines[this._viewportId].boundingBoxCreated
this._stateEngine.viewportEngines[this._viewportId].boundingBoxCreated
.then(() => __awaiter(this, void 0, void 0, function* () {

@@ -170,8 +162,8 @@ yield this.zoomTo(undefined, { duration: 0 });

this._controls.assignViewer(renderingEngine.id, renderingEngine.canvas);
if (__classPrivateFieldGet(this, _OrthographicCamera_domEventListenerToken, "f") && __classPrivateFieldGet(this, _OrthographicCamera_domEventEngine, "f"))
__classPrivateFieldGet(this, _OrthographicCamera_domEventEngine, "f").removeDomEventListener(__classPrivateFieldGet(this, _OrthographicCamera_domEventListenerToken, "f"));
if (this.domEventListenerToken && __classPrivateFieldGet(this, _OrthographicCamera_domEventEngine, "f"))
__classPrivateFieldGet(this, _OrthographicCamera_domEventEngine, "f").removeDomEventListener(this.domEventListenerToken);
__classPrivateFieldSet(this, _OrthographicCamera_domEventEngine, renderingEngine.domEventEngine, "f");
__classPrivateFieldSet(this, _OrthographicCamera_domEventListenerToken, __classPrivateFieldGet(this, _OrthographicCamera_domEventEngine, "f").addDomEventListener(this._controls.cameraControlsEventDistribution), "f");
this.domEventListenerToken = __classPrivateFieldGet(this, _OrthographicCamera_domEventEngine, "f").addDomEventListener(this._controls.cameraControlsEventDistribution);
this.boundingBox = __classPrivateFieldGet(this, _OrthographicCamera_tree, "f").root.boundingBox.clone();
this._stateEngine.renderingEngines[renderingEngine.id].boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
this._stateEngine.viewportEngines[renderingEngine.id].boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2])

@@ -181,5 +173,2 @@ yield this.zoomTo(undefined, { duration: 0 });

}
clone() {
return new OrthographicCamera(this.id, this.version);
}
calculateZoomTo(zoomTarget, startingPosition = this.position, startingTarget = this.target) {

@@ -198,42 +187,54 @@ let box;

return { position: gl_matrix_1.vec3.create(), target: gl_matrix_1.vec3.create() };
const target = gl_matrix_1.vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);
if (startingPosition[0] === startingTarget[0] && startingPosition[1] === startingTarget[1] && startingPosition[2] === startingTarget[2])
startingPosition = gl_matrix_1.vec3.fromValues(target[0], target[1] - 7.5, target[2] + 5);
const factor = 2 * box.boundingSphere.radius * this.zoomExtentsFactor;
const center = gl_matrix_1.vec3.clone(box.boundingSphere.center);
switch (__classPrivateFieldGet(this, _OrthographicCamera_direction, "f")) {
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.TOP:
return {
position: gl_matrix_1.vec3.fromValues(center[0], center[1], center[2] + factor),
target: gl_matrix_1.vec3.clone(center)
position: gl_matrix_1.vec3.fromValues(target[0], target[1], target[2] + factor),
target: gl_matrix_1.vec3.clone(target)
};
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BOTTOM:
return {
position: gl_matrix_1.vec3.fromValues(center[0], center[1], center[2] - factor),
target: gl_matrix_1.vec3.clone(center)
position: gl_matrix_1.vec3.fromValues(target[0], target[1], target[2] - factor),
target: gl_matrix_1.vec3.clone(target)
};
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.RIGHT:
return {
position: gl_matrix_1.vec3.fromValues(center[0] + factor, center[1], center[2]),
target: gl_matrix_1.vec3.clone(center)
position: gl_matrix_1.vec3.fromValues(target[0] + factor, target[1], target[2]),
target: gl_matrix_1.vec3.clone(target)
};
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:
return {
position: gl_matrix_1.vec3.fromValues(center[0] - factor, center[1], center[2]),
target: gl_matrix_1.vec3.clone(center)
position: gl_matrix_1.vec3.fromValues(target[0] - factor, target[1], target[2]),
target: gl_matrix_1.vec3.clone(target)
};
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BACK:
return {
position: gl_matrix_1.vec3.fromValues(center[0], center[1] + factor, center[2]),
target: gl_matrix_1.vec3.clone(center)
position: gl_matrix_1.vec3.fromValues(target[0], target[1] + factor, target[2]),
target: gl_matrix_1.vec3.clone(target)
};
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:
return {
position: gl_matrix_1.vec3.fromValues(center[0], center[1] - factor, center[2]),
target: gl_matrix_1.vec3.clone(center)
position: gl_matrix_1.vec3.fromValues(target[0], target[1] - factor, target[2]),
target: gl_matrix_1.vec3.clone(target)
};
default:
return {
position: gl_matrix_1.vec3.fromValues(center[0], center[1], center[2] + factor),
target: gl_matrix_1.vec3.clone(center)
};
{
// get the direction from the starting position to the starting target
const direction = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), startingPosition, target);
// normalize the direction
gl_matrix_1.vec3.normalize(direction, direction);
// get the new position
return {
position: gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), target, gl_matrix_1.vec3.scale(gl_matrix_1.vec3.create(), direction, factor)),
target: gl_matrix_1.vec3.clone(target)
};
}
}
}
clone() {
return new OrthographicCamera(this.id, this.version);
}
project(pos) {

@@ -246,3 +247,3 @@ const m = gl_matrix_1.mat4.targetTo(gl_matrix_1.mat4.create(), this.position, this.target, this.up);

}
unproject(pos, position = this.position, target = this.target) {
unproject(pos) {
const m = gl_matrix_1.mat4.targetTo(gl_matrix_1.mat4.create(), this.position, this.target, this.up);

@@ -256,3 +257,3 @@ const p = gl_matrix_1.mat4.ortho(gl_matrix_1.mat4.create(), this.left, this.right, this.bottom, this.top, this.near, this.far);

exports.OrthographicCamera = OrthographicCamera;
_OrthographicCamera_converter = new WeakMap(), _OrthographicCamera_logger = new WeakMap(), _OrthographicCamera_tree = new WeakMap(), _OrthographicCamera_domEventListenerToken = new WeakMap(), _OrthographicCamera_domEventEngine = new WeakMap(), _OrthographicCamera_bottom = new WeakMap(), _OrthographicCamera_direction = new WeakMap(), _OrthographicCamera_left = new WeakMap(), _OrthographicCamera_right = new WeakMap(), _OrthographicCamera_top = new WeakMap(), _OrthographicCamera_threeJsObject = new WeakMap(), _OrthographicCamera_up = new WeakMap();
_OrthographicCamera_converter = new WeakMap(), _OrthographicCamera_logger = new WeakMap(), _OrthographicCamera_tree = new WeakMap(), _OrthographicCamera_bottom = new WeakMap(), _OrthographicCamera_direction = new WeakMap(), _OrthographicCamera_domEventEngine = new WeakMap(), _OrthographicCamera_left = new WeakMap(), _OrthographicCamera_right = new WeakMap(), _OrthographicCamera_top = new WeakMap(), _OrthographicCamera_up = new WeakMap();
//# sourceMappingURL=OrthographicCamera.js.map

@@ -1,24 +0,20 @@

import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { vec2, vec3 } from 'gl-matrix';
import { AbstractCamera } from './AbstractCamera';
import { Box } from '@shapediver/viewer.shared.math';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { IPerspectiveCamera } from '../../interfaces/camera/IPerspectiveCamera';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { AbstractCamera } from './AbstractCamera';
import { IPerspectiveCamera } from '../../interfaces/camera/IPerspectiveCamera';
import { IPerspectiveCameraControls } from '../../interfaces/controls/IPerspectiveCameraControls';
import { vec2, vec3 } from 'gl-matrix';
import { SettingsEngine } from '@shapediver/viewer.shared.services';
export declare class PerspectiveCamera extends AbstractCamera implements IPerspectiveCamera {
#private;
protected _controls: IPerspectiveCameraControls;
protected _controls: ICameraControls;
constructor(id: string, version?: string, initialAspect?: number);
get aspect(): number | undefined;
set aspect(value: number | undefined);
get controls(): IPerspectiveCameraControls;
set controls(value: IPerspectiveCameraControls);
get controls(): ICameraControls;
set controls(value: ICameraControls);
get fov(): number;
set fov(value: number);
get threeJsObject(): {
[key: string]: THREE.PerspectiveCamera;
};
applySettings(settingsEngine: SettingsEngine): void;
assignViewer(renderingEngine: IRenderingEngine): void;
clone(): IPerspectiveCamera;
calculateZoomTo(zoomTarget?: Box, startingPosition?: vec3, startingTarget?: vec3): {

@@ -28,2 +24,3 @@ position: vec3;

};
clone(): IPerspectiveCamera;
project(pos: vec3, position?: vec3, target?: vec3): vec2;

@@ -30,0 +27,0 @@ unproject(pos: vec3, position?: vec3, target?: vec3): vec3;

@@ -22,26 +22,23 @@ "use strict";

};
var _PerspectiveCamera_converter, _PerspectiveCamera_logger, _PerspectiveCamera_tree, _PerspectiveCamera_domEventListenerToken, _PerspectiveCamera_domEventEngine, _PerspectiveCamera_aspect, _PerspectiveCamera_fov, _PerspectiveCamera_threeJsObject;
var _PerspectiveCamera_converter, _PerspectiveCamera_tree, _PerspectiveCamera_aspect, _PerspectiveCamera_domEventEngine, _PerspectiveCamera_fov;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PerspectiveCamera = void 0;
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const gl_matrix_1 = require("gl-matrix");
const AbstractCamera_1 = require("./AbstractCamera");
const viewer_shared_math_1 = require("@shapediver/viewer.shared.math");
const ICameraEngine_1 = require("../../interfaces/ICameraEngine");
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
const ICameraEngine_1 = require("../../interfaces/ICameraEngine");
const AbstractCamera_1 = require("./AbstractCamera");
const gl_matrix_1 = require("gl-matrix");
const PerspectiveCameraControls_1 = require("../controls/PerspectiveCameraControls");
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
class PerspectiveCamera extends AbstractCamera_1.AbstractCamera {
// #endregion Properties (3)
// #endregion Properties (6)
// #region Constructors (1)
constructor(id, version, initialAspect) {
super(id, ICameraEngine_1.CAMERA_TYPE.PERSPECTIVE, version);
// #region Properties (3)
// #region Properties (6)
_PerspectiveCamera_converter.set(this, viewer_shared_services_1.Converter.instance);
_PerspectiveCamera_logger.set(this, viewer_shared_services_1.Logger.instance);
_PerspectiveCamera_tree.set(this, viewer_shared_node_tree_1.Tree.instance);
_PerspectiveCamera_domEventListenerToken.set(this, void 0);
_PerspectiveCamera_aspect.set(this, void 0);
_PerspectiveCamera_domEventEngine.set(this, void 0);
_PerspectiveCamera_aspect.set(this, void 0);
_PerspectiveCamera_fov.set(this, 60);
_PerspectiveCamera_threeJsObject.set(this, {});
__classPrivateFieldSet(this, _PerspectiveCamera_aspect, initialAspect, "f");

@@ -51,3 +48,3 @@ this._controls = new PerspectiveCameraControls_1.PerspectiveCameraControls(this, true);

// #endregion Constructors (1)
// #region Public Accessors (4)
// #region Public Getters And Setters (6)
get aspect() {

@@ -71,6 +68,3 @@ return __classPrivateFieldGet(this, _PerspectiveCamera_aspect, "f");

}
get threeJsObject() {
return __classPrivateFieldGet(this, _PerspectiveCamera_threeJsObject, "f");
}
// #endregion Public Accessors (4)
// #endregion Public Getters And Setters (6)
// #region Public Methods (6)

@@ -86,5 +80,6 @@ applySettings(settingsEngine) {

this.revertAtMouseUpDuration = cameraSetting.revertAtMouseUpDuration;
this.sceneRotation = gl_matrix_1.vec2.fromValues(cameraSetting.sceneRotation.x, cameraSetting.sceneRotation.y);
this.zoomExtentsFactor = cameraSetting.zoomExtentsFactor;
let position = __classPrivateFieldGet(this, _PerspectiveCamera_converter, "f").toVec3(cameraSetting.position);
let target = __classPrivateFieldGet(this, _PerspectiveCamera_converter, "f").toVec3(cameraSetting.target);
const position = __classPrivateFieldGet(this, _PerspectiveCamera_converter, "f").toVec3(cameraSetting.position);
const target = __classPrivateFieldGet(this, _PerspectiveCamera_converter, "f").toVec3(cameraSetting.target);
this.defaultPosition = gl_matrix_1.vec3.clone(position);

@@ -98,3 +93,3 @@ this.defaultTarget = gl_matrix_1.vec3.clone(target);

if (this._viewportId) {
this._stateEngine.renderingEngines[this._viewportId].boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
this._stateEngine.viewportEngines[this._viewportId].boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
yield this.zoomTo(undefined, { duration: 0 });

@@ -113,8 +108,8 @@ this.defaultPosition = gl_matrix_1.vec3.clone(this._controls.position);

this._controls.assignViewer(renderingEngine.id, renderingEngine.canvas);
if (__classPrivateFieldGet(this, _PerspectiveCamera_domEventListenerToken, "f") && __classPrivateFieldGet(this, _PerspectiveCamera_domEventEngine, "f"))
__classPrivateFieldGet(this, _PerspectiveCamera_domEventEngine, "f").removeDomEventListener(__classPrivateFieldGet(this, _PerspectiveCamera_domEventListenerToken, "f"));
if (this.domEventListenerToken && __classPrivateFieldGet(this, _PerspectiveCamera_domEventEngine, "f"))
__classPrivateFieldGet(this, _PerspectiveCamera_domEventEngine, "f").removeDomEventListener(this.domEventListenerToken);
__classPrivateFieldSet(this, _PerspectiveCamera_domEventEngine, renderingEngine.domEventEngine, "f");
__classPrivateFieldSet(this, _PerspectiveCamera_domEventListenerToken, __classPrivateFieldGet(this, _PerspectiveCamera_domEventEngine, "f").addDomEventListener(this._controls.cameraControlsEventDistribution), "f");
this.domEventListenerToken = __classPrivateFieldGet(this, _PerspectiveCamera_domEventEngine, "f").addDomEventListener(this._controls.cameraControlsEventDistribution);
this.boundingBox = __classPrivateFieldGet(this, _PerspectiveCamera_tree, "f").root.boundingBox.clone();
this._stateEngine.renderingEngines[renderingEngine.id].boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
this._stateEngine.viewportEngines[renderingEngine.id].boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2])

@@ -124,5 +119,2 @@ yield this.zoomTo(undefined, { duration: 0 });

}
clone() {
return new PerspectiveCamera(this.id, this.version, this.aspect);
}
calculateZoomTo(zoomTarget, startingPosition = this.position, startingTarget = this.target) {

@@ -142,3 +134,3 @@ let box;

const samePosition = startingPosition[0] === startingTarget[0] && startingPosition[1] === startingTarget[1] && startingPosition[2] === startingTarget[2];
let target = gl_matrix_1.vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);
const target = gl_matrix_1.vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);
// if the camera position and the target are the same, we set a corner position

@@ -152,6 +144,6 @@ if (startingPosition[0] === startingTarget[0] && startingPosition[1] === startingTarget[1] && startingPosition[2] === startingTarget[2])

const direction = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), target, startingPosition));
let cross = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.cross(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(0, 0, 1), direction));
let up = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.cross(gl_matrix_1.vec3.create(), cross, direction));
const cross = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.cross(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(0, 0, 1), direction));
const up = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.cross(gl_matrix_1.vec3.create(), cross, direction));
let position = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), target, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), direction, gl_matrix_1.vec3.fromValues(-0.00000001, -0.00000001, -0.00000001)));
let points = [];
const points = [];
points.push(gl_matrix_1.vec3.fromValues(box.min[0], box.min[1], box.min[2]));

@@ -165,11 +157,11 @@ points.push(gl_matrix_1.vec3.fromValues(box.min[0], box.min[1], box.max[2]));

points.push(gl_matrix_1.vec3.fromValues(box.max[0], box.max[1], box.max[2]));
let fovDown = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), cross, (this.fov / 2) * (Math.PI / 180))));
let fovUp = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), cross, -(this.fov / 2) * (Math.PI / 180))));
const fovDown = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), cross, (this.fov / 2) * (Math.PI / 180))));
const fovUp = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), cross, -(this.fov / 2) * (Math.PI / 180))));
const aspect = samePosition ? 1.5 : this.aspect || 1.5;
let hFoV = 2 * Math.atan(Math.tan(this.fov * Math.PI / 180 / 2) * aspect);
let fovRight = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), up, hFoV / 2)));
let fovLeft = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), up, -hFoV / 2)));
let planeCross = new viewer_shared_math_1.Plane(gl_matrix_1.vec3.clone(cross), 0);
const hFoV = 2 * Math.atan(Math.tan(this.fov * Math.PI / 180 / 2) * aspect);
const fovRight = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), up, hFoV / 2)));
const fovLeft = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), up, -hFoV / 2)));
const planeCross = new viewer_shared_math_1.Plane(gl_matrix_1.vec3.clone(cross), 0);
planeCross.setFromNormalAndCoplanarPoint(gl_matrix_1.vec3.clone(cross), gl_matrix_1.vec3.clone(target));
let planeUp = new viewer_shared_math_1.Plane(gl_matrix_1.vec3.fromValues(0, 0, 1), 0);
const planeUp = new viewer_shared_math_1.Plane(gl_matrix_1.vec3.fromValues(0, 0, 1), 0);
planeUp.setFromNormalAndCoplanarPoint(gl_matrix_1.vec3.clone(up), gl_matrix_1.vec3.clone(target));

@@ -204,2 +196,5 @@ let distanceCamera = 0.0;

}
clone() {
return new PerspectiveCamera(this.id, this.version, this.aspect);
}
project(pos, position = this.position, target = this.target) {

@@ -223,3 +218,3 @@ const m = gl_matrix_1.mat4.targetTo(gl_matrix_1.mat4.create(), position, target, gl_matrix_1.vec3.fromValues(0, 0, 1));

exports.PerspectiveCamera = PerspectiveCamera;
_PerspectiveCamera_converter = new WeakMap(), _PerspectiveCamera_logger = new WeakMap(), _PerspectiveCamera_tree = new WeakMap(), _PerspectiveCamera_domEventListenerToken = new WeakMap(), _PerspectiveCamera_domEventEngine = new WeakMap(), _PerspectiveCamera_aspect = new WeakMap(), _PerspectiveCamera_fov = new WeakMap(), _PerspectiveCamera_threeJsObject = new WeakMap();
_PerspectiveCamera_converter = new WeakMap(), _PerspectiveCamera_tree = new WeakMap(), _PerspectiveCamera_aspect = new WeakMap(), _PerspectiveCamera_domEventEngine = new WeakMap(), _PerspectiveCamera_fov = new WeakMap();
//# sourceMappingURL=PerspectiveCamera.js.map

@@ -1,12 +0,10 @@

import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { Box } from '@shapediver/viewer.shared.math';
import { CAMERA_TYPE, ICameraEngine } from '../interfaces/ICameraEngine';
import { ICamera } from '../interfaces/camera/ICamera';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { ICamera } from '../interfaces/camera/ICamera';
import { SettingsEngine } from '@shapediver/viewer.shared.services';
export declare class CameraEngine implements ICameraEngine {
private readonly _renderingEngine;
private readonly _canvas;
private readonly _cameraNode;
private readonly _cameras;
private readonly _camerasDomEventListenerToken;
private readonly _cameraNode;
private readonly _eventEngine;

@@ -19,5 +17,5 @@ private readonly _logger;

private _settingsApplied;
private _update?;
protected _boundingBox: Box;
private _update?;
constructor(_renderingEngine: IRenderingEngine, _canvas: HTMLCanvasElement);
constructor(_renderingEngine: IRenderingEngine);
get camera(): ICamera | null;

@@ -24,0 +22,0 @@ get cameras(): {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CameraEngine = void 0;
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const AbstractCamera_1 = require("./camera/AbstractCamera");
const viewer_shared_math_1 = require("@shapediver/viewer.shared.math");
const gl_matrix_1 = require("gl-matrix");
const ICameraEngine_1 = require("../interfaces/ICameraEngine");
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
const ICameraEngine_1 = require("../interfaces/ICameraEngine");
const AbstractCamera_1 = require("./camera/AbstractCamera");
const IOrthographicCamera_1 = require("../interfaces/camera/IOrthographicCamera");
const OrthographicCamera_1 = require("./camera/OrthographicCamera");
const PerspectiveCamera_1 = require("./camera/PerspectiveCamera");
const OrthographicCamera_1 = require("./camera/OrthographicCamera");
const IOrthographicCamera_1 = require("../interfaces/camera/IOrthographicCamera");
const gl_matrix_1 = require("gl-matrix");
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
class CameraEngine {
// #endregion Properties (10)
// #endregion Properties (11)
// #region Constructors (1)
constructor(_renderingEngine, _canvas) {
constructor(_renderingEngine) {
this._renderingEngine = _renderingEngine;
this._canvas = _canvas;
// #region Properties (10)
// #region Properties (11)
this._cameraNode = new viewer_shared_node_tree_1.TreeNode('cameras');
this._cameras = {};
this._camerasDomEventListenerToken = {};
this._cameraNode = new viewer_shared_node_tree_1.TreeNode('cameras');
this._eventEngine = viewer_shared_services_1.EventEngine.instance;

@@ -38,3 +36,3 @@ this._logger = viewer_shared_services_1.Logger.instance;

const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
cameras[c].boundingBox = this._boundingBox.clone();

@@ -51,3 +49,3 @@ }

// #endregion Constructors (1)
// #region Public Accessors (2)
// #region Public Getters And Setters (4)
get camera() {

@@ -65,7 +63,7 @@ return this._camera;

}
// #endregion Public Accessors (2)
// #region Public Methods (7)
// #endregion Public Getters And Setters (4)
// #region Public Methods (8)
activateCameraEvents() {
const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
cameras[c].controls.cameraControlsEventDistribution.activateCameraEvents();

@@ -75,5 +73,5 @@ }

const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
this.removeCamera(c);
for (let id in settingsEngine.settings.camera.cameras) {
for (const id in settingsEngine.settings.camera.cameras) {
const cameraSetting = settingsEngine.settings.camera.cameras[id];

@@ -88,3 +86,3 @@ if (cameraSetting.type === 'perspective') {

}
for (let c in cameras)
for (const c in cameras)
cameras[c].applySettings(settingsEngine);

@@ -112,3 +110,3 @@ const cameraKeys = Object.keys(settingsEngine.settings.camera.cameras);

return false;
for (let c in this.cameras)
for (const c in this.cameras)
this.cameras[c].active = false;

@@ -152,2 +150,3 @@ this._camera = camera;

backCamera.direction = IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BACK;
this.createCamera(ICameraEngine_1.CAMERA_TYPE.ORTHOGRAPHIC, 'orthographic');
const camera = this.createCamera(ICameraEngine_1.CAMERA_TYPE.PERSPECTIVE, 'perspective');

@@ -158,3 +157,3 @@ this.assignCamera(camera.id);

const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
cameras[c].controls.cameraControlsEventDistribution.deactivateCameraEvents();

@@ -167,7 +166,7 @@ }

return false;
this._renderingEngine.domEventEngine.removeDomEventListener(this._camerasDomEventListenerToken[id]);
if (camera.domEventListenerToken)
this._renderingEngine.domEventEngine.removeDomEventListener(camera.domEventListenerToken);
if (this._camera && this._camera.id === id)
this._camera = null;
delete cameras[id];
delete this._camerasDomEventListenerToken[id];
this._cameraNode.removeData(camera);

@@ -181,3 +180,3 @@ if (this._update)

settingsEngine.settings.camera.cameras = {};
for (let c in this.cameras) {
for (const c in this.cameras) {
const camera = this.cameras[c];

@@ -198,2 +197,3 @@ if (camera.type === ICameraEngine_1.CAMERA_TYPE.PERSPECTIVE) {

fov: camera.fov,
sceneRotation: { x: camera.sceneRotation[0], y: camera.sceneRotation[1] },
controls: {

@@ -236,3 +236,9 @@ autoRotationSpeed: controls.autoRotationSpeed,

zoom: controls.zoomRestriction,
}
},
enableAzimuthRotation: controls.enableAzimuthRotation,
enablePolarRotation: controls.enablePolarRotation,
enableObjectControls: controls.enableObjectControls,
enableTurntableControls: controls.enableTurntableControls,
turntableCenter: { x: controls.turntableCenter[0], y: controls.turntableCenter[1], z: controls.turntableCenter[2] },
objectControlsCenter: { x: controls.objectControlsCenter[0], y: controls.objectControlsCenter[1], z: controls.objectControlsCenter[2] },
}

@@ -267,6 +273,10 @@ };

type: camera.direction,
sceneRotation: { x: camera.sceneRotation[0], y: camera.sceneRotation[1] },
controls: {
autoRotationSpeed: controls.autoRotationSpeed,
damping: controls.damping,
enableAutoRotation: controls.enableAutoRotation,
enableKeyPan: controls.enableKeyPan,
enablePan: controls.enablePan,
enableRotation: controls.enableRotation,
enableZoom: controls.enableZoom,

@@ -276,4 +286,35 @@ input: controls.input,

movementSmoothness: controls.movementSmoothness,
rotationSpeed: controls.rotationSpeed,
panSpeed: controls.panSpeed,
zoomSpeed: controls.zoomSpeed,
restrictions: {
position: {
cube: {
min: { x: controls.cubePositionRestriction.min[0], y: controls.cubePositionRestriction.min[1], z: controls.cubePositionRestriction.min[2] },
max: { x: controls.cubePositionRestriction.max[0], y: controls.cubePositionRestriction.max[1], z: controls.cubePositionRestriction.max[2] },
},
sphere: {
center: { x: controls.spherePositionRestriction.center[0], y: controls.spherePositionRestriction.center[1], z: controls.spherePositionRestriction.center[2] },
radius: controls.spherePositionRestriction.radius,
},
},
target: {
cube: {
min: { x: controls.cubeTargetRestriction.min[0], y: controls.cubeTargetRestriction.min[1], z: controls.cubeTargetRestriction.min[2] },
max: { x: controls.cubeTargetRestriction.max[0], y: controls.cubeTargetRestriction.max[1], z: controls.cubeTargetRestriction.max[2] },
},
sphere: {
center: { x: controls.sphereTargetRestriction.center[0], y: controls.sphereTargetRestriction.center[1], z: controls.sphereTargetRestriction.center[2] },
radius: controls.sphereTargetRestriction.radius,
},
},
rotation: controls.rotationRestriction,
zoom: controls.zoomRestriction,
},
enableAzimuthRotation: controls.enableAzimuthRotation,
enablePolarRotation: controls.enablePolarRotation,
enableObjectControls: controls.enableObjectControls,
enableTurntableControls: controls.enableTurntableControls,
turntableCenter: { x: controls.turntableCenter[0], y: controls.turntableCenter[1], z: controls.turntableCenter[2] },
objectControlsCenter: { x: controls.objectControlsCenter[0], y: controls.objectControlsCenter[1], z: controls.objectControlsCenter[2] },
}

@@ -284,3 +325,3 @@ };

}
// #endregion Public Methods (7)
// #endregion Public Methods (8)
// #region Private Methods (1)

@@ -287,0 +328,0 @@ searchForNewCameras() {

@@ -1,15 +0,32 @@

import { mat4, vec2, vec3 } from 'gl-matrix';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../interfaces/controls/ICameraControlsUsage';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { ICameraControlsEventDistribution } from '../../interfaces/controls/ICameraControlsEventDistribution';
import { ICameraControlsLogic } from '../../interfaces/controls/ICameraControlsLogic';
export declare class AbstractCameraControls implements ICameraControlsUsage {
import { mat4, vec2, vec3 } from 'gl-matrix';
export declare abstract class AbstractCameraControls implements ICameraControls {
private _camera;
private _enabled;
private readonly _cameraInterpolationManager;
private readonly _converter;
private readonly _eventEngine;
private _autoRotationSpeed;
private _canvas?;
private _cubePositionRestriction;
private _cubeTargetRestriction;
private _damping;
private _enableAutoRotation;
private _enableAzimuthRotation;
private _enableKeyPan;
private _enableObjectControls;
private _enablePan;
private _enablePolarRotation;
private _enableRotation;
private _enableTurntableControls;
private _enableZoom;
private _input;
private _keyPanSpeed;
private _manualInteraction;
private _manualInteractionTransformations;
private _movementSmoothness;
private _moving;

@@ -19,9 +36,20 @@ private _movingDuration;

private _nonmanualInteractionTransformations;
private _objectControlsCenter;
private _panSpeed;
private _position;
private _rotationRestriction;
private _rotationSpeed;
private _sceneRotation;
private _spherePositionRestriction;
private _sphereTargetRestriction;
private _target;
private _turntableCenter;
private _viewportId?;
private _zoomRestriction;
private _zoomSpeed;
protected _cameraControlsEventDistribution: ICameraControlsEventDistribution;
protected _cameraLogic: ICameraControlsLogic;
constructor(_camera: ICamera, _enabled: boolean, type: CAMERA_TYPE);
constructor(_camera: ICamera, _enabled: boolean);
get autoRotationSpeed(): number;
set autoRotationSpeed(value: number);
get camera(): ICamera;

@@ -32,10 +60,132 @@ set camera(value: ICamera);

set canvas(value: HTMLCanvasElement | undefined);
get cubePositionRestriction(): {
min: vec3;
max: vec3;
};
set cubePositionRestriction(value: {
min: vec3;
max: vec3;
});
get cubeTargetRestriction(): {
min: vec3;
max: vec3;
};
set cubeTargetRestriction(value: {
min: vec3;
max: vec3;
});
get damping(): number;
set damping(value: number);
get enableAutoRotation(): boolean;
set enableAutoRotation(value: boolean);
get enableAzimuthRotation(): boolean;
set enableAzimuthRotation(value: boolean);
get enableKeyPan(): boolean;
set enableKeyPan(value: boolean);
get enableObjectControls(): boolean;
set enableObjectControls(value: boolean);
get enablePan(): boolean;
set enablePan(value: boolean);
get enablePolarRotation(): boolean;
set enablePolarRotation(value: boolean);
get enableRotation(): boolean;
set enableRotation(value: boolean);
get enableTurntableControls(): boolean;
set enableTurntableControls(value: boolean);
get enableZoom(): boolean;
set enableZoom(value: boolean);
get enabled(): boolean;
set enabled(value: boolean);
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;
};
};
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;
};
});
get keyPanSpeed(): number;
set keyPanSpeed(value: number);
get movementSmoothness(): number;
set movementSmoothness(value: number);
get objectControlsCenter(): vec3;
set objectControlsCenter(value: vec3);
get panSpeed(): number;
set panSpeed(value: number);
get position(): vec3;
set position(value: vec3);
get rotationRestriction(): {
minPolarAngle: number;
maxPolarAngle: number;
minAzimuthAngle: number;
maxAzimuthAngle: number;
};
set rotationRestriction(value: {
minPolarAngle: number;
maxPolarAngle: number;
minAzimuthAngle: number;
maxAzimuthAngle: number;
});
get rotationSpeed(): number;
set rotationSpeed(value: number);
get sceneRotation(): vec2;
set sceneRotation(value: vec2);
get spherePositionRestriction(): {
center: vec3;
radius: number;
};
set spherePositionRestriction(value: {
center: vec3;
radius: number;
});
get sphereTargetRestriction(): {
center: vec3;
radius: number;
};
set sphereTargetRestriction(value: {
center: vec3;
radius: number;
});
get target(): vec3;
set target(value: vec3);
get turntableCenter(): vec3;
set turntableCenter(value: vec3);
get zoomRestriction(): {
minDistance: number;
maxDistance: number;
};
set zoomRestriction(value: {
minDistance: number;
maxDistance: number;
});
get zoomSpeed(): number;
set zoomSpeed(value: number);
animate(path: {

@@ -48,2 +198,3 @@ position: vec3;

applyRotation(vector: vec2, manualInteraction?: boolean | undefined): void;
applySettings(settingsEngine: SettingsEngine): void;
applyTargetMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void;

@@ -50,0 +201,0 @@ applyTargetVector(vector: vec3, manualInteraction?: boolean | undefined): void;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractCameraControls = void 0;
const CameraInterpolationManager_1 = require("../interpolation/CameraInterpolationManager");
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const gl_matrix_1 = require("gl-matrix");
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const CameraInterpolationManager_1 = require("../interpolation/CameraInterpolationManager");
class AbstractCameraControls {
// #endregion Properties (15)
// #endregion Properties (38)
// #region Constructors (1)
constructor(_camera, _enabled, type) {
constructor(_camera, _enabled) {
this._camera = _camera;
this._enabled = _enabled;
this._converter = viewer_shared_services_1.Converter.instance;
this._eventEngine = viewer_shared_services_1.EventEngine.instance;
this._autoRotationSpeed = 0;
this._cubePositionRestriction = { min: gl_matrix_1.vec3.fromValues(-Infinity, -Infinity, -Infinity), max: gl_matrix_1.vec3.fromValues(Infinity, Infinity, Infinity) };
this._cubeTargetRestriction = { min: gl_matrix_1.vec3.fromValues(-Infinity, -Infinity, -Infinity), max: gl_matrix_1.vec3.fromValues(Infinity, Infinity, Infinity) };
this._damping = 0.1;
this._enableAutoRotation = false;
this._enableAzimuthRotation = true;
this._enableKeyPan = false;
this._enableObjectControls = false;
this._enablePan = true;
this._enablePolarRotation = true;
this._enableRotation = true;
this._enableTurntableControls = false;
this._enableZoom = true;
this._input = { keys: { up: 38, down: 40, left: 37, right: 39 }, mouse: { rotate: 0, zoom: 1, pan: 2 }, touch: { rotate: 1, zoom: 2, pan: 2 }, };
this._keyPanSpeed = 0.5;
this._manualInteraction = false;
this._movementSmoothness = 0.5;
this._moving = false;
this._movingDuration = 0;
this._nonmanualInteraction = false;
this._objectControlsCenter = gl_matrix_1.vec3.create();
this._panSpeed = 0.5;
this._position = gl_matrix_1.vec3.create();
this._rotationRestriction = { minPolarAngle: 0, maxPolarAngle: 180, minAzimuthAngle: -Infinity, maxAzimuthAngle: Infinity };
this._rotationSpeed = 0.5;
this._sceneRotation = gl_matrix_1.vec2.create();
this._spherePositionRestriction = { center: gl_matrix_1.vec3.create(), radius: Infinity };
this._sphereTargetRestriction = { center: gl_matrix_1.vec3.create(), radius: Infinity };
this._target = gl_matrix_1.vec3.create();
this._turntableCenter = gl_matrix_1.vec3.create();
this._zoomRestriction = { minDistance: 0, maxDistance: Infinity };
this._zoomSpeed = 0.5;
this._cameraInterpolationManager = new CameraInterpolationManager_1.CameraInterpolationManager(this._camera, this);

@@ -26,3 +52,9 @@ this._manualInteractionTransformations = { position: [], target: [], sceneRotation: [] };

// #endregion Constructors (1)
// #region Public Accessors (13)
// #region Public Getters And Setters (59)
get autoRotationSpeed() {
return this._autoRotationSpeed;
}
set autoRotationSpeed(value) {
this._autoRotationSpeed = value;
}
get camera() {

@@ -43,2 +75,74 @@ return this._camera;

}
get cubePositionRestriction() {
return this._cubePositionRestriction;
}
set cubePositionRestriction(value) {
this._cubePositionRestriction = value;
}
get cubeTargetRestriction() {
return this._cubeTargetRestriction;
}
set cubeTargetRestriction(value) {
this._cubeTargetRestriction = value;
}
get damping() {
return this._damping;
}
set damping(value) {
this._damping = value;
}
get enableAutoRotation() {
return this._enableAutoRotation;
}
set enableAutoRotation(value) {
this._enableAutoRotation = value;
}
get enableAzimuthRotation() {
return this._enableAzimuthRotation;
}
set enableAzimuthRotation(value) {
this._enableAzimuthRotation = value;
}
get enableKeyPan() {
return this._enableKeyPan;
}
set enableKeyPan(value) {
this._enableKeyPan = value;
}
get enableObjectControls() {
return this._enableObjectControls;
}
set enableObjectControls(value) {
this._enableObjectControls = value;
}
get enablePan() {
return this._enablePan;
}
set enablePan(value) {
this._enablePan = value;
}
get enablePolarRotation() {
return this._enablePolarRotation;
}
set enablePolarRotation(value) {
this._enablePolarRotation = value;
}
get enableRotation() {
return this._enableRotation;
}
set enableRotation(value) {
this._enableRotation = value;
}
get enableTurntableControls() {
return this._enableTurntableControls;
}
set enableTurntableControls(value) {
this._enableTurntableControls = value;
}
get enableZoom() {
return this._enableZoom;
}
set enableZoom(value) {
this._enableZoom = value;
}
get enabled() {

@@ -58,2 +162,32 @@ return this._enabled;

}
get input() {
return this._input;
}
set input(value) {
this._input = value;
}
get keyPanSpeed() {
return this._keyPanSpeed;
}
set keyPanSpeed(value) {
this._keyPanSpeed = value;
}
get movementSmoothness() {
return this._movementSmoothness;
}
set movementSmoothness(value) {
this._movementSmoothness = value;
}
get objectControlsCenter() {
return this._objectControlsCenter;
}
set objectControlsCenter(value) {
this._objectControlsCenter = value;
}
get panSpeed() {
return this._panSpeed;
}
set panSpeed(value) {
this._panSpeed = value;
}
get position() {

@@ -65,2 +199,14 @@ return this._position;

}
get rotationRestriction() {
return this._rotationRestriction;
}
set rotationRestriction(value) {
this._rotationRestriction = value;
}
get rotationSpeed() {
return this._rotationSpeed;
}
set rotationSpeed(value) {
this._rotationSpeed = value;
}
get sceneRotation() {

@@ -72,2 +218,14 @@ return this._sceneRotation;

}
get spherePositionRestriction() {
return this._spherePositionRestriction;
}
set spherePositionRestriction(value) {
this._spherePositionRestriction = value;
}
get sphereTargetRestriction() {
return this._sphereTargetRestriction;
}
set sphereTargetRestriction(value) {
this._sphereTargetRestriction = value;
}
get target() {

@@ -79,3 +237,21 @@ return this._target;

}
// #endregion Public Accessors (13)
get turntableCenter() {
return this._turntableCenter;
}
set turntableCenter(value) {
this._turntableCenter = value;
}
get zoomRestriction() {
return this._zoomRestriction;
}
set zoomRestriction(value) {
this._zoomRestriction = value;
}
get zoomSpeed() {
return this._zoomSpeed;
}
set zoomSpeed(value) {
this._zoomSpeed = value;
}
// #endregion Public Getters And Setters (59)
// #region Public Methods (16)

@@ -122,2 +298,80 @@ animate(path, options) {

}
applySettings(settingsEngine) {
const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
if (!cameraSetting)
return;
this.reset();
const controlsSettings = cameraSetting.controls;
this.autoRotationSpeed = controlsSettings.autoRotationSpeed;
this.damping = controlsSettings.damping;
this.enableAutoRotation = controlsSettings.enableAutoRotation;
this.enableKeyPan = controlsSettings.enableKeyPan;
this.enablePan = controlsSettings.enablePan;
this.enableRotation = controlsSettings.enableRotation;
this.enableZoom = controlsSettings.enableZoom;
// this.input = controlsSettings.input;
this.keyPanSpeed = controlsSettings.keyPanSpeed;
this.movementSmoothness = controlsSettings.movementSmoothness;
this.rotationSpeed = controlsSettings.rotationSpeed;
this.panSpeed = controlsSettings.panSpeed;
this.zoomSpeed = controlsSettings.zoomSpeed;
this.enableAzimuthRotation = controlsSettings.enableAzimuthRotation;
this.enablePolarRotation = controlsSettings.enablePolarRotation;
this.enableTurntableControls = controlsSettings.enableTurntableControls;
this.enableObjectControls = controlsSettings.enableObjectControls;
this.turntableCenter = this._converter.toVec3(controlsSettings.turntableCenter);
this.objectControlsCenter = this._converter.toVec3(controlsSettings.objectControlsCenter);
if (controlsSettings.restrictions.position.cube.min.x === null)
controlsSettings.restrictions.position.cube.min.x = -Infinity;
if (controlsSettings.restrictions.position.cube.min.y === null)
controlsSettings.restrictions.position.cube.min.y = -Infinity;
if (controlsSettings.restrictions.position.cube.min.z === null)
controlsSettings.restrictions.position.cube.min.z = -Infinity;
if (controlsSettings.restrictions.position.cube.max.x === null)
controlsSettings.restrictions.position.cube.max.x = Infinity;
if (controlsSettings.restrictions.position.cube.max.y === null)
controlsSettings.restrictions.position.cube.max.y = Infinity;
if (controlsSettings.restrictions.position.cube.max.z === null)
controlsSettings.restrictions.position.cube.max.z = Infinity;
if (controlsSettings.restrictions.position.sphere.radius === null)
controlsSettings.restrictions.position.sphere.radius = Infinity;
if (controlsSettings.restrictions.target.cube.min.x === null)
controlsSettings.restrictions.target.cube.min.x = -Infinity;
if (controlsSettings.restrictions.target.cube.min.y === null)
controlsSettings.restrictions.target.cube.min.y = -Infinity;
if (controlsSettings.restrictions.target.cube.min.z === null)
controlsSettings.restrictions.target.cube.min.z = -Infinity;
if (controlsSettings.restrictions.target.cube.max.x === null)
controlsSettings.restrictions.target.cube.max.x = Infinity;
if (controlsSettings.restrictions.target.cube.max.y === null)
controlsSettings.restrictions.target.cube.max.y = Infinity;
if (controlsSettings.restrictions.target.cube.max.z === null)
controlsSettings.restrictions.target.cube.max.z = Infinity;
if (controlsSettings.restrictions.target.sphere.radius === null)
controlsSettings.restrictions.target.sphere.radius = Infinity;
if (controlsSettings.restrictions.rotation.minAzimuthAngle === null)
controlsSettings.restrictions.rotation.minAzimuthAngle = -Infinity;
if (controlsSettings.restrictions.rotation.maxAzimuthAngle === null)
controlsSettings.restrictions.rotation.maxAzimuthAngle = Infinity;
if (controlsSettings.restrictions.zoom.maxDistance === null)
controlsSettings.restrictions.zoom.maxDistance = Infinity;
this.cubePositionRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.position.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.position.cube.max)
};
this.spherePositionRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.position.sphere.center),
radius: controlsSettings.restrictions.position.sphere.radius
};
this.cubeTargetRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.target.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.target.cube.max)
};
this.sphereTargetRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.target.sphere.center),
radius: controlsSettings.restrictions.target.sphere.radius
};
this.rotationRestriction = controlsSettings.restrictions.rotation;
this.zoomRestriction = controlsSettings.restrictions.zoom;
}
applyTargetMatrix(matrix, manualInteraction) {

@@ -124,0 +378,0 @@ if (this._manualInteraction || manualInteraction) {

@@ -1,71 +0,8 @@

import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { AbstractCameraControls } from './AbstractCameraControls';
import { ICamera } from '../..';
import { IOrthographicCameraControls } from '../../interfaces/controls/IOrthographicCameraControls';
import { AbstractCameraControls } from './AbstractCameraControls';
export declare class OrthographicCameraControls extends AbstractCameraControls implements IOrthographicCameraControls {
private _damping;
private _enableKeyPan;
private _enablePan;
private _enableZoom;
private _input;
private _keyPanSpeed;
private _movementSmoothness;
private _panSpeed;
private _zoomSpeed;
private readonly _stateEngine;
export declare class OrthographicCameraControls extends AbstractCameraControls {
private _settingsAdjustments;
private _touchAdjustments;
constructor(camera: ICamera, enabled: boolean);
applySettings(settingsEngine: SettingsEngine): void;
get damping(): number;
set damping(value: number);
get enableKeyPan(): boolean;
set enableKeyPan(value: boolean);
get enablePan(): boolean;
set enablePan(value: boolean);
get enableZoom(): boolean;
set enableZoom(value: boolean);
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;
};
};
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;
};
});
get keyPanSpeed(): number;
set keyPanSpeed(value: number);
get movementSmoothness(): number;
set movementSmoothness(value: number);
get panSpeed(): number;
set panSpeed(value: number);
get zoomSpeed(): number;
set zoomSpeed(value: number);
}
//# sourceMappingURL=OrthographicCameraControls.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrthographicCameraControls = void 0;
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const __1 = require("../..");
const AbstractCameraControls_1 = require("./AbstractCameraControls");
const CameraControlsEventDistribution_1 = require("./orthographic/CameraControlsEventDistribution");
const CameraControlsLogic_1 = require("./orthographic/CameraControlsLogic");
const CameraControlsLogic_1 = require("./CameraControlsLogic");
const CameraControlsEventDistribution_1 = require("./CameraControlsEventDistribution");
class OrthographicCameraControls extends AbstractCameraControls_1.AbstractCameraControls {
// #endregion Properties (9)
// #endregion Properties (2)
// #region Constructors (1)
constructor(camera, enabled) {
super(camera, enabled, __1.CAMERA_TYPE.ORTHOGRAPHIC);
// #region Properties (9)
this._damping = 0.1;
this._enableKeyPan = false;
this._enablePan = true;
this._enableZoom = true;
this._input = { keys: { up: 38, down: 40, left: 37, right: 39 }, mouse: { rotate: 0, zoom: 1, pan: 2 }, touch: { rotate: 1, zoom: 2, pan: 2 }, };
this._keyPanSpeed = 0.5;
this._movementSmoothness = 0.5;
this._panSpeed = 0.5;
this._zoomSpeed = 0.5;
this._stateEngine = viewer_shared_services_1.StateEngine.instance;
this._cameraLogic = new CameraControlsLogic_1.CameraControlsLogic(this);
super(camera, enabled);
// #region Properties (2)
this._settingsAdjustments = {
autoRotationSpeed: 2 * Math.PI / 60 / 60,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 1.75,
rotationSpeed: Math.PI,
zoomSpeed: 0.025,
};
this._touchAdjustments = {
autoRotationSpeed: 1.0,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 4.0 / 1.75,
rotationSpeed: 1.5,
zoomSpeed: 100.0,
};
this._cameraLogic = new CameraControlsLogic_1.CameraControlsLogic(this, this._settingsAdjustments, this._touchAdjustments);
this._cameraControlsEventDistribution = new CameraControlsEventDistribution_1.CameraControlsEventDistribution(this, this._cameraLogic);
}
applySettings(settingsEngine) {
const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
if (!cameraSetting)
return;
this.reset();
const controlsSettings = cameraSetting.controls;
this.damping = controlsSettings.damping;
this.enableKeyPan = controlsSettings.enableKeyPan;
this.enablePan = controlsSettings.enablePan;
this.enableZoom = controlsSettings.enableZoom;
// this.input = controlsSettings.input;
this.keyPanSpeed = controlsSettings.keyPanSpeed;
this.movementSmoothness = controlsSettings.movementSmoothness;
this.panSpeed = controlsSettings.panSpeed;
this.zoomSpeed = controlsSettings.zoomSpeed;
}
// #endregion Constructors (1)
// #region Public Accessors (18)
get damping() {
return this._damping;
}
set damping(value) {
this._damping = value;
}
get enableKeyPan() {
return this._enableKeyPan;
}
set enableKeyPan(value) {
this._enableKeyPan = value;
}
get enablePan() {
return this._enablePan;
}
set enablePan(value) {
this._enablePan = value;
}
get enableZoom() {
return this._enableZoom;
}
set enableZoom(value) {
this._enableZoom = value;
}
get input() {
return this._input;
}
set input(value) {
this._input = value;
}
get keyPanSpeed() {
return this._keyPanSpeed;
}
set keyPanSpeed(value) {
this._keyPanSpeed = value;
}
get movementSmoothness() {
return this._movementSmoothness;
}
set movementSmoothness(value) {
this._movementSmoothness = value;
}
get panSpeed() {
return this._panSpeed;
}
set panSpeed(value) {
this._panSpeed = value;
}
get zoomSpeed() {
return this._zoomSpeed;
}
set zoomSpeed(value) {
this._zoomSpeed = value;
}
}
exports.OrthographicCameraControls = OrthographicCameraControls;
//# sourceMappingURL=OrthographicCameraControls.js.map

@@ -1,155 +0,8 @@

import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { vec3 } from 'gl-matrix';
import { AbstractCameraControls } from './AbstractCameraControls';
import { ICamera } from '../..';
import { IPerspectiveCameraControls } from '../../interfaces/controls/IPerspectiveCameraControls';
import { AbstractCameraControls } from './AbstractCameraControls';
export declare class PerspectiveCameraControls extends AbstractCameraControls implements IPerspectiveCameraControls {
private readonly _converter;
private readonly _stateEngine;
private _autoRotationSpeed;
private _cubePositionRestriction;
private _cubeTargetRestriction;
private _damping;
private _enableAutoRotation;
private _enableAzimuthRotation;
private _enableKeyPan;
private _enablePan;
private _enablePolarRotation;
private _enableRotation;
private _enableTurntableControls;
private _enableZoom;
private _input;
private _keyPanSpeed;
private _movementSmoothness;
private _panSpeed;
private _rotationRestriction;
private _rotationSpeed;
private _spherePositionRestriction;
private _sphereTargetRestriction;
private _turntableCenter;
private _zoomRestriction;
private _zoomSpeed;
export declare class PerspectiveCameraControls extends AbstractCameraControls {
private _settingsAdjustments;
private _touchAdjustments;
constructor(camera: ICamera, enabled: boolean);
get autoRotationSpeed(): number;
set autoRotationSpeed(value: number);
get cubePositionRestriction(): {
min: vec3;
max: vec3;
};
set cubePositionRestriction(value: {
min: vec3;
max: vec3;
});
get cubeTargetRestriction(): {
min: vec3;
max: vec3;
};
set cubeTargetRestriction(value: {
min: vec3;
max: vec3;
});
get damping(): number;
set damping(value: number);
get enableAutoRotation(): boolean;
set enableAutoRotation(value: boolean);
get enableAzimuthRotation(): boolean;
set enableAzimuthRotation(value: boolean);
get enableKeyPan(): boolean;
set enableKeyPan(value: boolean);
get enablePan(): boolean;
set enablePan(value: boolean);
get enablePolarRotation(): boolean;
set enablePolarRotation(value: boolean);
get enableRotation(): boolean;
set enableRotation(value: boolean);
get enableTurntableControls(): boolean;
set enableTurntableControls(value: boolean);
get enableZoom(): boolean;
set enableZoom(value: boolean);
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;
};
};
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;
};
});
get keyPanSpeed(): number;
set keyPanSpeed(value: number);
get movementSmoothness(): number;
set movementSmoothness(value: number);
get panSpeed(): number;
set panSpeed(value: number);
get rotationRestriction(): {
minPolarAngle: number;
maxPolarAngle: number;
minAzimuthAngle: number;
maxAzimuthAngle: number;
};
set rotationRestriction(value: {
minPolarAngle: number;
maxPolarAngle: number;
minAzimuthAngle: number;
maxAzimuthAngle: number;
});
get rotationSpeed(): number;
set rotationSpeed(value: number);
get spherePositionRestriction(): {
center: vec3;
radius: number;
};
set spherePositionRestriction(value: {
center: vec3;
radius: number;
});
get sphereTargetRestriction(): {
center: vec3;
radius: number;
};
set sphereTargetRestriction(value: {
center: vec3;
radius: number;
});
get turntableCenter(): vec3;
set turntableCenter(value: vec3);
get zoomRestriction(): {
minDistance: number;
maxDistance: number;
};
set zoomRestriction(value: {
minDistance: number;
maxDistance: number;
});
get zoomSpeed(): number;
set zoomSpeed(value: number);
applySettings(settingsEngine: SettingsEngine): void;
}
//# sourceMappingURL=PerspectiveCameraControls.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PerspectiveCameraControls = void 0;
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
const gl_matrix_1 = require("gl-matrix");
const __1 = require("../..");
const AbstractCameraControls_1 = require("./AbstractCameraControls");
const CameraControlsEventDistribution_1 = require("./perspective/CameraControlsEventDistribution");
const CameraControlsLogic_1 = require("./perspective/CameraControlsLogic");
const CameraControlsLogic_1 = require("./CameraControlsLogic");
const CameraControlsEventDistribution_1 = require("./CameraControlsEventDistribution");
class PerspectiveCameraControls extends AbstractCameraControls_1.AbstractCameraControls {
// #endregion Properties (25)
// #endregion Properties (3)
// #region Constructors (1)
constructor(camera, enabled) {
super(camera, enabled, __1.CAMERA_TYPE.PERSPECTIVE);
// #region Properties (25)
this._converter = viewer_shared_services_1.Converter.instance;
this._stateEngine = viewer_shared_services_1.StateEngine.instance;
this._autoRotationSpeed = 0;
this._cubePositionRestriction = { min: gl_matrix_1.vec3.fromValues(-Infinity, -Infinity, -Infinity), max: gl_matrix_1.vec3.fromValues(Infinity, Infinity, Infinity) };
this._cubeTargetRestriction = { min: gl_matrix_1.vec3.fromValues(-Infinity, -Infinity, -Infinity), max: gl_matrix_1.vec3.fromValues(Infinity, Infinity, Infinity) };
this._damping = 0.1;
this._enableAutoRotation = false;
this._enableAzimuthRotation = true;
this._enableKeyPan = false;
this._enablePan = true;
this._enablePolarRotation = true;
this._enableRotation = true;
this._enableTurntableControls = false;
this._enableZoom = true;
this._input = { keys: { up: 38, down: 40, left: 37, right: 39 }, mouse: { rotate: 0, zoom: 1, pan: 2 }, touch: { rotate: 1, zoom: 2, pan: 2 }, };
this._keyPanSpeed = 0.5;
this._movementSmoothness = 0.5;
this._panSpeed = 0.5;
this._rotationRestriction = { minPolarAngle: 0, maxPolarAngle: 180, minAzimuthAngle: -Infinity, maxAzimuthAngle: Infinity };
this._rotationSpeed = 0.5;
this._spherePositionRestriction = { center: gl_matrix_1.vec3.create(), radius: Infinity };
this._sphereTargetRestriction = { center: gl_matrix_1.vec3.create(), radius: Infinity };
this._turntableCenter = gl_matrix_1.vec3.create();
this._zoomRestriction = { minDistance: 0, maxDistance: Infinity };
this._zoomSpeed = 0.5;
this._cameraLogic = new CameraControlsLogic_1.CameraControlsLogic(this);
this._cameraControlsEventDistribution = new CameraControlsEventDistribution_1.CameraControlsEventDistribution(this, this._cameraLogic);
}
// #endregion Constructors (1)
// #region Public Accessors (46)
get autoRotationSpeed() {
return this._autoRotationSpeed;
}
set autoRotationSpeed(value) {
this._autoRotationSpeed = value;
}
get cubePositionRestriction() {
return this._cubePositionRestriction;
}
set cubePositionRestriction(value) {
this._cubePositionRestriction = value;
}
get cubeTargetRestriction() {
return this._cubeTargetRestriction;
}
set cubeTargetRestriction(value) {
this._cubeTargetRestriction = value;
}
get damping() {
return this._damping;
}
set damping(value) {
this._damping = value;
}
get enableAutoRotation() {
return this._enableAutoRotation;
}
set enableAutoRotation(value) {
this._enableAutoRotation = value;
}
get enableAzimuthRotation() {
return this._enableAzimuthRotation;
}
set enableAzimuthRotation(value) {
this._enableAzimuthRotation = value;
}
get enableKeyPan() {
return this._enableKeyPan;
}
set enableKeyPan(value) {
this._enableKeyPan = value;
}
get enablePan() {
return this._enablePan;
}
set enablePan(value) {
this._enablePan = value;
}
get enablePolarRotation() {
return this._enablePolarRotation;
}
set enablePolarRotation(value) {
this._enablePolarRotation = value;
}
get enableRotation() {
return this._enableRotation;
}
set enableRotation(value) {
this._enableRotation = value;
}
get enableTurntableControls() {
return this._enableTurntableControls;
}
set enableTurntableControls(value) {
this._enableTurntableControls = value;
}
get enableZoom() {
return this._enableZoom;
}
set enableZoom(value) {
this._enableZoom = value;
}
get input() {
return this._input;
}
set input(value) {
this._input = value;
}
get keyPanSpeed() {
return this._keyPanSpeed;
}
set keyPanSpeed(value) {
this._keyPanSpeed = value;
}
get movementSmoothness() {
return this._movementSmoothness;
}
set movementSmoothness(value) {
this._movementSmoothness = value;
}
get panSpeed() {
return this._panSpeed;
}
set panSpeed(value) {
this._panSpeed = value;
}
get rotationRestriction() {
return this._rotationRestriction;
}
set rotationRestriction(value) {
this._rotationRestriction = value;
}
get rotationSpeed() {
return this._rotationSpeed;
}
set rotationSpeed(value) {
this._rotationSpeed = value;
}
get spherePositionRestriction() {
return this._spherePositionRestriction;
}
set spherePositionRestriction(value) {
this._spherePositionRestriction = value;
}
get sphereTargetRestriction() {
return this._sphereTargetRestriction;
}
set sphereTargetRestriction(value) {
this._sphereTargetRestriction = value;
}
get turntableCenter() {
return this._turntableCenter;
}
set turntableCenter(value) {
this._turntableCenter = value;
}
get zoomRestriction() {
return this._zoomRestriction;
}
set zoomRestriction(value) {
this._zoomRestriction = value;
}
get zoomSpeed() {
return this._zoomSpeed;
}
set zoomSpeed(value) {
this._zoomSpeed = value;
}
// #endregion Public Accessors (46)
// #region Public Methods (1)
applySettings(settingsEngine) {
const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
if (!cameraSetting)
return;
this.reset();
const controlsSettings = cameraSetting.controls;
this.autoRotationSpeed = controlsSettings.autoRotationSpeed;
this.damping = controlsSettings.damping;
this.enableAutoRotation = controlsSettings.enableAutoRotation;
this.enableKeyPan = controlsSettings.enableKeyPan;
this.enablePan = controlsSettings.enablePan;
this.enableRotation = controlsSettings.enableRotation;
this.enableZoom = controlsSettings.enableZoom;
// this.input = controlsSettings.input;
this.keyPanSpeed = controlsSettings.keyPanSpeed;
this.movementSmoothness = controlsSettings.movementSmoothness;
this.rotationSpeed = controlsSettings.rotationSpeed;
this.panSpeed = controlsSettings.panSpeed;
this.zoomSpeed = controlsSettings.zoomSpeed;
if (controlsSettings.restrictions.position.cube.min.x === null)
controlsSettings.restrictions.position.cube.min.x = -Infinity;
if (controlsSettings.restrictions.position.cube.min.y === null)
controlsSettings.restrictions.position.cube.min.y = -Infinity;
if (controlsSettings.restrictions.position.cube.min.z === null)
controlsSettings.restrictions.position.cube.min.z = -Infinity;
if (controlsSettings.restrictions.position.cube.max.x === null)
controlsSettings.restrictions.position.cube.max.x = Infinity;
if (controlsSettings.restrictions.position.cube.max.y === null)
controlsSettings.restrictions.position.cube.max.y = Infinity;
if (controlsSettings.restrictions.position.cube.max.z === null)
controlsSettings.restrictions.position.cube.max.z = Infinity;
if (controlsSettings.restrictions.position.sphere.radius === null)
controlsSettings.restrictions.position.sphere.radius = Infinity;
if (controlsSettings.restrictions.target.cube.min.x === null)
controlsSettings.restrictions.target.cube.min.x = -Infinity;
if (controlsSettings.restrictions.target.cube.min.y === null)
controlsSettings.restrictions.target.cube.min.y = -Infinity;
if (controlsSettings.restrictions.target.cube.min.z === null)
controlsSettings.restrictions.target.cube.min.z = -Infinity;
if (controlsSettings.restrictions.target.cube.max.x === null)
controlsSettings.restrictions.target.cube.max.x = Infinity;
if (controlsSettings.restrictions.target.cube.max.y === null)
controlsSettings.restrictions.target.cube.max.y = Infinity;
if (controlsSettings.restrictions.target.cube.max.z === null)
controlsSettings.restrictions.target.cube.max.z = Infinity;
if (controlsSettings.restrictions.target.sphere.radius === null)
controlsSettings.restrictions.target.sphere.radius = Infinity;
if (controlsSettings.restrictions.rotation.minAzimuthAngle === null)
controlsSettings.restrictions.rotation.minAzimuthAngle = -Infinity;
if (controlsSettings.restrictions.rotation.maxAzimuthAngle === null)
controlsSettings.restrictions.rotation.maxAzimuthAngle = Infinity;
if (controlsSettings.restrictions.zoom.maxDistance === null)
controlsSettings.restrictions.zoom.maxDistance = Infinity;
this.cubePositionRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.position.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.position.cube.max)
super(camera, enabled);
// #region Properties (3)
this._settingsAdjustments = {
autoRotationSpeed: 2 * Math.PI / 60 / 60,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 1.75,
rotationSpeed: Math.PI,
zoomSpeed: 0.025,
};
this.spherePositionRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.position.sphere.center),
radius: controlsSettings.restrictions.position.sphere.radius
this._touchAdjustments = {
autoRotationSpeed: 1.0,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 1.0 / 1.75,
rotationSpeed: 1.5,
zoomSpeed: 100.0,
};
this.cubeTargetRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.target.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.target.cube.max)
};
this.sphereTargetRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.target.sphere.center),
radius: controlsSettings.restrictions.target.sphere.radius
};
this.rotationRestriction = controlsSettings.restrictions.rotation;
this.zoomRestriction = controlsSettings.restrictions.zoom;
this._cameraLogic = new CameraControlsLogic_1.CameraControlsLogic(this, this._settingsAdjustments, this._touchAdjustments);
this._cameraControlsEventDistribution = new CameraControlsEventDistribution_1.CameraControlsEventDistribution(this, this._cameraLogic);
}

@@ -258,0 +32,0 @@ }

@@ -0,4 +1,4 @@

import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { vec3 } from 'gl-matrix';
import { ICameraControlsUsage } from '../../interfaces/controls/ICameraControlsUsage';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
export declare class CameraInterpolationManager {

@@ -9,3 +9,3 @@ private readonly _camera;

private _tween;
constructor(_camera: ICamera, _cameraControls: ICameraControlsUsage);
constructor(_camera: ICamera, _cameraControls: ICameraControls);
active(): boolean;

@@ -12,0 +12,0 @@ /**

@@ -28,8 +28,8 @@ "use strict";

const TWEEN = __importStar(require("@tweenjs/tween.js"));
const CameraCylindricalInterpolation_1 = require("./interpolationMethods/CameraCylindricalInterpolation");
const CameraLinearInterpolation_1 = require("./interpolationMethods/CameraLinearInterpolation");
const CameraMultipleInterpolation_1 = require("./interpolationMethods/CameraMultipleInterpolation");
const CameraSphericalInterpolation_1 = require("./interpolationMethods/CameraSphericalInterpolation");
const CameraLinearInterpolation_1 = require("./interpolationMethods/CameraLinearInterpolation");
const CameraCylindricalInterpolation_1 = require("./interpolationMethods/CameraCylindricalInterpolation");
class CameraInterpolationManager {
// #endregion Properties (3)
// #endregion Properties (2)
// #region Constructors (1)

@@ -39,3 +39,3 @@ constructor(_camera, _cameraControls) {

this._cameraControls = _cameraControls;
// #region Properties (3)
// #region Properties (2)
this.TweenWrapper = class {

@@ -92,3 +92,3 @@ constructor(options, cb, onComplete) {

}
let parsedOptions = this.optionsParser(options);
const parsedOptions = this.optionsParser(options);
this._tween = new this.TweenWrapper(parsedOptions, newPath.length === 2 ?

@@ -95,0 +95,0 @@ this.getCameraInterpolation(newPath[0], newPath[1], parsedOptions.coordinates) :

@@ -1,5 +0,5 @@

import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
export declare class CameraCylindricalInterpolation implements ICameraInterpolation {

@@ -20,3 +20,3 @@ private readonly _camera;

private _to_position_heightAdjusted;
constructor(_camera: ICamera, _cameraControls: ICameraControlsUsage, _from: {
constructor(_camera: ICamera, _cameraControls: ICameraControls, _from: {
position: vec3;

@@ -23,0 +23,0 @@ target: vec3;

@@ -27,4 +27,4 @@ "use strict";

// This is why people hate JavaScript. The dot product of two normalized vector is larger than 1 on occasion due to precision errors...
let dot1 = Math.min(1, Math.max(-1, gl_matrix_1.vec3.dot(this._dir_to, this._dir_from)));
let dot2 = Math.min(1, Math.max(-1, gl_matrix_1.vec3.dot(this._lorr, gl_matrix_1.vec3.fromValues(0, 0, 1))));
const dot1 = Math.min(1, Math.max(-1, gl_matrix_1.vec3.dot(this._dir_to, this._dir_from)));
const dot2 = Math.min(1, Math.max(-1, gl_matrix_1.vec3.dot(this._lorr, gl_matrix_1.vec3.fromValues(0, 0, 1))));
this._shortest_angle = dot2 > 0 ? -Math.acos(dot1) : Math.acos(dot1);

@@ -35,5 +35,5 @@ }

onComplete(value) {
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -44,11 +44,11 @@ }

onUpdate(value) {
let t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);
let angle = this._shortest_angle * value.delta;
let dir = gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), this._dir_from, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), gl_matrix_1.vec3.fromValues(0, 0, 1), angle));
let scalar = this._r_from * (1 - value.delta) + this._r_to * value.delta;
let p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), t, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), dir, gl_matrix_1.vec3.fromValues(scalar, scalar, scalar)));
const angle = this._shortest_angle * value.delta;
const dir = gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), this._dir_from, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), gl_matrix_1.vec3.fromValues(0, 0, 1), angle));
const scalar = this._r_from * (1 - value.delta) + this._r_to * value.delta;
const p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), t, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), dir, gl_matrix_1.vec3.fromValues(scalar, scalar, scalar)));
gl_matrix_1.vec3.add(p, p, gl_matrix_1.vec3.fromValues(0, 0, (this._h_from * (1 - value.delta) + this._h_to * value.delta)));
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);

@@ -55,0 +55,0 @@ }

@@ -1,5 +0,5 @@

import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
export declare class CameraLinearInterpolation implements ICameraInterpolation {

@@ -10,3 +10,3 @@ private readonly _camera;

private readonly _to;
constructor(_camera: ICamera, _cameraControls: ICameraControlsUsage, _from: {
constructor(_camera: ICamera, _cameraControls: ICameraControls, _from: {
position: vec3;

@@ -13,0 +13,0 @@ target: vec3;

@@ -16,5 +16,5 @@ "use strict";

onComplete(value) {
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), this._to.position, this._cameraControls.getPositionWithUpdates());
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), this._to.position, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), this._to.target, this._cameraControls.getTargetWithUpdates());
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), this._to.target, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -25,7 +25,7 @@ }

onUpdate(value) {
let p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.position, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.position, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.position, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.position, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -32,0 +32,0 @@ }

@@ -1,5 +0,5 @@

import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
export declare class CameraMultipleInterpolation implements ICameraInterpolation {

@@ -22,6 +22,6 @@ private readonly _camera;

};
constructor(_camera: ICamera, _cameraControls: ICameraControlsUsage, _path: {
constructor(_camera: ICamera, _cameraControls: ICameraControls, _path: {
position: vec3;
target: vec3;
}[], _interpolationFunction: Function);
}[], _interpolationFunction: (v: number[], k: number) => number);
onComplete(value: {

@@ -28,0 +28,0 @@ delta: number;

@@ -30,5 +30,5 @@ "use strict";

onComplete(value) {
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._path[this._path.length - 1].position[0], this._path[this._path.length - 1].position[1], this._path[this._path.length - 1].position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._path[this._path.length - 1].position[0], this._path[this._path.length - 1].position[1], this._path[this._path.length - 1].position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._path[this._path.length - 1].target[0], this._path[this._path.length - 1].target[1], this._path[this._path.length - 1].target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._path[this._path.length - 1].target[0], this._path[this._path.length - 1].target[1], this._path[this._path.length - 1].target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -39,7 +39,7 @@ }

onUpdate(value) {
let p = gl_matrix_1.vec3.fromValues(this._interpolationFunction(this.end.position.x, value.delta), this._interpolationFunction(this.end.position.y, value.delta), this._interpolationFunction(this.end.position.z, value.delta));
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const p = gl_matrix_1.vec3.fromValues(this._interpolationFunction(this.end.position.x, value.delta), this._interpolationFunction(this.end.position.y, value.delta), this._interpolationFunction(this.end.position.z, value.delta));
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let t = gl_matrix_1.vec3.fromValues(this._interpolationFunction(this.end.target.x, value.delta), this._interpolationFunction(this.end.target.y, value.delta), this._interpolationFunction(this.end.target.z, value.delta));
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = gl_matrix_1.vec3.fromValues(this._interpolationFunction(this.end.target.x, value.delta), this._interpolationFunction(this.end.target.y, value.delta), this._interpolationFunction(this.end.target.z, value.delta));
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -46,0 +46,0 @@ }

@@ -1,5 +0,5 @@

import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
export declare class CameraOrthographicInterpolation implements ICameraInterpolation {

@@ -10,3 +10,3 @@ private readonly _camera;

private readonly _to;
constructor(_camera: ICamera, _cameraControls: ICameraControlsUsage, _from: {
constructor(_camera: ICamera, _cameraControls: ICameraControls, _from: {
position: vec3;

@@ -13,0 +13,0 @@ target: vec3;

@@ -16,5 +16,5 @@ "use strict";

onComplete(value) {
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -25,7 +25,7 @@ }

onUpdate(value) {
let t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);
let p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.position, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.position, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.position, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.position, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);

@@ -32,0 +32,0 @@ }

@@ -1,5 +0,5 @@

import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
export declare class CameraSphericalInterpolation implements ICameraInterpolation {

@@ -16,3 +16,3 @@ private readonly _camera;

private _radius_to;
constructor(_camera: ICamera, _cameraControls: ICameraControlsUsage, _from: {
constructor(_camera: ICamera, _cameraControls: ICameraControls, _from: {
position: vec3;

@@ -19,0 +19,0 @@ target: vec3;

@@ -23,5 +23,5 @@ "use strict";

onComplete(value) {
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -32,10 +32,10 @@ }

onUpdate(value) {
let t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._from.target, gl_matrix_1.vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), this._to.target, gl_matrix_1.vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);
let angle = this._c_angle * value.delta;
let dir = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), this._direction_from, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), this._axis, angle)));
let scalar = (this._radius_from * (1 - value.delta) + this._radius_to * value.delta);
let p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), t, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), dir, gl_matrix_1.vec3.fromValues(scalar, scalar, scalar)));
let positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const angle = this._c_angle * value.delta;
const dir = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), this._direction_from, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), this._axis, angle)));
const scalar = (this._radius_from * (1 - value.delta) + this._radius_to * value.delta);
const p = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), t, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), dir, gl_matrix_1.vec3.fromValues(scalar, scalar, scalar)));
const positionOffset = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);

@@ -42,0 +42,0 @@ }

@@ -1,18 +0,16 @@

import { ICameraControls } from './interfaces/controls/ICameraControls';
import { AbstractCamera } from './implementation/camera/AbstractCamera';
import { CAMERA_TYPE, ICameraEngine } from './interfaces/ICameraEngine';
import { CameraEngine } from './implementation/CameraEngine';
import { ICamera, ICameraOptions } from './interfaces/camera/ICamera';
import { CAMERA_TYPE, ICameraEngine } from './interfaces/ICameraEngine';
import { ICameraControls } from './interfaces/controls/ICameraControls';
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from './interfaces/camera/IOrthographicCamera';
import { IPerspectiveCamera } from './interfaces/camera/IPerspectiveCamera';
import { OrthographicCamera } from './implementation/camera/OrthographicCamera';
import { OrthographicCameraControls } from './implementation/controls/OrthographicCameraControls';
import { PerspectiveCamera } from './implementation/camera/PerspectiveCamera';
import { OrthographicCameraControls } from './implementation/controls/OrthographicCameraControls';
import { PerspectiveCameraControls } from './implementation/controls/PerspectiveCameraControls';
import { IPerspectiveCameraControls } from './interfaces/controls/IPerspectiveCameraControls';
import { IOrthographicCameraControls } from './interfaces/controls/IOrthographicCameraControls';
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from './interfaces/camera/IOrthographicCamera';
import { IPerspectiveCamera } from './interfaces/camera/IPerspectiveCamera';
export { ICameraEngine, ICamera, ICameraControls };
export { CameraEngine, AbstractCamera, CAMERA_TYPE, ORTHOGRAPHIC_CAMERA_DIRECTION, ICameraOptions };
export { PerspectiveCamera, OrthographicCamera, IPerspectiveCamera, IOrthographicCamera };
export { PerspectiveCameraControls, OrthographicCameraControls, IPerspectiveCameraControls, IOrthographicCameraControls };
export { PerspectiveCameraControls, OrthographicCameraControls };
//# sourceMappingURL=index.d.ts.map

@@ -6,16 +6,16 @@ "use strict";

Object.defineProperty(exports, "AbstractCamera", { enumerable: true, get: function () { return AbstractCamera_1.AbstractCamera; } });
const ICameraEngine_1 = require("./interfaces/ICameraEngine");
Object.defineProperty(exports, "CAMERA_TYPE", { enumerable: true, get: function () { return ICameraEngine_1.CAMERA_TYPE; } });
const CameraEngine_1 = require("./implementation/CameraEngine");
Object.defineProperty(exports, "CameraEngine", { enumerable: true, get: function () { return CameraEngine_1.CameraEngine; } });
const ICameraEngine_1 = require("./interfaces/ICameraEngine");
Object.defineProperty(exports, "CAMERA_TYPE", { enumerable: true, get: function () { return ICameraEngine_1.CAMERA_TYPE; } });
const IOrthographicCamera_1 = require("./interfaces/camera/IOrthographicCamera");
Object.defineProperty(exports, "ORTHOGRAPHIC_CAMERA_DIRECTION", { enumerable: true, get: function () { return IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION; } });
const OrthographicCamera_1 = require("./implementation/camera/OrthographicCamera");
Object.defineProperty(exports, "OrthographicCamera", { enumerable: true, get: function () { return OrthographicCamera_1.OrthographicCamera; } });
const OrthographicCameraControls_1 = require("./implementation/controls/OrthographicCameraControls");
Object.defineProperty(exports, "OrthographicCameraControls", { enumerable: true, get: function () { return OrthographicCameraControls_1.OrthographicCameraControls; } });
const PerspectiveCamera_1 = require("./implementation/camera/PerspectiveCamera");
Object.defineProperty(exports, "PerspectiveCamera", { enumerable: true, get: function () { return PerspectiveCamera_1.PerspectiveCamera; } });
const OrthographicCameraControls_1 = require("./implementation/controls/OrthographicCameraControls");
Object.defineProperty(exports, "OrthographicCameraControls", { enumerable: true, get: function () { return OrthographicCameraControls_1.OrthographicCameraControls; } });
const PerspectiveCameraControls_1 = require("./implementation/controls/PerspectiveCameraControls");
Object.defineProperty(exports, "PerspectiveCameraControls", { enumerable: true, get: function () { return PerspectiveCameraControls_1.PerspectiveCameraControls; } });
const IOrthographicCamera_1 = require("./interfaces/camera/IOrthographicCamera");
Object.defineProperty(exports, "ORTHOGRAPHIC_CAMERA_DIRECTION", { enumerable: true, get: function () { return IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION; } });
//# sourceMappingURL=index.js.map

@@ -1,26 +0,7 @@

import { vec2, vec3 } from 'gl-matrix';
import { ITreeNode, ITreeNodeData } from '@shapediver/viewer.shared.node-tree';
import { ICameraControls } from '../controls/ICameraControls';
import { CAMERA_TYPE } from '../ICameraEngine';
import { IBox } from '@shapediver/viewer.shared.math';
import { ICameraControls } from '../controls/ICameraControls';
import { ITreeNode, ITreeNodeData } from '@shapediver/viewer.shared.node-tree';
import { SettingsEngine } from '@shapediver/viewer.shared.services';
export interface ICameraOptions {
/**
* The coordinate type of the camera interpolation. (default: 'cylindrical')
*/
coordinates?: 'spherical' | 'linear' | 'cylindrical';
/**
* The duration of the camera movement. (default: cameraMovementDuration set in the settings)
* When set to 0, the camera is immediately updated to the specified position and target.
*/
duration?: number;
/**
* The easing type of the camera interpolation. (default: 'Quadratic.InOut')
*/
easing?: 'Linear.None' | 'Quadratic.In' | 'Quadratic.Out' | 'Quadratic.InOut' | 'Cubic.In' | 'Cubic.Out' | 'Cubic.InOut' | 'Quartic.In' | 'Quartic.Out' | 'Quartic.InOut' | 'Quintic.In' | 'Quintic.Out' | 'Quintic.InOut' | 'Sinusoidal.In' | 'Sinusoidal.Out' | 'Sinusoidal.InOut' | 'Exponential.In' | 'Exponential.Out' | 'Exponential.InOut' | 'Circular.In' | 'Circular.Out' | 'Circular.InOut' | 'Elastic.In' | 'Elastic.Out' | 'Elastic.InOut' | 'Back.In' | 'Back.Out' | 'Back.InOut' | 'Bounce.In' | 'Bounce.Out' | 'Bounce.InOut' | Function;
/**
* The interpolation type of the camera interpolation. (default: 'CatmullRom')
*/
interpolation?: 'Linear' | 'Bezier' | 'CatmullRom' | Function;
}
import { vec2, vec3 } from 'gl-matrix';
export interface ICamera extends ITreeNodeData {

@@ -36,2 +17,3 @@ readonly controls: ICameraControls;

defaultTarget: vec3;
domEventListenerToken?: string;
enableCameraControls: boolean;

@@ -63,2 +45,21 @@ name?: string;

}
export interface ICameraOptions {
/**
* The coordinate type of the camera interpolation. (default: 'cylindrical')
*/
coordinates?: 'spherical' | 'linear' | 'cylindrical';
/**
* The duration of the camera movement. (default: cameraMovementDuration set in the settings)
* When set to 0, the camera is immediately updated to the specified position and target.
*/
duration?: number;
/**
* The easing type of the camera interpolation. (default: 'Quadratic.InOut')
*/
easing?: 'Linear.None' | 'Quadratic.In' | 'Quadratic.Out' | 'Quadratic.InOut' | 'Cubic.In' | 'Cubic.Out' | 'Cubic.InOut' | 'Quartic.In' | 'Quartic.Out' | 'Quartic.InOut' | 'Quintic.In' | 'Quintic.Out' | 'Quintic.InOut' | 'Sinusoidal.In' | 'Sinusoidal.Out' | 'Sinusoidal.InOut' | 'Exponential.In' | 'Exponential.Out' | 'Exponential.InOut' | 'Circular.In' | 'Circular.Out' | 'Circular.InOut' | 'Elastic.In' | 'Elastic.Out' | 'Elastic.InOut' | 'Back.In' | 'Back.Out' | 'Back.InOut' | 'Bounce.In' | 'Bounce.Out' | 'Bounce.InOut' | Function;
/**
* The interpolation type of the camera interpolation. (default: 'CatmullRom')
*/
interpolation?: 'Linear' | 'Bezier' | 'CatmullRom' | Function;
}
//# sourceMappingURL=ICamera.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// #endregion Interfaces (2)
//# sourceMappingURL=ICamera.js.map

@@ -1,3 +0,8 @@

import { IOrthographicCameraControls } from '../controls/IOrthographicCameraControls';
import { ICamera } from './ICamera';
import { ICameraControls } from '../controls/ICameraControls';
export interface IOrthographicCamera extends ICamera {
readonly controls: ICameraControls;
direction: ORTHOGRAPHIC_CAMERA_DIRECTION;
clone(): IOrthographicCamera;
}
export declare enum ORTHOGRAPHIC_CAMERA_DIRECTION {

@@ -9,9 +14,5 @@ TOP = "top",

FRONT = "front",
BACK = "back"
BACK = "back",
CUSTOM = "custom"
}
export interface IOrthographicCamera extends ICamera {
readonly controls: IOrthographicCameraControls;
direction: ORTHOGRAPHIC_CAMERA_DIRECTION;
clone(): IOrthographicCamera;
}
//# sourceMappingURL=IOrthographicCamera.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ORTHOGRAPHIC_CAMERA_DIRECTION = void 0;
// #endregion Interfaces (1)
// #region Enums (1)
var ORTHOGRAPHIC_CAMERA_DIRECTION;

@@ -12,3 +14,5 @@ (function (ORTHOGRAPHIC_CAMERA_DIRECTION) {

ORTHOGRAPHIC_CAMERA_DIRECTION["BACK"] = "back";
ORTHOGRAPHIC_CAMERA_DIRECTION["CUSTOM"] = "custom";
})(ORTHOGRAPHIC_CAMERA_DIRECTION = exports.ORTHOGRAPHIC_CAMERA_DIRECTION || (exports.ORTHOGRAPHIC_CAMERA_DIRECTION = {}));
// #endregion Enums (1)
//# sourceMappingURL=IOrthographicCamera.js.map

@@ -1,5 +0,5 @@

import { IPerspectiveCameraControls } from '../controls/IPerspectiveCameraControls';
import { ICamera } from './ICamera';
import { ICameraControls } from '../controls/ICameraControls';
export interface IPerspectiveCamera extends ICamera {
readonly controls: IPerspectiveCameraControls;
readonly controls: ICameraControls;
fov: number;

@@ -6,0 +6,0 @@ clone(): IPerspectiveCamera;

@@ -1,11 +0,81 @@

import { mat4, vec2, vec3 } from 'gl-matrix';
import { ICamera, ICameraOptions } from '../camera/ICamera';
import { ICameraControlsEventDistribution } from './ICameraControlsEventDistribution';
import { mat4, vec2, vec3 } from 'gl-matrix';
export declare type Adjustments = {
autoRotationSpeed: number;
damping: number;
movementSmoothness: number;
panSpeed: number;
rotationSpeed: number;
zoomSpeed: number;
};
export interface ICameraControls {
readonly cameraControlsEventDistribution: ICameraControlsEventDistribution;
readonly canvas?: HTMLCanvasElement;
autoRotationSpeed: number;
camera: ICamera;
canvas?: HTMLCanvasElement;
cubePositionRestriction: {
min: vec3;
max: vec3;
};
cubeTargetRestriction: {
min: vec3;
max: vec3;
};
damping: number;
enableAutoRotation: boolean;
enableAzimuthRotation: boolean;
enableKeyPan: boolean;
enablePan: boolean;
enablePolarRotation: boolean;
enableRotation: boolean;
enableTurntableControls: boolean;
enableObjectControls: boolean;
enableZoom: boolean;
enabled: boolean;
input: {
keys: {
up: number;
down: number;
left: number;
right: number;
};
mouse: {
rotate: number;
zoom: number;
pan: number;
};
touch: {
rotate: number;
zoom: number;
pan: number;
};
};
keyPanSpeed: number;
movementSmoothness: number;
panSpeed: number;
position: vec3;
rotationRestriction: {
minPolarAngle: number;
maxPolarAngle: number;
minAzimuthAngle: number;
maxAzimuthAngle: number;
};
rotationSpeed: number;
spherePositionRestriction: {
center: vec3;
radius: number;
};
sphereTargetRestriction: {
center: vec3;
radius: number;
};
target: vec3;
turntableCenter: vec3;
objectControlsCenter: vec3;
zoomRestriction: {
minDistance: number;
maxDistance: number;
};
zoomSpeed: number;
animate(path: {

@@ -17,2 +87,3 @@ position: vec3;

applyPositionVector(vector: vec3, manualInteraction?: boolean | undefined): void;
applyRotation(vector: vec2, manualInteraction?: boolean | undefined): void;
applyTargetMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void;

@@ -19,0 +90,0 @@ applyTargetVector(vector: vec3, manualInteraction?: boolean | undefined): void;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// #endregion Interfaces (1)
//# sourceMappingURL=ICameraControls.js.map
import { IDomEventListener } from '@shapediver/viewer.shared.services';
export interface ICameraControlsEventDistribution extends IDomEventListener {
reset(): void;
activateCameraEvents(): void;
deactivateCameraEvents(): void;
reset(): void;
}
//# sourceMappingURL=ICameraControlsEventDistribution.d.ts.map
import { vec2, vec3 } from 'gl-matrix';
export interface ICameraControlsLogic {
isWithinRestrictions(position: any, target: any): boolean;
isWithinRestrictions(position: vec3, target: vec3): boolean;
pan(x: number, y: number, active: boolean, touch: boolean): void;
reset(): void;

@@ -10,4 +11,6 @@ restrict(p: vec3, t: vec3, s?: vec2): {

};
rotate(x: number, y: number, active: boolean, touch: boolean): void;
update(time: number, manualInteraction: boolean): void;
zoom(x: number, y: number, active: boolean, touch: boolean): void;
}
//# sourceMappingURL=ICameraControlsLogic.d.ts.map
import { ICamera } from './camera/ICamera';
export declare enum CAMERA_TYPE {
PERSPECTIVE = "perspective",
ORTHOGRAPHIC = "orthographic"
}
export interface ICameraEngine {
update?: () => void;
activateCameraEvents(): void;
assignCamera(id: string): boolean;
createCamera(type: CAMERA_TYPE, id?: string): ICamera;
createDefaultCameras(): void;
deactivateCameraEvents(): void;
removeCamera(id: string): boolean;
activateCameraEvents(): void;
deactivateCameraEvents(): void;
createDefaultCameras(): void;
}
export declare enum CAMERA_TYPE {
PERSPECTIVE = "perspective",
ORTHOGRAPHIC = "orthographic"
}
//# sourceMappingURL=ICameraEngine.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CAMERA_TYPE = void 0;
// #endregion Interfaces (1)
// #region Enums (1)
var CAMERA_TYPE;

@@ -9,2 +11,3 @@ (function (CAMERA_TYPE) {

})(CAMERA_TYPE = exports.CAMERA_TYPE || (exports.CAMERA_TYPE = {}));
// #endregion Enums (1)
//# sourceMappingURL=ICameraEngine.js.map
export interface ICameraInterpolation {
onUpdate(value: {
onComplete(value: {
delta: number;

@@ -8,3 +8,3 @@ }): void;

}): void;
onComplete(value: {
onUpdate(value: {
delta: number;

@@ -11,0 +11,0 @@ }): void;

{
"name": "@shapediver/viewer.rendering-engine.camera-engine",
"version": "2.12.8",
"version": "3.0.0",
"description": "",

@@ -42,8 +42,8 @@ "keywords": [],

"dependencies": {
"@shapediver/viewer.rendering-engine.rendering-engine": "2.12.8",
"@shapediver/viewer.settings": "0.5.7",
"@shapediver/viewer.shared.math": "2.12.8",
"@shapediver/viewer.shared.node-tree": "2.12.8",
"@shapediver/viewer.shared.services": "2.12.8",
"@shapediver/viewer.shared.types": "2.12.8",
"@shapediver/viewer.rendering-engine.rendering-engine": "3.0.0",
"@shapediver/viewer.settings": "1.0.1",
"@shapediver/viewer.shared.math": "3.0.0",
"@shapediver/viewer.shared.node-tree": "3.0.0",
"@shapediver/viewer.shared.services": "3.0.0",
"@shapediver/viewer.shared.types": "3.0.0",
"@tweenjs/tween.js": "^18.6.4",

@@ -53,3 +53,3 @@ "detect-it": "4.0.1",

},
"gitHead": "615c459595cdea9ceeca8a307d469c617ce36684"
"gitHead": "b6b0010bf5d5652aa338df8016405d97f33fcabb"
}
import * as detectIt from 'detect-it';
import { AbstractTreeNodeData, ITreeNode } from '@shapediver/viewer.shared.node-tree';
import { Box, IBox } from '@shapediver/viewer.shared.math';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { vec2, vec3 } from 'gl-matrix';

@@ -9,12 +15,5 @@ import {

} from '@shapediver/viewer.shared.services';
import { Box, IBox } from '@shapediver/viewer.shared.math';
import { AbstractTreeNodeData, ITreeNode } from '@shapediver/viewer.shared.node-tree';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
export abstract class AbstractCamera extends AbstractTreeNodeData implements ICamera {
// #region Properties (23)
// #region Properties (24)

@@ -26,2 +25,3 @@ #active: boolean = false;

#defaultTarget: vec3 = vec3.create();
#domEventListenerToken: string | undefined;
#enableCameraControls: boolean = true;

@@ -48,3 +48,3 @@ #far: number = 1000;

// #endregion Properties (23)
// #endregion Properties (24)

@@ -59,3 +59,3 @@ // #region Constructors (1)

// #region Public Accessors (41)
// #region Public Getters And Setters (43)

@@ -110,2 +110,10 @@ public get active(): boolean {

public get domEventListenerToken(): string | undefined {
return this.#domEventListenerToken;
}
public set domEventListenerToken(value: string | undefined) {
this.#domEventListenerToken = value;
}
public get enableCameraControls(): boolean {

@@ -229,3 +237,3 @@ return this.#enableCameraControls;

// #endregion Public Accessors (41)
// #endregion Public Getters And Setters (43)

@@ -295,7 +303,7 @@ // #region Public Methods (5)

abstract applySettings(settingsEngine?: SettingsEngine): void;
abstract assignViewer(renderingEngine: IRenderingEngine): void;
abstract calculateZoomTo(zoomTarget?: Box, startingPosition?: vec3, startingTarget?: vec3): { position: vec3; target: vec3; };
abstract project(p: vec3): vec2;
abstract unproject(p: vec3): vec3;
public abstract applySettings(settingsEngine?: SettingsEngine): void;
public abstract assignViewer(renderingEngine: IRenderingEngine): void;
public abstract calculateZoomTo(zoomTarget?: Box, startingPosition?: vec3, startingTarget?: vec3): { position: vec3; target: vec3; };
public abstract project(p: vec3): vec2;
public abstract unproject(p: vec3): vec3;

@@ -302,0 +310,0 @@ // #endregion Public Abstract Methods (5)

@@ -0,1 +1,11 @@

import { AbstractCamera } from './AbstractCamera';
import { Box, IBox } from '@shapediver/viewer.shared.math';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from '../../interfaces/camera/IOrthographicCamera';
import { IOrthographicCameraSettings } from '@shapediver/viewer.settings';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { ITree, Tree } from '@shapediver/viewer.shared.node-tree';
import { mat4, vec2, vec3 } from 'gl-matrix';
import { OrthographicCameraControls } from '../controls/OrthographicCameraControls';
import {

@@ -7,18 +17,6 @@ Converter,

ShapeDiverViewerCameraError,
StateEngine,
} from '@shapediver/viewer.shared.services'
import { mat4, vec2, vec3 } from 'gl-matrix'
import { Box, IBox } from '@shapediver/viewer.shared.math'
import { IOrthographicCameraSettingsV3 } from '@shapediver/viewer.settings'
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine'
import { ITree, Tree } from '@shapediver/viewer.shared.node-tree'
} from '@shapediver/viewer.shared.services';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine'
import { AbstractCamera } from './AbstractCamera'
import { OrthographicCameraControls } from '../controls/OrthographicCameraControls'
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from '../../interfaces/camera/IOrthographicCamera'
import { IOrthographicCameraControls } from '../../interfaces/controls/IOrthographicCameraControls'
export class OrthographicCamera extends AbstractCamera implements IOrthographicCamera {
// #region Properties (7)
// #region Properties (11)

@@ -29,16 +27,14 @@ readonly #converter: Converter = Converter.instance;

#domEventListenerToken?: string;
#bottom: number = -100;
#direction: ORTHOGRAPHIC_CAMERA_DIRECTION = ORTHOGRAPHIC_CAMERA_DIRECTION.CUSTOM;
#domEventEngine?: DomEventEngine;
#bottom: number = -100;
#direction: ORTHOGRAPHIC_CAMERA_DIRECTION = ORTHOGRAPHIC_CAMERA_DIRECTION.TOP;
#left: number = -100;
#right: number = 100;
#top: number = 100;
#threeJsObject: { [key: string]: THREE.OrthographicCamera } = {};
#up: vec3 = vec3.fromValues(0, 1, 0);
protected _controls: IOrthographicCameraControls;
#up: vec3 = vec3.fromValues(0, 0, 1);
// #endregion Properties (7)
protected _controls: ICameraControls;
// #endregion Properties (11)
// #region Constructors (1)

@@ -53,3 +49,3 @@

// #region Public Accessors (12)
// #region Public Getters And Setters (14)

@@ -64,7 +60,7 @@ public get bottom(): number {

public get controls(): IOrthographicCameraControls {
public get controls(): ICameraControls {
return this._controls;
}
public set controls(value: IOrthographicCameraControls) {
public set controls(value: ICameraControls) {
this._controls = value;

@@ -87,15 +83,11 @@ }

case ORTHOGRAPHIC_CAMERA_DIRECTION.RIGHT:
case ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:
this.up = vec3.fromValues(0, 0, 1);
break;
case ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:
this.up = vec3.fromValues(0, 0, 1);
break;
case ORTHOGRAPHIC_CAMERA_DIRECTION.BACK:
case ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:
this.up = vec3.fromValues(0, 0, 1);
break;
case ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:
default:
this.up = vec3.fromValues(0, 0, 1);
break;
default:
this.up = vec3.fromValues(0, -1, 0);
}

@@ -107,3 +99,3 @@

this.defaultTarget = vec3.clone(target);
this.position = vec3.clone(position);

@@ -146,12 +138,8 @@ this.target = vec3.clone(target);

public get threeJsObject(): { [key: string]: THREE.OrthographicCamera } {
return this.#threeJsObject;
}
// #endregion Public Getters And Setters (14)
// #endregion Public Accessors (12)
// #region Public Methods (6)
public applySettings(settingsEngine: SettingsEngine) {
const cameraSetting = <IOrthographicCameraSettingsV3>settingsEngine.camera.cameras[this.id];
const cameraSetting = <IOrthographicCameraSettings>settingsEngine.camera.cameras[this.id];
if (cameraSetting) {

@@ -164,6 +152,7 @@ this.name = cameraSetting.name;

this.revertAtMouseUpDuration = cameraSetting.revertAtMouseUpDuration;
this.sceneRotation = vec2.fromValues(cameraSetting.sceneRotation.x, cameraSetting.sceneRotation.y);
this.zoomExtentsFactor = cameraSetting.zoomExtentsFactor;
let position = this.#converter.toVec3(cameraSetting.position);
let target = this.#converter.toVec3(cameraSetting.target);
const position = this.#converter.toVec3(cameraSetting.position);
const target = this.#converter.toVec3(cameraSetting.target);
this.defaultPosition = vec3.clone(position);

@@ -178,3 +167,3 @@ this.defaultTarget = vec3.clone(target);

if (this._viewportId) {
this._stateEngine.renderingEngines[this._viewportId].boundingBoxCreated
this._stateEngine.viewportEngines[this._viewportId].boundingBoxCreated
.then(async () => {

@@ -184,3 +173,3 @@ await this.zoomTo(undefined, { duration: 0 });

this.defaultTarget = vec3.clone(this._controls.target);
})
});
}

@@ -192,26 +181,22 @@ }

public assignViewer(renderingEngine: IRenderingEngine): void {
if(renderingEngine.closed)
if (renderingEngine.closed)
throw new ShapeDiverViewerCameraError(`OrthographicCamera(${this.id}).assignViewer: Viewer with id ${renderingEngine.id} not found.`);
this.assignViewerInternal(renderingEngine.id, renderingEngine.canvas);
this._controls.assignViewer(renderingEngine.id, renderingEngine.canvas);
if (this.#domEventListenerToken && this.#domEventEngine)
this.#domEventEngine.removeDomEventListener(this.#domEventListenerToken);
if (this.domEventListenerToken && this.#domEventEngine)
this.#domEventEngine.removeDomEventListener(this.domEventListenerToken);
this.#domEventEngine = renderingEngine.domEventEngine;
this.#domEventListenerToken = this.#domEventEngine.addDomEventListener((<OrthographicCameraControls>this._controls).cameraControlsEventDistribution);
this.domEventListenerToken = this.#domEventEngine.addDomEventListener((<OrthographicCameraControls>this._controls).cameraControlsEventDistribution);
this.boundingBox = this.#tree.root.boundingBox.clone();
this._stateEngine.renderingEngines[renderingEngine.id].boundingBoxCreated.then(async () => {
this._stateEngine.viewportEngines[renderingEngine.id].boundingBoxCreated.then(async () => {
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2])
await this.zoomTo(undefined, { duration: 0 });
})
});
}
public clone(): IOrthographicCamera {
return new OrthographicCamera(this.id, this.version);
}
public calculateZoomTo(zoomTarget?: Box, startingPosition: vec3 = this.position, startingTarget: vec3 = this.target): { position: vec3; target: vec3; } {

@@ -228,7 +213,10 @@ let box: IBox;

}
if (box.isEmpty()) return { position: vec3.create(), target: vec3.create() }
if (box.isEmpty()) return { position: vec3.create(), target: vec3.create() };
const target = vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);
if (startingPosition[0] === startingTarget[0] && startingPosition[1] === startingTarget[1] && startingPosition[2] === startingTarget[2])
startingPosition = vec3.fromValues(target[0], target[1] - 7.5, target[2] + 5);
const factor = 2 * box.boundingSphere.radius * this.zoomExtentsFactor;
const center = vec3.clone(box.boundingSphere.center);

@@ -238,34 +226,41 @@ switch (this.#direction) {

return {
position: vec3.fromValues(center[0], center[1], center[2] + factor),
target: vec3.clone(center)
}
position: vec3.fromValues(target[0], target[1], target[2] + factor),
target: vec3.clone(target)
};
case ORTHOGRAPHIC_CAMERA_DIRECTION.BOTTOM:
return {
position: vec3.fromValues(center[0], center[1], center[2] - factor),
target: vec3.clone(center)
}
position: vec3.fromValues(target[0], target[1], target[2] - factor),
target: vec3.clone(target)
};
case ORTHOGRAPHIC_CAMERA_DIRECTION.RIGHT:
return {
position: vec3.fromValues(center[0] + factor, center[1], center[2]),
target: vec3.clone(center)
}
position: vec3.fromValues(target[0] + factor, target[1], target[2]),
target: vec3.clone(target)
};
case ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:
return {
position: vec3.fromValues(center[0] - factor, center[1], center[2]),
target: vec3.clone(center)
}
position: vec3.fromValues(target[0] - factor, target[1], target[2]),
target: vec3.clone(target)
};
case ORTHOGRAPHIC_CAMERA_DIRECTION.BACK:
return {
position: vec3.fromValues(center[0], center[1] + factor, center[2]),
target: vec3.clone(center)
}
position: vec3.fromValues(target[0], target[1] + factor, target[2]),
target: vec3.clone(target)
};
case ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:
return {
position: vec3.fromValues(center[0], center[1] - factor, center[2]),
target: vec3.clone(center)
}
position: vec3.fromValues(target[0], target[1] - factor, target[2]),
target: vec3.clone(target)
};
default:
return {
position: vec3.fromValues(center[0], center[1], center[2] + factor),
target: vec3.clone(center)
{
// get the direction from the starting position to the starting target
const direction = vec3.subtract(vec3.create(), startingPosition, target);
// normalize the direction
vec3.normalize(direction, direction);
// get the new position
return {
position: vec3.add(vec3.create(), target, vec3.scale(vec3.create(), direction, factor)),
target: vec3.clone(target)
};
}

@@ -275,15 +270,19 @@ }

public clone(): IOrthographicCamera {
return new OrthographicCamera(this.id, this.version);
}
public project(pos: vec3): vec2 {
const m = mat4.targetTo(mat4.create(), this.position, this.target, this.up);
const p = mat4.ortho(mat4.create(), this.left, this.right, this.bottom, this.top, this.near, this.far);
vec3.transformMat4(pos, pos, mat4.invert(m, m))
vec3.transformMat4(pos, pos, p)
return vec2.fromValues(pos[0], pos[1])
vec3.transformMat4(pos, pos, mat4.invert(m, m));
vec3.transformMat4(pos, pos, p);
return vec2.fromValues(pos[0], pos[1]);
}
public unproject(pos: vec3, position = this.position, target = this.target): vec3 {
public unproject(pos: vec3): vec3 {
const m = mat4.targetTo(mat4.create(), this.position, this.target, this.up);
const p = mat4.ortho(mat4.create(), this.left, this.right, this.bottom, this.top, this.near, this.far);
vec3.transformMat4(pos, pos, mat4.invert(p, p))
vec3.transformMat4(pos, pos, m)
vec3.transformMat4(pos, pos, mat4.invert(p, p));
vec3.transformMat4(pos, pos, m);
return vec3.clone(pos);

@@ -290,0 +289,0 @@ }

@@ -0,39 +1,37 @@

import { AbstractCamera } from './AbstractCamera';
import { Box, IBox, Plane } from '@shapediver/viewer.shared.math';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { IPerspectiveCamera } from '../../interfaces/camera/IPerspectiveCamera';
import { IPerspectiveCameraSettings } from '@shapediver/viewer.settings';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { ITree, Tree } from '@shapediver/viewer.shared.node-tree';
import {
mat4,
quat,
vec2,
vec3
} from 'gl-matrix';
import { PerspectiveCameraControls } from '../controls/PerspectiveCameraControls';
import {
Converter,
DomEventEngine,
Logger,
SettingsEngine,
ShapeDiverViewerCameraError,
StateEngine,
} from '@shapediver/viewer.shared.services'
import { mat4, quat, vec2, vec3 } from 'gl-matrix'
import { Box, IBox, Plane } from '@shapediver/viewer.shared.math'
import { IPerspectiveCameraSettingsV3 } from '@shapediver/viewer.settings'
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine'
import { ITree, Tree } from '@shapediver/viewer.shared.node-tree'
} from '@shapediver/viewer.shared.services';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine'
import { AbstractCamera } from './AbstractCamera'
import { PerspectiveCameraControls } from '../controls/PerspectiveCameraControls'
import { IPerspectiveCamera } from '../../interfaces/camera/IPerspectiveCamera'
import { IPerspectiveCameraControls } from '../../interfaces/controls/IPerspectiveCameraControls'
export class PerspectiveCamera extends AbstractCamera implements IPerspectiveCamera {
// #region Properties (3)
// #region Properties (6)
readonly #converter: Converter = Converter.instance;
readonly #logger: Logger = Logger.instance;
readonly #tree: ITree = Tree.instance;
protected _controls: IPerspectiveCameraControls;
#domEventListenerToken?: string;
#aspect: number | undefined;
#domEventEngine?: DomEventEngine;
#aspect: number | undefined;
#fov: number = 60;
#threeJsObject: { [key: string]: THREE.PerspectiveCamera } = {};
// #endregion Properties (3)
protected _controls: ICameraControls;
// #endregion Properties (6)
// #region Constructors (1)

@@ -49,3 +47,3 @@

// #region Public Accessors (4)
// #region Public Getters And Setters (6)

@@ -60,7 +58,7 @@ public get aspect(): number | undefined {

public get controls(): IPerspectiveCameraControls {
public get controls(): ICameraControls {
return this._controls;
}
public set controls(value: IPerspectiveCameraControls) {
public set controls(value: ICameraControls) {
this._controls = value;

@@ -77,12 +75,8 @@ }

public get threeJsObject(): { [key: string]: THREE.PerspectiveCamera } {
return this.#threeJsObject;
}
// #endregion Public Getters And Setters (6)
// #endregion Public Accessors (4)
// #region Public Methods (6)
public applySettings(settingsEngine: SettingsEngine) {
const cameraSetting = <IPerspectiveCameraSettingsV3>settingsEngine.camera.cameras[this.id];
const cameraSetting = <IPerspectiveCameraSettings>settingsEngine.camera.cameras[this.id];
if (cameraSetting) {

@@ -95,6 +89,7 @@ this.name = cameraSetting.name;

this.revertAtMouseUpDuration = cameraSetting.revertAtMouseUpDuration;
this.sceneRotation = vec2.fromValues(cameraSetting.sceneRotation.x, cameraSetting.sceneRotation.y);
this.zoomExtentsFactor = cameraSetting.zoomExtentsFactor;
let position = this.#converter.toVec3(cameraSetting.position);
let target = this.#converter.toVec3(cameraSetting.target);
const position = this.#converter.toVec3(cameraSetting.position);
const target = this.#converter.toVec3(cameraSetting.target);
this.defaultPosition = vec3.clone(position);

@@ -109,8 +104,8 @@ this.defaultTarget = vec3.clone(target);

if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2]) {
if(this._viewportId) {
this._stateEngine.renderingEngines[this._viewportId].boundingBoxCreated.then(async () => {
if (this._viewportId) {
this._stateEngine.viewportEngines[this._viewportId].boundingBoxCreated.then(async () => {
await this.zoomTo(undefined, { duration: 0 });
this.defaultPosition = vec3.clone(this._controls.position);
this.defaultTarget = vec3.clone(this._controls.target);
})
});
}

@@ -122,3 +117,3 @@ }

public assignViewer(renderingEngine: IRenderingEngine): void {
if(renderingEngine.closed)
if (renderingEngine.closed)
throw new ShapeDiverViewerCameraError(`OrthographicCamera(${this.id}).assignViewer: Viewer with id ${renderingEngine.id} not found.`);

@@ -129,20 +124,16 @@

if (this.#domEventListenerToken && this.#domEventEngine)
this.#domEventEngine.removeDomEventListener(this.#domEventListenerToken);
if (this.domEventListenerToken && this.#domEventEngine)
this.#domEventEngine.removeDomEventListener(this.domEventListenerToken);
this.#domEventEngine = renderingEngine.domEventEngine;
this.#domEventListenerToken = this.#domEventEngine.addDomEventListener((<PerspectiveCameraControls>this._controls).cameraControlsEventDistribution);
this.domEventListenerToken = this.#domEventEngine.addDomEventListener((<PerspectiveCameraControls>this._controls).cameraControlsEventDistribution);
this.boundingBox = this.#tree.root.boundingBox.clone();
this._stateEngine.renderingEngines[renderingEngine.id].boundingBoxCreated.then(async () => {
this._stateEngine.viewportEngines[renderingEngine.id].boundingBoxCreated.then(async () => {
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2])
await this.zoomTo(undefined, { duration: 0 });
})
});
}
public clone(): IPerspectiveCamera {
return new PerspectiveCamera(this.id, this.version, this.aspect);
}
public calculateZoomTo(zoomTarget?: Box, startingPosition: vec3 = this.position, startingTarget: vec3 = this.target): { position: vec3, target: vec3 } {

@@ -160,6 +151,6 @@ let box: IBox;

if (box.isEmpty()) return { position: vec3.create(), target: vec3.create() }
if (box.isEmpty()) return { position: vec3.create(), target: vec3.create() };
const samePosition = startingPosition[0] === startingTarget[0] && startingPosition[1] === startingTarget[1] && startingPosition[2] === startingTarget[2];
let target = vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);
const target = vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);

@@ -171,14 +162,14 @@ // if the camera position and the target are the same, we set a corner position

// extend box by the factor
const boxDir = vec3.subtract(vec3.create(), box.max, target)
const boxDir = vec3.subtract(vec3.create(), box.max, target);
vec3.multiply(boxDir, boxDir, samePosition ? vec3.fromValues(2, 2, 2) : vec3.fromValues(this.zoomExtentsFactor, this.zoomExtentsFactor, this.zoomExtentsFactor));
box = new Box(vec3.subtract(vec3.create(), target, boxDir), vec3.add(vec3.create(), target, boxDir))
box = new Box(vec3.subtract(vec3.create(), target, boxDir), vec3.add(vec3.create(), target, boxDir));
const direction = vec3.normalize(vec3.create(), vec3.subtract(vec3.create(), target, startingPosition));
let cross = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), vec3.fromValues(0, 0, 1), direction));
let up = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), cross, direction));
const cross = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), vec3.fromValues(0, 0, 1), direction));
const up = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), cross, direction));
let position = vec3.add(vec3.create(), target, vec3.multiply(vec3.create(), direction, vec3.fromValues(-0.00000001, -0.00000001, -0.00000001)));
let points = [];
const points = [];
points.push(vec3.fromValues(box.min[0], box.min[1], box.min[2]));

@@ -193,14 +184,14 @@ points.push(vec3.fromValues(box.min[0], box.min[1], box.max[2]));

let fovDown = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), cross, (this.fov / 2) * (Math.PI / 180))));
let fovUp = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), cross, -(this.fov / 2) * (Math.PI / 180))));
const fovDown = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), cross, (this.fov / 2) * (Math.PI / 180))));
const fovUp = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), cross, -(this.fov / 2) * (Math.PI / 180))));
const aspect = samePosition ? 1.5 : this.aspect || 1.5;
let hFoV = 2 * Math.atan(Math.tan(this.fov * Math.PI / 180 / 2) * aspect);
let fovRight = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), up, hFoV / 2)));
let fovLeft = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), up, -hFoV / 2)));
const hFoV = 2 * Math.atan(Math.tan(this.fov * Math.PI / 180 / 2) * aspect);
const fovRight = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), up, hFoV / 2)));
const fovLeft = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), direction, quat.setAxisAngle(quat.create(), up, -hFoV / 2)));
let planeCross = new Plane(vec3.clone(cross), 0);
const planeCross = new Plane(vec3.clone(cross), 0);
planeCross.setFromNormalAndCoplanarPoint(vec3.clone(cross), vec3.clone(target));
let planeUp = new Plane(vec3.fromValues(0, 0, 1), 0);
const planeUp = new Plane(vec3.fromValues(0, 0, 1), 0);
planeUp.setFromNormalAndCoplanarPoint(vec3.clone(up), vec3.clone(target));

@@ -215,3 +206,3 @@

const currentDir = vec3.multiply(vec3.create(), vec3.dot(fovDown, toP) > vec3.dot(fovUp, toP) ? fovDown : fovUp, vec3.fromValues(-1, -1, -1));
const distance = planeUp.intersect(projected, currentDir)
const distance = planeUp.intersect(projected, currentDir);
if (distance) {

@@ -228,3 +219,3 @@ const cameraPoint = vec3.add(vec3.create(), vec3.multiply(vec3.create(), currentDir, vec3.fromValues(distance, distance, distance)), projected);

const currentDir = vec3.multiply(vec3.create(), vec3.dot(fovRight, toP) > vec3.dot(fovLeft, toP) ? fovRight : fovLeft, vec3.fromValues(-1, -1, -1));
const distance = planeCross.intersect(projected, currentDir)
const distance = planeCross.intersect(projected, currentDir);
if (distance) {

@@ -241,5 +232,9 @@ const cameraPoint = vec3.add(vec3.create(), vec3.multiply(vec3.create(), currentDir, vec3.fromValues(distance, distance, distance)), projected);

position, target
}
};
}
public clone(): IPerspectiveCamera {
return new PerspectiveCamera(this.id, this.version, this.aspect);
}
public project(pos: vec3, position = this.position, target = this.target): vec2 {

@@ -249,5 +244,5 @@ const m = mat4.targetTo(mat4.create(), position, target, vec3.fromValues(0, 0, 1));

const p = mat4.perspective(mat4.create(), this.fov / (180 / Math.PI), aspect, this.near, this.far);
vec3.transformMat4(pos, pos, mat4.invert(m, m))
vec3.transformMat4(pos, pos, p)
return vec2.fromValues(pos[0], pos[1])
vec3.transformMat4(pos, pos, mat4.invert(m, m));
vec3.transformMat4(pos, pos, p);
return vec2.fromValues(pos[0], pos[1]);
}

@@ -259,4 +254,4 @@

const p = mat4.perspective(mat4.create(), this.fov / (180 / Math.PI), aspect, this.near, this.far);
vec3.transformMat4(pos, pos, mat4.invert(p, p))
vec3.transformMat4(pos, pos, m)
vec3.transformMat4(pos, pos, mat4.invert(p, p));
vec3.transformMat4(pos, pos, m);
return vec3.clone(pos);

@@ -263,0 +258,0 @@ }

@@ -0,38 +1,37 @@

import { AbstractCamera } from './camera/AbstractCamera';
import { Box } from '@shapediver/viewer.shared.math';
import { CAMERA_TYPE, ICameraEngine } from '../interfaces/ICameraEngine';
import { ICamera } from '../interfaces/camera/ICamera';
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine';
import { ISceneEvent } from '@shapediver/viewer.shared.types';
import {
DomEventEngine,
EventEngine,
EVENTTYPE,
IEvent,
Logger,
SettingsEngine,
ShapeDiverViewerCameraError,
StateEngine,
UuidGenerator,
} from '@shapediver/viewer.shared.services'
import { Box } from '@shapediver/viewer.shared.math'
import { vec3 } from 'gl-matrix'
import { IOrthographicCameraSettingsV3, IPerspectiveCameraSettingsV3 } from '@shapediver/viewer.settings'
import { ISceneEvent } from '@shapediver/viewer.shared.types'
import { ITree, ITreeNode, Tree, TreeNode } from '@shapediver/viewer.shared.node-tree'
ITree,
ITreeNode,
Tree,
TreeNode
} from '@shapediver/viewer.shared.node-tree';
import { ORTHOGRAPHIC_CAMERA_DIRECTION } from '../interfaces/camera/IOrthographicCamera';
import { OrthographicCamera } from './camera/OrthographicCamera';
import { OrthographicCameraControls } from './controls/OrthographicCameraControls';
import { PerspectiveCamera } from './camera/PerspectiveCamera';
import { PerspectiveCameraControls } from './controls/PerspectiveCameraControls';
import { vec3 } from 'gl-matrix';
import {
EventEngine,
EVENTTYPE,
IEvent,
Logger,
SettingsEngine,
ShapeDiverViewerCameraError,
StateEngine,
UuidGenerator,
} from '@shapediver/viewer.shared.services';
import { CAMERA_TYPE, ICameraEngine } from '../interfaces/ICameraEngine'
import { AbstractCamera } from './camera/AbstractCamera'
import { OrthographicCameraControls } from './controls/OrthographicCameraControls'
import { PerspectiveCamera } from './camera/PerspectiveCamera'
import { OrthographicCamera } from './camera/OrthographicCamera'
import { PerspectiveCameraControls } from './controls/PerspectiveCameraControls'
import { ORTHOGRAPHIC_CAMERA_DIRECTION } from '../interfaces/camera/IOrthographicCamera'
import { IRenderingEngine } from '@shapediver/viewer.rendering-engine.rendering-engine'
import { ICamera } from '../interfaces/camera/ICamera'
export class CameraEngine implements ICameraEngine {
// #region Properties (10)
// #region Properties (11)
private readonly _cameraNode: ITreeNode = new TreeNode('cameras');
private readonly _cameras: {
[key: string]: ICamera
} = {};
private readonly _camerasDomEventListenerToken: {
[key: string]: string
} = {};
private readonly _cameraNode: ITreeNode = new TreeNode('cameras');
private readonly _eventEngine: EventEngine = EventEngine.instance;

@@ -46,14 +45,14 @@ private readonly _logger: Logger = Logger.instance;

private _settingsApplied: boolean = false;
private _update?: () => void;
protected _boundingBox: Box = new Box();
private _update?: () => void;
// #endregion Properties (10)
// #endregion Properties (11)
// #region Constructors (1)
constructor(private readonly _renderingEngine: IRenderingEngine, private readonly _canvas: HTMLCanvasElement) {
constructor(private readonly _renderingEngine: IRenderingEngine) {
this._tree.root.addChild(this._cameraNode);
this._cameraNode.restrictViewports = [this._renderingEngine.id];
this._eventEngine.addListener(EVENTTYPE.SCENE.SCENE_BOUNDING_BOX_CHANGE, (e: IEvent) => {

@@ -65,3 +64,3 @@ const viewerEvent = <ISceneEvent>e;

const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
cameras[c].boundingBox = this._boundingBox.clone();

@@ -81,3 +80,3 @@ }

// #region Public Accessors (2)
// #region Public Getters And Setters (4)

@@ -93,3 +92,3 @@ public get camera(): ICamera | null {

}
public get update(): (() => void) | undefined {

@@ -103,9 +102,9 @@ return this._update;

// #endregion Public Accessors (2)
// #endregion Public Getters And Setters (4)
// #region Public Methods (7)
// #region Public Methods (8)
public activateCameraEvents(): void {
const cameras = this.cameras;
for(let c in cameras)
for (const c in cameras)
(<PerspectiveCameraControls | OrthographicCameraControls>cameras[c].controls).cameraControlsEventDistribution.activateCameraEvents();

@@ -116,8 +115,8 @@ }

const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
this.removeCamera(c);
for(let id in settingsEngine.settings.camera.cameras) {
for (const id in settingsEngine.settings.camera.cameras) {
const cameraSetting = settingsEngine.settings.camera.cameras[id];
if(cameraSetting.type === 'perspective') {
if (cameraSetting.type === 'perspective') {
this.createCamera(CAMERA_TYPE.PERSPECTIVE, id);

@@ -130,3 +129,3 @@ } else {

for (let c in cameras)
for (const c in cameras)
cameras[c].applySettings(settingsEngine);

@@ -136,4 +135,4 @@

if(cameraKeys.length > 0) {
if(!settingsEngine.settings.camera.cameraId) {
if (cameraKeys.length > 0) {
if (!settingsEngine.settings.camera.cameraId) {
this.assignCamera(cameraKeys[0]);

@@ -149,3 +148,3 @@ } else {

this._settingsApplied = true;
if(this._update) this._update();
if (this._update) this._update();
}

@@ -157,3 +156,3 @@

for (let c in this.cameras)
for (const c in this.cameras)
this.cameras[c].active = false;

@@ -169,6 +168,6 @@

const cameraId = id || this._uuidGenerator.create();
if (cameras[cameraId])
if (cameras[cameraId])
throw new ShapeDiverViewerCameraError(`CameraEngine.createCamera: Camera (${type}) with this id (${cameraId}) already exists.`);
const initialAspectRatio = (<HTMLDivElement>this._renderingEngine.canvas.parentNode).clientWidth / (<HTMLDivElement>this._renderingEngine.canvas.parentNode).clientHeight;
const initialAspectRatio = (<HTMLDivElement>this._renderingEngine.canvas.parentNode).clientWidth / (<HTMLDivElement>this._renderingEngine.canvas.parentNode).clientHeight;
const camera = CAMERA_TYPE.PERSPECTIVE === type ? new PerspectiveCamera(cameraId, undefined, initialAspectRatio) : new OrthographicCamera(cameraId);

@@ -185,3 +184,3 @@ camera.assignViewer(this._renderingEngine);

this._cameraNode.addData(camera);
if(this._update) this._update();
if (this._update) this._update();
return camera;

@@ -203,2 +202,3 @@ }

backCamera.direction = ORTHOGRAPHIC_CAMERA_DIRECTION.BACK;
this.createCamera(CAMERA_TYPE.ORTHOGRAPHIC, 'orthographic');
const camera = this.createCamera(CAMERA_TYPE.PERSPECTIVE, 'perspective');

@@ -210,3 +210,3 @@ this.assignCamera(camera.id);

const cameras = this.cameras;
for (let c in cameras)
for (const c in cameras)
(<PerspectiveCameraControls | OrthographicCameraControls>cameras[c].controls).cameraControlsEventDistribution.deactivateCameraEvents();

@@ -219,3 +219,3 @@ }

if (!camera) return false;
this._renderingEngine.domEventEngine.removeDomEventListener(this._camerasDomEventListenerToken[id])
if (camera.domEventListenerToken) this._renderingEngine.domEventEngine.removeDomEventListener(camera.domEventListenerToken);
if (this._camera && this._camera.id === id)

@@ -225,5 +225,4 @@ this._camera = null;

delete cameras[id];
delete this._camerasDomEventListenerToken[id];
this._cameraNode.removeData(camera);
if(this._update) this._update();
if (this._update) this._update();
return true;

@@ -236,3 +235,3 @@ }

for (let c in this.cameras) {
for (const c in this.cameras) {
const camera = this.cameras[c];

@@ -254,2 +253,3 @@

fov: (<PerspectiveCamera>camera).fov,
sceneRotation: { x: (<PerspectiveCamera>camera).sceneRotation[0], y: (<PerspectiveCamera>camera).sceneRotation[1] },
controls: {

@@ -292,10 +292,16 @@ autoRotationSpeed: controls.autoRotationSpeed,

zoom: controls.zoomRestriction,
}
},
enableAzimuthRotation: controls.enableAzimuthRotation,
enablePolarRotation: controls.enablePolarRotation,
enableObjectControls: controls.enableObjectControls,
enableTurntableControls: controls.enableTurntableControls,
turntableCenter: { x: controls.turntableCenter[0], y: controls.turntableCenter[1], z: controls.turntableCenter[2] },
objectControlsCenter: { x: controls.objectControlsCenter[0], y: controls.objectControlsCenter[1], z: controls.objectControlsCenter[2] },
}
}
};
} else {
if (settingsEngine.camera.cameras[camera.id]) {
const previousDirection = settingsEngine.camera.cameras[camera.id].type;
// if the direction changed, but the default position & target did not, there is an issue

@@ -315,3 +321,3 @@ if (previousDirection !== camera.type && (

const controls = <OrthographicCameraControls>(<OrthographicCamera>camera).controls;
settingsEngine.camera.cameras[camera.id] = {

@@ -328,6 +334,10 @@ name: camera.name,

type: (<OrthographicCamera>camera).direction,
sceneRotation: { x: (<OrthographicCamera>camera).sceneRotation[0], y: (<OrthographicCamera>camera).sceneRotation[1] },
controls: {
autoRotationSpeed: controls.autoRotationSpeed,
damping: controls.damping,
enableAutoRotation: controls.enableAutoRotation,
enableKeyPan: controls.enableKeyPan,
enablePan: controls.enablePan,
enableRotation: controls.enableRotation,
enableZoom: controls.enableZoom,

@@ -337,6 +347,37 @@ input: controls.input,

movementSmoothness: controls.movementSmoothness,
rotationSpeed: controls.rotationSpeed,
panSpeed: controls.panSpeed,
zoomSpeed: controls.zoomSpeed,
restrictions: {
position: {
cube: {
min: { x: controls.cubePositionRestriction.min[0], y: controls.cubePositionRestriction.min[1], z: controls.cubePositionRestriction.min[2] },
max: { x: controls.cubePositionRestriction.max[0], y: controls.cubePositionRestriction.max[1], z: controls.cubePositionRestriction.max[2] },
},
sphere: {
center: { x: controls.spherePositionRestriction.center[0], y: controls.spherePositionRestriction.center[1], z: controls.spherePositionRestriction.center[2] },
radius: controls.spherePositionRestriction.radius,
},
},
target: {
cube: {
min: { x: controls.cubeTargetRestriction.min[0], y: controls.cubeTargetRestriction.min[1], z: controls.cubeTargetRestriction.min[2] },
max: { x: controls.cubeTargetRestriction.max[0], y: controls.cubeTargetRestriction.max[1], z: controls.cubeTargetRestriction.max[2] },
},
sphere: {
center: { x: controls.sphereTargetRestriction.center[0], y: controls.sphereTargetRestriction.center[1], z: controls.sphereTargetRestriction.center[2] },
radius: controls.sphereTargetRestriction.radius,
},
},
rotation: controls.rotationRestriction,
zoom: controls.zoomRestriction,
},
enableAzimuthRotation: controls.enableAzimuthRotation,
enablePolarRotation: controls.enablePolarRotation,
enableObjectControls: controls.enableObjectControls,
enableTurntableControls: controls.enableTurntableControls,
turntableCenter: { x: controls.turntableCenter[0], y: controls.turntableCenter[1], z: controls.turntableCenter[2] },
objectControlsCenter: { x: controls.objectControlsCenter[0], y: controls.objectControlsCenter[1], z: controls.objectControlsCenter[2] },
}
}
};
}

@@ -346,4 +387,4 @@ }

// #endregion Public Methods (7)
// #endregion Public Methods (8)
// #region Private Methods (1)

@@ -353,14 +394,14 @@

const getCameraData = (node: ITreeNode) => {
for(let i = 0; i < node.data.length; i++)
if((node.data[i] instanceof AbstractCamera) && !this._cameras[node.data[i].id]) {
for (let i = 0; i < node.data.length; i++)
if ((node.data[i] instanceof AbstractCamera) && !this._cameras[node.data[i].id]) {
const camera = <AbstractCamera>node.data[i];
if(camera.viewportId === this._renderingEngine.id)
if (camera.viewportId === this._renderingEngine.id)
this._cameras[camera.id] = camera;
}
for(let i = 0; i < node.children.length; i++)
for (let i = 0; i < node.children.length; i++)
getCameraData(node.children[i]);
};
getCameraData(this._tree.root);
if(this._update) this._update();
if (this._update) this._update();
}

@@ -367,0 +408,0 @@

@@ -1,18 +0,33 @@

import { mat4, vec2, vec3 } from 'gl-matrix';
import { EventEngine, EVENTTYPE } from '@shapediver/viewer.shared.services';
import { CAMERA_TYPE } from '../../interfaces/ICameraEngine';
import { CameraInterpolationManager } from '../interpolation/CameraInterpolationManager';
import { Converter, EventEngine, EVENTTYPE, SettingsEngine } from '@shapediver/viewer.shared.services';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { ICameraControlsUsage } from '../../interfaces/controls/ICameraControlsUsage';
import { CameraInterpolationManager } from '../interpolation/CameraInterpolationManager';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { ICameraControlsEventDistribution } from '../../interfaces/controls/ICameraControlsEventDistribution';
import { ICameraControlsLogic } from '../../interfaces/controls/ICameraControlsLogic';
import { mat4, vec2, vec3 } from 'gl-matrix';
import { ICameraControlsSettings } from '@shapediver/viewer.settings';
export class AbstractCameraControls implements ICameraControlsUsage {
// #region Properties (15)
export abstract class AbstractCameraControls implements ICameraControls {
// #region Properties (38)
private readonly _cameraInterpolationManager: CameraInterpolationManager;
private readonly _converter: Converter = Converter.instance;
private readonly _eventEngine: EventEngine = EventEngine.instance;
private _autoRotationSpeed: number = 0;
private _canvas?: HTMLCanvasElement;
private _cubePositionRestriction: { min: vec3, max: vec3 } = { min: vec3.fromValues(-Infinity, -Infinity, -Infinity), max: vec3.fromValues(Infinity, Infinity, Infinity) };
private _cubeTargetRestriction: { min: vec3, max: vec3 } = { min: vec3.fromValues(-Infinity, -Infinity, -Infinity), max: vec3.fromValues(Infinity, Infinity, Infinity) };
private _damping: number = 0.1;
private _enableAutoRotation: boolean = false;
private _enableAzimuthRotation: boolean = true;
private _enableKeyPan: boolean = false;
private _enableObjectControls: boolean = false;
private _enablePan: boolean = true;
private _enablePolarRotation: boolean = true;
private _enableRotation: boolean = true;
private _enableTurntableControls: boolean = false;
private _enableZoom: boolean = true;
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: 2 }, };
private _keyPanSpeed: number = 0.5;
private _manualInteraction: boolean = false;

@@ -33,2 +48,3 @@ private _manualInteractionTransformations: {

};
private _movementSmoothness: number = 0.5;
private _moving: boolean = false;

@@ -51,6 +67,15 @@ private _movingDuration: number = 0;

};
private _objectControlsCenter: vec3 = vec3.create();
private _panSpeed: number = 0.5;
private _position: vec3 = vec3.create();
private _rotationRestriction: { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number } = { minPolarAngle: 0, maxPolarAngle: 180, minAzimuthAngle: -Infinity, maxAzimuthAngle: Infinity };
private _rotationSpeed: number = 0.5;
private _sceneRotation: vec2 = vec2.create();
private _spherePositionRestriction: { center: vec3, radius: number } = { center: vec3.create(), radius: Infinity };
private _sphereTargetRestriction: { center: vec3, radius: number } = { center: vec3.create(), radius: Infinity };
private _target: vec3 = vec3.create();
private _turntableCenter: vec3 = vec3.create();
private _viewportId?: string;
private _zoomRestriction: { minDistance: number, maxDistance: number } = { minDistance: 0, maxDistance: Infinity };
private _zoomSpeed: number = 0.5;

@@ -60,3 +85,3 @@ protected _cameraControlsEventDistribution!: ICameraControlsEventDistribution;

// #endregion Properties (15)
// #endregion Properties (38)

@@ -67,4 +92,3 @@ // #region Constructors (1)

private _camera: ICamera,
private _enabled: boolean,
type: CAMERA_TYPE
private _enabled: boolean
) {

@@ -78,4 +102,12 @@ this._cameraInterpolationManager = new CameraInterpolationManager(this._camera, this);

// #region Public Accessors (13)
// #region Public Getters And Setters (59)
public get autoRotationSpeed(): number {
return this._autoRotationSpeed;
}
public set autoRotationSpeed(value: number) {
this._autoRotationSpeed = value;
}
public get camera(): ICamera {

@@ -101,2 +133,98 @@ return this._camera;

public get cubePositionRestriction(): { min: vec3, max: vec3 } {
return this._cubePositionRestriction;
}
public set cubePositionRestriction(value: { min: vec3, max: vec3 }) {
this._cubePositionRestriction = value;
}
public get cubeTargetRestriction(): { min: vec3, max: vec3 } {
return this._cubeTargetRestriction;
}
public set cubeTargetRestriction(value: { min: vec3, max: vec3 }) {
this._cubeTargetRestriction = value;
}
public get damping(): number {
return this._damping;
}
public set damping(value: number) {
this._damping = value;
}
public get enableAutoRotation(): boolean {
return this._enableAutoRotation;
}
public set enableAutoRotation(value: boolean) {
this._enableAutoRotation = value;
}
public get enableAzimuthRotation(): boolean {
return this._enableAzimuthRotation;
}
public set enableAzimuthRotation(value: boolean) {
this._enableAzimuthRotation = value;
}
public get enableKeyPan(): boolean {
return this._enableKeyPan;
}
public set enableKeyPan(value: boolean) {
this._enableKeyPan = value;
}
public get enableObjectControls(): boolean {
return this._enableObjectControls;
}
public set enableObjectControls(value: boolean) {
this._enableObjectControls = value;
}
public get enablePan(): boolean {
return this._enablePan;
}
public set enablePan(value: boolean) {
this._enablePan = value;
}
public get enablePolarRotation(): boolean {
return this._enablePolarRotation;
}
public set enablePolarRotation(value: boolean) {
this._enablePolarRotation = value;
}
public get enableRotation(): boolean {
return this._enableRotation;
}
public set enableRotation(value: boolean) {
this._enableRotation = value;
}
public get enableTurntableControls(): boolean {
return this._enableTurntableControls;
}
public set enableTurntableControls(value: boolean) {
this._enableTurntableControls = value;
}
public get enableZoom(): boolean {
return this._enableZoom;
}
public set enableZoom(value: boolean) {
this._enableZoom = value;
}
public get enabled(): boolean {

@@ -119,2 +247,42 @@ return this._enabled;

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 } } {
return this._input;
}
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 } }) {
this._input = value;
}
public get keyPanSpeed(): number {
return this._keyPanSpeed;
}
public set keyPanSpeed(value: number) {
this._keyPanSpeed = value;
}
public get movementSmoothness(): number {
return this._movementSmoothness;
}
public set movementSmoothness(value: number) {
this._movementSmoothness = value;
}
public get objectControlsCenter(): vec3 {
return this._objectControlsCenter;
}
public set objectControlsCenter(value: vec3) {
this._objectControlsCenter = value;
}
public get panSpeed(): number {
return this._panSpeed;
}
public set panSpeed(value: number) {
this._panSpeed = value;
}
public get position(): vec3 {

@@ -128,2 +296,18 @@ return this._position;

public get rotationRestriction(): { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number } {
return this._rotationRestriction;
}
public set rotationRestriction(value: { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number }) {
this._rotationRestriction = value;
}
public get rotationSpeed(): number {
return this._rotationSpeed;
}
public set rotationSpeed(value: number) {
this._rotationSpeed = value;
}
public get sceneRotation(): vec2 {

@@ -137,2 +321,18 @@ return this._sceneRotation;

public get spherePositionRestriction(): { center: vec3, radius: number } {
return this._spherePositionRestriction;
}
public set spherePositionRestriction(value: { center: vec3, radius: number }) {
this._spherePositionRestriction = value;
}
public get sphereTargetRestriction(): { center: vec3, radius: number } {
return this._sphereTargetRestriction;
}
public set sphereTargetRestriction(value: { center: vec3, radius: number }) {
this._sphereTargetRestriction = value;
}
public get target(): vec3 {

@@ -146,4 +346,28 @@ return this._target;

// #endregion Public Accessors (13)
public get turntableCenter(): vec3 {
return this._turntableCenter;
}
public set turntableCenter(value: vec3) {
this._turntableCenter = value;
}
public get zoomRestriction(): { minDistance: number, maxDistance: number } {
return this._zoomRestriction;
}
public set zoomRestriction(value: { minDistance: number, maxDistance: number }) {
this._zoomRestriction = value;
}
public get zoomSpeed(): number {
return this._zoomSpeed;
}
public set zoomSpeed(value: number) {
this._zoomSpeed = value;
}
// #endregion Public Getters And Setters (59)
// #region Public Methods (16)

@@ -193,2 +417,67 @@

public applySettings(settingsEngine: SettingsEngine) {
const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
if (!cameraSetting) return;
this.reset();
const controlsSettings = <ICameraControlsSettings>cameraSetting.controls;
this.autoRotationSpeed = controlsSettings.autoRotationSpeed;
this.damping = controlsSettings.damping;
this.enableAutoRotation = controlsSettings.enableAutoRotation;
this.enableKeyPan = controlsSettings.enableKeyPan;
this.enablePan = controlsSettings.enablePan;
this.enableRotation = controlsSettings.enableRotation;
this.enableZoom = controlsSettings.enableZoom;
// this.input = controlsSettings.input;
this.keyPanSpeed = controlsSettings.keyPanSpeed;
this.movementSmoothness = controlsSettings.movementSmoothness;
this.rotationSpeed = controlsSettings.rotationSpeed;
this.panSpeed = controlsSettings.panSpeed;
this.zoomSpeed = controlsSettings.zoomSpeed;
this.enableAzimuthRotation = controlsSettings.enableAzimuthRotation;
this.enablePolarRotation = controlsSettings.enablePolarRotation;
this.enableTurntableControls = controlsSettings.enableTurntableControls;
this.enableObjectControls = controlsSettings.enableObjectControls;
this.turntableCenter = this._converter.toVec3(controlsSettings.turntableCenter);
this.objectControlsCenter = this._converter.toVec3(controlsSettings.objectControlsCenter);
if (controlsSettings.restrictions.position.cube.min.x === null) controlsSettings.restrictions.position.cube.min.x = -Infinity;
if (controlsSettings.restrictions.position.cube.min.y === null) controlsSettings.restrictions.position.cube.min.y = -Infinity;
if (controlsSettings.restrictions.position.cube.min.z === null) controlsSettings.restrictions.position.cube.min.z = -Infinity;
if (controlsSettings.restrictions.position.cube.max.x === null) controlsSettings.restrictions.position.cube.max.x = Infinity;
if (controlsSettings.restrictions.position.cube.max.y === null) controlsSettings.restrictions.position.cube.max.y = Infinity;
if (controlsSettings.restrictions.position.cube.max.z === null) controlsSettings.restrictions.position.cube.max.z = Infinity;
if (controlsSettings.restrictions.position.sphere.radius === null) controlsSettings.restrictions.position.sphere.radius = Infinity;
if (controlsSettings.restrictions.target.cube.min.x === null) controlsSettings.restrictions.target.cube.min.x = -Infinity;
if (controlsSettings.restrictions.target.cube.min.y === null) controlsSettings.restrictions.target.cube.min.y = -Infinity;
if (controlsSettings.restrictions.target.cube.min.z === null) controlsSettings.restrictions.target.cube.min.z = -Infinity;
if (controlsSettings.restrictions.target.cube.max.x === null) controlsSettings.restrictions.target.cube.max.x = Infinity;
if (controlsSettings.restrictions.target.cube.max.y === null) controlsSettings.restrictions.target.cube.max.y = Infinity;
if (controlsSettings.restrictions.target.cube.max.z === null) controlsSettings.restrictions.target.cube.max.z = Infinity;
if (controlsSettings.restrictions.target.sphere.radius === null) controlsSettings.restrictions.target.sphere.radius = Infinity;
if (controlsSettings.restrictions.rotation.minAzimuthAngle === null) controlsSettings.restrictions.rotation.minAzimuthAngle = -Infinity;
if (controlsSettings.restrictions.rotation.maxAzimuthAngle === null) controlsSettings.restrictions.rotation.maxAzimuthAngle = Infinity;
if (controlsSettings.restrictions.zoom.maxDistance === null) controlsSettings.restrictions.zoom.maxDistance = Infinity;
this.cubePositionRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.position.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.position.cube.max)
};
this.spherePositionRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.position.sphere.center),
radius: controlsSettings.restrictions.position.sphere.radius
};
this.cubeTargetRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.target.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.target.cube.max)
};
this.sphereTargetRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.target.sphere.center),
radius: controlsSettings.restrictions.target.sphere.radius
};
this.rotationRestriction = controlsSettings.restrictions.rotation;
this.zoomRestriction = controlsSettings.restrictions.zoom;
}
public applyTargetMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void {

@@ -281,3 +570,3 @@ if (this._manualInteraction || manualInteraction) {

const { position, target, sceneRotation } = this._cameraLogic.restrict(this.getPosition(), this.getTarget(), this.getSceneRotation());
const { position , target, sceneRotation } = this._cameraLogic.restrict(this.getPosition(), this.getTarget(), this.getSceneRotation());
this._position = vec3.clone(position);

@@ -284,0 +573,0 @@ this._target = vec3.clone(target);

@@ -1,130 +0,36 @@

import { IOrthographicControlsSettingsV3 } from '@shapediver/viewer.settings';
import { SettingsEngine, StateEngine } from '@shapediver/viewer.shared.services';
import { CAMERA_TYPE, ICamera } from '../..';
import { IOrthographicCameraControls } from '../../interfaces/controls/IOrthographicCameraControls';
import { AbstractCameraControls } from './AbstractCameraControls';
import {
CameraControlsEventDistribution as OrthographicCameraControlsEventDistribution,
} from './orthographic/CameraControlsEventDistribution';
import { CameraControlsLogic as OrthographicCameraControlsLogic } from './orthographic/CameraControlsLogic';
import { ICamera } from '../..';
import { CameraControlsLogic } from './CameraControlsLogic';
import { CameraControlsEventDistribution, } from './CameraControlsEventDistribution';
export class OrthographicCameraControls extends AbstractCameraControls {
// #region Properties (2)
export class OrthographicCameraControls extends AbstractCameraControls implements IOrthographicCameraControls {
// #region Properties (9)
private _settingsAdjustments = {
autoRotationSpeed: 2 * Math.PI / 60 / 60,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 1.75,
rotationSpeed: Math.PI,
zoomSpeed: 0.025,
};
private _touchAdjustments = {
autoRotationSpeed: 1.0,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 4.0 / 1.75,
rotationSpeed: 1.5,
zoomSpeed: 100.0,
};
private _damping: number = 0.1;
private _enableKeyPan: boolean = false;
private _enablePan: boolean = true;
private _enableZoom: boolean = true;
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: 2 }, };
private _keyPanSpeed: number = 0.5;
private _movementSmoothness: number = 0.5;
private _panSpeed: number = 0.5;
private _zoomSpeed: number = 0.5;
// #endregion Properties (2)
private readonly _stateEngine: StateEngine = StateEngine.instance;
// #endregion Properties (9)
// #region Constructors (1)
constructor(camera: ICamera, enabled: boolean) {
super(camera, enabled, CAMERA_TYPE.ORTHOGRAPHIC);
this._cameraLogic = new OrthographicCameraControlsLogic(this);
this._cameraControlsEventDistribution = new OrthographicCameraControlsEventDistribution(this, <OrthographicCameraControlsLogic>this._cameraLogic);
super(camera, enabled);
this._cameraLogic = new CameraControlsLogic(this, this._settingsAdjustments, this._touchAdjustments);
this._cameraControlsEventDistribution = new CameraControlsEventDistribution(this, this._cameraLogic);
}
public applySettings(settingsEngine: SettingsEngine) {
const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
if(!cameraSetting) return;
this.reset();
const controlsSettings = <IOrthographicControlsSettingsV3>cameraSetting.controls;
this.damping = controlsSettings.damping;
this.enableKeyPan = controlsSettings.enableKeyPan;
this.enablePan = controlsSettings.enablePan;
this.enableZoom = controlsSettings.enableZoom;
// this.input = controlsSettings.input;
this.keyPanSpeed = controlsSettings.keyPanSpeed;
this.movementSmoothness = controlsSettings.movementSmoothness;
this.panSpeed = controlsSettings.panSpeed;
this.zoomSpeed = controlsSettings.zoomSpeed;
}
// #endregion Constructors (1)
// #region Public Accessors (18)
public get damping(): number {
return this._damping;
}
public set damping(value: number) {
this._damping = value;
}
public get enableKeyPan(): boolean {
return this._enableKeyPan;
}
public set enableKeyPan(value: boolean) {
this._enableKeyPan = value;
}
public get enablePan(): boolean {
return this._enablePan;
}
public set enablePan(value: boolean) {
this._enablePan = value;
}
public get enableZoom(): boolean {
return this._enableZoom;
}
public set enableZoom(value: boolean) {
this._enableZoom = value;
}
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 } } {
return this._input;
}
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 } }) {
this._input = value;
}
public get keyPanSpeed(): number {
return this._keyPanSpeed;
}
public set keyPanSpeed(value: number) {
this._keyPanSpeed = value;
}
public get movementSmoothness(): number {
return this._movementSmoothness;
}
public set movementSmoothness(value: number) {
this._movementSmoothness = value;
}
public get panSpeed(): number {
return this._panSpeed;
}
public set panSpeed(value: number) {
this._panSpeed = value;
}
public get zoomSpeed(): number {
return this._zoomSpeed;
}
public set zoomSpeed(value: number) {
this._zoomSpeed = value;
}
// #endregion Public Accessors (18)
}

@@ -1,303 +0,37 @@

import { IOrbitControlsSettingsV3 } from '@shapediver/viewer.settings';
import { SettingsEngine, StateEngine, Converter } from '@shapediver/viewer.shared.services';
import { vec3 } from 'gl-matrix';
import { CAMERA_TYPE, ICamera } from '../..';
import { IPerspectiveCameraControls } from '../../interfaces/controls/IPerspectiveCameraControls';
import { AbstractCameraControls } from './AbstractCameraControls';
import {
CameraControlsEventDistribution as OrbitCameraControlsEventDistribution,
} from './perspective/CameraControlsEventDistribution';
import { CameraControlsLogic as OrbitCameraControlsLogic } from './perspective/CameraControlsLogic';
import { CameraControlsLogic } from './CameraControlsLogic';
import { ICamera } from '../..';
import { CameraControlsEventDistribution, } from './CameraControlsEventDistribution';
export class PerspectiveCameraControls extends AbstractCameraControls implements IPerspectiveCameraControls {
// #region Properties (25)
export class PerspectiveCameraControls extends AbstractCameraControls {
// #region Properties (3)
private readonly _converter: Converter = Converter.instance;
private readonly _stateEngine: StateEngine = StateEngine.instance;
private _settingsAdjustments = {
autoRotationSpeed: 2 * Math.PI / 60 / 60,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 1.75,
rotationSpeed: Math.PI,
zoomSpeed: 0.025,
};
private _touchAdjustments = {
autoRotationSpeed: 1.0,
damping: 1.0,
movementSmoothness: 1.0,
panSpeed: 1.0 / 1.75,
rotationSpeed: 1.5,
zoomSpeed: 100.0,
};
private _autoRotationSpeed: number = 0;
private _cubePositionRestriction: { min: vec3, max: vec3 } = { min: vec3.fromValues(-Infinity, -Infinity, -Infinity), max: vec3.fromValues(Infinity, Infinity, Infinity) };
private _cubeTargetRestriction: { min: vec3, max: vec3 } = { min: vec3.fromValues(-Infinity, -Infinity, -Infinity), max: vec3.fromValues(Infinity, Infinity, Infinity) };
private _damping: number = 0.1;
private _enableAutoRotation: boolean = false;
private _enableAzimuthRotation: boolean = true;
private _enableKeyPan: boolean = false;
private _enablePan: boolean = true;
private _enablePolarRotation: boolean = true;
private _enableRotation: boolean = true;
private _enableTurntableControls: boolean = false;
private _enableZoom: boolean = true;
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: 2 }, };
private _keyPanSpeed: number = 0.5;
private _movementSmoothness: number = 0.5;
private _panSpeed: number = 0.5;
private _rotationRestriction: { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number } = { minPolarAngle: 0, maxPolarAngle: 180, minAzimuthAngle: -Infinity, maxAzimuthAngle: Infinity };
private _rotationSpeed: number = 0.5;
private _spherePositionRestriction: { center: vec3, radius: number } = { center: vec3.create(), radius: Infinity };
private _sphereTargetRestriction: { center: vec3, radius: number } = { center: vec3.create(), radius: Infinity };
private _turntableCenter: vec3 = vec3.create();
private _zoomRestriction: { minDistance: number, maxDistance: number } = { minDistance: 0, maxDistance: Infinity };
private _zoomSpeed: number = 0.5;
// #endregion Properties (3)
// #endregion Properties (25)
// #region Constructors (1)
constructor(camera: ICamera, enabled: boolean) {
super(camera, enabled, CAMERA_TYPE.PERSPECTIVE);
this._cameraLogic = new OrbitCameraControlsLogic(this);
this._cameraControlsEventDistribution = new OrbitCameraControlsEventDistribution(this, <OrbitCameraControlsLogic>this._cameraLogic);
super(camera, enabled);
this._cameraLogic = new CameraControlsLogic(this, this._settingsAdjustments, this._touchAdjustments);
this._cameraControlsEventDistribution = new CameraControlsEventDistribution(this, this._cameraLogic);
}
// #endregion Constructors (1)
// #region Public Accessors (46)
public get autoRotationSpeed(): number {
return this._autoRotationSpeed;
}
public set autoRotationSpeed(value: number) {
this._autoRotationSpeed = value;
}
public get cubePositionRestriction(): { min: vec3, max: vec3 } {
return this._cubePositionRestriction;
}
public set cubePositionRestriction(value: { min: vec3, max: vec3 }) {
this._cubePositionRestriction = value;
}
public get cubeTargetRestriction(): { min: vec3, max: vec3 } {
return this._cubeTargetRestriction;
}
public set cubeTargetRestriction(value: { min: vec3, max: vec3 }) {
this._cubeTargetRestriction = value;
}
public get damping(): number {
return this._damping;
}
public set damping(value: number) {
this._damping = value;
}
public get enableAutoRotation(): boolean {
return this._enableAutoRotation;
}
public set enableAutoRotation(value: boolean) {
this._enableAutoRotation = value;
}
public get enableAzimuthRotation(): boolean {
return this._enableAzimuthRotation;
}
public set enableAzimuthRotation(value: boolean) {
this._enableAzimuthRotation = value;
}
public get enableKeyPan(): boolean {
return this._enableKeyPan;
}
public set enableKeyPan(value: boolean) {
this._enableKeyPan = value;
}
public get enablePan(): boolean {
return this._enablePan;
}
public set enablePan(value: boolean) {
this._enablePan = value;
}
public get enablePolarRotation(): boolean {
return this._enablePolarRotation;
}
public set enablePolarRotation(value: boolean) {
this._enablePolarRotation = value;
}
public get enableRotation(): boolean {
return this._enableRotation;
}
public set enableRotation(value: boolean) {
this._enableRotation = value;
}
public get enableTurntableControls(): boolean {
return this._enableTurntableControls;
}
public set enableTurntableControls(value: boolean) {
this._enableTurntableControls = value;
}
public get enableZoom(): boolean {
return this._enableZoom;
}
public set enableZoom(value: boolean) {
this._enableZoom = value;
}
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 } } {
return this._input;
}
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 } }) {
this._input = value;
}
public get keyPanSpeed(): number {
return this._keyPanSpeed;
}
public set keyPanSpeed(value: number) {
this._keyPanSpeed = value;
}
public get movementSmoothness(): number {
return this._movementSmoothness;
}
public set movementSmoothness(value: number) {
this._movementSmoothness = value;
}
public get panSpeed(): number {
return this._panSpeed;
}
public set panSpeed(value: number) {
this._panSpeed = value;
}
public get rotationRestriction(): { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number } {
return this._rotationRestriction;
}
public set rotationRestriction(value: { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number }) {
this._rotationRestriction = value;
}
public get rotationSpeed(): number {
return this._rotationSpeed;
}
public set rotationSpeed(value: number) {
this._rotationSpeed = value;
}
public get spherePositionRestriction(): { center: vec3, radius: number } {
return this._spherePositionRestriction;
}
public set spherePositionRestriction(value: { center: vec3, radius: number }) {
this._spherePositionRestriction = value;
}
public get sphereTargetRestriction(): { center: vec3, radius: number } {
return this._sphereTargetRestriction;
}
public set sphereTargetRestriction(value: { center: vec3, radius: number }) {
this._sphereTargetRestriction = value;
}
public get turntableCenter(): vec3 {
return this._turntableCenter;
}
public set turntableCenter(value: vec3) {
this._turntableCenter = value;
}
public get zoomRestriction(): { minDistance: number, maxDistance: number } {
return this._zoomRestriction;
}
public set zoomRestriction(value: { minDistance: number, maxDistance: number }) {
this._zoomRestriction = value;
}
public get zoomSpeed(): number {
return this._zoomSpeed;
}
public set zoomSpeed(value: number) {
this._zoomSpeed = value;
}
// #endregion Public Accessors (46)
// #region Public Methods (1)
public applySettings(settingsEngine: SettingsEngine) {
const cameraSetting = settingsEngine.camera.cameras[this.camera.id];
if (!cameraSetting) return;
this.reset();
const controlsSettings = <IOrbitControlsSettingsV3>cameraSetting.controls;
this.autoRotationSpeed = controlsSettings.autoRotationSpeed;
this.damping = controlsSettings.damping;
this.enableAutoRotation = controlsSettings.enableAutoRotation;
this.enableKeyPan = controlsSettings.enableKeyPan;
this.enablePan = controlsSettings.enablePan;
this.enableRotation = controlsSettings.enableRotation;
this.enableZoom = controlsSettings.enableZoom;
// this.input = controlsSettings.input;
this.keyPanSpeed = controlsSettings.keyPanSpeed;
this.movementSmoothness = controlsSettings.movementSmoothness;
this.rotationSpeed = controlsSettings.rotationSpeed;
this.panSpeed = controlsSettings.panSpeed;
this.zoomSpeed = controlsSettings.zoomSpeed;
if (controlsSettings.restrictions.position.cube.min.x === null) controlsSettings.restrictions.position.cube.min.x = -Infinity;
if (controlsSettings.restrictions.position.cube.min.y === null) controlsSettings.restrictions.position.cube.min.y = -Infinity;
if (controlsSettings.restrictions.position.cube.min.z === null) controlsSettings.restrictions.position.cube.min.z = -Infinity;
if (controlsSettings.restrictions.position.cube.max.x === null) controlsSettings.restrictions.position.cube.max.x = Infinity;
if (controlsSettings.restrictions.position.cube.max.y === null) controlsSettings.restrictions.position.cube.max.y = Infinity;
if (controlsSettings.restrictions.position.cube.max.z === null) controlsSettings.restrictions.position.cube.max.z = Infinity;
if (controlsSettings.restrictions.position.sphere.radius === null) controlsSettings.restrictions.position.sphere.radius = Infinity;
if (controlsSettings.restrictions.target.cube.min.x === null) controlsSettings.restrictions.target.cube.min.x = -Infinity;
if (controlsSettings.restrictions.target.cube.min.y === null) controlsSettings.restrictions.target.cube.min.y = -Infinity;
if (controlsSettings.restrictions.target.cube.min.z === null) controlsSettings.restrictions.target.cube.min.z = -Infinity;
if (controlsSettings.restrictions.target.cube.max.x === null) controlsSettings.restrictions.target.cube.max.x = Infinity;
if (controlsSettings.restrictions.target.cube.max.y === null) controlsSettings.restrictions.target.cube.max.y = Infinity;
if (controlsSettings.restrictions.target.cube.max.z === null) controlsSettings.restrictions.target.cube.max.z = Infinity;
if (controlsSettings.restrictions.target.sphere.radius === null) controlsSettings.restrictions.target.sphere.radius = Infinity;
if (controlsSettings.restrictions.rotation.minAzimuthAngle === null) controlsSettings.restrictions.rotation.minAzimuthAngle = -Infinity;
if (controlsSettings.restrictions.rotation.maxAzimuthAngle === null) controlsSettings.restrictions.rotation.maxAzimuthAngle = Infinity;
if (controlsSettings.restrictions.zoom.maxDistance === null) controlsSettings.restrictions.zoom.maxDistance = Infinity;
this.cubePositionRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.position.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.position.cube.max)
};
this.spherePositionRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.position.sphere.center),
radius: controlsSettings.restrictions.position.sphere.radius
};
this.cubeTargetRestriction = {
min: this._converter.toVec3(controlsSettings.restrictions.target.cube.min),
max: this._converter.toVec3(controlsSettings.restrictions.target.cube.max)
};
this.sphereTargetRestriction = {
center: this._converter.toVec3(controlsSettings.restrictions.target.sphere.center),
radius: controlsSettings.restrictions.target.sphere.radius
};
this.rotationRestriction = controlsSettings.restrictions.rotation;
this.zoomRestriction = controlsSettings.restrictions.zoom;
}
// #endregion Public Methods (1)
}

@@ -1,24 +0,22 @@

import * as TWEEN from '@tweenjs/tween.js'
import { vec3 } from 'gl-matrix'
import * as TWEEN from '@tweenjs/tween.js';
import { CameraCylindricalInterpolation } from './interpolationMethods/CameraCylindricalInterpolation';
import { CameraLinearInterpolation } from './interpolationMethods/CameraLinearInterpolation';
import { CameraMultipleInterpolation } from './interpolationMethods/CameraMultipleInterpolation';
import { CameraSphericalInterpolation } from './interpolationMethods/CameraSphericalInterpolation';
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera';
import { ICameraControls } from '../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
import { CameraMultipleInterpolation } from './interpolationMethods/CameraMultipleInterpolation'
import { CameraSphericalInterpolation } from './interpolationMethods/CameraSphericalInterpolation'
import { ICameraControlsUsage } from '../../interfaces/controls/ICameraControlsUsage'
import { ICamera, ICameraOptions } from '../../interfaces/camera/ICamera'
import { CameraLinearInterpolation } from './interpolationMethods/CameraLinearInterpolation'
import { CameraCylindricalInterpolation } from './interpolationMethods/CameraCylindricalInterpolation'
import { ICameraInterpolation } from '../../interfaces/interpolation/ICameraInterpolation'
export class CameraInterpolationManager {
// #region Properties (3)
// #region Properties (2)
private TweenWrapper = class {
private _properties: { delta: 0 } = { delta: 0 };
private _tween!: TWEEN.Tween<{ delta: number }>;
private _resolve!: Function;
private _tween!: TWEEN.Tween<{ delta: number }>;
private _resolve!: (value: boolean | PromiseLike<boolean>) => void;
constructor(options: {duration: number, easing: (amount: number) => number, coordinates: string, interpolation: Function }, cb: ICameraInterpolation, onComplete: Function) {
constructor(options: { duration: number, easing: (amount: number) => number, coordinates: string, interpolation: (v: number[], k: number) => number }, cb: ICameraInterpolation, onComplete: () => void) {
this._tween = new TWEEN.Tween(this._properties);
this._tween.easing(options.easing);
this._tween.easing(options.easing);
this._tween.to({ delta: 1.0 }, options.duration);

@@ -29,9 +27,9 @@

});
this._tween.onStop((v) => {
if(cb.onStop) cb.onStop(v);
if (cb.onStop) cb.onStop(v);
this._resolve(true);
});
this._tween.onComplete((v) => {
if(cb.onComplete) cb.onComplete(v);
if (cb.onComplete) cb.onComplete(v);
onComplete();

@@ -55,3 +53,3 @@ this._resolve(true);

// #endregion Properties (3)
// #endregion Properties (2)

@@ -62,4 +60,4 @@ // #region Constructors (1)

private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControlsUsage
) {
private readonly _cameraControls: ICameraControls
) {
}

@@ -74,10 +72,9 @@

}
/**
* cameraTween
*/
public interpolate(path: { position: vec3, target: vec3 }[], options: ICameraOptions = {}) : Promise<boolean>
{
public interpolate(path: { position: vec3, target: vec3 }[], options: ICameraOptions = {}): Promise<boolean> {
const newPath: { position: vec3, target: vec3 }[] = [];
for(let i = 0; i < path.length; i++)
for (let i = 0; i < path.length; i++)
newPath.push({

@@ -87,15 +84,14 @@ position: path[i].position,

});
if(this._tween) {
if (this._tween) {
this._tween.stop();
this._tween = null;
}
let parsedOptions = this.optionsParser(options);
const parsedOptions = this.optionsParser(options);
this._tween = new this.TweenWrapper(
parsedOptions,
newPath.length === 2 ?
parsedOptions,
newPath.length === 2 ?
this.getCameraInterpolation(newPath[0], newPath[1], parsedOptions.coordinates) :
new CameraMultipleInterpolation(this._camera, this._cameraControls, newPath, parsedOptions.interpolation),
new CameraMultipleInterpolation(this._camera, this._cameraControls, newPath, parsedOptions.interpolation),
() => { this._tween = null; }

@@ -107,3 +103,3 @@ );

public stop(): void {
if(this._tween) this._tween.stop();
if (this._tween) this._tween.stop();
this._tween = null;

@@ -117,3 +113,3 @@ }

private getCameraInterpolation(from: { position: vec3, target: vec3 }, to: { position: vec3, target: vec3 }, type: string) {
switch(type) {
switch (type) {
case 'linear':

@@ -130,13 +126,12 @@ return new CameraLinearInterpolation(this._camera, this._cameraControls, from, to);

private optionsParser(options: ICameraOptions): {duration: number, easing: (amount: number) => number, coordinates: string, interpolation: (v: number[], k: number) => number }
{
private optionsParser(options: ICameraOptions): { duration: number, easing: (amount: number) => number, coordinates: string, interpolation: (v: number[], k: number) => number } {
let easing = TWEEN.Easing.Quartic.InOut;
if(typeof options.easing === 'string') {
if (typeof options.easing === 'string') {
const keys = options.easing.split('.');
const easingFamily = TWEEN.Easing[<keyof typeof TWEEN.Easing>keys[0]];
if(easingFamily) {
if (easingFamily) {
const easingFunction = easingFamily[<keyof typeof easingFamily>keys[1]];
if(easingFunction) easing = easingFunction;
if (easingFunction) easing = easingFunction;
}
} else if(typeof options.easing === 'function') {
} else if (typeof options.easing === 'function') {
easing = <(amount: number) => number>options.easing;

@@ -146,6 +141,6 @@ }

let interpolation = TWEEN.Interpolation.CatmullRom;
if(typeof options.interpolation === 'string') {
if (typeof options.interpolation === 'string') {
const interpolationFunction = TWEEN.Interpolation[<keyof typeof TWEEN.Interpolation>options.interpolation];
if(interpolationFunction && interpolationFunction !== TWEEN.Interpolation.Utils) interpolation = <(v: number[], k: number) => number>interpolationFunction;
} else if(typeof options.interpolation === 'function') {
if (interpolationFunction && interpolationFunction !== TWEEN.Interpolation.Utils) interpolation = <(v: number[], k: number) => number>interpolationFunction;
} else if (typeof options.interpolation === 'function') {
interpolation = <(v: number[], k: number) => number>options.interpolation;

@@ -157,3 +152,3 @@ }

easing,
coordinates: options.coordinates !== 'spherical' && options.coordinates !== 'linear' && options.coordinates !== 'cylindrical' ? 'cylindrical' : options.coordinates,
coordinates: options.coordinates !== 'spherical' && options.coordinates !== 'linear' && options.coordinates !== 'cylindrical' ? 'cylindrical' : options.coordinates,
interpolation

@@ -160,0 +155,0 @@ };

@@ -1,7 +0,6 @@

import { mat4, quat, vec3 } from 'gl-matrix'
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { quat, vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera'
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage'
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation'
export class CameraCylindricalInterpolation implements ICameraInterpolation {

@@ -27,6 +26,5 @@ // #region Properties (10)

private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControlsUsage,
private readonly _cameraControls: ICameraControls,
private readonly _from: { position: vec3, target: vec3 },
private readonly _to: { position: vec3, target: vec3 })
{
private readonly _to: { position: vec3, target: vec3 }) {
this._h_from = this._from.position[2] - this._from.target[2];

@@ -43,11 +41,11 @@ this._from_position_heightAdjusted = vec3.fromValues(this._from.position[0], this._from.position[1], this._from.target[2]);

if (this._dir_from[0] === 0 && this._dir_from[1] === 0 && this._dir_from[2] === 0)
this._dir_from = vec3.fromValues(1,0,0);
this._dir_from = vec3.fromValues(1, 0, 0);
if (this._dir_to[0] === 0 && this._dir_to[1] === 0 && this._dir_to[2] === 0)
this._dir_to = vec3.fromValues(1,0,0);
this._dir_to = vec3.fromValues(1, 0, 0);
this._lorr = vec3.cross(vec3.create(), this._dir_to, this._dir_from);
// This is why people hate JavaScript. The dot product of two normalized vector is larger than 1 on occasion due to precision errors...
let dot1 = Math.min(1, Math.max(-1, vec3.dot(this._dir_to, this._dir_from)));
let dot2 = Math.min(1, Math.max(-1, vec3.dot(this._lorr, vec3.fromValues(0, 0, 1))));
const dot1 = Math.min(1, Math.max(-1, vec3.dot(this._dir_to, this._dir_from)));
const dot2 = Math.min(1, Math.max(-1, vec3.dot(this._lorr, vec3.fromValues(0, 0, 1))));
this._shortest_angle = dot2 > 0 ? -Math.acos(dot1) : Math.acos(dot1);

@@ -61,5 +59,5 @@ }

public onComplete(value: { delta: number }): void {
let positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -72,15 +70,14 @@ }

public onUpdate(value: { delta: number }): void {
let t = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);
let angle = this._shortest_angle * value.delta;
let dir = vec3.transformQuat(vec3.create(), this._dir_from, quat.setAxisAngle(quat.create(), vec3.fromValues(0, 0, 1), angle));
const angle = this._shortest_angle * value.delta;
const dir = vec3.transformQuat(vec3.create(), this._dir_from, quat.setAxisAngle(quat.create(), vec3.fromValues(0, 0, 1), angle));
let scalar = this._r_from * (1 - value.delta) + this._r_to * value.delta;
let p = vec3.add(vec3.create(), t, vec3.multiply(vec3.create(), dir, vec3.fromValues(scalar, scalar, scalar)));
const scalar = this._r_from * (1 - value.delta) + this._r_to * value.delta;
const p = vec3.add(vec3.create(), t, vec3.multiply(vec3.create(), dir, vec3.fromValues(scalar, scalar, scalar)));
vec3.add(p, p, vec3.fromValues(0, 0, (this._h_from * (1 - value.delta) + this._h_to * value.delta)));
let positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);

@@ -87,0 +84,0 @@ }

@@ -1,7 +0,6 @@

import { mat4, vec3 } from 'gl-matrix'
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera'
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage'
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation'
export class CameraLinearInterpolation implements ICameraInterpolation {

@@ -11,8 +10,8 @@ // #region Constructors (1)

constructor(
private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControlsUsage,
private readonly _from: { position: vec3, target: vec3 },
private readonly _to: { position: vec3, target: vec3 })
{
private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControls,
private readonly _from: { position: vec3, target: vec3 },
private readonly _to: { position: vec3, target: vec3 }) {
}
// #endregion Constructors (1)

@@ -23,5 +22,5 @@

public onComplete(value: { delta: number }): void {
let positionOffset = vec3.subtract(vec3.create(), this._to.position, this._cameraControls.getPositionWithUpdates());
const positionOffset = vec3.subtract(vec3.create(), this._to.position, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = vec3.subtract(vec3.create(), this._to.target, this._cameraControls.getTargetWithUpdates());
const targetOffset = vec3.subtract(vec3.create(), this._to.target, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -34,8 +33,8 @@ }

public onUpdate(value: { delta: number }): void {
let p = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.position, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.position, vec3.fromValues(value.delta, value.delta, value.delta)));
let positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const p = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.position, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.position, vec3.fromValues(value.delta, value.delta, value.delta)));
const positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let t = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -42,0 +41,0 @@ }

@@ -1,7 +0,6 @@

import { mat4, vec3 } from 'gl-matrix'
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera'
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage'
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation'
export class CameraMultipleInterpolation implements ICameraInterpolation {

@@ -14,5 +13,5 @@ // #region Properties (1)

} = {
position: { x: [], y: [], z: [] },
target: { x: [], y: [], z: [] }
};
position: { x: [], y: [], z: [] },
target: { x: [], y: [], z: [] }
};

@@ -24,8 +23,7 @@ // #endregion Properties (1)

constructor(
private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControlsUsage,
private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControls,
private readonly _path: { position: vec3, target: vec3 }[],
private readonly _interpolationFunction: Function)
{
for(let i = 0; i < this._path.length; i++) {
private readonly _interpolationFunction: (v: number[], k: number) => number) {
for (let i = 0; i < this._path.length; i++) {
this.end.position.x.push(this._path[i].position[0]);

@@ -45,5 +43,5 @@ this.end.position.y.push(this._path[i].position[1]);

public onComplete(value: { delta: number }): void {
let positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._path[this._path.length-1].position[0], this._path[this._path.length-1].position[1], this._path[this._path.length-1].position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._path[this._path.length - 1].position[0], this._path[this._path.length - 1].position[1], this._path[this._path.length - 1].position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._path[this._path.length-1].target[0], this._path[this._path.length-1].target[1], this._path[this._path.length-1].target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._path[this._path.length - 1].target[0], this._path[this._path.length - 1].target[1], this._path[this._path.length - 1].target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -56,8 +54,8 @@ }

public onUpdate(value: { delta: number }): void {
let p: vec3 = vec3.fromValues(this._interpolationFunction(this.end.position.x, value.delta), this._interpolationFunction(this.end.position.y, value.delta), this._interpolationFunction(this.end.position.z, value.delta));
let positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const p: vec3 = vec3.fromValues(this._interpolationFunction(this.end.position.x, value.delta), this._interpolationFunction(this.end.position.y, value.delta), this._interpolationFunction(this.end.position.z, value.delta));
const positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let t: vec3 = vec3.fromValues(this._interpolationFunction(this.end.target.x, value.delta), this._interpolationFunction(this.end.target.y, value.delta), this._interpolationFunction(this.end.target.z, value.delta));
let targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t: vec3 = vec3.fromValues(this._interpolationFunction(this.end.target.x, value.delta), this._interpolationFunction(this.end.target.y, value.delta), this._interpolationFunction(this.end.target.z, value.delta));
const targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -64,0 +62,0 @@ }

@@ -1,7 +0,6 @@

import { mat4, vec3 } from 'gl-matrix'
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera'
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage'
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation'
export class CameraOrthographicInterpolation implements ICameraInterpolation {

@@ -12,6 +11,5 @@ // #region Constructors (1)

private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControlsUsage,
private readonly _cameraControls: ICameraControls,
private readonly _from: { position: vec3, target: vec3 },
private readonly _to: { position: vec3, target: vec3 })
{
private readonly _to: { position: vec3, target: vec3 }) {
}

@@ -24,5 +22,5 @@

public onComplete(value: { delta: number }): void {
let positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -35,8 +33,8 @@ }

public onUpdate(value: { delta: number }): void {
let t: vec3 = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t: vec3 = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);
let p: vec3 = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.position, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.position, vec3.fromValues(value.delta, value.delta, value.delta)));
let positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const p: vec3 = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.position, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.position, vec3.fromValues(value.delta, value.delta, value.delta)));
const positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);

@@ -43,0 +41,0 @@ }

@@ -1,7 +0,6 @@

import { mat4, quat, vec3 } from 'gl-matrix'
import { ICamera } from '../../../interfaces/camera/ICamera';
import { ICameraControls } from '../../../interfaces/controls/ICameraControls';
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation';
import { quat, vec3 } from 'gl-matrix';
import { ICamera } from '../../../interfaces/camera/ICamera'
import { ICameraControlsUsage } from '../../../interfaces/controls/ICameraControlsUsage'
import { ICameraInterpolation } from '../../../interfaces/interpolation/ICameraInterpolation'
export class CameraSphericalInterpolation implements ICameraInterpolation {

@@ -23,9 +22,8 @@ // #region Properties (6)

private readonly _camera: ICamera,
private readonly _cameraControls: ICameraControlsUsage,
private readonly _cameraControls: ICameraControls,
private readonly _from: { position: vec3, target: vec3 },
private readonly _to: { position: vec3, target: vec3 })
{
private readonly _to: { position: vec3, target: vec3 }) {
this._radius_from = vec3.distance(this._from.position, this._from.target);
this._direction_from = vec3.normalize(vec3.create(), vec3.subtract(vec3.create(), this._from.position, this._from.target));
this._radius_to = vec3.distance(this._to.position, this._to.target);

@@ -39,10 +37,10 @@ this._direction_to = vec3.normalize(vec3.create(), vec3.subtract(vec3.create(), this._to.position, this._to.target));

// #endregion Constructors (1)
// #region Public Methods (3)
public onComplete(value: { delta: number }): void {
let positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
const positionOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.position[0], this._to.position[1], this._to.position[2]), this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);
let targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
const targetOffset = vec3.subtract(vec3.create(), vec3.fromValues(this._to.target[0], this._to.target[1], this._to.target[2]), this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);

@@ -55,12 +53,12 @@ }

public onUpdate(value: { delta: number }): void {
let t: vec3 = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
let targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
const t: vec3 = vec3.add(vec3.create(), vec3.multiply(vec3.create(), this._from.target, vec3.fromValues(1 - value.delta, 1 - value.delta, 1 - value.delta)), vec3.multiply(vec3.create(), this._to.target, vec3.fromValues(value.delta, value.delta, value.delta)));
const targetOffset = vec3.subtract(vec3.create(), t, this._cameraControls.getTargetWithUpdates());
this._cameraControls.applyTargetVector(targetOffset);
let angle = this._c_angle * value.delta;
let dir = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), this._direction_from, quat.setAxisAngle(quat.create(), this._axis, angle)));
const angle = this._c_angle * value.delta;
const dir = vec3.normalize(vec3.create(), vec3.transformQuat(vec3.create(), this._direction_from, quat.setAxisAngle(quat.create(), this._axis, angle)));
let scalar = (this._radius_from * (1 - value.delta) + this._radius_to * value.delta);
let p: vec3 = vec3.add(vec3.create(), t, vec3.multiply(vec3.create(), dir, vec3.fromValues(scalar, scalar, scalar)));
let positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
const scalar = (this._radius_from * (1 - value.delta) + this._radius_to * value.delta);
const p: vec3 = vec3.add(vec3.create(), t, vec3.multiply(vec3.create(), dir, vec3.fromValues(scalar, scalar, scalar)));
const positionOffset = vec3.subtract(vec3.create(), p, this._cameraControls.getPositionWithUpdates());
this._cameraControls.applyPositionVector(positionOffset);

@@ -67,0 +65,0 @@ }

@@ -1,31 +0,28 @@

import { ICameraControls } from './interfaces/controls/ICameraControls'
import { AbstractCamera } from './implementation/camera/AbstractCamera'
import { CameraEngine } from './implementation/CameraEngine'
import { ICamera, ICameraOptions } from './interfaces/camera/ICamera'
import { CAMERA_TYPE, ICameraEngine } from './interfaces/ICameraEngine'
import { OrthographicCamera } from './implementation/camera/OrthographicCamera'
import { PerspectiveCamera } from './implementation/camera/PerspectiveCamera'
import { OrthographicCameraControls } from './implementation/controls/OrthographicCameraControls'
import { PerspectiveCameraControls } from './implementation/controls/PerspectiveCameraControls'
import { IPerspectiveCameraControls } from './interfaces/controls/IPerspectiveCameraControls'
import { IOrthographicCameraControls } from './interfaces/controls/IOrthographicCameraControls'
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from './interfaces/camera/IOrthographicCamera'
import { IPerspectiveCamera } from './interfaces/camera/IPerspectiveCamera'
import { AbstractCamera } from './implementation/camera/AbstractCamera';
import { CAMERA_TYPE, ICameraEngine } from './interfaces/ICameraEngine';
import { CameraEngine } from './implementation/CameraEngine';
import { ICamera, ICameraOptions } from './interfaces/camera/ICamera';
import { ICameraControls } from './interfaces/controls/ICameraControls';
import { IOrthographicCamera, ORTHOGRAPHIC_CAMERA_DIRECTION } from './interfaces/camera/IOrthographicCamera';
import { IPerspectiveCamera } from './interfaces/camera/IPerspectiveCamera';
import { OrthographicCamera } from './implementation/camera/OrthographicCamera';
import { OrthographicCameraControls } from './implementation/controls/OrthographicCameraControls';
import { PerspectiveCamera } from './implementation/camera/PerspectiveCamera';
import { PerspectiveCameraControls } from './implementation/controls/PerspectiveCameraControls';
export {
ICameraEngine, ICamera, ICameraControls
}
};
export {
CameraEngine, AbstractCamera, CAMERA_TYPE, ORTHOGRAPHIC_CAMERA_DIRECTION, ICameraOptions
}
};
export {
export {
PerspectiveCamera, OrthographicCamera,
IPerspectiveCamera, IOrthographicCamera
}
};
export {
PerspectiveCameraControls, OrthographicCameraControls,
IPerspectiveCameraControls, IOrthographicCameraControls
}
export {
PerspectiveCameraControls, OrthographicCameraControls
};

@@ -1,46 +0,12 @@

/* eslint-disable @typescript-eslint/ban-types */
import { vec2, vec3 } from 'gl-matrix';
import { ITreeNode, ITreeNodeData } from '@shapediver/viewer.shared.node-tree';
import { ICameraControls } from '../controls/ICameraControls';
import { CAMERA_TYPE } from '../ICameraEngine';
import { IBox } from '@shapediver/viewer.shared.math';
import { ICameraControls } from '../controls/ICameraControls';
import { ITreeNode, ITreeNodeData } from '@shapediver/viewer.shared.node-tree';
import { SettingsEngine } from '@shapediver/viewer.shared.services';
import { vec2, vec3 } from 'gl-matrix';
export interface ICameraOptions {
// #region Properties (4)
// #region Interfaces (2)
/**
* The coordinate type of the camera interpolation. (default: 'cylindrical')
*/
coordinates?: 'spherical' | 'linear' | 'cylindrical';
/**
* The duration of the camera movement. (default: cameraMovementDuration set in the settings)
* When set to 0, the camera is immediately updated to the specified position and target.
*/
duration?: number;
/**
* The easing type of the camera interpolation. (default: 'Quadratic.InOut')
*/
easing?: 'Linear.None' |
'Quadratic.In' | 'Quadratic.Out' | 'Quadratic.InOut' |
'Cubic.In' | 'Cubic.Out' | 'Cubic.InOut' |
'Quartic.In' | 'Quartic.Out' | 'Quartic.InOut' |
'Quintic.In' | 'Quintic.Out' | 'Quintic.InOut' |
'Sinusoidal.In' | 'Sinusoidal.Out' | 'Sinusoidal.InOut' |
'Exponential.In' | 'Exponential.Out' | 'Exponential.InOut' |
'Circular.In' | 'Circular.Out' | 'Circular.InOut' |
'Elastic.In' | 'Elastic.Out' | 'Elastic.InOut' |
'Back.In' | 'Back.Out' | 'Back.InOut' |
'Bounce.In' | 'Bounce.Out' | 'Bounce.InOut' | Function;
/**
* The interpolation type of the camera interpolation. (default: 'CatmullRom')
*/
interpolation?: 'Linear' | 'Bezier' | 'CatmullRom' | Function
// #endregion Properties (4)
}
export interface ICamera extends ITreeNodeData {
// #region Properties (20)
// #region Properties (21)

@@ -57,2 +23,3 @@ readonly controls: ICameraControls;

defaultTarget: vec3;
domEventListenerToken?: string;
enableCameraControls: boolean;

@@ -70,3 +37,3 @@ name?: string;

// #endregion Properties (20)
// #endregion Properties (21)

@@ -85,2 +52,39 @@ // #region Public Methods (8)

// #endregion Public Methods (8)
}
}
/* eslint-disable @typescript-eslint/ban-types */
export interface ICameraOptions {
// #region Properties (4)
/**
* The coordinate type of the camera interpolation. (default: 'cylindrical')
*/
coordinates?: 'spherical' | 'linear' | 'cylindrical';
/**
* The duration of the camera movement. (default: cameraMovementDuration set in the settings)
* When set to 0, the camera is immediately updated to the specified position and target.
*/
duration?: number;
/**
* The easing type of the camera interpolation. (default: 'Quadratic.InOut')
*/
easing?: 'Linear.None' |
'Quadratic.In' | 'Quadratic.Out' | 'Quadratic.InOut' |
'Cubic.In' | 'Cubic.Out' | 'Cubic.InOut' |
'Quartic.In' | 'Quartic.Out' | 'Quartic.InOut' |
'Quintic.In' | 'Quintic.Out' | 'Quintic.InOut' |
'Sinusoidal.In' | 'Sinusoidal.Out' | 'Sinusoidal.InOut' |
'Exponential.In' | 'Exponential.Out' | 'Exponential.InOut' |
'Circular.In' | 'Circular.Out' | 'Circular.InOut' |
'Elastic.In' | 'Elastic.Out' | 'Elastic.InOut' |
'Back.In' | 'Back.Out' | 'Back.InOut' |
'Bounce.In' | 'Bounce.Out' | 'Bounce.InOut' | Function;
/**
* The interpolation type of the camera interpolation. (default: 'CatmullRom')
*/
interpolation?: 'Linear' | 'Bezier' | 'CatmullRom' | Function
// #endregion Properties (4)
}
// #endregion Interfaces (2)

@@ -1,4 +0,26 @@

import { IOrthographicCameraControls } from '../controls/IOrthographicCameraControls';
import { ICamera } from './ICamera'
import { ICamera } from './ICamera';
import { ICameraControls } from '../controls/ICameraControls';
// #region Interfaces (1)
export interface IOrthographicCamera extends ICamera {
// #region Properties (2)
readonly controls: ICameraControls;
direction: ORTHOGRAPHIC_CAMERA_DIRECTION;
// #endregion Properties (2)
// #region Public Methods (1)
clone(): IOrthographicCamera;
// #endregion Public Methods (1)
}
// #endregion Interfaces (1)
// #region Enums (1)
export enum ORTHOGRAPHIC_CAMERA_DIRECTION {

@@ -11,9 +33,5 @@ TOP = 'top',

BACK = 'back',
}
export interface IOrthographicCamera extends ICamera {
readonly controls: IOrthographicCameraControls;
direction: ORTHOGRAPHIC_CAMERA_DIRECTION;
CUSTOM = 'custom'
}
clone(): IOrthographicCamera;
}
// #endregion Enums (1)

@@ -1,10 +0,18 @@

import { IPerspectiveCameraControls } from '../controls/IPerspectiveCameraControls';
import { ICamera } from './ICamera'
import { ICamera } from './ICamera';
import { ICameraControls } from '../controls/ICameraControls';
export interface IPerspectiveCamera extends ICamera {
readonly controls: IPerspectiveCameraControls;
export interface IPerspectiveCamera extends ICamera {
// #region Properties (2)
readonly controls: ICameraControls;
fov: number;
// #endregion Properties (2)
// #region Public Methods (1)
clone(): IPerspectiveCamera;
// #endregion Public Methods (1)
}

@@ -1,19 +0,59 @@

import { mat4, vec2, vec3 } from 'gl-matrix';
import { ICamera, ICameraOptions } from '../camera/ICamera';
import { ICameraControlsEventDistribution } from './ICameraControlsEventDistribution';
import { mat4, vec2, vec3 } from 'gl-matrix';
// #region Type aliases (1)
export type Adjustments = {
autoRotationSpeed: number
damping: number
movementSmoothness: number
panSpeed: number
rotationSpeed: number
zoomSpeed: number
}
// #endregion Type aliases (1)
// #region Interfaces (1)
export interface ICameraControls {
// #region Properties (6)
// #region Properties (29)
readonly cameraControlsEventDistribution: ICameraControlsEventDistribution;
readonly canvas?: HTMLCanvasElement;
autoRotationSpeed: number;
camera: ICamera;
canvas?: HTMLCanvasElement;
cubePositionRestriction: { min: vec3, max: vec3 };
cubeTargetRestriction: { min: vec3, max: vec3 };
damping: number;
enableAutoRotation: boolean;
enableAzimuthRotation: boolean;
enableKeyPan: boolean;
enablePan: boolean;
enablePolarRotation: boolean;
enableRotation: boolean;
enableTurntableControls: boolean;
enableObjectControls: boolean;
enableZoom: boolean;
enabled: boolean;
input: { keys: { up: number, down: number, left: number, right: number }, mouse: { rotate: number, zoom: number, pan: number }, touch: { rotate: number, zoom: number, pan: number } };
keyPanSpeed: number;
movementSmoothness: number;
panSpeed: number;
position: vec3;
rotationRestriction: { minPolarAngle: number, maxPolarAngle: number, minAzimuthAngle: number, maxAzimuthAngle: number };
rotationSpeed: number;
spherePositionRestriction: { center: vec3, radius: number };
sphereTargetRestriction: { center: vec3, radius: number };
target: vec3;
turntableCenter: vec3;
objectControlsCenter: vec3;
zoomRestriction: { minDistance: number, maxDistance: number };
zoomSpeed: number;
// #endregion Properties (6)
// #endregion Properties (29)
// #region Public Methods (15)
// #region Public Methods (16)

@@ -23,2 +63,3 @@ animate(path: { position: vec3, target: vec3 }[], options: ICameraOptions): Promise<boolean>;

applyPositionVector(vector: vec3, manualInteraction?: boolean | undefined): void;
applyRotation(vector: vec2, manualInteraction?: boolean | undefined): void;
applyTargetMatrix(matrix: mat4, manualInteraction?: boolean | undefined): void;

@@ -37,3 +78,5 @@ applyTargetVector(vector: vec3, manualInteraction?: boolean | undefined): void;

// #endregion Public Methods (15)
// #endregion Public Methods (16)
}
// #endregion Interfaces (1)

@@ -1,8 +0,11 @@

import { IDomEventListener } from '@shapediver/viewer.shared.services'
import { IDomEventListener } from '@shapediver/viewer.shared.services';
export interface ICameraControlsEventDistribution extends IDomEventListener {
reset(): void;
// #region Public Methods (3)
activateCameraEvents(): void;
deactivateCameraEvents(): void;
reset(): void;
// #endregion Public Methods (3)
}
import { vec2, vec3 } from 'gl-matrix';
export interface ICameraControlsLogic {
// #region Public Methods (4)
// #region Public Methods (7)
isWithinRestrictions(position: any, target: any): boolean;
isWithinRestrictions(position: vec3, target: vec3): boolean;
pan(x: number, y: number, active: boolean, touch: boolean): void
reset(): void;
restrict(p: vec3, t: vec3, s?: vec2): { position: vec3, target: vec3, sceneRotation?: vec2 };
rotate(x: number, y: number, active: boolean, touch: boolean): void
update(time: number, manualInteraction: boolean): void
zoom(x: number, y: number, active: boolean, touch: boolean): void
// #endregion Public Methods (4)
// #endregion Public Methods (7)
}

@@ -1,20 +0,33 @@

import { vec3 } from 'gl-matrix'
import { ICamera } from './camera/ICamera';
import { ICamera } from './camera/ICamera'
// #region Interfaces (1)
export enum CAMERA_TYPE {
PERSPECTIVE = 'perspective',
ORTHOGRAPHIC = 'orthographic'
}
export interface ICameraEngine {
// #region Properties (1)
export interface ICameraEngine {
update?: () => void;
// #endregion Properties (1)
// #region Public Methods (6)
activateCameraEvents(): void;
assignCamera(id: string): boolean;
createCamera(type: CAMERA_TYPE, id?: string): ICamera;
createDefaultCameras(): void;
deactivateCameraEvents(): void;
removeCamera(id: string): boolean;
activateCameraEvents(): void;
deactivateCameraEvents(): void;
createDefaultCameras(): void;
}
// #endregion Public Methods (6)
}
// #endregion Interfaces (1)
// #region Enums (1)
export enum CAMERA_TYPE {
PERSPECTIVE = 'perspective',
ORTHOGRAPHIC = 'orthographic'
}
// #endregion Enums (1)
export interface ICameraInterpolation {
// #region Public Methods (3)
onComplete(value: { delta: number }): void;
onStop(value: { delta: number }): void;
onUpdate(value: { delta: number }): void;
onStop(value: { delta: number }): void;
onComplete(value: { delta: number }): void;
// #endregion Public Methods (3)
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc