UNPKG

@inweb/viewer-visualize

Version:

JavaScript library for rendering CAD and BIM files in a browser using VisualizeJS

100 lines (85 loc) 3.62 kB
/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a // license agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// // ===================== AI-CODE-FILE ====================== // Source: Claude Sonnet 4 // Date: 2025-09-10 // Reviewer: vitaly.ivanov@opendesign.com // Issue: CLOUD-5835 // Notes: Originally AI-generated, modified manually 2025-09-11 // ========================================================= import { IComponent, IOrthogonalCamera, IPoint } from "@inweb/viewer-core"; import type { Viewer } from "../Viewer"; export class ResetComponent implements IComponent { private viewer: Viewer; private savedCameraSettings: IOrthogonalCamera | null = null; constructor(viewer: Viewer) { this.viewer = viewer; this.viewer.addEventListener("databasechunk", this.onDatabaseChunk); this.viewer.on("resetview", this.resetCameraPosition); } dispose() { this.viewer.off("resetview", this.resetCameraPosition); this.viewer.removeEventListener("databasechunk", this.onDatabaseChunk); } onDatabaseChunk = () => { if (!this.viewer.visualizeJs) return; this.savedCameraSettings = this.getOrthogonalCameraSettings(); }; resetCameraPosition() { if (this.savedCameraSettings && this.viewer.visualizeJs) { this.setOrthogonalCameraSettings(this.savedCameraSettings); } } getOrthogonalCameraSettings(): IOrthogonalCamera { const visViewer = this.viewer.visViewer(); const activeView = visViewer.activeView; return { view_point: this.getPoint3dFromArray(activeView.viewPosition), direction: this.getPoint3dFromArray(activeView.viewTarget), up_vector: this.getPoint3dFromArray(activeView.upVector), field_width: activeView.viewFieldWidth, field_height: activeView.viewFieldHeight, view_to_world_scale: 1, }; } setOrthogonalCameraSettings(settings: IOrthogonalCamera) { const visViewer = this.viewer.visViewer(); const activeView = visViewer.activeView; if (settings) { activeView.setView( this.getLogicalPoint3dAsArray(settings.view_point), this.getLogicalPoint3dAsArray(settings.direction), this.getLogicalPoint3dAsArray(settings.up_vector), settings.field_width, settings.field_height, true ); } } getPoint3dFromArray(array: number[]) { return { x: array[0], y: array[1], z: array[2] }; } getLogicalPoint3dAsArray(point3d: IPoint) { return [point3d.x, point3d.y, point3d.z]; } }