react-ngl
Version:
React wrapper for ngl
90 lines • 4.15 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isCameraStateEqual = exports.applyCameraState = exports.getDefaultCameraState = exports.getDefaultDistance = exports.getDefaultPosition = exports.getCameraState = exports.CAMERA_STATE_NONE = exports.DEFAULT_ROTATION = exports.Rotation = exports.Position = void 0;
var NGL = __importStar(require("./nglTypes"));
exports.Position = NGL.Vector3;
exports.Rotation = NGL.Quaternion;
exports.DEFAULT_ROTATION = new exports.Rotation(0, 0, 0, 1);
exports.CAMERA_STATE_NONE = {};
exports.getCameraState = function (stage) {
var _a = stage.viewerControls, position = _a.position, rotation = _a.rotation;
var distance = stage.viewer.camera.position.z;
return {
position: position,
rotation: rotation,
distance: distance,
};
};
exports.getDefaultPosition = function (stage) {
return stage.getCenter().negate();
};
exports.getDefaultDistance = function (stage) { return stage.getZoom(); };
exports.getDefaultCameraState = function (stage) { return ({
position: exports.getDefaultPosition(stage),
rotation: exports.DEFAULT_ROTATION,
distance: exports.getDefaultDistance(stage),
}); };
exports.applyCameraState = function (stage, cameraState, withoutDispatch) {
if (withoutDispatch === void 0) { withoutDispatch = false; }
var viewerControls = stage.viewerControls;
var prevCameraState = exports.getCameraState(stage);
var isChanged = false;
var position = cameraState.position || exports.getDefaultPosition(stage);
if (!position.equals(prevCameraState.position)) {
// see also https://github.com/arose/ngl/blob/7bf7e355/src/controls/viewer-controls.ts#L153
viewerControls.viewer.translationGroup.position.copy(position);
isChanged = true;
}
var rotation = cameraState.rotation || exports.DEFAULT_ROTATION;
if (!rotation.equals(prevCameraState.rotation)) {
// see also https://github.com/arose/ngl/blob/7bf7e355/src/controls/viewer-controls.ts#L199
viewerControls.viewer.rotationGroup.setRotationFromQuaternion(rotation);
isChanged = true;
}
var distance = cameraState.distance || exports.getDefaultDistance(stage);
if (distance !== prevCameraState.distance) {
// see also https://github.com/arose/ngl/blob/7bf7e355/src/controls/viewer-controls.ts#L173
viewerControls.viewer.camera.position.z = Math.min(-1, distance);
viewerControls.viewer.updateZoom();
isChanged = true;
}
if (isChanged) {
// see also https://github.com/arose/ngl/blob/7bf7e355/src/controls/viewer-controls.ts#L72
viewerControls.viewer.requestRender();
if (!withoutDispatch) {
viewerControls.signals.changed.dispatch();
}
}
};
exports.isCameraStateEqual = function (a, b) {
if (a === undefined || b === undefined) {
return a === b;
}
var isPositionEqual = a.position && b.position
? a.position.equals(b.position)
: a.position === b.position;
var isRotationEqual = a.rotation && b.rotation
? a.rotation.equals(b.rotation)
: a.rotation === b.rotation;
return isPositionEqual && isRotationEqual && a.distance === b.distance;
};
//# sourceMappingURL=viewer.js.map