src/toolbar/OrthoMode.js
import {Controller} from "../Controller.js";
/** @private */
class OrthoMode extends Controller {
constructor(parent, cfg) {
super(parent, cfg);
if (!cfg.buttonElement) {
throw "Missing config: buttonElement";
}
this._buttonElement = cfg.buttonElement;
this.on("enabled", (enabled) => {
if (!enabled) {
this._buttonElement.classList.add("disabled");
} else {
this._buttonElement.classList.remove("disabled");
}
});
this._buttonElement.addEventListener("click", (event) => {
if (this.getEnabled()) {
this.setActive(!this.getActive(), () => {
});
}
event.preventDefault();
});
this.bimViewer.on("reset", () => {
this.setActive(false);
});
this.viewer.camera.on("projection", () => {
const isOrtho = (this.viewer.camera.projection === "ortho");
this._active = isOrtho;
if (this._active) {
this._buttonElement.classList.add("active");
} else {
this._buttonElement.classList.remove("active");
}
});
this._active = false;
this._buttonElement.classList.remove("active");
}
setActive(active, done) {
if (this._active === active) {
if (done) {
done();
}
return;
}
this._active = active;
if (active) {
this._buttonElement.classList.add("active");
if (done) {
this._enterOrthoMode(() => {
this.fire("active", this._active);
done();
});
} else {
this._enterOrthoMode();
this.fire("active", this._active);
}
} else {
this._buttonElement.classList.remove("active");
if (done) {
this._exitOrthoMode(() => {
this.fire("active", this._active);
done();
});
} else {
this._exitOrthoMode();
this.fire("active", this._active);
}
}
}
_enterOrthoMode(done) {
if (done) {
this.viewer.cameraFlight.flyTo({projection: "ortho", duration: 0.5}, done);
} else {
this.viewer.cameraFlight.jumpTo({projection: "ortho"});
}
}
_exitOrthoMode(done) {
if (done) {
this.viewer.cameraFlight.flyTo({projection: "perspective", duration: 0.5}, done);
} else {
this.viewer.cameraFlight.jumpTo({projection: "perspective"});
}
}
}
export {OrthoMode};